diff --git a/.eslintrc.json b/.eslintrc.json
index bea6298b6f..a80a258c6d 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -3,7 +3,7 @@
"extends": "eslint:recommended",
"parserOptions": {
- "ecmaVersion": 8,
+ "ecmaVersion": "latest",
"sourceType": "module"
},
diff --git a/.gitignore b/.gitignore
index c67c05b23e..2bafd71cae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
+dist
tmp*
.DS_Store
-/node_modules
+node_modules
docs/_site
docs/static/css
docs/.jekyll-cache
@@ -14,16 +15,15 @@ bower_components
tests/integration/cordova/www
tests/pouchdb_server
tests/performance-bundle.js
-packages/node_modules/pouchdb/dist/*
pouchdb-webpack.js
lib
+!/packages/pouchdb-lib/lib
+!/packages/pouchdb-platform/lib
lib_unit
src_browser/
lerna-debug.log
tests/integration/utils-bundle.js
*.heapsnapshot
/pouchdb-server-install
-package-lock.json
-yarn.lock
/.eslintcache
-release-todo.txt
+release-todo.txt
\ No newline at end of file
diff --git a/README.md b/README.md
index cc5c060c8b..0d2b93ddc6 100644
--- a/README.md
+++ b/README.md
@@ -45,3 +45,18 @@ Contributing
We're always looking for new contributors! If you'd like to try your hand at writing code, writing documentation, designing the website, writing a blog post, or answering [questions on StackOverflow](http://stackoverflow.com/search?tab=newest&q=pouchdb), then we'd love to have your input.
If you have a pull request that you'd like to submit, please read the [contributing guide](https://github.com/pouchdb/pouchdb/blob/master/CONTRIBUTING.md) for info on style, commit message format, and other (slightly!) nitpicky things like that. PouchDB is heavily tested, so you'll also want to check out the [testing guide](https://github.com/pouchdb/pouchdb/blob/master/TESTING.md).
+
+```sh
+
+git clone this
+## TODO: fix build scripts to use only the packages/ folder without node_modules.
+## link ./packages/node_modules
+npm --prefix ./packages install
+# or
+cd packages
+npm install
+
+## Update migration lib
+cd packages/pouchdb-lib/
+rollup -c
+```
\ No newline at end of file
diff --git a/bin/build-module.js b/bin/build-module.js
index 72f4fbeaf7..fd8bc165b3 100755
--- a/bin/build-module.js
+++ b/bin/build-module.js
@@ -17,8 +17,7 @@ var denodeify = require('denodeify');
var mkdirp = denodeify(require('mkdirp'));
var rimraf = denodeify(require('rimraf'));
var builtInModules = require('builtin-modules');
-var fs = require('fs');
-var all = Promise.all.bind(Promise);
+var fs = require('node:fs');
// special case - pouchdb-for-coverage is heavily optimized because it's
// simpler to run the coverage reports that way.
@@ -34,9 +33,9 @@ var BROWSER_ONLY_PACKAGES =
var BROWSER_DEPENDENCY_ONLY_PACKAGES =
['pouchdb-adapter-leveldb'];
-function buildModule(filepath) {
+async function buildModule(filepath) {
var pkg = require(path.resolve(filepath, 'package.json'));
- var topPkg = require(path.resolve(filepath, '../../../package.json'));
+ var topPkg = require(path.resolve(filepath, '../../package.json'));
var pouchdbPackages = fs.readdirSync(path.resolve(filepath, '..'));
// All external modules are assumed to be CommonJS, and therefore should
// be skipped by Rollup. We may revisit this later.
@@ -56,47 +55,40 @@ function buildModule(filepath) {
var skipBrowserField = BROWSER_DEPENDENCY_ONLY_PACKAGES.indexOf(pkg.name) !== -1;
if (!skipBrowserField && pkg.browser && pkg.browser['./lib/index.js'] !==
'./lib/index-browser.js') {
- return Promise.reject(new Error(pkg.name +
- ' is missing a "lib/index.js" entry in the browser field'));
+ new Error(pkg.name +
+ ' is missing a "lib/index.js" entry in the browser field');
}
// special case for "pouchdb-browser" - there is only one index.js,
// and it's built in "browser mode"
var forceBrowser = BROWSER_ONLY_PACKAGES.indexOf(pkg.name) !== -1;
-
- return Promise.resolve().then(function () {
- return rimraf(path.resolve(filepath, 'lib'));
- }).then(function () {
- return mkdirp(path.resolve(filepath, 'lib'));
- }).then(function () {
- return all(versions.map(function (isBrowser) {
- return rollup({
+ rimraf(path.resolve(filepath, 'lib'));
+ mkdirp(path.resolve(filepath, 'lib'));
+
+ return versions.map((isBrowser) => ['es'].map(
+ async (format) => {
+ const file = (isBrowser ? 'lib/index-browser' : 'lib/index') +
+ (format === 'es' ? '.es.js' : '.js');
+ await (await rollup({
input: path.resolve(filepath, './src/index.js'),
external: depsToSkip,
plugins: rollupPlugins({
- mainFields: ['module', 'main'],
browser: isBrowser || forceBrowser
})
- }).then(function (bundle) {
- var formats = ['cjs', 'es'];
- return all(formats.map(function (format) {
- var file = (isBrowser ? 'lib/index-browser' : 'lib/index') +
- (format === 'es' ? '.es.js' : '.js');
- return bundle.write({
- format: format,
- file: path.resolve(filepath, file)
- }).then(function () {
- console.log(' \u2713' + ' wrote ' +
- path.basename(filepath) + '/' + file + ' in ' +
- (isBrowser ? 'browser' :
- versions.length > 1 ? 'node' : 'vanilla') +
- ' mode');
- });
- }));
+ })).write({
+ inlineDynamicImports: true,
+ format: format,
+ file: path.resolve(filepath, file)
});
- }));
- });
+ console.log(' \u2713' + ' wrote ' +
+ path.basename(filepath) + '/' + file + ' in ' +
+ (isBrowser ? 'browser' :
+ versions.length > 1 ? 'node' : 'vanilla') +
+ ' mode');
+ }
+ ));
}
+
if (require.main === module) {
buildModule(process.argv[process.argv.length - 1]).catch(function (err) {
console.error('build-module.js error');
diff --git a/bin/build-modules.js b/bin/build-modules.js
index b57342c3d5..602ec555fe 100755
--- a/bin/build-modules.js
+++ b/bin/build-modules.js
@@ -4,29 +4,23 @@
var path = require('path');
var denodeify = require('denodeify');
-var fs = require('fs');
+var fs = require('node:fs');
+const fsPromises = fs.promises;
var readDir = denodeify(fs.readdir);
-var stat = denodeify(fs.stat);
var buildModule = require('./build-module');
var buildPouchDB = require('./build-pouchdb');
-function buildPackage(pkg) {
- return stat(path.resolve('packages/node_modules', pkg)).then(function (stat) {
- if (!stat.isDirectory()) { // skip e.g. 'npm-debug.log'
- return;
- }
- console.log('Building ' + pkg + '...');
- if (pkg === 'pouchdb') {
- return buildPouchDB();
- } else {
- return buildModule(path.resolve('./packages/node_modules', pkg));
- }
- });
-}
-
-readDir('packages/node_modules').then(function (packages) {
- return Promise.all(packages.map(buildPackage)).catch(function (err) {
+readDir('packages').then(function (packages) {
+ console.log(packages);
+ return Promise.all(packages.map(async (pkg) => {
+ const isDir = pkg !== 'server' &&
+ pkg.startsWith('pouchdb') &&
+ (await fsPromises.stat(path.resolve('packages', pkg))).isDirectory();
+ isDir && console.log('Building ' + pkg + '...');
+ return isDir && pkg === 'pouchdb' ? buildPouchDB() : buildModule(path.resolve('./packages', pkg));
+
+ })).catch(function (err) {
console.error('build error');
console.error(err.stack);
process.exit(1);
diff --git a/bin/build-pouchdb.js b/bin/build-pouchdb.js
index 59064c3f25..f661f3db7b 100755
--- a/bin/build-pouchdb.js
+++ b/bin/build-pouchdb.js
@@ -7,20 +7,18 @@
var DEV_MODE = process.env.CLIENT === 'dev';
-var path = require('path');
+var path = require('node:path');
var denodeify = require('denodeify');
var rollup = require('rollup');
var rollupPlugins = require('./rollupPlugins');
var rimraf = denodeify(require('rimraf'));
var mkdirp = denodeify(require('mkdirp'));
-var all = Promise.all.bind(Promise);
var buildUtils = require('./build-utils');
-var addPath = buildUtils.addPath;
var doUglify = buildUtils.doUglify;
var doBrowserify = buildUtils.doBrowserify;
var writeFile = buildUtils.writeFile;
-var pkg = require('../packages/node_modules/pouchdb/package.json');
+var pkg = require('../packages/pouchdb/package.json');
var version = pkg.version;
var builtInModules = require('builtin-modules');
@@ -70,44 +68,51 @@ var comments = {
'\n// http://pouchdb.com\n',
};
-function doRollup(input, browser, formatsToFiles) {
+async function doRollup(inputPath, browser, formatsToFiles) {
var start = process.hrtime();
- return rollup.rollup({
- input: addPath('pouchdb', input),
- external: external,
+ console.log('ROLLUP:',{ inputPath });
+ const input = path.resolve('packages/' + 'pouchdb/' + inputPath);
+ const bundle = (await rollup.rollup({
+ input,
+ external,
plugins: rollupPlugins({
- mainFields: ["module"],
- browser: browser
+ //mainFields: ["module"],
+ browser
})
- }).then(function (bundle) {
- return Promise.all(Object.keys(formatsToFiles).map(function (format) {
- var fileOut = formatsToFiles[format];
- return bundle.generate({format: format}).then(function (bundle) {
- if (DEV_MODE) {
- var ms = Math.round(process.hrtime(start)[1] / 1000000);
- console.log(' took ' + ms + ' ms to rollup ' +
- path.dirname(input) + '/' + path.basename(input));
- }
- return writeFile(addPath('pouchdb', fileOut), bundle.code);
- });
- }));
- });
+ }));
+
+ return Promise.all(Object.keys(formatsToFiles).map(function (format) {
+ return bundle.generate({format: format}).then(function (bundle) {
+ if (DEV_MODE) {
+ var ms = Math.round(process.hrtime(start)[1] / 1000000);
+ console.log(' took ' + ms + ' ms to rollup ' +
+ path.dirname(input) + '/' + path.basename(input));
+ }
+
+ return writeFile(path.resolve('packages/' + 'pouchdb/' + formatsToFiles[format]), bundle.output[0].code);
+ });
+ }));
+
}
+// true == isBrowser
+const builds = [['src/index.js', false, {
+ cjs: 'lib/index.js',
+ es: 'lib/index.es.js'
+}],['src/index.js', true, {
+ cjs: 'lib/index-browser.js',
+ es: 'lib/index-browser.es.js'
+}]];
+
// build for Node (index.js)
function buildForNode() {
- return doRollup('src/index.js', false, {
- cjs: 'lib/index.js',
- es: 'lib/index.es.js'
- });
+ return doRollup(...builds[0]);
}
// build for Browserify/Webpack (index-browser.js)
-function buildForBrowserify() {
- return doRollup('src/index.js', true, {
- cjs: 'lib/index-browser.js',
- es: 'lib/index-browser.es.js'
- });
+async function buildForBrowserify() {
+ return true;
+ //return doRollup(...builds[1]);
}
// build for the browser (dist)
@@ -116,67 +121,65 @@ function buildForBrowser() {
standalone: 'PouchDB'
}).then(function (code) {
code = comments.pouchdb + code;
- return all([
- writeFile(addPath('pouchdb', 'dist/pouchdb.js'), code),
+ //console.log('comments:',{code});
+ return Promise.all([
+ writeFile(path.resolve('packages/' + 'pouchdb/' + 'dist/pouchdb.js'), code),
doUglify('pouchdb', code, comments.pouchdb, 'dist/pouchdb.min.js')
]);
});
}
function buildPluginsForBrowserify() {
- return all(plugins.map(function (plugin) {
- return doRollup('src/plugins/' + plugin + '.js', true, {
- cjs: 'lib/plugins/' + plugin + '.js'
- });
+ return plugins.map(async (plugin) => await doRollup('src/plugins/' + plugin + '.js', true, {
+ cjs: 'lib/plugins/' + plugin + '.js'
}));
}
function buildPluginsForBrowser() {
- return all(plugins.map(function (plugin) {
+ return Promise.all(plugins.map(function (plugin) {
var source = 'lib/plugins/' + plugin + '.js';
return doBrowserify('pouchdb', source, {}, 'pouchdb').then(function (code) {
code = comments[plugin] + code;
- return all([
- writeFile('packages/node_modules/pouchdb/dist/pouchdb.' + plugin + '.js', code),
+ return Promise.all([
+ writeFile('packages/pouchdb/dist/pouchdb.' + plugin + '.js', code),
doUglify('pouchdb', code, comments[plugin], 'dist/pouchdb.' + plugin + '.min.js')
]);
});
})).then(function () {
- return rimraf(addPath('pouchdb', 'lib/plugins')); // no need for this after building dist/
+ return rimraf(path.resolve('packages/' + 'pouchdb/' + 'lib/plugins')); // no need for this after building dist/
});
}
var rimrafMkdirp = function (...args) {
- return all(args.map(function (otherPath) {
- return rimraf(addPath('pouchdb', otherPath));
+ return Promise.all(args.map(function (otherPath) {
+ return rimraf(path.resolve('packages/' + 'pouchdb/' + otherPath));
})).then(function () {
- return all(args.map(function (otherPath) {
- return mkdirp(addPath('pouchdb', otherPath));
+ return Promise.all(args.map(function (otherPath) {
+ return mkdirp(path.resolve('packages/' + 'pouchdb/' + otherPath));
}));
});
};
-var doAll = function (...args) {
- return function () {
- return all(args.map(function (promiseFactory) {
- return promiseFactory();
- }));
- };
-};
-
-function doBuildNode() {
- return mkdirp(addPath('pouchdb', 'lib/plugins'))
- .then(buildForNode);
+async function doBuildNode() {
+ await mkdirp(path.resolve('packages/' + 'pouchdb/' + 'lib/plugins'));
+ buildForNode();
}
-function doBuildAll() {
- return rimrafMkdirp('lib', 'dist', 'lib/plugins')
- .then(doAll(buildForNode, buildForBrowserify))
- .then(doAll(buildForBrowser, buildPluginsForBrowserify))
- .then(doAll(buildPluginsForBrowser));
+async function doBuildAll() {
+ await rimrafMkdirp('lib', 'dist', 'lib/plugins');
+ Promise.all([
+ buildForNode,
+ //buildForBrowserify,
+ buildForBrowser,
+ //buildPluginsForBrowserify,
+ //buildPluginsForBrowser
+ ].map((fn) => fn()));
+
+
}
function doBuild() {
+ //return doBuildNode();
if (process.env.BUILD_NODE) { // rebuild before "npm test"
return doBuildNode();
} else { // normal, full build
diff --git a/bin/build-site.js b/bin/build-site.js
index 62b35c9e17..2bc7a7cb99 100755
--- a/bin/build-site.js
+++ b/bin/build-site.js
@@ -3,7 +3,7 @@
'use strict';
var http_server = require('http-server');
-var fs = require('fs');
+var fs = require('node:fs');
var watchGlob = require('watch-glob');
var replace = require('replace');
var exec = require('child-process-promise').exec;
diff --git a/bin/build-utils.js b/bin/build-utils.js
index 29aa599562..aa443c5f74 100644
--- a/bin/build-utils.js
+++ b/bin/build-utils.js
@@ -7,67 +7,55 @@ var denodeify = require('denodeify');
var browserify = require('browserify');
var browserifyIncremental = require('browserify-incremental');
var derequire = require('derequire');
-var fs = require('fs');
+var fs = require('node:fs');
var writeFileAsync = denodeify(fs.writeFile);
var renameAsync = denodeify(fs.rename);
var streamToPromise = require('stream-to-promise');
var terser = require("terser");
-function addPath(pkgName, otherPath) {
- return path.resolve('packages/node_modules/' + pkgName, otherPath);
-}
-
function writeFile(filename, contents) {
var tmp = filename + '.tmp';
- return writeFileAsync(tmp, contents, 'utf-8').then(function () {
+ console.log('Try writeFile:', filename);
+ if (!contents) {
+ throw new Error("Got no Content?:"+ filename);
+ }
+ return contents && writeFileAsync(tmp, contents, 'utf-8').then(function () {
return renameAsync(tmp, filename);
}).then(function () {
console.log(' \u2713' + ' wrote ' +
- filename.match(/packages[/\\]node_modules[/\\]\S*?[/\\].*/)[0]);
+ filename.match(/packages[/\\]\S*?[/\\].*/)[0]);
});
}
function doUglify(pkgName, code, prepend, fileOut) {
+
var miniCode = prepend + terser.minify(code, { output: { ascii_only: true }}).code;
return writeFile(addPath(pkgName, fileOut), miniCode);
+
}
var browserifyCache = {};
-function doBrowserify(pkgName, filepath, opts, exclude) {
-
- var bundler = browserifyCache[filepath];
-
- if (!bundler) {
- if (DEV_MODE) {
- opts.debug = true;
- bundler = browserifyIncremental(addPath(pkgName, filepath), opts)
- .on('time', function (time) {
- console.log(' took ' + time + ' ms to browserify ' +
- path.dirname(filepath) + '/' + path.basename(filepath));
- });
- } else {
- bundler = browserify(addPath(pkgName, filepath), opts)
- .transform('es3ify')
- .plugin('bundle-collapser/plugin');
- }
-
- if (exclude) {
- bundler.external(exclude);
- }
- browserifyCache[filepath] = bundler;
+async function doBrowserify(pkgName, filepath, opts, exclude) {
+ console.log('DO BROWSERIFY:', pkgName, filepath)
+ var bundler = browserifyCache[filepath] ||
+ DEV_MODE
+ ? (opts.debug = true) && browserifyIncremental(
+ path.resolve('packages/' + pkgName, filepath), opts).on('time', (time) => {
+ console.log(' took ' + time + ' ms to browserify ' + path.dirname(filepath) + '/' + path.basename(filepath));
+ })
+ : browserify(path.resolve('packages/' + pkgName, filepath), opts).transform('es3ify').plugin('bundle-collapser/plugin');
+
+ if (exclude) {
+ bundler.external(exclude);
}
-
- return streamToPromise(bundler.bundle()).then(function (code) {
- if (!DEV_MODE) {
- code = derequire(code);
- }
- return code;
- });
+
+ browserifyCache[filepath] = bundler;
+ const code = await streamToPromise(bundler.bundle());
+ return !DEV_MODE ? derequire(code) : code;
}
-exports.addPath = addPath;
exports.doBrowserify = doBrowserify;
exports.doUglify = doUglify;
exports.writeFile = writeFile;
diff --git a/bin/build.js b/bin/build.js
new file mode 100644
index 0000000000..884e624cab
--- /dev/null
+++ b/bin/build.js
@@ -0,0 +1,54 @@
+const rollup = require('rollup');
+const fs = require('node:fs');
+const nodeResolve = require('@rollup/plugin-node-resolve');
+const commonjs = require('@rollup/plugin-commonjs');
+const json = require('@rollup/plugin-json');
+const alias = require('@rollup/plugin-alias');
+const eslint = require('@rollup/plugin-eslint')({
+ include: ["*.js","*.mjs"],
+ exclude: [],
+ fix:true,
+});
+
+//const { resolve } = require('node:path/posix');
+//const pathResolve = (prefix)=>(name) => resolve(prefix,name);
+const customResolver = nodeResolve({
+ extensions: ['.mjs', '.js', '.jsx', '.json', '.sass', '.scss'],
+});
+
+const entries = [
+ { find: 'zlib', replacement: 'node:zlib'// path.resolve(projectRootDir, 'src')
+ // OR place `customResolver` here. See explanation below.
+ }
+];
+
+Promise.resolve().then(async () =>
+[(await rollup.rollup({
+ input: Object.fromEntries(fs.readdirSync('packages').map(pkg=>[pkg,pkg]).concat(
+ fs.readdirSync('packages/pouchdb/src/plugins').map(plg=>['plugin-'+plg,'packages/pouchdb/src/plugins/'+plg])
+ )),
+ plugins: [
+ eslint,
+ {
+ name: 'emit-module-package-file',
+ generateBundle() {
+ this.emitFile({ fileName: 'package.json', source: `{"type":"module"}`, type: 'asset' });
+ },
+ },
+ alias({
+ customResolver, entries,
+ }),
+ nodeResolve({preferBuiltins: true}), json(), commonjs()
+ ],
+}))].map(b=>[b.write({ dir: 'lib' })]));
+
+// .then(async ()=>(await rollup.rollup({
+// input: Object.fromEntries(fs.readdirSync('packages').map(pkg=>[pkg+'.browser',pkg])),
+// plugins: [
+// eslint,
+// alias({
+// customResolver, entries,
+// }),
+// nodeResolve({preferBuiltins: false, browser: true}), json(), commonjs()
+// ],
+// })).write({ dir: 'lib', }));
\ No newline at end of file
diff --git a/bin/dev-server.js b/bin/dev-server.js
index ee175463fa..eb82eb524c 100755
--- a/bin/dev-server.js
+++ b/bin/dev-server.js
@@ -7,7 +7,7 @@ var http_server = require('http-server');
var debounce = require('lodash.debounce');
var buildPouchDB = require('./build-pouchdb');
var browserify = require('browserify');
-var fs = require('fs');
+var fs = require('node:fs');
var queryParams = {};
@@ -37,7 +37,7 @@ var rebuildPromise = Promise.resolve();
function rebuildPouch() {
rebuildPromise = rebuildPromise.then(buildPouchDB).then(function () {
- console.log('Rebuilt packages/node_modules/pouchdb');
+ console.log('Rebuilt packages/pouchdb');
}).catch(console.error);
return rebuildPromise;
}
@@ -71,7 +71,7 @@ function rebuildPerf() {
}
function watchAll() {
- watch(['packages/node_modules/*/src/**/*.js'],
+ watch(['packages/*/src/**/*.js'],
debounce(rebuildPouch, 700, {leading: true}));
watch(['tests/integration/utils.js'],
debounce(rebuildTestUtils, 700, {leading: true}));
diff --git a/bin/publish-packages.sh b/bin/publish-packages.sh
index 8ef5c27d4e..9feb23db3e 100755
--- a/bin/publish-packages.sh
+++ b/bin/publish-packages.sh
@@ -41,9 +41,9 @@ publish_packages () {
should_publish () {
local pkg="$1"
- if [ ! -d "packages/node_modules/$pkg" ]; then
+ if [ ! -d "packages/$pkg" ]; then
return 1
- elif [ "true" = $(node --eval "console.log(require('./packages/node_modules/$pkg/package.json').private);") ]; then
+ elif [ "true" = $(node --eval "console.log(require('./packages/$pkg/package.json').private);") ]; then
return 1
else
return 0
@@ -53,7 +53,7 @@ should_publish () {
publish_package () {
local pkg="$1"
- cd "packages/node_modules/$pkg"
+ cd "packages/$pkg"
echo "Publishing $pkg..."
if [ -n "$DRY_RUN" ]; then
diff --git a/bin/release.sh b/bin/release.sh
index 6806b65336..a9e9afd25f 100755
--- a/bin/release.sh
+++ b/bin/release.sh
@@ -13,7 +13,7 @@ rm -fr node_modules
npm install
# get current version
-VERSION=$(node --eval "console.log(require('./packages/node_modules/pouchdb/package.json').version);")
+VERSION=$(node --eval "console.log(require('./packages/pouchdb/package.json').version);")
# Create a temporary build directory
SOURCE_DIR=$(git name-rev --name-only HEAD)
@@ -29,7 +29,7 @@ ls packages/node_modules > release-todo.txt
# Create git tag, which is also the Bower/Github release
rm -fr lib src dist bower.json component.json package.json
-cp -r packages/node_modules/pouchdb/{src,lib,dist,bower.json,component.json,package.json} .
+cp -r packages/pouchdb/{src,lib,dist,bower.json,component.json,package.json} .
git add -f lib src dist *.json
git rm -fr packages bin docs scripts tests
diff --git a/bin/rollupPlugins.js b/bin/rollupPlugins.js
index b9b0f0c221..29a57527dd 100644
--- a/bin/rollupPlugins.js
+++ b/bin/rollupPlugins.js
@@ -1,18 +1,21 @@
'use strict';
-var nodeResolve = require('rollup-plugin-node-resolve');
-var replace = require('rollup-plugin-replace');
-var inject = require('rollup-plugin-inject');
-
+var nodeResolve = require('@rollup/plugin-node-resolve');
+var replace = require('@rollup/plugin-replace');
+var inject = require('@rollup/plugin-inject');
+var commonjs = require('@rollup/plugin-commonjs');
function rollupPlugins(nodeResolveConfig) {
return [
nodeResolve(nodeResolveConfig),
+ commonjs(),
replace({
+ preventAssignment: false, // default: true
+ values: {
// we have switches for coverage; don't ship this to consumers
'process.env.COVERAGE': JSON.stringify(!!process.env.COVERAGE),
// test for fetch vs xhr
'process.env.FETCH': JSON.stringify(!!process.env.FETCH)
- }),
+ }}),
inject({
exclude: [
'**/pouchdb-utils/src/assign.js',
diff --git a/bin/run-test.sh b/bin/run-test.sh
index a18adebd51..715f3ac8d2 100755
--- a/bin/run-test.sh
+++ b/bin/run-test.sh
@@ -22,7 +22,7 @@ pouchdb-setup-server() {
npm install pouchdb-server
cd ..
- for pkg in packages/node_modules/* ; do
+ for pkg in packages/* ; do
pouchdb-link-server-modules "$(basename "$pkg")"
done
@@ -37,7 +37,7 @@ pouchdb-setup-server() {
pouchdb-link-server-modules() {
local pkg="$1"
- cd "packages/node_modules/${pkg}"
+ cd "packages/${pkg}"
npm link
cd ../../../pouchdb-server-install/
diff --git a/bin/update-package-json-for-publish.js b/bin/update-package-json-for-publish.js
index b5c1e993c2..61e5b0dbdd 100644
--- a/bin/update-package-json-for-publish.js
+++ b/bin/update-package-json-for-publish.js
@@ -1,13 +1,13 @@
'use strict';
-// Update all the dependencies inside packages/node_modules/*/package.json
+// Update all the dependencies inside packages/*/package.json
// to reflect the true dependencies (automatically determined by require())
// and update the version numbers to reflect the version from the top-level
// dependencies list. Also throw an error if a dep is not declared top-level.
// Also add necessary "browser" switches to each package.json, as well as
// other fields like "jsnext:main" and "files".
-var fs = require('fs');
+var fs = require('node:fs');
var path = require('path');
var glob = require('glob');
var findRequires = require('find-requires');
@@ -35,7 +35,7 @@ modules.forEach(function (mod) {
}))).filter(function (dep) {
// some modules require() themselves, e.g. for plugins
return dep !== pkg.name &&
- // exclude built-ins like 'inherits', 'fs', etc.
+ // exclude built-ins like 'inherits', 'node:fs', etc.
builtinModules.indexOf(dep) === -1;
}).sort();
diff --git a/bin/verify-bundle-size.sh b/bin/verify-bundle-size.sh
index 83137c9f6d..263dab904a 100755
--- a/bin/verify-bundle-size.sh
+++ b/bin/verify-bundle-size.sh
@@ -6,7 +6,7 @@ MAX=50000
# testing pouchdb.js instead of pouchdb.min.js because minification isn't run in Travis
# in order to make our builds faster
-SIZE=`./node_modules/.bin/terser -mc < packages/node_modules/pouchdb/dist/pouchdb.js 2>/dev/null | gzip -c | wc -c`
+SIZE=`./node_modules/.bin/terser -mc < packages/pouchdb/dist/pouchdb.js 2>/dev/null | gzip -c | wc -c`
echo "Checking that pouchdb.min.js size $SIZE is less than $MAX and greater than 20"
diff --git a/bin/verify-dependencies.js b/bin/verify-dependencies.js
index b63579a538..c75086fab9 100755
--- a/bin/verify-dependencies.js
+++ b/bin/verify-dependencies.js
@@ -5,7 +5,7 @@
var findRequires = require('find-requires');
var path = require('path');
-var fs = require('fs');
+var fs = require('node:fs');
var chai = require('chai');
chai.should();
diff --git a/components/web.js b/components/web.js
new file mode 100644
index 0000000000..dceeaacfbd
--- /dev/null
+++ b/components/web.js
@@ -0,0 +1,2 @@
+// PouchDB Web.
+// import PouchDB from '../lib/pouchdb.browser.js';
\ No newline at end of file
diff --git a/docs/lib.md b/docs/lib.md
new file mode 100644
index 0000000000..ec425e9fa9
--- /dev/null
+++ b/docs/lib.md
@@ -0,0 +1,4 @@
+# pouchdb/lib
+The PouchDB/lib build is a incremental build step
+to get used as foundation for new code inside
+/modules
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-http/src/index.js b/packages/node_modules/pouchdb-adapter-http/src/index.js
deleted file mode 100644
index 93203078b4..0000000000
--- a/packages/node_modules/pouchdb-adapter-http/src/index.js
+++ /dev/null
@@ -1,1139 +0,0 @@
-'use strict';
-
-import pool from './promise-pool';
-
-import { fetch, Headers, AbortController } from 'pouchdb-fetch';
-
-import {
- createError,
- BAD_ARG,
- generateErrorFromResponse
-} from 'pouchdb-errors';
-
-import {
- pick,
- filterChange,
- adapterFun as coreAdapterFun,
- explainError,
- clone,
- parseUri,
- bulkGetShim,
- flatten,
- nextTick
-} from 'pouchdb-utils';
-
-import {
- atob,
- btoa,
- binaryStringToBlobOrBuffer as binStringToBluffer,
- base64StringToBlobOrBuffer as b64StringToBluffer,
- blobOrBufferToBase64 as blufferToBase64
-} from 'pouchdb-binary-utils';
-
-const CHANGES_BATCH_SIZE = 25;
-const MAX_SIMULTANEOUS_REVS = 50;
-const CHANGES_TIMEOUT_BUFFER = 5000;
-const DEFAULT_HEARTBEAT = 10000;
-
-const supportsBulkGetMap = {};
-
-function readAttachmentsAsBlobOrBuffer(row) {
- const doc = row.doc || row.ok;
- const atts = doc && doc._attachments;
- if (!atts) {
- return;
- }
- Object.keys(atts).forEach(function (filename) {
- const att = atts[filename];
- att.data = b64StringToBluffer(att.data, att.content_type);
- });
-}
-
-function encodeDocId(id) {
- if (/^_design/.test(id)) {
- return '_design/' + encodeURIComponent(id.slice(8));
- }
- if (id.startsWith('_local/')) {
- return '_local/' + encodeURIComponent(id.slice(7));
- }
- return encodeURIComponent(id);
-}
-
-function preprocessAttachments(doc) {
- if (!doc._attachments || !Object.keys(doc._attachments)) {
- return Promise.resolve();
- }
-
- return Promise.all(Object.keys(doc._attachments).map(function (key) {
- const attachment = doc._attachments[key];
- if (attachment.data && typeof attachment.data !== 'string') {
- return new Promise(function (resolve) {
- blufferToBase64(attachment.data, resolve);
- }).then(function (b64) {
- attachment.data = b64;
- });
- }
- }));
-}
-
-function hasUrlPrefix(opts) {
- if (!opts.prefix) {
- return false;
- }
- const protocol = parseUri(opts.prefix).protocol;
- return protocol === 'http' || protocol === 'https';
-}
-
-// Get all the information you possibly can about the URI given by name and
-// return it as a suitable object.
-function getHost(name, opts) {
- // encode db name if opts.prefix is a url (#5574)
- if (hasUrlPrefix(opts)) {
- const dbName = opts.name.substr(opts.prefix.length);
- // Ensure prefix has a trailing slash
- const prefix = opts.prefix.replace(/\/?$/, '/');
- name = prefix + encodeURIComponent(dbName);
- }
-
- const uri = parseUri(name);
- if (uri.user || uri.password) {
- uri.auth = {username: uri.user, password: uri.password};
- }
-
- // Split the path part of the URI into parts using '/' as the delimiter
- // after removing any leading '/' and any trailing '/'
- const parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
-
- uri.db = parts.pop();
- // Prevent double encoding of URI component
- if (uri.db.indexOf('%') === -1) {
- uri.db = encodeURIComponent(uri.db);
- }
-
- uri.path = parts.join('/');
-
- return uri;
-}
-
-// Generate a URL with the host data given by opts and the given path
-function genDBUrl(opts, path) {
- return genUrl(opts, opts.db + '/' + path);
-}
-
-// Generate a URL with the host data given by opts and the given path
-function genUrl(opts, path) {
- // If the host already has a path, then we need to have a path delimiter
- // Otherwise, the path delimiter is the empty string
- const pathDel = !opts.path ? '' : '/';
-
- // If the host already has a path, then we need to have a path delimiter
- // Otherwise, the path delimiter is the empty string
- return opts.protocol + '://' + opts.host +
- (opts.port ? (':' + opts.port) : '') +
- '/' + opts.path + pathDel + path;
-}
-
-function paramsToStr(params) {
- const paramKeys = Object.keys(params);
- if (paramKeys.length === 0) {
- return '';
- }
-
- return '?' + paramKeys.map(key => key + '=' + encodeURIComponent(params[key])).join('&');
-}
-
-function shouldCacheBust(opts) {
- const ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?
- navigator.userAgent.toLowerCase() : '';
- const isIE = ua.indexOf('msie') !== -1;
- const isTrident = ua.indexOf('trident') !== -1;
- const isEdge = ua.indexOf('edge') !== -1;
- const isGET = !('method' in opts) || opts.method === 'GET';
- return (isIE || isTrident || isEdge) && isGET;
-}
-
-// Implements the PouchDB API for dealing with CouchDB instances over HTTP
-function HttpPouch(opts, callback) {
-
- // The functions that will be publicly available for HttpPouch
- const api = this;
-
- const host = getHost(opts.name, opts);
- const dbUrl = genDBUrl(host, '');
-
- opts = clone(opts);
-
- const ourFetch = async function (url, options) {
-
- options = options || {};
- options.headers = options.headers || new Headers();
-
- options.credentials = 'include';
-
- if (opts.auth || host.auth) {
- const nAuth = opts.auth || host.auth;
- const str = nAuth.username + ':' + nAuth.password;
- const token = btoa(unescape(encodeURIComponent(str)));
- options.headers.set('Authorization', 'Basic ' + token);
- }
-
- const headers = opts.headers || {};
- Object.keys(headers).forEach(function (key) {
- options.headers.append(key, headers[key]);
- });
-
- /* istanbul ignore if */
- if (shouldCacheBust(options)) {
- url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();
- }
-
- const fetchFun = opts.fetch || fetch;
- return await fetchFun(url, options);
- };
-
- function adapterFun(name, fun) {
- return coreAdapterFun(name, function (...args) {
- setup().then(function () {
- return fun.apply(this, args);
- }).catch(function (e) {
- const callback = args.pop();
- callback(e);
- });
- }).bind(api);
- }
-
- async function fetchJSON(url, options) {
-
- const result = {};
-
- options = options || {};
- options.headers = options.headers || new Headers();
-
- if (!options.headers.get('Content-Type')) {
- options.headers.set('Content-Type', 'application/json');
- }
- if (!options.headers.get('Accept')) {
- options.headers.set('Accept', 'application/json');
- }
-
- const response = await ourFetch(url, options);
- result.ok = response.ok;
- result.status = response.status;
- const json = await response.json();
-
- result.data = json;
- if (!result.ok) {
- result.data.status = result.status;
- const err = generateErrorFromResponse(result.data);
- throw err;
- }
-
- if (Array.isArray(result.data)) {
- result.data = result.data.map(function (v) {
- if (v.error || v.missing) {
- return generateErrorFromResponse(v);
- } else {
- return v;
- }
- });
- }
-
- return result;
- }
-
- let setupPromise;
-
- async function setup() {
- if (opts.skip_setup) {
- return Promise.resolve();
- }
-
- // If there is a setup in process or previous successful setup
- // done then we will use that
- // If previous setups have been rejected we will try again
- if (setupPromise) {
- return setupPromise;
- }
-
- setupPromise = fetchJSON(dbUrl).catch(function (err) {
- if (err && err.status && err.status === 404) {
- // Doesnt exist, create it
- explainError(404, 'PouchDB is just detecting if the remote exists.');
- return fetchJSON(dbUrl, {method: 'PUT'});
- } else {
- return Promise.reject(err);
- }
- }).catch(function (err) {
- // If we try to create a database that already exists, skipped in
- // istanbul since its catching a race condition.
- /* istanbul ignore if */
- if (err && err.status && err.status === 412) {
- return true;
- }
- return Promise.reject(err);
- });
-
- setupPromise.catch(function () {
- setupPromise = null;
- });
-
- return setupPromise;
- }
-
- nextTick(function () {
- callback(null, api);
- });
-
- api._remote = true;
-
- /* istanbul ignore next */
- api.type = function () {
- return 'http';
- };
-
- api.id = adapterFun('id', async function (callback) {
- let result;
- try {
- const response = await ourFetch(genUrl(host, ''));
- result = await response.json();
- } catch (err) {
- result = {};
- }
-
- // Bad response or missing `uuid` should not prevent ID generation.
- const uuid = (result && result.uuid) ? (result.uuid + host.db) : genDBUrl(host, '');
- callback(null, uuid);
- });
-
- // Sends a POST request to the host calling the couchdb _compact function
- // version: The version of CouchDB it is running
- api.compact = adapterFun('compact', async function (opts, callback) {
- if (typeof opts === 'function') {
- callback = opts;
- opts = {};
- }
- opts = clone(opts);
-
- await fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'});
-
- function ping() {
- api.info(function (err, res) {
- // CouchDB may send a "compact_running:true" if it's
- // already compacting. PouchDB Server doesn't.
- /* istanbul ignore else */
- if (res && !res.compact_running) {
- callback(null, {ok: true});
- } else {
- setTimeout(ping, opts.interval || 200);
- }
- });
- }
- // Ping the http if it's finished compaction
- ping();
- });
-
- api.bulkGet = coreAdapterFun('bulkGet', function (opts, callback) {
- const self = this;
-
- async function doBulkGet(cb) {
- const params = {};
- if (opts.revs) {
- params.revs = true;
- }
- if (opts.attachments) {
- /* istanbul ignore next */
- params.attachments = true;
- }
- if (opts.latest) {
- params.latest = true;
- }
- try {
- const result = await fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {
- method: 'POST',
- body: JSON.stringify({ docs: opts.docs})
- });
-
- if (opts.attachments && opts.binary) {
- result.data.results.forEach(function (res) {
- res.docs.forEach(readAttachmentsAsBlobOrBuffer);
- });
- }
- cb(null, result.data);
- } catch (error) {
- cb(error);
- }
- }
-
- /* istanbul ignore next */
- function doBulkGetShim() {
- // avoid "url too long error" by splitting up into multiple requests
- const batchSize = MAX_SIMULTANEOUS_REVS;
- const numBatches = Math.ceil(opts.docs.length / batchSize);
- let numDone = 0;
- const results = new Array(numBatches);
-
- function onResult(batchNum) {
- return function (err, res) {
- // err is impossible because shim returns a list of errs in that case
- results[batchNum] = res.results;
- if (++numDone === numBatches) {
- callback(null, {results: flatten(results)});
- }
- };
- }
-
- for (let i = 0; i < numBatches; i++) {
- const subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);
- subOpts.docs = opts.docs.slice(i * batchSize,
- Math.min(opts.docs.length, (i + 1) * batchSize));
- bulkGetShim(self, subOpts, onResult(i));
- }
- }
-
- // mark the whole database as either supporting or not supporting _bulk_get
- const dbUrl = genUrl(host, '');
- const supportsBulkGet = supportsBulkGetMap[dbUrl];
-
- /* istanbul ignore next */
- if (typeof supportsBulkGet !== 'boolean') {
- // check if this database supports _bulk_get
- doBulkGet(function (err, res) {
- if (err) {
- supportsBulkGetMap[dbUrl] = false;
- explainError(
- err.status,
- 'PouchDB is just detecting if the remote ' +
- 'supports the _bulk_get API.'
- );
- doBulkGetShim();
- } else {
- supportsBulkGetMap[dbUrl] = true;
- callback(null, res);
- }
- });
- } else if (supportsBulkGet) {
- doBulkGet(callback);
- } else {
- doBulkGetShim();
- }
- });
-
- // Calls GET on the host, which gets back a JSON string containing
- // couchdb: A welcome string
- // version: The version of CouchDB it is running
- api._info = async function (callback) {
- try {
- await setup();
- const response = await ourFetch(genDBUrl(host, ''));
- const info = await response.json();
- info.host = genDBUrl(host, '');
- callback(null, info);
- } catch (err) {
- callback(err);
- }
- };
-
- api.fetch = async function (path, options) {
- await setup();
- const url = path.substring(0, 1) === '/' ?
- genUrl(host, path.substring(1)) :
- genDBUrl(host, path);
- return ourFetch(url, options);
- };
-
- // Get the document with the given id from the database given by host.
- // The id could be solely the _id in the database, or it may be a
- // _design/ID or _local/ID path
- api.get = adapterFun('get', async function (id, opts, callback) {
- // If no options were given, set the callback to the second parameter
- if (typeof opts === 'function') {
- callback = opts;
- opts = {};
- }
- opts = clone(opts);
-
- // List of parameters to add to the GET request
- const params = {};
-
- if (opts.revs) {
- params.revs = true;
- }
-
- if (opts.revs_info) {
- params.revs_info = true;
- }
-
- if (opts.latest) {
- params.latest = true;
- }
-
- if (opts.open_revs) {
- if (opts.open_revs !== "all") {
- opts.open_revs = JSON.stringify(opts.open_revs);
- }
- params.open_revs = opts.open_revs;
- }
-
- if (opts.rev) {
- params.rev = opts.rev;
- }
-
- if (opts.conflicts) {
- params.conflicts = opts.conflicts;
- }
-
- /* istanbul ignore if */
- if (opts.update_seq) {
- params.update_seq = opts.update_seq;
- }
-
- id = encodeDocId(id);
-
- function fetchAttachments(doc) {
- const atts = doc._attachments;
- const filenames = atts && Object.keys(atts);
- if (!atts || !filenames.length) {
- return;
- }
- // we fetch these manually in separate XHRs, because
- // Sync Gateway would normally send it back as multipart/mixed,
- // which we cannot parse. Also, this is more efficient than
- // receiving attachments as base64-encoded strings.
- async function fetchData(filename) {
- const att = atts[filename];
- const path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +
- '?rev=' + doc._rev;
-
- const response = await ourFetch(genDBUrl(host, path));
-
- let blob;
- if ('buffer' in response) {
- blob = await response.buffer();
- } else {
- /* istanbul ignore next */
- blob = await response.blob();
- }
-
- let data;
- if (opts.binary) {
- const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
- if (!typeFieldDescriptor || typeFieldDescriptor.set) {
- blob.type = att.content_type;
- }
- data = blob;
- } else {
- data = await new Promise(function (resolve) {
- blufferToBase64(blob, resolve);
- });
- }
-
- delete att.stub;
- delete att.length;
- att.data = data;
- }
-
- const promiseFactories = filenames.map(function (filename) {
- return function () {
- return fetchData(filename);
- };
- });
-
- // This limits the number of parallel xhr requests to 5 any time
- // to avoid issues with maximum browser request limits
- return pool(promiseFactories, 5);
- }
-
- function fetchAllAttachments(docOrDocs) {
- if (Array.isArray(docOrDocs)) {
- return Promise.all(docOrDocs.map(function (doc) {
- if (doc.ok) {
- return fetchAttachments(doc.ok);
- }
- }));
- }
- return fetchAttachments(docOrDocs);
- }
-
- const url = genDBUrl(host, id + paramsToStr(params));
- try {
- const res = await fetchJSON(url);
- if (opts.attachments) {
- await fetchAllAttachments(res.data);
- }
- callback(null, res.data);
- } catch (error) {
- error.docId = id;
- callback(error);
- }
- });
-
-
- // Delete the document given by doc from the database given by host.
- api.remove = adapterFun('remove', async function (docOrId, optsOrRev, opts, cb) {
- let doc;
- if (typeof optsOrRev === 'string') {
- // id, rev, opts, callback style
- doc = {
- _id: docOrId,
- _rev: optsOrRev
- };
- if (typeof opts === 'function') {
- cb = opts;
- opts = {};
- }
- } else {
- // doc, opts, callback style
- doc = docOrId;
- if (typeof optsOrRev === 'function') {
- cb = optsOrRev;
- opts = {};
- } else {
- cb = opts;
- opts = optsOrRev;
- }
- }
-
- const rev = (doc._rev || opts.rev);
- const url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;
-
- try {
- const result = await fetchJSON(url, {method: 'DELETE'});
- cb(null, result.data);
- } catch (error) {
- cb(error);
- }
- });
-
- function encodeAttachmentId(attachmentId) {
- return attachmentId.split("/").map(encodeURIComponent).join("/");
- }
-
- // Get the attachment
- api.getAttachment = adapterFun('getAttachment', async function (docId, attachmentId,
- opts, callback) {
- if (typeof opts === 'function') {
- callback = opts;
- opts = {};
- }
- const params = opts.rev ? ('?rev=' + opts.rev) : '';
- const url = genDBUrl(host, encodeDocId(docId)) + '/' +
- encodeAttachmentId(attachmentId) + params;
- let contentType;
- try {
- const response = await ourFetch(url, {method: 'GET'});
-
- if (!response.ok) {
- throw response;
- }
-
- contentType = response.headers.get('content-type');
- let blob;
- if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') {
- blob = await response.buffer();
- } else {
- /* istanbul ignore next */
- blob = await response.blob();
- }
-
- // TODO: also remove
- if (typeof process !== 'undefined' && !process.browser) {
- const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
- if (!typeFieldDescriptor || typeFieldDescriptor.set) {
- blob.type = contentType;
- }
- }
- callback(null, blob);
- } catch (err) {
- callback(err);
- }
- });
-
- // Remove the attachment given by the id and rev
- api.removeAttachment = adapterFun('removeAttachment', async function (
- docId,
- attachmentId,
- rev,
- callback,
- ) {
- const url = genDBUrl(host, encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId)) + '?rev=' + rev;
-
- try {
- const result = await fetchJSON(url, {method: 'DELETE'});
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- });
-
- // Add the attachment given by blob and its contentType property
- // to the document with the given id, the revision given by rev, and
- // add it to the database given by host.
- api.putAttachment = adapterFun('putAttachment', async function (
- docId,
- attachmentId,
- rev,
- blob,
- type,
- callback,
- ) {
- if (typeof type === 'function') {
- callback = type;
- type = blob;
- blob = rev;
- rev = null;
- }
- const id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);
- let url = genDBUrl(host, id);
- if (rev) {
- url += '?rev=' + rev;
- }
-
- if (typeof blob === 'string') {
- // input is assumed to be a base64 string
- let binary;
- try {
- binary = atob(blob);
- } catch (err) {
- return callback(createError(BAD_ARG,
- 'Attachment is not a valid base64 string'));
- }
- blob = binary ? binStringToBluffer(binary, type) : '';
- }
-
- try {
- // Add the attachment
- const result = await fetchJSON(url, {
- headers: new Headers({'Content-Type': type}),
- method: 'PUT',
- body: blob
- });
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- });
-
- // Update/create multiple documents given by req in the database
- // given by host.
- api._bulkDocs = async function (req, opts, callback) {
- // If new_edits=false then it prevents the database from creating
- // new revision numbers for the documents. Instead it just uses
- // the old ones. This is used in database replication.
- req.new_edits = opts.new_edits;
-
- try {
- await setup();
- await Promise.all(req.docs.map(preprocessAttachments));
-
- // Update/create the documents
- const result = await fetchJSON(genDBUrl(host, '_bulk_docs'), {
- method: 'POST',
- body: JSON.stringify(req)
- });
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- };
-
- // Update/create document
- api._put = async function (doc, opts, callback) {
- try {
- await setup();
- await preprocessAttachments(doc);
-
- const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
- method: 'PUT',
- body: JSON.stringify(doc)
- });
- callback(null, result.data);
- } catch (error) {
- error.docId = doc && doc._id;
- callback(error);
- }
- };
-
-
- // Get a listing of the documents in the database given
- // by host and ordered by increasing id.
- api.allDocs = adapterFun('allDocs', async function (opts, callback) {
- if (typeof opts === 'function') {
- callback = opts;
- opts = {};
- }
- opts = clone(opts);
-
- // List of parameters to add to the GET request
- const params = {};
- let body;
- let method = 'GET';
-
- if (opts.conflicts) {
- params.conflicts = true;
- }
-
- /* istanbul ignore if */
- if (opts.update_seq) {
- params.update_seq = true;
- }
-
- if (opts.descending) {
- params.descending = true;
- }
-
- if (opts.include_docs) {
- params.include_docs = true;
- }
-
- // added in CouchDB 1.6.0
- if (opts.attachments) {
- params.attachments = true;
- }
-
- if (opts.key) {
- params.key = JSON.stringify(opts.key);
- }
-
- if (opts.start_key) {
- opts.startkey = opts.start_key;
- }
-
- if (opts.startkey) {
- params.startkey = JSON.stringify(opts.startkey);
- }
-
- if (opts.end_key) {
- opts.endkey = opts.end_key;
- }
-
- if (opts.endkey) {
- params.endkey = JSON.stringify(opts.endkey);
- }
-
- if (typeof opts.inclusive_end !== 'undefined') {
- params.inclusive_end = !!opts.inclusive_end;
- }
-
- if (typeof opts.limit !== 'undefined') {
- params.limit = opts.limit;
- }
-
- if (typeof opts.skip !== 'undefined') {
- params.skip = opts.skip;
- }
-
- const paramStr = paramsToStr(params);
-
- if (typeof opts.keys !== 'undefined') {
- method = 'POST';
- body = {keys: opts.keys};
- }
-
- try {
- const result = await fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {
- method: method,
- body: JSON.stringify(body)
- });
- if (opts.include_docs && opts.attachments && opts.binary) {
- result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
- }
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- });
-
- // Get a list of changes made to documents in the database given by host.
- // TODO According to the README, there should be two other methods here,
- // api.changes.addListener and api.changes.removeListener.
- api._changes = function (opts) {
-
- // We internally page the results of a changes request, this means
- // if there is a large set of changes to be returned we can start
- // processing them quicker instead of waiting on the entire
- // set of changes to return and attempting to process them at once
- const batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;
-
- opts = clone(opts);
-
- if (opts.continuous && !('heartbeat' in opts)) {
- opts.heartbeat = DEFAULT_HEARTBEAT;
- }
-
- let requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;
-
- // ensure CHANGES_TIMEOUT_BUFFER applies
- if ('timeout' in opts && opts.timeout &&
- (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {
- requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;
- }
-
- /* istanbul ignore if */
- if ('heartbeat' in opts && opts.heartbeat &&
- (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {
- requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;
- }
-
- const params = {};
- if ('timeout' in opts && opts.timeout) {
- params.timeout = opts.timeout;
- }
-
- const limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;
- let leftToFetch = limit;
-
- if (opts.style) {
- params.style = opts.style;
- }
-
- if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {
- params.include_docs = true;
- }
-
- if (opts.attachments) {
- params.attachments = true;
- }
-
- if (opts.continuous) {
- params.feed = 'longpoll';
- }
-
- if (opts.seq_interval) {
- params.seq_interval = opts.seq_interval;
- }
-
- if (opts.conflicts) {
- params.conflicts = true;
- }
-
- if (opts.descending) {
- params.descending = true;
- }
-
- /* istanbul ignore if */
- if (opts.update_seq) {
- params.update_seq = true;
- }
-
- if ('heartbeat' in opts) {
- // If the heartbeat value is false, it disables the default heartbeat
- if (opts.heartbeat) {
- params.heartbeat = opts.heartbeat;
- }
- }
-
- if (opts.filter && typeof opts.filter === 'string') {
- params.filter = opts.filter;
- }
-
- if (opts.view && typeof opts.view === 'string') {
- params.filter = '_view';
- params.view = opts.view;
- }
-
- // If opts.query_params exists, pass it through to the changes request.
- // These parameters may be used by the filter on the source database.
- if (opts.query_params && typeof opts.query_params === 'object') {
- for (const param_name in opts.query_params) {
- /* istanbul ignore else */
- if (Object.prototype.hasOwnProperty.call(opts.query_params, param_name)) {
- params[param_name] = opts.query_params[param_name];
- }
- }
- }
-
- let method = 'GET';
- let body;
-
- if (opts.doc_ids) {
- // set this automagically for the user; it's annoying that couchdb
- // requires both a "filter" and a "doc_ids" param.
- params.filter = '_doc_ids';
- method = 'POST';
- body = {doc_ids: opts.doc_ids };
- }
- /* istanbul ignore next */
- else if (opts.selector) {
- // set this automagically for the user, similar to above
- params.filter = '_selector';
- method = 'POST';
- body = {selector: opts.selector };
- }
-
- const controller = new AbortController();
- let lastFetchedSeq;
-
- // Get all the changes starting wtih the one immediately after the
- // sequence number given by since.
- const fetchData = async function (since, callback) {
- if (opts.aborted) {
- return;
- }
- params.since = since;
- // "since" can be any kind of json object in Cloudant/CouchDB 2.x
- /* istanbul ignore next */
- if (typeof params.since === "object") {
- params.since = JSON.stringify(params.since);
- }
-
- if (opts.descending) {
- if (limit) {
- params.limit = leftToFetch;
- }
- } else {
- params.limit = (!limit || leftToFetch > batchSize) ?
- batchSize : leftToFetch;
- }
-
- // Set the options for the ajax call
- const url = genDBUrl(host, '_changes' + paramsToStr(params));
- const fetchOpts = {
- signal: controller.signal,
- method: method,
- body: JSON.stringify(body)
- };
- lastFetchedSeq = since;
-
- /* istanbul ignore if */
- if (opts.aborted) {
- return;
- }
-
- // Get the changes
- try {
- await setup();
- const result = await fetchJSON(url, fetchOpts);
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- };
-
- // If opts.since exists, get all the changes from the sequence
- // number given by opts.since. Otherwise, get all the changes
- // from the sequence number 0.
- const results = {results: []};
-
- const fetched = function (err, res) {
- if (opts.aborted) {
- return;
- }
- let raw_results_length = 0;
- // If the result of the ajax call (res) contains changes (res.results)
- if (res && res.results) {
- raw_results_length = res.results.length;
- results.last_seq = res.last_seq;
- let pending = null;
- let lastSeq = null;
- // Attach 'pending' property if server supports it (CouchDB 2.0+)
- /* istanbul ignore if */
- if (typeof res.pending === 'number') {
- pending = res.pending;
- }
- if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {
- lastSeq = results.last_seq;
- }
- // For each change
- const req = {};
- req.query = opts.query_params;
- res.results = res.results.filter(function (c) {
- leftToFetch--;
- const ret = filterChange(opts)(c);
- if (ret) {
- if (opts.include_docs && opts.attachments && opts.binary) {
- readAttachmentsAsBlobOrBuffer(c);
- }
- if (opts.return_docs) {
- results.results.push(c);
- }
- opts.onChange(c, pending, lastSeq);
- }
- return ret;
- });
- } else if (err) {
- // In case of an error, stop listening for changes and call
- // opts.complete
- opts.aborted = true;
- opts.complete(err);
- return;
- }
-
- // The changes feed may have timed out with no results
- // if so reuse last update sequence
- if (res && res.last_seq) {
- lastFetchedSeq = res.last_seq;
- }
-
- const finished = (limit && leftToFetch <= 0) ||
- (res && raw_results_length < batchSize) ||
- (opts.descending);
-
- if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {
- // Queue a call to fetch again with the newest sequence number
- nextTick(function () { fetchData(lastFetchedSeq, fetched); });
- } else {
- // We're done, call the callback
- opts.complete(null, results);
- }
- };
-
- fetchData(opts.since || 0, fetched);
-
- // Return a method to cancel this method from processing any more
- return {
- cancel: function () {
- opts.aborted = true;
- controller.abort();
- }
- };
- };
-
- // Given a set of document/revision IDs (given by req), tets the subset of
- // those that do NOT correspond to revisions stored in the database.
- // See http://wiki.apache.org/couchdb/HttpPostRevsDiff
- api.revsDiff = adapterFun('revsDiff', async function (req, opts, callback) {
- // If no options were given, set the callback to be the second parameter
- if (typeof opts === 'function') {
- callback = opts;
- opts = {};
- }
-
- try {
- // Get the missing document/revision IDs
- const result = await fetchJSON(genDBUrl(host, '_revs_diff'), {
- method: 'POST',
- body: JSON.stringify(req)
- });
- callback(null, result.data);
- } catch (error) {
- callback(error);
- }
- });
-
- api._close = function (callback) {
- callback();
- };
-
- api._destroy = async function (options, callback) {
- try {
- const json = await fetchJSON(genDBUrl(host, ''), {method: 'DELETE'});
- callback(null, json);
- } catch (error) {
- if (error.status === 404) {
- callback(null, {ok: true});
- } else {
- callback(error);
- }
- }
- };
-}
-
-// HttpPouch is a valid adapter.
-HttpPouch.valid = function () {
- return true;
-};
-
-export default function (PouchDB) {
- PouchDB.adapter('http', HttpPouch, false);
- PouchDB.adapter('https', HttpPouch, false);
-}
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js b/packages/node_modules/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js
deleted file mode 100644
index 6a9791ba62..0000000000
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { blob as createBlob } from 'pouchdb-binary-utils';
-
-function createEmptyBlobOrBuffer(type) {
- return createBlob([''], {type: type});
-}
-
-export default createEmptyBlobOrBuffer;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/allDocsKeysQuery.js b/packages/node_modules/pouchdb-adapter-utils/src/allDocsKeysQuery.js
deleted file mode 100644
index 4e2ea5046e..0000000000
--- a/packages/node_modules/pouchdb-adapter-utils/src/allDocsKeysQuery.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-function allDocsKeysQuery(api, opts) {
- var keys = opts.keys;
- var finalResults = {
- offset: opts.skip
- };
- return Promise.all(keys.map(function (key) {
- var subOpts = Object.assign({key: key, deleted: 'ok'}, opts);
- ['limit', 'skip', 'keys'].forEach(function (optKey) {
- delete subOpts[optKey];
- });
- return new Promise(function (resolve, reject) {
- api._allDocs(subOpts, function (err, res) {
- /* istanbul ignore if */
- if (err) {
- return reject(err);
- }
- /* istanbul ignore if */
- if (opts.update_seq && res.update_seq !== undefined) {
- finalResults.update_seq = res.update_seq;
- }
- finalResults.total_rows = res.total_rows;
- resolve(res.rows[0] || {key: key, error: 'not_found'});
- });
- });
- })).then(function (results) {
- finalResults.rows = results;
- return finalResults;
- });
-}
-
-export default allDocsKeysQuery;
diff --git a/packages/node_modules/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js b/packages/node_modules/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js
deleted file mode 100644
index e7a9f0828e..0000000000
--- a/packages/node_modules/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import createBlob from './blob';
-import binaryStringToArrayBuffer from './binaryStringToArrayBuffer';
-
-function binStringToBluffer(binString, type) {
- return createBlob([binaryStringToArrayBuffer(binString)], {type: type});
-}
-
-export default binStringToBluffer;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blob-browser.js b/packages/node_modules/pouchdb-binary-utils/src/blob-browser.js
deleted file mode 100644
index 5c04eb1f60..0000000000
--- a/packages/node_modules/pouchdb-binary-utils/src/blob-browser.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Abstracts constructing a Blob object, so it also works in older
-// browsers that don't support the native Blob constructor (e.g.
-// old QtWebKit versions, Android < 4.4).
-function createBlob(parts, properties) {
- /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */
- parts = parts || [];
- properties = properties || {};
- try {
- return new Blob(parts, properties);
- } catch (e) {
- if (e.name !== "TypeError") {
- throw e;
- }
- var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
- typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
- typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
- WebKitBlobBuilder;
- var builder = new Builder();
- for (var i = 0; i < parts.length; i += 1) {
- builder.append(parts[i]);
- }
- return builder.getBlob(properties.type);
- }
-}
-
-export default createBlob;
-
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blob.js b/packages/node_modules/pouchdb-binary-utils/src/blob.js
deleted file mode 100644
index 46c8720ee1..0000000000
--- a/packages/node_modules/pouchdb-binary-utils/src/blob.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// This function is unused in Node
-/* istanbul ignore next */
-function createBlob() {
-}
-
-export default createBlob;
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js b/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js
deleted file mode 100644
index 2975d103ad..0000000000
--- a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// not used in Node, but here for completeness
-function blobToBase64(blobOrBuffer, callback) {
- callback(blobOrBuffer.toString('binary'));
-}
-
-export default blobToBase64;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-core/src/constructor.js b/packages/node_modules/pouchdb-core/src/constructor.js
deleted file mode 100644
index 436471b3b5..0000000000
--- a/packages/node_modules/pouchdb-core/src/constructor.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import Adapter from './adapter';
-import TaskQueue from './taskqueue';
-import { clone } from 'pouchdb-utils';
-import parseAdapter from './parseAdapter';
-import { createClass } from './utils';
-
-// OK, so here's the deal. Consider this code:
-// var db1 = new PouchDB('foo');
-// var db2 = new PouchDB('foo');
-// db1.destroy();
-// ^ these two both need to emit 'destroyed' events,
-// as well as the PouchDB constructor itself.
-// So we have one db object (whichever one got destroy() called on it)
-// responsible for emitting the initial event, which then gets emitted
-// by the constructor, which then broadcasts it to any other dbs
-// that may have been created with the same name.
-function prepareForDestruction(self) {
-
- function onDestroyed(from_constructor) {
- self.removeListener('closed', onClosed);
- if (!from_constructor) {
- self.constructor.emit('destroyed', self.name);
- }
- }
-
- function onClosed() {
- self.removeListener('destroyed', onDestroyed);
- self.constructor.emit('unref', self);
- }
-
- self.once('destroyed', onDestroyed);
- self.once('closed', onClosed);
- self.constructor.emit('ref', self);
-}
-
-class PouchInternal extends Adapter {
- constructor(name, opts) {
- super();
- this._setup(name, opts);
- }
-
- _setup(name, opts) {
- super._setup();
- opts = opts || {};
-
- if (name && typeof name === 'object') {
- opts = name;
- name = opts.name;
- delete opts.name;
- }
-
- if (opts.deterministic_revs === undefined) {
- opts.deterministic_revs = true;
- }
-
- this.__opts = opts = clone(opts);
-
- this.auto_compaction = opts.auto_compaction;
- this.purged_infos_limit = opts.purged_infos_limit || 1000;
- this.prefix = PouchDB.prefix;
-
- if (typeof name !== 'string') {
- throw new Error('Missing/invalid DB name');
- }
-
- var prefixedName = (opts.prefix || '') + name;
- var backend = parseAdapter(prefixedName, opts);
-
- opts.name = backend.name;
- opts.adapter = opts.adapter || backend.adapter;
-
- this.name = name;
- this._adapter = opts.adapter;
- PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);
-
- if (!PouchDB.adapters[opts.adapter] ||
- !PouchDB.adapters[opts.adapter].valid()) {
- throw new Error('Invalid Adapter: ' + opts.adapter);
- }
-
- if (opts.view_adapter) {
- if (!PouchDB.adapters[opts.view_adapter] ||
- !PouchDB.adapters[opts.view_adapter].valid()) {
- throw new Error('Invalid View Adapter: ' + opts.view_adapter);
- }
- }
-
- this.taskqueue = new TaskQueue();
-
- this.adapter = opts.adapter;
-
- PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
- if (err) {
- return this.taskqueue.fail(err);
- }
- prepareForDestruction(this);
-
- this.emit('created', this);
- PouchDB.emit('created', this.name);
- this.taskqueue.ready(this);
- });
- }
-}
-
-const PouchDB = createClass(PouchInternal, function (name, opts) {
- PouchInternal.prototype._setup.call(this, name, opts);
-});
-
-export default PouchDB;
diff --git a/packages/node_modules/pouchdb-fetch/src/fetch-browser.js b/packages/node_modules/pouchdb-fetch/src/fetch-browser.js
deleted file mode 100644
index 02d2969d21..0000000000
--- a/packages/node_modules/pouchdb-fetch/src/fetch-browser.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-// AbortController was introduced quite a while after fetch and
-// isnt required for PouchDB to function so polyfill if needed
-var a = (typeof AbortController !== 'undefined')
- ? AbortController
- : function () { return {abort: function () {}}; };
-
-var f = fetch;
-var h = Headers;
-
-export {f as fetch, h as Headers, a as AbortController};
diff --git a/packages/node_modules/pouchdb-fetch/src/index.js b/packages/node_modules/pouchdb-fetch/src/index.js
deleted file mode 100644
index f933006ca8..0000000000
--- a/packages/node_modules/pouchdb-fetch/src/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export {fetch, Headers, AbortController} from './fetch';
diff --git a/packages/node_modules/pouchdb-for-coverage/src/index.js b/packages/node_modules/pouchdb-for-coverage/src/index.js
deleted file mode 100644
index 9476232cb0..0000000000
--- a/packages/node_modules/pouchdb-for-coverage/src/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import PouchDB from './pouchdb';
-import utils from './utils';
-import errors from './errors';
-import * as collate from 'pouchdb-collate';
-// explicitly include pouchdb-find so coverage captures it correctly
-import find from 'pouchdb-find';
-
-PouchDB.utils = utils;
-PouchDB.Errors = errors;
-PouchDB.collate = collate;
-PouchDB.plugin(find);
-
-export default PouchDB;
diff --git a/packages/node_modules/pouchdb-for-coverage/src/pouchdb.js b/packages/node_modules/pouchdb-for-coverage/src/pouchdb.js
deleted file mode 100644
index 9dd421c507..0000000000
--- a/packages/node_modules/pouchdb-for-coverage/src/pouchdb.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// import directly from src rather than jsnext:main because in ths case
-// the jsnext:main is actually built (lib/index*.es.js)
-import PouchDB from 'pouchdb-node/src/index';
-export default PouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-md5/src/index.js b/packages/node_modules/pouchdb-md5/src/index.js
deleted file mode 100644
index 81b7bd2ae1..0000000000
--- a/packages/node_modules/pouchdb-md5/src/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import binaryMd5 from './binaryMd5';
-import stringMd5 from './stringMd5';
-
-export {
- binaryMd5,
- stringMd5
-};
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-utils/src/adapterFun.js b/packages/node_modules/pouchdb-utils/src/adapterFun.js
deleted file mode 100644
index 6671967f42..0000000000
--- a/packages/node_modules/pouchdb-utils/src/adapterFun.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import toPromise from './toPromise';
-
-function logApiCall(self, name, args) {
- /* istanbul ignore if */
- if (self.constructor.listeners('debug').length) {
- var logArgs = ['api', self.name, name];
- for (var i = 0; i < args.length - 1; i++) {
- logArgs.push(args[i]);
- }
- self.constructor.emit('debug', logArgs);
-
- // override the callback itself to log the response
- var origCallback = args[args.length - 1];
- args[args.length - 1] = function (err, res) {
- var responseArgs = ['api', self.name, name];
- responseArgs = responseArgs.concat(
- err ? ['error', err] : ['success', res]
- );
- self.constructor.emit('debug', responseArgs);
- origCallback(err, res);
- };
- }
-}
-
-function adapterFun(name, callback) {
- return toPromise(function (...args) {
- if (this._closed) {
- return Promise.reject(new Error('database is closed'));
- }
- if (this._destroyed) {
- return Promise.reject(new Error('database is destroyed'));
- }
- var self = this;
- logApiCall(self, name, args);
- if (!this.taskqueue.isReady) {
- return new Promise(function (fulfill, reject) {
- self.taskqueue.addTask(function (failed) {
- if (failed) {
- reject(failed);
- } else {
- fulfill(self[name].apply(self, args));
- }
- });
- });
- }
- return callback.apply(this, args);
- });
-}
-
-export default adapterFun;
diff --git a/packages/node_modules/pouchdb/src/index.js b/packages/node_modules/pouchdb/src/index.js
deleted file mode 100644
index cbfbc95566..0000000000
--- a/packages/node_modules/pouchdb/src/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import PouchDB from './pouchdb';
-export default PouchDB;
\ No newline at end of file
diff --git a/packages/package-lock.json b/packages/package-lock.json
new file mode 100644
index 0000000000..f8eb720185
--- /dev/null
+++ b/packages/package-lock.json
@@ -0,0 +1,15895 @@
+{
+ "name": "pouchdb-packages",
+ "version": "7.0.0-prerelease",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pouchdb-packages",
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0",
+ "workspaces": [
+ "./*",
+ "pouchdb-server-packages/packages/*"
+ ],
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "clone-buffer": "1.0.0",
+ "double-ended-queue": "2.1.0-0",
+ "fetch-cookie": "0.11.0",
+ "fruitdown": "1.0.2",
+ "immediate": "3.3.0",
+ "level": "6.0.1",
+ "level-codec": "9.0.2",
+ "level-write-stream": "1.0.0",
+ "leveldown": "6.1.1",
+ "levelup": "4.4.0",
+ "localstorage-down": "0.6.7",
+ "ltgt": "2.2.1",
+ "memdown": "1.4.1",
+ "node-fetch": "2.6.9",
+ "promise-polyfill": "8.2.3",
+ "readable-stream": "1.1.14",
+ "spark-md5": "3.0.2",
+ "through2": "3.0.2",
+ "uuid": "8.3.2",
+ "vuvuzela": "1.0.3",
+ "whatwg-fetch": "2.0.4"
+ },
+ "devDependencies": {
+ "@rollup/plugin-alias": "^5.0.0",
+ "@rollup/plugin-commonjs": "^25.0.1",
+ "@rollup/plugin-eslint": "^9.0.4",
+ "@rollup/plugin-inject": "^5.0.3",
+ "@rollup/plugin-json": "^6.0.0",
+ "@rollup/plugin-node-resolve": "^15.1.0",
+ "@rollup/plugin-replace": "^5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "^3.25.1",
+ "rollup-plugin-inject": "3.0.1",
+ "rollup-plugin-node-resolve": "4.2.4",
+ "rollup-plugin-replace": "1.2.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.5.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.42.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/@gerhobbelt/linewrap": {
+ "version": "0.2.2-3",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/@gerhobbelt/nomnom": {
+ "version": "1.8.4-31",
+ "license": "MIT",
+ "dependencies": {
+ "@gerhobbelt/linewrap": "0.2.2-3",
+ "chalk": "4.1.0",
+ "exit": "0.1.2"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.10",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/rimraf": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-alias": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "25.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/glob": {
+ "version": "8.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": {
+ "version": "5.1.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint": {
+ "version": "9.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "eslint": "^8.24.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/@eslint/eslintrc": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/eslint": {
+ "version": "8.42.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.42.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/which": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-inject": {
+ "version": "5.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-replace": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.3.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/abbrev": {
+ "version": "1.0.9",
+ "license": "ISC"
+ },
+ "node_modules/abend": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/abstract-leveldown": {
+ "version": "7.2.0",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "catering": "^2.0.0",
+ "is-buffer": "^2.0.5",
+ "level-concat-iterator": "^3.0.0",
+ "level-supports": "^2.0.1",
+ "queue-microtask": "^1.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/add-cors-to-couchdb": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "lie": "^3.0.2",
+ "node-fetch": "^1.4.0",
+ "yargs": "^1.3.1"
+ },
+ "bin": {
+ "add-cors-to-couchdb": "bin.js"
+ }
+ },
+ "node_modules/add-cors-to-couchdb/node_modules/node-fetch": {
+ "version": "1.7.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
+ }
+ },
+ "node_modules/advance": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agent-base/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.3.0",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^2.0.0",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/depd": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "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/amdefine": {
+ "version": "1.0.1",
+ "license": "BSD-3-Clause OR MIT",
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/append-stream": {
+ "version": "1.2.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "license": "ISC"
+ },
+ "node_modules/archiver": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^2.6.3",
+ "buffer-crc32": "^0.2.1",
+ "glob": "^7.1.4",
+ "readable-stream": "^3.4.0",
+ "tar-stream": "^2.1.0",
+ "zip-stream": "^2.1.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/archiver-utils/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/archiver-utils/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/archiver/node_modules/bl": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/archiver/node_modules/buffer": {
+ "version": "5.7.1",
+ "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",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/archiver/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/argsarray": {
+ "version": "0.0.1",
+ "license": "WTFPL"
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/asap": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/asn1.js": {
+ "version": "5.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/assert": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es6-object-assign": "^1.1.0",
+ "is-nan": "^1.2.1",
+ "object-is": "^1.0.1",
+ "util": "^0.12.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "0.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.9.6",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/b-tree": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "2.0.x",
+ "magazine": "4.0.x",
+ "sequester": "1.0.x"
+ }
+ },
+ "node_modules/b-tree/node_modules/cadence": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/babel-code-frame": {
+ "version": "6.26.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/supports-color": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "license": "MIT"
+ },
+ "node_modules/base62": {
+ "version": "1.2.8",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "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/base64url": {
+ "version": "3.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/basic-auth-token": {
+ "version": "0.4.2",
+ "license": "MIT"
+ },
+ "node_modules/basic-authorization-header": {
+ "version": "0.2.7",
+ "license": "MIT",
+ "dependencies": {
+ "basic-auth-token": "^0.4.2"
+ }
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/bl": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/bl/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/bl/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/bl/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "license": "MIT"
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/body-parser": {
+ "version": "1.19.0",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/on-finished": {
+ "version": "2.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/raw-body": {
+ "version": "2.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/boom": {
+ "version": "2.10.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "hoek": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browser-pack": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "JSONStream": "^1.0.3",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "bin": {
+ "browser-pack": "bin/cmd.js"
+ }
+ },
+ "node_modules/browser-pack/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browser-pack/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browser-pack/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browser-pack/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browser-resolve": {
+ "version": "1.11.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve": "1.1.7"
+ }
+ },
+ "node_modules/browser-resolve/node_modules/resolve": {
+ "version": "1.1.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/browser-unpack": {
+ "version": "1.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn-node": "^1.5.2",
+ "concat-stream": "^1.5.0",
+ "minimist": "^1.1.1"
+ },
+ "bin": {
+ "browser-unpack": "bin/cmd.js"
+ }
+ },
+ "node_modules/browserify": {
+ "version": "16.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "JSONStream": "^1.0.3",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "browserify": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/browserify-cache-api": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^2.6.4",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "node_modules/browserify-cache-api/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browserify-cache-api/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify-cache-api/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browserify-cache-api/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/browserify-des": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/browserify-incremental": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserify-cache-api": "^3.0.0",
+ "JSONStream": "^0.10.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "browserifyinc": "bin/cmd.js"
+ },
+ "peerDependencies": {
+ "browserify": "*"
+ }
+ },
+ "node_modules/browserify-incremental/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browserify-incremental/node_modules/jsonparse": {
+ "version": "0.0.5",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/browserify-incremental/node_modules/JSONStream": {
+ "version": "0.10.0",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "0.0.5",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "index.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/browserify-incremental/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify-incremental/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browserify-incremental/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/browserify-sign": {
+ "version": "4.2.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "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/browserify-zlib": {
+ "version": "0.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/browserify/node_modules/assert": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ }
+ },
+ "node_modules/browserify/node_modules/assert/node_modules/inherits": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/browserify/node_modules/assert/node_modules/util": {
+ "version": "0.10.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "2.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/buffer": {
+ "version": "5.7.1",
+ "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",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/browserify/node_modules/inherits": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/browserify/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/browserify/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browserify/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/util": {
+ "version": "0.10.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "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-crc32": {
+ "version": "0.2.13",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-equal": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "license": "MIT"
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/bundle-collapser": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-pack": "^5.0.1",
+ "browser-unpack": "^1.1.0",
+ "concat-stream": "^1.5.0",
+ "falafel": "^2.1.0",
+ "minimist": "^1.1.1",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "bundle-collapser": "bin/cmd.js"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/browser-pack": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "combine-source-map": "~0.6.1",
+ "defined": "^1.0.0",
+ "JSONStream": "^1.0.3",
+ "through2": "^1.0.0",
+ "umd": "^3.0.0"
+ },
+ "bin": {
+ "browser-pack": "bin/cmd.js"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/browser-pack/node_modules/through2": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": ">=1.1.13-1 <1.2.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/combine-source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.5.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.4.2"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/inline-source-map": {
+ "version": "0.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "source-map": "~0.4.0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/bundle-collapser/node_modules/source-map": {
+ "version": "0.4.4",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/through2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "15.3.0",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/cacache/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/cached-path-relative": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cadence": {
+ "version": "1.0.12",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caller-path": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/caller-path/node_modules/callsites": {
+ "version": "0.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/capital-case": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.11.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/catering": {
+ "version": "2.1.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chai": {
+ "version": "3.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/chai-as-promised": {
+ "version": "5.3.0",
+ "dev": true,
+ "license": "WTFPL",
+ "peerDependencies": {
+ "chai": ">= 2.1.2 < 4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/change-case": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camel-case": "^4.0.1",
+ "capital-case": "^1.0.1",
+ "constant-case": "^3.0.1",
+ "dot-case": "^3.0.1",
+ "header-case": "^2.0.1",
+ "no-case": "^3.0.1",
+ "param-case": "^3.0.1",
+ "pascal-case": "^3.0.1",
+ "path-case": "^3.0.1",
+ "sentence-case": "^3.0.1",
+ "snake-case": "^3.0.1"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.4.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/child-process-promise": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^4.0.2",
+ "node-version": "^1.0.0",
+ "promise-polyfill": "^6.0.1"
+ }
+ },
+ "node_modules/child-process-promise/node_modules/promise-polyfill": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/circular-json": {
+ "version": "0.3.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/cliui": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "license": "MIT"
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "license": "ISC",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combine-source-map": {
+ "version": "0.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "license": "MIT"
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commoner": {
+ "version": "0.10.8",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "bin": {
+ "commonize": "bin/commonize"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commoner/node_modules/glob": {
+ "version": "5.0.15",
+ "license": "ISC",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/compress-commons": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^3.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.3.6"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/compress-commons/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/compress-commons/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/compress-commons/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.7.4",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compression/node_modules/bytes": {
+ "version": "3.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/concat-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/configstore": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "graceful-fs": "^3.0.1",
+ "js-yaml": "^3.1.0",
+ "mkdirp": "^0.5.0",
+ "object-assign": "^2.0.0",
+ "osenv": "^0.1.0",
+ "user-home": "^1.0.0",
+ "uuid": "^2.0.1",
+ "xdg-basedir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/configstore/node_modules/argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/configstore/node_modules/esprima": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/configstore/node_modules/graceful-fs": {
+ "version": "3.0.12",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "natives": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/configstore/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/configstore/node_modules/object-assign": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/configstore/node_modules/uuid": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/console-browserify": {
+ "version": "1.2.0",
+ "dev": true
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "license": "ISC"
+ },
+ "node_modules/constant-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case": "^2.0.2"
+ }
+ },
+ "node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/constrain": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.3",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "0.4.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-parser": {
+ "version": "1.4.6",
+ "license": "MIT",
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "license": "MIT"
+ },
+ "node_modules/cookiejar": {
+ "version": "2.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "license": "MIT"
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/couchdb-calculate-session-id": {
+ "version": "1.1.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aproba": "^1.0.1",
+ "base64url": "^3.0.0",
+ "crypto-lite": "^0.2.0"
+ }
+ },
+ "node_modules/couchdb-eval": {
+ "resolved": "pouchdb-server-packages/packages/couchdb-eval",
+ "link": true
+ },
+ "node_modules/couchdb-harness": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "Apache License",
+ "dependencies": {
+ "colors": "^1.0.3",
+ "glob": "~3.1.21",
+ "optimist": "~0.3.5",
+ "which": "^1.0.8"
+ },
+ "bin": {
+ "couchdb-harness": "bin/couchdb-harness"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/glob": {
+ "version": "3.1.21",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/graceful-fs": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "BSD",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/inherits": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "node_modules/couchdb-harness/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/couchdb-harness/node_modules/minimatch": {
+ "version": "0.2.14",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/couchdb-log-parse": {
+ "version": "0.0.4",
+ "license": "ISC"
+ },
+ "node_modules/couchdb-objects": {
+ "resolved": "pouchdb-server-packages/packages/couchdb-objects",
+ "link": true
+ },
+ "node_modules/couchdb-render": {
+ "resolved": "pouchdb-server-packages/packages/couchdb-render",
+ "link": true
+ },
+ "node_modules/couchdb-resp-completer": {
+ "resolved": "pouchdb-server-packages/packages/couchdb-resp-completer",
+ "link": true
+ },
+ "node_modules/coveralls": {
+ "version": "2.13.3",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "js-yaml": "3.6.1",
+ "lcov-parse": "0.0.10",
+ "log-driver": "1.2.5",
+ "minimist": "1.2.0",
+ "request": "2.79.0"
+ },
+ "bin": {
+ "coveralls": "bin/coveralls.js"
+ },
+ "engines": {
+ "node": ">=0.8.6"
+ }
+ },
+ "node_modules/coveralls/node_modules/argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/coveralls/node_modules/js-yaml": {
+ "version": "3.6.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/coveralls/node_modules/minimist": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/crc": {
+ "version": "3.8.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.1.0"
+ }
+ },
+ "node_modules/crc/node_modules/buffer": {
+ "version": "5.7.1",
+ "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",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "crc": "^3.4.4",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 6.9.0"
+ }
+ },
+ "node_modules/crc32-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/cryptiles": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "boom": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/crypto-browserify": {
+ "version": "3.12.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/crypto-lite": {
+ "version": "0.2.0",
+ "license": "MIT"
+ },
+ "node_modules/cssmin": {
+ "version": "0.4.3",
+ "dev": true,
+ "bin": {
+ "cssmin": "bin/cssmin"
+ }
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/d64": {
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ "node_modules/dash-ast": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dashdash/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "0.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-detect": "0.1.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/deep-eql/node_modules/type-detect": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "optional": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/deferred-leveldown": {
+ "version": "5.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.1",
+ "inherits": "^2.0.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ "node_modules/denodeify": {
+ "version": "1.2.1",
+ "license": "MIT"
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/deps-sort": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "deps-sort": "bin/cmd.js"
+ }
+ },
+ "node_modules/deps-sort/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deps-sort/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/deps-sort/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/deps-sort/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/derequire": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "concat-stream": "^1.4.6",
+ "escope": "^3.6.0",
+ "through2": "^2.0.0",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "derequire": "bin/cmd.js"
+ }
+ },
+ "node_modules/derequire/node_modules/find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/derequire/node_modules/locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/derequire/node_modules/p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/derequire/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/derequire/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/derequire/node_modules/yargs": {
+ "version": "15.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/des.js": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/designate": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.0.x"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.0.4",
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.1",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detective": {
+ "version": "4.7.1",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ }
+ },
+ "node_modules/detective/node_modules/acorn": {
+ "version": "5.7.4",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dilute": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.0.x"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/domain-browser": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.2"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/dotignore": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "ignored": "bin/ignored"
+ }
+ },
+ "node_modules/double-ended-queue": {
+ "version": "2.1.0-0",
+ "license": "MIT"
+ },
+ "node_modules/duplexer2": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/duplexer2/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexer2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/ecstatic": {
+ "version": "3.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "he": "^1.1.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.1.0",
+ "url-join": "^2.0.5"
+ },
+ "bin": {
+ "ecstatic": "lib/ecstatic.js"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "license": "MIT"
+ },
+ "node_modules/encode": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding-down": {
+ "version": "6.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "^6.2.1",
+ "inherits": "^2.0.3",
+ "level-codec": "^9.0.0",
+ "level-errors": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/abstract-leveldown": {
+ "version": "6.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "node_modules/encoding-down/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/end-stream": {
+ "version": "0.1.0",
+ "dependencies": {
+ "write-stream": "~0.4.3"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/equals": {
+ "version": "1.0.5",
+ "license": "MIT",
+ "dependencies": {
+ "jkroso-type": "1"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "license": "MIT",
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.21.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract/node_modules/is-regex": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es3ify": {
+ "version": "0.2.2",
+ "license": "MIT",
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "jstransform": "~11.0.0",
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "ISC",
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-map": {
+ "version": "0.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "node_modules/es6-object-assign": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/es6-set": {
+ "version": "0.1.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "^3.1.3",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/es6-set/node_modules/type": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "license": "MIT"
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "1.8.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.2.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/estraverse": {
+ "version": "1.9.3",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/source-map": {
+ "version": "0.2.0",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escope": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope/node_modules/estraverse": {
+ "version": "5.3.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/which": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/esniff": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.12"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.5.2",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/acorn": {
+ "version": "8.8.2",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "2.7.3",
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/esprima-fb": {
+ "version": "15001.1.0-dev-harmony-fb",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "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",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "node_modules/event-stream": {
+ "version": "0.5.3",
+ "dev": true,
+ "dependencies": {
+ "optimist": "0.2"
+ }
+ },
+ "node_modules/event-stream/node_modules/optimist": {
+ "version": "0.2.8",
+ "dev": true,
+ "license": "MIT/X11",
+ "dependencies": {
+ "wordwrap": ">=0.0.1 <0.1.0"
+ }
+ },
+ "node_modules/event-stream/node_modules/wordwrap": {
+ "version": "0.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/events": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.17.0",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-pouchdb": {
+ "resolved": "pouchdb-server-packages/packages/express-pouchdb",
+ "link": true
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.4.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/on-finished": {
+ "version": "2.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "license": "MIT"
+ },
+ "node_modules/external-editor": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/falafel": {
+ "version": "2.2.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "isarray": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/fetch-cookie": {
+ "version": "0.11.0",
+ "license": "Unlicense",
+ "dependencies": {
+ "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/figures": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/figures/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/on-finished": {
+ "version": "2.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-requires": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "^0.10.49",
+ "esniff": "^1.1.0"
+ },
+ "bin": {
+ "find-requires": "bin/find-requires.js"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "0.2.1",
+ "dev": true,
+ "dependencies": {
+ "glob": "~4.3.0"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/glob": {
+ "version": "4.3.5",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/findup-sync/node_modules/minimatch": {
+ "version": "2.0.10",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "0.3.2",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flat-cache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/formidable": {
+ "version": "1.2.6",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fruitdown": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "0.12.3",
+ "argsarray": "0.0.1",
+ "d64": "^1.0.0",
+ "inherits": "^2.0.1",
+ "tiny-queue": "0.2.0"
+ }
+ },
+ "node_modules/fruitdown/node_modules/abstract-leveldown": {
+ "version": "0.12.3",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~3.0.0"
+ }
+ },
+ "node_modules/fruitdown/node_modules/xtend": {
+ "version": "3.0.0",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fs-extra": {
+ "version": "8.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "license": "ISC"
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "license": "MIT"
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gar": {
+ "version": "1.0.4",
+ "license": "MIT"
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/gaze": {
+ "version": "0.5.2",
+ "dev": true,
+ "dependencies": {
+ "globule": "~0.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/gaze/node_modules/glob": {
+ "version": "3.1.21",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gaze/node_modules/globule": {
+ "version": "0.1.0",
+ "dev": true,
+ "dependencies": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/gaze/node_modules/graceful-fs": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "BSD",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/gaze/node_modules/inherits": {
+ "version": "1.0.2",
+ "dev": true
+ },
+ "node_modules/gaze/node_modules/lodash": {
+ "version": "1.0.2",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/gaze/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/gaze/node_modules/minimatch": {
+ "version": "0.2.14",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "node_modules/generate-object-property": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-property": "^1.0.0"
+ }
+ },
+ "node_modules/get-assigned-identifiers": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-folder-size": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "gar": "^1.0.4",
+ "tiny-each-async": "2.0.3"
+ },
+ "bin": {
+ "get-folder-size": "bin/get-folder-size"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/getpass/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.5",
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.20.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globule": {
+ "version": "0.2.0",
+ "dev": true,
+ "dependencies": {
+ "glob": "~3.2.7",
+ "lodash": "~2.4.1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/globule/node_modules/glob": {
+ "version": "3.2.11",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "inherits": "2",
+ "minimatch": "0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globule/node_modules/glob/node_modules/minimatch": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globule/node_modules/lodash": {
+ "version": "2.4.2",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/globule/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/globule/node_modules/minimatch": {
+ "version": "0.2.14",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "license": "ISC"
+ },
+ "node_modules/graceful-readlink": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/growl": {
+ "version": "1.9.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/handlebars/node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
+ },
+ "bin": {
+ "har-validator": "bin/har-validator"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/har-validator/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/supports-color": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-color": {
+ "version": "0.1.7",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-localstorage": {
+ "version": "1.0.1",
+ "license": "MIT"
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "license": "ISC"
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/hash-base/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "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/hash-wasm": {
+ "version": "4.9.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hashmap": {
+ "version": "2.4.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hawk": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.32"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/header-case": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "capital-case": "^1.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/header-case-normalizer": {
+ "version": "1.0.3",
+ "license": "Apache-2.0"
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/hoek": {
+ "version": "2.16.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/homogenize": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/htmlescape": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "license": "BSD-2-Clause",
+ "optional": true
+ },
+ "node_modules/http-errors": {
+ "version": "1.7.2",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.3",
+ "license": "ISC"
+ },
+ "node_modules/http-pouchdb": {
+ "resolved": "pouchdb-server-packages/packages/http-pouchdb",
+ "link": true
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/http-server": {
+ "version": "0.12.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-auth": "^1.0.3",
+ "colors": "^1.4.0",
+ "corser": "^2.0.1",
+ "ecstatic": "^3.3.2",
+ "http-proxy": "^1.18.0",
+ "minimist": "^1.2.5",
+ "opener": "^1.5.1",
+ "portfinder": "^1.0.25",
+ "secure-compare": "3.0.1",
+ "union": "~0.5.0"
+ },
+ "bin": {
+ "hs": "bin/http-server",
+ "http-server": "bin/http-server"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/http-server/node_modules/basic-auth": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/https-browserify": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/humble-localstorage": {
+ "version": "1.4.2",
+ "license": "MIT",
+ "dependencies": {
+ "has-localstorage": "^1.0.1",
+ "localstorage-memory": "^1.0.1"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "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/ignore": {
+ "version": "5.2.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/ignore-walk": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
+ "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==",
+ "optional": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/image-size": {
+ "version": "0.5.5",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.3.0",
+ "license": "MIT"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "optional": true
+ },
+ "node_modules/inline-source-map": {
+ "version": "0.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/inquirer": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "node_modules/inquirer/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/chalk": {
+ "version": "2.4.2",
+ "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/inquirer/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/inquirer/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/inquirer/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/inquirer/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/string-width": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/insert-module-globals": {
+ "version": "7.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "JSONStream": "^1.0.3",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "insert-module-globals": "bin/cmd.js"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/is-buffer": {
+ "version": "1.1.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/insert-module-globals/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/insert-module-globals/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "0.5.2",
+ "dev": true
+ },
+ "node_modules/ip": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "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",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-builtin-module/node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-empty": {
+ "version": "1.2.0",
+ "license": "MIT"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-my-ip-valid": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-my-json-valid": {
+ "version": "2.20.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "is-my-ip-valid": "^1.0.0",
+ "jsonpointer": "^5.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-resolvable": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "devOptional": true,
+ "license": "ISC"
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/istanbul": {
+ "version": "0.4.5",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "istanbul": "lib/cli.js"
+ }
+ },
+ "node_modules/istanbul-coveralls": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^1.0.0",
+ "coveralls": "^2.11.2",
+ "minimist": "^1.1.1",
+ "rimraf": "^2.3.4",
+ "sum-up": "^1.0.1"
+ },
+ "bin": {
+ "istanbul-coveralls": "cli.js"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/supports-color": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/istanbul/node_modules/argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/istanbul/node_modules/async": {
+ "version": "1.5.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/istanbul/node_modules/glob": {
+ "version": "5.0.15",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/istanbul/node_modules/has-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/istanbul/node_modules/resolve": {
+ "version": "1.1.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/istanbul/node_modules/supports-color": {
+ "version": "3.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/jkroso-type": {
+ "version": "1.1.1",
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/json3": {
+ "version": "3.3.2",
+ "dev": true
+ },
+ "node_modules/jsondown": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "memdown": "1.4.1",
+ "mkdirp": "0.5.1"
+ },
+ "peerDependencies": {
+ "abstract-leveldown": "*"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonify": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "Public Domain",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/jsonpointer": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "dev": true,
+ "license": "(MIT OR Apache-2.0)",
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/jsprim/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/jstransform": {
+ "version": "11.0.3",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "base62": "^1.1.0",
+ "commoner": "^0.10.1",
+ "esprima-fb": "^15001.1.0-dev-harmony-fb",
+ "object-assign": "^2.0.0",
+ "source-map": "^0.4.2"
+ },
+ "bin": {
+ "jstransform": "bin/jstransform"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/jstransform/node_modules/object-assign": {
+ "version": "2.1.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jstransform/node_modules/source-map": {
+ "version": "0.4.4",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/keydir": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ltgt": "^1.0.2"
+ }
+ },
+ "node_modules/keydir/node_modules/ltgt": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/killable": {
+ "version": "1.0.1",
+ "license": "ISC"
+ },
+ "node_modules/knex": {
+ "version": "0.8.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bluebird": "^2.9.24",
+ "chalk": "^1.0.0",
+ "commander": "^2.2.0",
+ "debug": "^2.1.3",
+ "inherits": "~2.0.1",
+ "interpret": "^0.5.2",
+ "liftoff": "~2.0.0",
+ "lodash": "^3.7.0",
+ "minimist": "~1.1.0",
+ "mkdirp": "^0.5.0",
+ "pool2": "^1.1.0",
+ "readable-stream": "^1.1.12",
+ "tildify": "~1.0.0",
+ "v8flags": "^2.0.2"
+ },
+ "bin": {
+ "knex": "lib/bin/cli.js"
+ }
+ },
+ "node_modules/knex/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/bluebird": {
+ "version": "2.11.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/knex/node_modules/chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/knex/node_modules/lodash": {
+ "version": "3.10.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/knex/node_modules/minimist": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/knex/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/supports-color": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/labeled-stream-splicer": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lazystream/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lazystream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/lazystream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/lcov-parse": {
+ "version": "0.0.10",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/less": {
+ "version": "3.9.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clone": "^2.1.2"
+ },
+ "bin": {
+ "lessc": "bin/lessc"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "optionalDependencies": {
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.4.1",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "^2.83.0",
+ "source-map": "~0.6.0"
+ }
+ },
+ "node_modules/less/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/less/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/less/node_modules/caseless": {
+ "version": "0.12.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true
+ },
+ "node_modules/less/node_modules/form-data": {
+ "version": "2.3.3",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/less/node_modules/har-validator": {
+ "version": "5.1.5",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/http-signature": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/less/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/less/node_modules/punycode": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/qs": {
+ "version": "6.5.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/less/node_modules/request": {
+ "version": "2.88.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/less/node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/less/node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/less/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/less/node_modules/uuid": {
+ "version": "3.4.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/level": {
+ "version": "6.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "level-js": "^5.0.0",
+ "level-packager": "^5.1.0",
+ "leveldown": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/level"
+ }
+ },
+ "node_modules/level-codec": {
+ "version": "9.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-codec/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "node_modules/level-concat-iterator": {
+ "version": "3.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "catering": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/level-errors": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "errno": "~0.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-iterator-stream": {
+ "version": "4.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0",
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-iterator-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/level-js": {
+ "version": "5.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.3",
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.3",
+ "ltgt": "^2.1.2"
+ }
+ },
+ "node_modules/level-js/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-js/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "node_modules/level-js/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-js/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-packager": {
+ "version": "5.1.1",
+ "license": "MIT",
+ "dependencies": {
+ "encoding-down": "^6.3.0",
+ "levelup": "^4.3.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-supports": {
+ "version": "2.1.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/level-write-stream": {
+ "version": "1.0.0",
+ "dependencies": {
+ "end-stream": "~0.1.0"
+ }
+ },
+ "node_modules/level/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "node_modules/level/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level/node_modules/leveldown": {
+ "version": "5.6.0",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.1",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "~4.1.0"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/level/node_modules/node-gyp-build": {
+ "version": "4.1.1",
+ "license": "MIT",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/leveldown": {
+ "version": "6.1.1",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "^7.2.0",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "^4.3.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/leveldown-open": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/levelup": {
+ "version": "4.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "deferred-leveldown": "~5.3.0",
+ "level-errors": "~2.0.0",
+ "level-iterator-stream": "~4.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levelup/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/lie/node_modules/immediate": {
+ "version": "3.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/liftoff": {
+ "version": "2.0.3",
+ "dev": true,
+ "dependencies": {
+ "extend": "~2.0.0",
+ "findup-sync": "~0.2.0",
+ "flagged-respawn": "~0.3.0",
+ "minimist": "~1.1.0",
+ "resolve": "~1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/liftoff/node_modules/extend": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/liftoff/node_modules/minimist": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/liftoff/node_modules/resolve": {
+ "version": "1.1.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/localstorage-down": {
+ "version": "0.6.7",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "0.12.3",
+ "argsarray": "0.0.1",
+ "buffer-from": "^0.1.1",
+ "d64": "^1.0.0",
+ "humble-localstorage": "^1.4.2",
+ "inherits": "^2.0.1",
+ "tiny-queue": "0.2.0"
+ }
+ },
+ "node_modules/localstorage-down/node_modules/abstract-leveldown": {
+ "version": "0.12.3",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~3.0.0"
+ }
+ },
+ "node_modules/localstorage-down/node_modules/buffer-from": {
+ "version": "0.1.2",
+ "license": "MIT"
+ },
+ "node_modules/localstorage-down/node_modules/xtend": {
+ "version": "3.0.0",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/localstorage-memory": {
+ "version": "1.0.3",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/locket": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "2.4.1",
+ "b-tree": "1.x",
+ "cadence": "1.x",
+ "constrain": "1.x",
+ "mkdirp": "0.5.1",
+ "mvcc": "1.x",
+ "pair": "1.x",
+ "reactor": "1.x",
+ "rimraf": "2.5.1",
+ "sequester": "1.x",
+ "timezone": "0.0.48",
+ "vestibule": "1.x"
+ }
+ },
+ "node_modules/locket/node_modules/abstract-leveldown": {
+ "version": "2.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/locket/node_modules/glob": {
+ "version": "6.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/locket/node_modules/rimraf": {
+ "version": "2.5.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^6.0.1"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._baseassign": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "node_modules/lodash._basecopy": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._basecreate": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._getnative": {
+ "version": "3.9.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash._isiterateecall": {
+ "version": "3.0.9",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.create": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._baseassign": "^3.0.0",
+ "lodash._basecreate": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0"
+ }
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isarguments": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isarray": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.keys": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "node_modules/lodash.memoize": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-driver": {
+ "version": "1.2.5",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.6"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "2.3.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/ltgt": {
+ "version": "2.2.1",
+ "license": "MIT"
+ },
+ "node_modules/magazine": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/magic-string": {
+ "version": "0.27.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/marky": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/medea": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "append-stream": "^1.1.0",
+ "async": "^0.9.0",
+ "buffer-crc32": "~0.2.1",
+ "buffer-equal": "0.0.1",
+ "es6-map": "^0.1.1",
+ "mkdirp": "^0.5.0",
+ "monotonic-timestamp": "0.0.8",
+ "pidlockfile": "^1.1.1",
+ "rimraf": "~2.2.2",
+ "run-parallel": "^1.0.0"
+ }
+ },
+ "node_modules/medea/node_modules/async": {
+ "version": "0.9.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/medea/node_modules/rimraf": {
+ "version": "2.2.8",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/medeadown": {
+ "version": "1.1.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "3.0.x",
+ "keydir": "^2.1.1",
+ "leveldown-open": "^1.0.3",
+ "medea": "^1.0.3"
+ }
+ },
+ "node_modules/medeadown/node_modules/abstract-leveldown": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/median": {
+ "version": "0.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/memdown": {
+ "version": "1.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "~2.7.1",
+ "functional-red-black-tree": "^1.0.1",
+ "immediate": "^3.2.3",
+ "inherits": "~2.0.1",
+ "ltgt": "~2.2.0",
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/memdown/node_modules/abstract-leveldown": {
+ "version": "2.7.2",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "license": "MIT"
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "devOptional": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "3.3.6",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.1",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp/node_modules/minimist": {
+ "version": "0.0.8",
+ "license": "MIT"
+ },
+ "node_modules/mocha": {
+ "version": "3.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 0.10.x",
+ "npm": ">= 1.4.x"
+ }
+ },
+ "node_modules/mocha/node_modules/commander": {
+ "version": "2.9.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-readlink": ">= 1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6.x"
+ }
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "2.6.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.1.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/has-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/mockery": {
+ "version": "2.1.0",
+ "dev": true
+ },
+ "node_modules/module-deps": {
+ "version": "6.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-resolve": "^2.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "JSONStream": "^1.0.3",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "module-deps": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/browser-resolve": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/detective": {
+ "version": "5.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/module-deps/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/module-deps/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/through2": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/monotonic-timestamp": {
+ "version": "0.0.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "license": "MIT"
+ },
+ "node_modules/multiparty": {
+ "version": "4.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "http-errors": "~1.8.1",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/multiparty/node_modules/http-errors": {
+ "version": "1.8.1",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/multiparty/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "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/multiparty/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "license": "ISC"
+ },
+ "node_modules/multiparty/node_modules/toidentifier": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.7",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/mvcc": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "advance": "1.x",
+ "designate": "1.x",
+ "dilute": "1.x",
+ "homogenize": "1.x",
+ "revise": "1.x",
+ "riffle": "1.x",
+ "splice": "1.x",
+ "twiddle": "1.x"
+ }
+ },
+ "node_modules/nan": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+ "optional": true
+ },
+ "node_modules/napi-macros": {
+ "version": "2.0.0",
+ "license": "MIT"
+ },
+ "node_modules/natives": {
+ "version": "1.1.6",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/navigator": {
+ "version": "1.0.1",
+ "dev": true,
+ "engines": {
+ "node": ">= v0.2.0"
+ }
+ },
+ "node_modules/ncp": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "ncp": "bin/ncp"
+ }
+ },
+ "node_modules/needle": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
+ "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+ "optional": true,
+ "dependencies": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "needle": "bin/needle"
+ },
+ "engines": {
+ "node": ">= 4.4.x"
+ }
+ },
+ "node_modules/needle/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/needle/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "optional": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "license": "MIT"
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.9",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "8.4.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.6.0",
+ "license": "MIT",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/node-gyp/node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/gauge": {
+ "version": "4.0.4",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/nopt": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/npmlog": {
+ "version": "6.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/rimraf": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/node-gyp/node_modules/which": {
+ "version": "2.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/node-pre-gyp": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
+ "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
+ "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "optional": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/fs-minipass": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+ "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "optional": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/minipass": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+ "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/minizlib": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+ "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "optional": true,
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "optional": true,
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "optional": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "optional": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "optional": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/tar": {
+ "version": "4.4.19",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
+ "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
+ "optional": true,
+ "dependencies": {
+ "chownr": "^1.1.4",
+ "fs-minipass": "^1.2.7",
+ "minipass": "^2.9.0",
+ "minizlib": "^1.3.3",
+ "mkdirp": "^0.5.5",
+ "safe-buffer": "^5.2.1",
+ "yallist": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=4.5"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/tar/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==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "optional": true
+ },
+ "node_modules/node-version": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "1.2.1",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "~0.3.0",
+ "ps-tree": "~0.0.3",
+ "update-notifier": "~0.1.8"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/nodemon/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/nodemon/node_modules/minimatch": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/noop-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz",
+ "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==",
+ "optional": true
+ },
+ "node_modules/nopt": {
+ "version": "3.0.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-bundled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
+ "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
+ "optional": true,
+ "dependencies": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
+ "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
+ "optional": true
+ },
+ "node_modules/npm-packlist": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
+ "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
+ "optional": true,
+ "dependencies": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.8.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.7.0",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/opener": {
+ "version": "1.5.2",
+ "dev": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/operation": {
+ "version": "1.6.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/optimist": {
+ "version": "0.3.7",
+ "dev": true,
+ "license": "MIT/X11",
+ "dependencies": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "node_modules/optimist/node_modules/wordwrap": {
+ "version": "0.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/os-homedir": {
+ "version": "1.0.2",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/osenv": {
+ "version": "0.1.5",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pair": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "encode": "1.0.x"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/param-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parents": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "node_modules/parse-asn1": {
+ "version": "5.1.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pascal-case": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "(WTFPL OR MIT)"
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-platform": {
+ "version": "0.11.15",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidlockfile": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pool2": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "debug": "^2.1.3",
+ "double-ended-queue": "^2.1.0-0",
+ "hashmap": "^2.0.1",
+ "simple-backoff": "^1.0.0"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.32",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^2.6.4",
+ "debug": "^3.2.7",
+ "mkdirp": "^0.5.6"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/portfinder/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/portfinder/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb": {
+ "resolved": "pouchdb",
+ "link": true
+ },
+ "node_modules/pouchdb-abstract-mapreduce": {
+ "resolved": "pouchdb-abstract-mapreduce",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-http": {
+ "resolved": "pouchdb-adapter-http",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-idb": {
+ "resolved": "pouchdb-adapter-idb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-indexeddb": {
+ "resolved": "pouchdb-adapter-indexeddb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-leveldb": {
+ "resolved": "pouchdb-adapter-leveldb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-leveldb-core": {
+ "resolved": "pouchdb-adapter-leveldb-core",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-localstorage": {
+ "resolved": "pouchdb-adapter-localstorage",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-memory": {
+ "resolved": "pouchdb-adapter-memory",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-node-websql": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz",
+ "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-adapter-websql-core": "7.0.0",
+ "pouchdb-utils": "7.0.0",
+ "websql": "1.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-binary-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz",
+ "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==",
+ "optional": true,
+ "dependencies": {
+ "buffer-from": "1.1.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-collections": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz",
+ "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-errors": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz",
+ "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==",
+ "optional": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-md5": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz",
+ "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "spark-md5": "3.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz",
+ "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.0.6",
+ "inherits": "2.0.3",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/spark-md5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+ "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "optional": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/pouchdb-adapter-utils": {
+ "resolved": "pouchdb-adapter-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-websql-core": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz",
+ "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-adapter-utils": "7.0.0",
+ "pouchdb-binary-utils": "7.0.0",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-json": "7.0.0",
+ "pouchdb-merge": "7.0.0",
+ "pouchdb-utils": "7.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-adapter-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz",
+ "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "pouchdb-merge": "7.0.0",
+ "pouchdb-utils": "7.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-binary-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz",
+ "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==",
+ "optional": true,
+ "dependencies": {
+ "buffer-from": "1.1.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-collections": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz",
+ "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-errors": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz",
+ "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==",
+ "optional": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-json": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz",
+ "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==",
+ "optional": true,
+ "dependencies": {
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-md5": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz",
+ "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "spark-md5": "3.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-merge": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz",
+ "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz",
+ "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.0.6",
+ "inherits": "2.0.3",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/spark-md5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+ "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "optional": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/pouchdb-all-dbs": {
+ "version": "1.1.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "es3ify": "^0.2.2",
+ "inherits": "~2.0.1",
+ "pouchdb-promise": "6.4.3",
+ "tiny-queue": "^0.2.0"
+ }
+ },
+ "node_modules/pouchdb-auth": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-auth",
+ "link": true
+ },
+ "node_modules/pouchdb-binary-utils": {
+ "resolved": "pouchdb-binary-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-browser": {
+ "resolved": "pouchdb-browser",
+ "link": true
+ },
+ "node_modules/pouchdb-bulkdocs-wrapper": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper",
+ "link": true
+ },
+ "node_modules/pouchdb-changes-filter": {
+ "resolved": "pouchdb-changes-filter",
+ "link": true
+ },
+ "node_modules/pouchdb-changeslike-wrapper": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-changeslike-wrapper",
+ "link": true
+ },
+ "node_modules/pouchdb-checkpointer": {
+ "resolved": "pouchdb-checkpointer",
+ "link": true
+ },
+ "node_modules/pouchdb-collate": {
+ "resolved": "pouchdb-collate",
+ "link": true
+ },
+ "node_modules/pouchdb-collections": {
+ "resolved": "pouchdb-collections",
+ "link": true
+ },
+ "node_modules/pouchdb-core": {
+ "resolved": "pouchdb-core",
+ "link": true
+ },
+ "node_modules/pouchdb-crypto": {
+ "resolved": "pouchdb-crypto",
+ "link": true
+ },
+ "node_modules/pouchdb-errors": {
+ "resolved": "pouchdb-errors",
+ "link": true
+ },
+ "node_modules/pouchdb-express-router": {
+ "version": "0.0.11",
+ "dev": true,
+ "license": "Apache v2",
+ "dependencies": {
+ "bluebird": "~2.3.11",
+ "body-parser": "~1.9.2",
+ "express": "~4.10.2",
+ "extend": "~2.0.0",
+ "multiparty": "~4.0.0",
+ "nodemon": "~1.2.1",
+ "raw-body": "~1.3.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/accepts": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.0.4",
+ "negotiator": "0.4.9"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/bluebird": {
+ "version": "2.3.11",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/body-parser": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "1.0.0",
+ "depd": "~1.0.0",
+ "iconv-lite": "0.4.5",
+ "media-typer": "0.3.0",
+ "on-finished": "~2.1.1",
+ "qs": "2.3.3",
+ "raw-body": "1.3.1",
+ "type-is": "~1.5.3"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/body-parser/node_modules/raw-body": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "1",
+ "iconv-lite": "0.4.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/bytes": {
+ "version": "1.0.0",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/content-disposition": {
+ "version": "0.5.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/cookie": {
+ "version": "0.1.2",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/cookie-signature": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/crc": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/debug": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "0.7.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/depd": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/destroy": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/ee-first": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/escape-html": {
+ "version": "1.0.1",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/etag": {
+ "version": "1.5.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "crc": "3.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/express": {
+ "version": "4.10.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.1.4",
+ "content-disposition": "0.5.0",
+ "cookie": "0.1.2",
+ "cookie-signature": "1.0.5",
+ "debug": "~2.1.1",
+ "depd": "~1.0.0",
+ "escape-html": "1.0.1",
+ "etag": "~1.5.1",
+ "finalhandler": "0.3.3",
+ "fresh": "0.2.4",
+ "media-typer": "0.3.0",
+ "merge-descriptors": "0.0.2",
+ "methods": "1.1.1",
+ "on-finished": "~2.2.0",
+ "parseurl": "~1.3.0",
+ "path-to-regexp": "0.1.3",
+ "proxy-addr": "~1.0.5",
+ "qs": "2.3.3",
+ "range-parser": "~1.0.2",
+ "send": "0.10.1",
+ "serve-static": "~1.7.2",
+ "type-is": "~1.5.5",
+ "utils-merge": "1.0.0",
+ "vary": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/express/node_modules/on-finished": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/extend": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/fd-slicer": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.1.3"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/finalhandler": {
+ "version": "0.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "~2.1.1",
+ "escape-html": "1.0.1",
+ "on-finished": "~2.2.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/finalhandler/node_modules/on-finished": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/forwarded": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/fresh": {
+ "version": "0.2.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/iconv-lite": {
+ "version": "0.4.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/ipaddr.js": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/merge-descriptors": {
+ "version": "0.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/methods": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime": {
+ "version": "1.2.11",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime-db": {
+ "version": "1.12.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime-types": {
+ "version": "2.0.14",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "~1.12.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/ms": {
+ "version": "0.7.0",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/multiparty": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fd-slicer": "~0.3.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/negotiator": {
+ "version": "0.4.9",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/on-finished": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/path-to-regexp": {
+ "version": "0.1.3",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/pend": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-express-router/node_modules/proxy-addr": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/qs": {
+ "version": "2.3.3",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/range-parser": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/raw-body": {
+ "version": "1.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "1.0.0",
+ "iconv-lite": "0.4.8"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/raw-body/node_modules/iconv-lite": {
+ "version": "0.4.8",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/send": {
+ "version": "0.10.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "~2.1.0",
+ "depd": "~1.0.0",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.1",
+ "etag": "~1.5.0",
+ "fresh": "0.2.4",
+ "mime": "1.2.11",
+ "ms": "0.6.2",
+ "on-finished": "~2.1.1",
+ "range-parser": "~1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/send/node_modules/ms": {
+ "version": "0.6.2",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/serve-static": {
+ "version": "1.7.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-html": "1.0.1",
+ "parseurl": "~1.3.0",
+ "send": "0.10.1",
+ "utils-merge": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/type-is": {
+ "version": "1.5.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.0.9"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/utils-merge": {
+ "version": "1.0.0",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/vary": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-fauxton": {
+ "version": "0.0.6",
+ "license": "Apache-2.0"
+ },
+ "node_modules/pouchdb-fetch": {
+ "resolved": "pouchdb-fetch",
+ "link": true
+ },
+ "node_modules/pouchdb-find": {
+ "resolved": "pouchdb-find",
+ "link": true
+ },
+ "node_modules/pouchdb-for-coverage": {
+ "resolved": "pouchdb-for-coverage",
+ "link": true
+ },
+ "node_modules/pouchdb-generate-replication-id": {
+ "resolved": "pouchdb-generate-replication-id",
+ "link": true
+ },
+ "node_modules/pouchdb-json": {
+ "resolved": "pouchdb-json",
+ "link": true
+ },
+ "node_modules/pouchdb-lib": {
+ "resolved": "pouchdb-lib",
+ "link": true
+ },
+ "node_modules/pouchdb-list": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-list",
+ "link": true
+ },
+ "node_modules/pouchdb-mapreduce": {
+ "resolved": "pouchdb-mapreduce",
+ "link": true
+ },
+ "node_modules/pouchdb-mapreduce-utils": {
+ "resolved": "pouchdb-mapreduce-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-md5": {
+ "resolved": "pouchdb-md5",
+ "link": true
+ },
+ "node_modules/pouchdb-merge": {
+ "resolved": "pouchdb-merge",
+ "link": true
+ },
+ "node_modules/pouchdb-node": {
+ "resolved": "pouchdb-node",
+ "link": true
+ },
+ "node_modules/pouchdb-platform": {
+ "resolved": "pouchdb-platform",
+ "link": true
+ },
+ "node_modules/pouchdb-plugin-error": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-plugin-error",
+ "link": true
+ },
+ "node_modules/pouchdb-promise": {
+ "version": "6.4.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "lie": "3.1.1"
+ }
+ },
+ "node_modules/pouchdb-promise/node_modules/immediate": {
+ "version": "3.0.6",
+ "license": "MIT"
+ },
+ "node_modules/pouchdb-promise/node_modules/lie": {
+ "version": "3.1.1",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/pouchdb-replication": {
+ "resolved": "pouchdb-replication",
+ "link": true
+ },
+ "node_modules/pouchdb-replicator": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-replicator",
+ "link": true
+ },
+ "node_modules/pouchdb-req-http-query": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-req-http-query",
+ "link": true
+ },
+ "node_modules/pouchdb-rewrite": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-rewrite",
+ "link": true
+ },
+ "node_modules/pouchdb-route": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-route",
+ "link": true
+ },
+ "node_modules/pouchdb-seamless-auth": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-seamless-auth",
+ "link": true
+ },
+ "node_modules/pouchdb-security": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-security",
+ "link": true
+ },
+ "node_modules/pouchdb-selector-core": {
+ "resolved": "pouchdb-selector-core",
+ "link": true
+ },
+ "node_modules/pouchdb-server": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-server",
+ "link": true
+ },
+ "node_modules/pouchdb-server-packages": {
+ "resolved": "pouchdb-server-packages",
+ "link": true
+ },
+ "node_modules/pouchdb-show": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-show",
+ "link": true
+ },
+ "node_modules/pouchdb-size": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-size",
+ "link": true
+ },
+ "node_modules/pouchdb-sublevel": {
+ "resolved": "sublevel-pouchdb",
+ "link": true
+ },
+ "node_modules/pouchdb-system-db": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-system-db",
+ "link": true
+ },
+ "node_modules/pouchdb-update": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-update",
+ "link": true
+ },
+ "node_modules/pouchdb-utils": {
+ "resolved": "pouchdb-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-validation": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-validation",
+ "link": true
+ },
+ "node_modules/pouchdb-vhost": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-vhost",
+ "link": true
+ },
+ "node_modules/pouchdb-wrappers": {
+ "resolved": "pouchdb-server-packages/packages/pouchdb-wrappers",
+ "link": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/private": {
+ "version": "0.1.8",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/promise": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "asap": "~2.0.3"
+ }
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/promise-nodify": {
+ "version": "1.0.2",
+ "license": "Apache-2.0"
+ },
+ "node_modules/promise-polyfill": {
+ "version": "8.2.3",
+ "license": "MIT"
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "license": "MIT"
+ },
+ "node_modules/ps-tree": {
+ "version": "0.0.3",
+ "dev": true,
+ "dependencies": {
+ "event-stream": "~0.5"
+ }
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "license": "MIT"
+ },
+ "node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/punycode": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.7.0",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "6.10.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "license": "MIT"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "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/random-bytes": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/random-uuid-v4": {
+ "version": "0.0.8",
+ "license": "Unlicense"
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/randomfill": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/bytes": {
+ "version": "3.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/depd": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/http-errors": {
+ "version": "2.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "license": "ISC"
+ },
+ "node_modules/raw-body/node_modules/statuses": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/toidentifier": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "optional": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/reactor": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "abend": "1.x",
+ "operation": "1.x",
+ "turnstile": "1.x"
+ }
+ },
+ "node_modules/read-only-stream": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/read-only-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/read-only-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/read-only-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "1.1.14",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/readable-stream/node_modules/isarray": {
+ "version": "0.0.1",
+ "license": "MIT"
+ },
+ "node_modules/readable-stream/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "license": "MIT"
+ },
+ "node_modules/recast": {
+ "version": "0.11.23",
+ "license": "MIT",
+ "dependencies": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/recast/node_modules/esprima": {
+ "version": "3.1.3",
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/replace": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "2.4.2",
+ "minimatch": "3.0.4",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "replace": "bin/replace.js",
+ "search": "bin/search.js"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/replace/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/node_modules/chalk": {
+ "version": "2.4.2",
+ "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/replace/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/replace/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/replace/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/replace/node_modules/find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/node_modules/locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/node_modules/minimatch": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/replace/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/replace/node_modules/p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/node_modules/yargs": {
+ "version": "15.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.79.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.3.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1",
+ "uuid": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/request/node_modules/qs": {
+ "version": "6.3.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/request/node_modules/tough-cookie": {
+ "version": "2.3.4",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/request/node_modules/uuid": {
+ "version": "3.4.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/require-uncached": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-uncached/node_modules/resolve-from": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.11.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-from": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resumer": {
+ "version": "0.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/revise": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/riffle": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.25.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-inject": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "estree-walker": "^0.6.1",
+ "magic-string": "^0.25.3",
+ "rollup-pluginutils": "^2.8.1"
+ }
+ },
+ "node_modules/rollup-plugin-inject/node_modules/estree-walker": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rollup-plugin-inject/node_modules/magic-string": {
+ "version": "0.25.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "node_modules/rollup-plugin-node-resolve": {
+ "version": "4.2.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/resolve": "0.0.8",
+ "builtin-modules": "^3.1.0",
+ "is-module": "^1.0.0",
+ "resolve": "^1.10.0"
+ }
+ },
+ "node_modules/rollup-plugin-node-resolve/node_modules/@types/resolve": {
+ "version": "0.0.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/rollup-plugin-replace": {
+ "version": "1.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "magic-string": "^0.22.4",
+ "minimatch": "^3.0.2",
+ "rollup-pluginutils": "^2.0.1"
+ }
+ },
+ "node_modules/rollup-plugin-replace/node_modules/magic-string": {
+ "version": "0.22.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "node_modules/rollup-pluginutils": {
+ "version": "2.8.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "estree-walker": "^0.6.1"
+ }
+ },
+ "node_modules/rollup-pluginutils/node_modules/estree-walker": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "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",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rx-lite": {
+ "version": "4.0.8",
+ "dev": true
+ },
+ "node_modules/rx-lite-aggregates": {
+ "version": "4.0.8",
+ "dev": true,
+ "dependencies": {
+ "rx-lite": "*"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "license": "MIT"
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test/node_modules/is-regex": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "license": "MIT"
+ },
+ "node_modules/sanitize-filename": {
+ "version": "1.6.3",
+ "license": "WTFPL OR ISC",
+ "dependencies": {
+ "truncate-utf8-bytes": "^1.0.0"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "optional": true
+ },
+ "node_modules/secure-compare": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/secure-random": {
+ "version": "1.1.2",
+ "license": "MIT"
+ },
+ "node_modules/seedrandom": {
+ "version": "3.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/selenium-standalone": {
+ "version": "6.16.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^2.6.2",
+ "commander": "^2.19.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.1.1",
+ "lodash": "^4.17.11",
+ "minimist": "^1.2.0",
+ "mkdirp": "^0.5.1",
+ "progress": "2.0.3",
+ "request": "2.88.0",
+ "tar-stream": "2.0.0",
+ "urijs": "^1.19.1",
+ "which": "^1.3.1",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "selenium-standalone": "bin/selenium-standalone",
+ "start-selenium": "bin/start-selenium"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/caseless": {
+ "version": "0.12.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/selenium-standalone/node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/debug": {
+ "version": "4.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/form-data": {
+ "version": "2.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/har-validator": {
+ "version": "5.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/http-signature": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/selenium-standalone/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/path-key": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/qs": {
+ "version": "6.5.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/request": {
+ "version": "2.88.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/semver": {
+ "version": "5.7.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/uuid": {
+ "version": "3.4.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.2",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
+ "node_modules/send": {
+ "version": "0.17.1",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.1",
+ "license": "MIT"
+ },
+ "node_modules/send/node_modules/on-finished": {
+ "version": "2.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/sentence-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "node_modules/sequester": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/serve-favicon": {
+ "version": "2.5.0",
+ "license": "MIT",
+ "dependencies": {
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "ms": "2.1.1",
+ "parseurl": "~1.3.2",
+ "safe-buffer": "5.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-favicon/node_modules/ms": {
+ "version": "2.1.1",
+ "license": "MIT"
+ },
+ "node_modules/serve-favicon/node_modules/safe-buffer": {
+ "version": "5.1.1",
+ "license": "MIT"
+ },
+ "node_modules/serve-static": {
+ "version": "1.14.1",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "license": "ISC"
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "license": "ISC"
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "dev": true,
+ "license": "(MIT AND BSD-3-Clause)",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/shasum": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "node_modules/shasum-object": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sigmund": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "license": "ISC"
+ },
+ "node_modules/simple-backoff": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "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/slash": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/sntp": {
+ "version": "1.0.9",
+ "dev": true,
+ "dependencies": {
+ "hoek": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "6.2.1",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/spark-md5": {
+ "version": "3.0.2",
+ "license": "(WTFPL OR MIT)"
+ },
+ "node_modules/splice": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/split-on-first": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/sqldown": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "^2.1.0",
+ "bluebird": "^2.3.11",
+ "debug": "^2.2.0",
+ "double-ended-queue": "^2.0.0-0",
+ "es3ify": "^0.1.3",
+ "inherits": "^2.0.1",
+ "knex": "^0.8.3",
+ "through2": "^0.6.3"
+ }
+ },
+ "node_modules/sqldown/node_modules/abstract-leveldown": {
+ "version": "2.7.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/base62": {
+ "version": "0.1.1",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sqldown/node_modules/bluebird": {
+ "version": "2.11.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sqldown/node_modules/double-ended-queue": {
+ "version": "2.0.0-0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sqldown/node_modules/es3ify": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esprima-fb": "~3001.0001.0000-dev-harmony-fb",
+ "jstransform": "~3.0.0",
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/sqldown/node_modules/esprima-fb": {
+ "version": "3001.0001.0000-dev-harmony-fb",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/isarray": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sqldown/node_modules/jstransform": {
+ "version": "3.0.0",
+ "dev": true,
+ "dependencies": {
+ "base62": "0.1.1",
+ "esprima-fb": "~3001.1.0-dev-harmony-fb",
+ "source-map": "0.1.31"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/sqldown/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/sqldown/node_modules/source-map": {
+ "version": "0.1.31",
+ "dev": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/sqldown/node_modules/through2": {
+ "version": "0.6.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/sqlite3": {
+ "version": "5.1.6",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "node-addon-api": "^4.2.0",
+ "tar": "^6.1.11"
+ },
+ "optionalDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependenciesMeta": {
+ "node-gyp": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sshpk": {
+ "version": "1.17.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sshpk/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.1",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/stream-browserify": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-browserify/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stream-browserify/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-browserify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/stream-combiner2": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-combiner2/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stream-combiner2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-combiner2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/stream-http": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/stream-http/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/stream-splicer": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-splicer/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stream-splicer/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-splicer/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/stream-to-array": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.1.0"
+ }
+ },
+ "node_modules/stream-to-promise": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bluebird": "~3.0.6",
+ "stream-to-array": "~2.3.0"
+ }
+ },
+ "node_modules/stream-to-promise/node_modules/bluebird": {
+ "version": "3.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "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/string-width": {
+ "version": "4.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/stringstream": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/subarg": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "node_modules/sublevel-pouchdb": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4",
+ "level-codec": "9.0.2",
+ "ltgt": "2.2.1",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "node_modules/sum-up": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/chalk": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/supports-color": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/superagent": {
+ "version": "3.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "component-emitter": "^1.2.0",
+ "cookiejar": "^2.1.0",
+ "debug": "^3.1.0",
+ "extend": "^3.0.0",
+ "form-data": "^2.3.1",
+ "formidable": "^1.2.0",
+ "methods": "^1.1.1",
+ "mime": "^1.4.1",
+ "qs": "^6.5.1",
+ "readable-stream": "^2.3.5"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/superagent/node_modules/debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/superagent/node_modules/form-data": {
+ "version": "2.5.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/superagent/node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/superagent/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/superagent/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/superagent/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/supertest": {
+ "version": "3.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "methods": "^1.1.2",
+ "superagent": "^3.8.3"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/syntax-error": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "node_modules/table": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "5.5.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv-keywords": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^5.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/chalk": {
+ "version": "2.4.2",
+ "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/table/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/table/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/table/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/table/node_modules/fast-deep-equal": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/table/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "0.3.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/table/node_modules/string-width": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tail": {
+ "version": "2.2.6",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/tape": {
+ "version": "4.13.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-equal": "~1.1.1",
+ "defined": "~1.0.0",
+ "dotignore": "~0.1.2",
+ "for-each": "~0.3.3",
+ "function-bind": "~1.1.1",
+ "glob": "~7.1.6",
+ "has": "~1.0.3",
+ "inherits": "~2.0.4",
+ "is-regex": "~1.0.5",
+ "minimist": "~1.2.0",
+ "object-inspect": "~1.7.0",
+ "resolve": "~1.14.2",
+ "resumer": "~0.0.0",
+ "string.prototype.trim": "~1.2.1",
+ "through": "~2.3.8"
+ },
+ "bin": {
+ "tape": "bin/tape"
+ }
+ },
+ "node_modules/tape/node_modules/glob": {
+ "version": "7.1.7",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/tape/node_modules/resolve": {
+ "version": "1.14.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.1.15",
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^2.2.0",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
+ "node_modules/terser": {
+ "version": "4.8.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "license": "MIT"
+ },
+ "node_modules/through2": {
+ "version": "3.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "node_modules/through2/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/throw-max-listeners-error": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "Apache 2"
+ },
+ "node_modules/tildify": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "user-home": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/timers-browserify": {
+ "version": "1.4.2",
+ "dev": true,
+ "dependencies": {
+ "process": "~0.11.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/timezone": {
+ "version": "0.0.48",
+ "dev": true
+ },
+ "node_modules/tiny-each-async": {
+ "version": "2.0.3",
+ "license": "MIT"
+ },
+ "node_modules/tiny-queue": {
+ "version": "0.2.0",
+ "license": "Apache 2"
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.3",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/punycode": {
+ "version": "2.3.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/universalify": {
+ "version": "0.2.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "license": "MIT"
+ },
+ "node_modules/truncate-utf8-bytes": {
+ "version": "1.0.2",
+ "license": "WTFPL",
+ "dependencies": {
+ "utf8-byte-length": "^1.0.1"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.3",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.4.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/turnstile": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cadence": "1.x",
+ "operation": "1.x"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "dev": true,
+ "license": "Unlicense"
+ },
+ "node_modules/twiddle": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ua-parser-js": {
+ "version": "0.7.24",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/uglify-es": {
+ "version": "3.3.9",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "commander": "~2.13.0",
+ "source-map": "~0.6.1"
+ },
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uglify-es/node_modules/commander": {
+ "version": "2.13.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uglify-es/node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uid-safe": {
+ "version": "2.1.5",
+ "license": "MIT",
+ "dependencies": {
+ "random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/umd": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "umd": "bin/cli.js"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undeclared-identifiers": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ },
+ "bin": {
+ "undeclared-identifiers": "bin.js"
+ }
+ },
+ "node_modules/union": {
+ "version": "0.5.0",
+ "dev": true,
+ "dependencies": {
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/update-notifier": {
+ "version": "0.1.10",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^0.4.0",
+ "configstore": "^0.3.0",
+ "request": "^2.36.0",
+ "semver": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/ansi-styles": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/chalk": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "~1.0.0",
+ "has-color": "~0.1.0",
+ "strip-ansi": "~0.1.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/semver": {
+ "version": "2.3.2",
+ "dev": true,
+ "license": "BSD",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/update-notifier/node_modules/strip-ansi": {
+ "version": "0.1.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "strip-ansi": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/upper-case": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/upper-case-first": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/uri-js/node_modules/punycode": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/urijs": {
+ "version": "1.19.11",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/url": {
+ "version": "0.11.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "license": "MIT",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/url/node_modules/qs": {
+ "version": "6.11.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/user-home": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "user-home": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/utf8-byte-length": {
+ "version": "1.0.4",
+ "license": "WTFPL"
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "license": "MIT"
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/v8flags": {
+ "version": "2.1.1",
+ "dev": true,
+ "dependencies": {
+ "user-home": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/vargs": {
+ "version": "0.1.0",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.93"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/verror/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/verror/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vestibule": {
+ "version": "1.6.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vinyl": {
+ "version": "0.2.3",
+ "dev": true,
+ "dependencies": {
+ "clone-stats": "~0.0.1"
+ },
+ "engines": {
+ "node": ">= 0.9"
+ }
+ },
+ "node_modules/vlq": {
+ "version": "0.2.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vuvuzela": {
+ "version": "1.0.3",
+ "license": "Apache-2.0"
+ },
+ "node_modules/watch-glob": {
+ "version": "0.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "gaze": "~0.5.0",
+ "globule": "~0.2.0",
+ "lodash": "~2.4.1",
+ "vinyl": "~0.2.3"
+ }
+ },
+ "node_modules/watch-glob/node_modules/lodash": {
+ "version": "2.4.2",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/wd": {
+ "version": "1.11.4",
+ "dev": true,
+ "engines": [
+ "node"
+ ],
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "archiver": "^3.0.0",
+ "async": "^2.0.0",
+ "lodash": "^4.0.0",
+ "mkdirp": "^0.5.1",
+ "q": "^1.5.1",
+ "request": "2.88.0",
+ "vargs": "^0.1.0"
+ },
+ "bin": {
+ "wd": "lib/bin.js"
+ }
+ },
+ "node_modules/wd/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/wd/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/wd/node_modules/caseless": {
+ "version": "0.12.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wd/node_modules/form-data": {
+ "version": "2.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/wd/node_modules/har-validator": {
+ "version": "5.1.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wd/node_modules/http-signature": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/wd/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/wd/node_modules/qs": {
+ "version": "6.5.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/wd/node_modules/request": {
+ "version": "2.88.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/wd/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/wd/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/wd/node_modules/uuid": {
+ "version": "3.4.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/websql": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz",
+ "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "^0.0.1",
+ "immediate": "^3.2.2",
+ "noop-fn": "^1.0.0",
+ "sqlite3": "^4.0.0",
+ "tiny-queue": "^0.2.1"
+ }
+ },
+ "node_modules/websql/node_modules/sqlite3": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz",
+ "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.11.0"
+ }
+ },
+ "node_modules/websql/node_modules/tiny-queue": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz",
+ "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A==",
+ "optional": true
+ },
+ "node_modules/whatwg-fetch": {
+ "version": "2.0.4",
+ "license": "MIT"
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "license": "ISC"
+ },
+ "node_modules/write": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mkdirp": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/write-stream": {
+ "version": "0.4.3",
+ "dependencies": {
+ "readable-stream": "~0.0.2"
+ }
+ },
+ "node_modules/write-stream/node_modules/readable-stream": {
+ "version": "0.0.4",
+ "license": "BSD"
+ },
+ "node_modules/xdg-basedir": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "user-home": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/xhr2": {
+ "version": "0.2.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/xmlhttprequest": {
+ "version": "1.8.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/xmlhttprequest-cookie": {
+ "version": "0.9.9",
+ "license": "MIT",
+ "dependencies": {
+ "xmlhttprequest": ">=1.8.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "1.3.3",
+ "dev": true,
+ "license": "MIT/X11"
+ },
+ "node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zip-stream": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "compress-commons": "^2.1.1",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/zip-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "pouchdb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-abstract-mapreduce": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-http": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-idb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-indexeddb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-leveldb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-leveldb-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-localstorage": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-memory": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-adapter-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-binary-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-browser": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-changes-filter": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-checkpointer": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-collate": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-collections": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-crypto": {},
+ "pouchdb-errors": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-fetch": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-find": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-for-coverage": {
+ "version": "7.0.0-prerelease"
+ },
+ "pouchdb-generate-replication-id": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-json": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-lib": {
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "pouchdb-mapreduce": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-mapreduce-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-md5": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-merge": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-node": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0",
+ "workspaces": [
+ "../../",
+ "../"
+ ]
+ },
+ "pouchdb-platform": {
+ "workspaces": [
+ "../*",
+ "../pouchdb-server-packages/packages/*",
+ "../../"
+ ],
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "pouchdb-platform/node_modules/couchdb-eval": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "pouchdb-plugin-error": "4.2.0"
+ }
+ },
+ "pouchdb-platform/node_modules/couchdb-objects": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "is-empty": "^1.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "random-uuid-v4": "0.0.8"
+ }
+ },
+ "pouchdb-platform/node_modules/couchdb-render": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-eval": "4.2.0",
+ "couchdb-resp-completer": "4.2.0",
+ "extend": "^3.0.0",
+ "is-empty": "^1.2.0",
+ "pouchdb-plugin-error": "4.2.0"
+ }
+ },
+ "pouchdb-platform/node_modules/couchdb-resp-completer": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "is-empty": "^1.2.0",
+ "pouchdb-plugin-error": "4.2.0"
+ }
+ },
+ "pouchdb-platform/node_modules/express-pouchdb": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "basic-auth": "^2.0.0",
+ "body-parser": "^1.16.1",
+ "compression": "^1.6.2",
+ "cookie-parser": "^1.4.3",
+ "denodeify": "^1.2.1",
+ "express": "^4.14.1",
+ "extend": "^3.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "mkdirp": "^0.5.0",
+ "multiparty": "^4.1.3",
+ "on-finished": "^2.3.0",
+ "pouchdb-all-dbs": "^1.0.2",
+ "pouchdb-auth": "4.2.0",
+ "pouchdb-collections": "^7.0.0",
+ "pouchdb-fauxton": "^0.0.6",
+ "pouchdb-find": "^7.0.0",
+ "pouchdb-list": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-replicator": "4.2.0",
+ "pouchdb-rewrite": "4.2.0",
+ "pouchdb-security": "4.2.0",
+ "pouchdb-show": "4.2.0",
+ "pouchdb-size": "4.2.0",
+ "pouchdb-update": "4.2.0",
+ "pouchdb-validation": "4.2.0",
+ "pouchdb-vhost": "4.2.0",
+ "pouchdb-wrappers": "4.2.0",
+ "raw-body": "^2.2.0",
+ "sanitize-filename": "^1.6.1",
+ "uuid": "^3.0.1"
+ }
+ },
+ "pouchdb-platform/node_modules/node-fetch": {
+ "version": "2.6.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-abstract-mapreduce": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-mapreduce-utils": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-auth": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "base64url": "^3.0.0",
+ "couchdb-calculate-session-id": "^1.1.0",
+ "crypto-lite": "^0.2.0",
+ "pouchdb-bulkdocs-wrapper": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-req-http-query": "4.2.0",
+ "pouchdb-system-db": "4.2.0",
+ "pouchdb-validation": "4.2.0",
+ "pouchdb-wrappers": "4.2.0",
+ "promise-nodify": "^1.0.2",
+ "secure-random": "^1.1.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-binary-utils": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "buffer-from": "1.1.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-bulkdocs-wrapper": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-promise": "^6.4.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-changeslike-wrapper": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "pouchdb-platform/node_modules/pouchdb-collate": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "pouchdb-platform/node_modules/pouchdb-collections": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "pouchdb-platform/node_modules/pouchdb-errors": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-fetch": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "fetch-cookie": "0.11.0",
+ "node-fetch": "2.6.7"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-find": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-abstract-mapreduce": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-selector-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-list": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-objects": "4.2.0",
+ "couchdb-render": "4.2.0",
+ "extend": "^3.0.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-req-http-query": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-mapreduce-utils": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-md5": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "spark-md5": "3.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-plugin-error": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "pouchdb-platform/node_modules/pouchdb-replicator": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "equals": "^1.0.5",
+ "extend": "^3.0.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-system-db": "4.2.0",
+ "pouchdb-validation": "4.2.0",
+ "promise-nodify": "^1.0.2",
+ "random-uuid-v4": "0.0.8"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-req-http-query": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "xmlhttprequest-cookie": "^0.9.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-rewrite": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-objects": "4.2.0",
+ "extend": "^3.0.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-req-http-query": "4.2.0",
+ "pouchdb-route": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-route": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "pouchdb-plugin-error": "4.2.0"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-security": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.0",
+ "pouchdb-bulkdocs-wrapper": "4.2.0",
+ "pouchdb-changeslike-wrapper": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-req-http-query": "4.2.0",
+ "pouchdb-wrappers": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-selector-core": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-show": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-objects": "4.2.0",
+ "couchdb-render": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-req-http-query": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-size": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bluebird": "^3.4.7",
+ "get-folder-size": "^2.0.0",
+ "pouchdb-wrappers": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-system-db": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-changeslike-wrapper": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-security": "4.2.0",
+ "pouchdb-wrappers": "4.2.0"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-update": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-eval": "4.2.0",
+ "couchdb-objects": "4.2.0",
+ "couchdb-resp-completer": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-req-http-query": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-utils": {
+ "version": "7.3.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.3.0",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "uuid": "8.3.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-utils/node_modules/uuid": {
+ "version": "8.3.2",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-validation": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "couchdb-eval": "4.2.0",
+ "couchdb-objects": "4.2.0",
+ "pouchdb-bulkdocs-wrapper": "4.2.0",
+ "pouchdb-plugin-error": "4.2.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-wrappers": "4.2.0",
+ "random-uuid-v4": "0.0.8"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-vhost": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-route": "4.2.0",
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/pouchdb-wrappers": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "promise-nodify": "^1.0.2"
+ }
+ },
+ "pouchdb-platform/node_modules/uuid": {
+ "version": "3.4.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "pouchdb-replication": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-selector-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages": {
+ "version": "4.2.0",
+ "workspaces": [
+ "../../",
+ "packages"
+ ],
+ "dependencies": {
+ "@gerhobbelt/nomnom": "^1.8.4-24",
+ "base64url": "^3.0.0",
+ "basic-auth": "^2.0.0",
+ "basic-authorization-header": "^0.2.7",
+ "bluebird": "^3.4.7",
+ "body-parser": "^1.16.1",
+ "colors": "^1.0.3",
+ "compression": "^1.6.2",
+ "cookie-parser": "^1.4.3",
+ "corser": "~2.0.0",
+ "couchdb-calculate-session-id": "^1.1.0",
+ "couchdb-log-parse": "^0.0.4",
+ "crypto-lite": "^0.2.0",
+ "denodeify": "^1.2.1",
+ "equals": "^1.0.5",
+ "express": "^4.14.1",
+ "extend": "^3.0.2",
+ "get-folder-size": "^2.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "is-empty": "^1.2.0",
+ "killable": "^1.0.0",
+ "mkdirp": "^0.5.0",
+ "multiparty": "^4.1.3",
+ "object-assign": "^4.1.0",
+ "on-finished": "^2.3.0",
+ "pouchdb": "^7.0.0",
+ "pouchdb-adapter-http": "^7.0.0",
+ "pouchdb-adapter-leveldb-core": "^7.0.0",
+ "pouchdb-adapter-memory": "^7.0.0",
+ "pouchdb-all-dbs": "^1.0.2",
+ "pouchdb-collections": "^7.0.0",
+ "pouchdb-core": "^7.0.0",
+ "pouchdb-fauxton": "^0.0.6",
+ "pouchdb-find": "^7.0.0",
+ "pouchdb-mapreduce": "^7.0.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-replication": "^7.0.0",
+ "promise-nodify": "^1.0.2",
+ "random-uuid-v4": "0.0.8",
+ "raw-body": "^2.2.0",
+ "sanitize-filename": "^1.6.1",
+ "secure-random": "^1.1.1",
+ "serve-favicon": "~2.5.0",
+ "sqlite3": "^5.1.6",
+ "tail": "^2.0.2",
+ "uuid": "^3.0.1",
+ "wordwrap": "1.0.0",
+ "xhr2": "^0.2.0",
+ "xmlhttprequest-cookie": "^0.9.2"
+ },
+ "devDependencies": {
+ "assert": "^2.0.0",
+ "browserify": "^16.3.0",
+ "builtin-modules": "^3.0.0",
+ "chai": "^4.1.2",
+ "couchdb-harness": "*",
+ "eslint": "4.18.2",
+ "find-requires": "^0.2.2",
+ "fs-extra": "^8.1.0",
+ "glob": "^7.1.1",
+ "jsondown": "^1.0.0",
+ "locket": "1.0.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.uniq": "^4.5.0",
+ "medeadown": "^1.1.1",
+ "memdown": "^1.2.4",
+ "mocha": "^5.0.0",
+ "navigator": "^1.0.1",
+ "sqldown": "^2.1.0",
+ "supertest": "^3.0.0",
+ "uglify-es": "^3.3.8"
+ },
+ "optionalDependencies": {
+ "pouchdb-adapter-leveldb": "^7.0.0",
+ "pouchdb-adapter-node-websql": "^7.0.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "pouchdb-server-packages/node_modules/acorn": {
+ "version": "5.7.4",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/acorn-jsx": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^3.0.4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/acorn-jsx/node_modules/acorn": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/ajv": {
+ "version": "5.5.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "pouchdb-server-packages/node_modules/buffer": {
+ "version": "5.7.1",
+ "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.1.13"
+ }
+ },
+ "pouchdb-server-packages/node_modules/chai": {
+ "version": "4.3.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^4.1.2",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "pouchdb-server-packages/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/commander": {
+ "version": "2.15.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "pouchdb-server-packages/node_modules/debug": {
+ "version": "3.2.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/deep-eql": {
+ "version": "4.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "pouchdb-server-packages/node_modules/diff": {
+ "version": "3.5.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/doctrine": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/eslint": {
+ "version": "4.18.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.2",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/eslint-scope": {
+ "version": "3.7.3",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/espree": {
+ "version": "3.5.4",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/esprima": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/fast-deep-equal": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/file-entry-cache": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/find-requires": {
+ "version": "0.2.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "es5-ext": "~0.10.46",
+ "esniff": "~1.1"
+ },
+ "bin": {
+ "find-requires": "bin/find-requires"
+ }
+ },
+ "pouchdb-server-packages/node_modules/flat-cache": {
+ "version": "1.3.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/globals": {
+ "version": "11.12.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/growl": {
+ "version": "1.10.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
+ "pouchdb-server-packages/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/he": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "pouchdb-server-packages/node_modules/ignore": {
+ "version": "3.3.10",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "pouchdb-server-packages/node_modules/json-schema-traverse": {
+ "version": "0.3.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "pouchdb-server-packages/node_modules/level-supports": {
+ "version": "1.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "pouchdb-server-packages/node_modules/leveldown": {
+ "version": "5.6.0",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.1",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "~4.1.0"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/levn": {
+ "version": "0.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/minimatch": {
+ "version": "3.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "pouchdb-server-packages/node_modules/mocha": {
+ "version": "5.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
+ "he": "1.1.1",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "supports-color": "5.4.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/mocha/node_modules/debug": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/mocha/node_modules/glob": {
+ "version": "7.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "pouchdb-server-packages/node_modules/mocha/node_modules/ms": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/mocha/node_modules/supports-color": {
+ "version": "5.4.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "pouchdb-server-packages/node_modules/node-fetch": {
+ "version": "2.6.7",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "pouchdb-server-packages/node_modules/node-gyp-build": {
+ "version": "4.1.1",
+ "license": "MIT",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "pouchdb-server-packages/node_modules/optionator": {
+ "version": "0.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "argsarray": "0.0.1",
+ "buffer-from": "1.1.2",
+ "clone-buffer": "1.0.0",
+ "double-ended-queue": "2.1.0-0",
+ "fetch-cookie": "0.11.0",
+ "immediate": "3.3.0",
+ "inherits": "2.0.4",
+ "level": "6.0.1",
+ "level-codec": "9.0.2",
+ "level-write-stream": "1.0.0",
+ "leveldown": "5.6.0",
+ "levelup": "4.4.0",
+ "ltgt": "2.2.1",
+ "node-fetch": "2.6.7",
+ "readable-stream": "1.1.14",
+ "spark-md5": "3.0.2",
+ "through2": "3.0.2",
+ "uuid": "8.3.2",
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-abstract-mapreduce": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-mapreduce-utils": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-adapter-http": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-adapter-leveldb": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "level": "6.0.1",
+ "level-write-stream": "1.0.0",
+ "leveldown": "5.6.0",
+ "pouchdb-adapter-leveldb-core": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1",
+ "through2": "3.0.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-adapter-leveldb-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "buffer-from": "1.1.2",
+ "double-ended-queue": "2.1.0-0",
+ "levelup": "4.4.0",
+ "pouchdb-adapter-utils": "7.3.1",
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-json": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1",
+ "sublevel-pouchdb": "7.3.1",
+ "through2": "3.0.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-adapter-memory": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "memdown": "1.4.1",
+ "pouchdb-adapter-leveldb-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-adapter-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-binary-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "buffer-from": "1.1.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-changes-filter": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-selector-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-checkpointer": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-collate": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-collections": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.4",
+ "pouchdb-changes-filter": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-errors": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-fetch": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "fetch-cookie": "0.11.0",
+ "node-fetch": "2.6.7"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-find": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-abstract-mapreduce": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-selector-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-generate-replication-id": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-md5": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-json": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-mapreduce": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-abstract-mapreduce": "7.3.1",
+ "pouchdb-mapreduce-utils": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-mapreduce-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-md5": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "spark-md5": "3.0.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-merge": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-replication": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4",
+ "pouchdb-checkpointer": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-generate-replication-id": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-selector-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.3.0",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "uuid": "8.3.2"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb-utils/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "pouchdb-server-packages/node_modules/pouchdb/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "pouchdb-server-packages/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/rimraf": {
+ "version": "2.6.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "pouchdb-server-packages/node_modules/semver": {
+ "version": "5.7.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "pouchdb-server-packages/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/type-check": {
+ "version": "0.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "pouchdb-server-packages/node_modules/type-detect": {
+ "version": "4.0.8",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "pouchdb-server-packages/node_modules/uuid": {
+ "version": "3.4.0",
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "pouchdb-server-packages/packages/couchdb-eval": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/couchdb-objects": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/couchdb-render": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/couchdb-resp-completer": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/express-pouchdb": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/http-pouchdb": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-auth": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-changeslike-wrapper": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-list": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-plugin-error": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-replicator": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-req-http-query": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-rewrite": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-route": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-seamless-auth": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-security": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-server": {
+ "license": "Apache-2.0",
+ "bin": {
+ "pouchdb-server": "bin/pouchdb-server"
+ }
+ },
+ "pouchdb-server-packages/packages/pouchdb-show": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-size": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-system-db": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-update": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-validation": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-vhost": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-server-packages/packages/pouchdb-wrappers": {
+ "license": "Apache-2.0"
+ },
+ "pouchdb-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "sublevel-pouchdb": {
+ "name": "pouchdb-sublevel",
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ }
+ }
+}
diff --git a/package.json b/packages/package.json
similarity index 88%
rename from package.json
rename to packages/package.json
index 909c50a6f1..82654b4ede 100644
--- a/package.json
+++ b/packages/package.json
@@ -1,11 +1,13 @@
{
- "name": "pouchdb-monorepo",
+ "name": "pouchdb-packages",
"version": "7.0.0-prerelease",
"homepage": "http://pouchdb.com/",
"license": "Apache-2.0",
"private": true,
+ "workspaces":["./*","pouchdb-server-packages/packages/*"],
"scripts": {
- "build": "npm run build-modules && npm run build-test",
+ "build": "echo build?",
+ "sbuild": "npm run build-modules && npm run build-test",
"build-node": "./bin/build-node.sh",
"build-modules": "node bin/build-modules.js",
"test-unit": "mocha tests/unit",
@@ -47,7 +49,7 @@
"level": "6.0.1",
"level-codec": "9.0.2",
"level-write-stream": "1.0.0",
- "leveldown": "5.6.0",
+ "leveldown": "6.1.1",
"levelup": "4.4.0",
"localstorage-down": "0.6.7",
"ltgt": "2.2.1",
@@ -62,6 +64,13 @@
"whatwg-fetch": "2.0.4"
},
"devDependencies": {
+ "@rollup/plugin-alias": "^5.0.0",
+ "@rollup/plugin-commonjs": "^25.0.1",
+ "@rollup/plugin-eslint": "^9.0.4",
+ "@rollup/plugin-inject": "^5.0.3",
+ "@rollup/plugin-json": "^6.0.0",
+ "@rollup/plugin-node-resolve": "^15.1.0",
+ "@rollup/plugin-replace": "^5.0.2",
"add-cors-to-couchdb": "0.0.6",
"body-parser": "1.19.0",
"browserify": "16.4.0",
@@ -81,6 +90,7 @@
"express-pouchdb": "4.2.0",
"find-requires": "1.0.0",
"glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
"http-server": "0.12.3",
"istanbul": "0.4.5",
"istanbul-coveralls": "1.0.3",
@@ -98,7 +108,7 @@
"query-string": "6.10.1",
"replace": "1.2.1",
"rimraf": "2.7.1",
- "rollup": "0.67.4",
+ "rollup": "^3.25.1",
"rollup-plugin-inject": "3.0.1",
"rollup-plugin-node-resolve": "4.2.4",
"rollup-plugin-replace": "1.2.1",
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/LICENSE b/packages/pouchdb-abstract-mapreduce/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-abstract-mapreduce/LICENSE
rename to packages/pouchdb-abstract-mapreduce/LICENSE
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/README.md b/packages/pouchdb-abstract-mapreduce/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-abstract-mapreduce/README.md
rename to packages/pouchdb-abstract-mapreduce/README.md
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/package.json b/packages/pouchdb-abstract-mapreduce/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-abstract-mapreduce/package.json
rename to packages/pouchdb-abstract-mapreduce/package.json
index c1cd9ca11a..a5c4e96f16 100644
--- a/packages/node_modules/pouchdb-abstract-mapreduce/package.json
+++ b/packages/pouchdb-abstract-mapreduce/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's secondary index API as an abstract module",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/createView.js b/packages/pouchdb-abstract-mapreduce/src/createView.js
similarity index 93%
rename from packages/node_modules/pouchdb-abstract-mapreduce/src/createView.js
rename to packages/pouchdb-abstract-mapreduce/src/createView.js
index 1aeeae0d13..7b38cdeb13 100644
--- a/packages/node_modules/pouchdb-abstract-mapreduce/src/createView.js
+++ b/packages/pouchdb-abstract-mapreduce/src/createView.js
@@ -1,7 +1,7 @@
import { upsert } from 'pouchdb-utils';
-import { stringMd5 } from 'pouchdb-md5';
+//import { stringMd5 } from 'pouchdb-md5';
import createViewSignature from './createViewSignature';
-
+import { stringMd5 } from 'pouchdb-crypto';
async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {
const viewSignature = createViewSignature(mapFun, reduceFun);
@@ -16,7 +16,7 @@ async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, loca
const promiseForView = sourceDB.info().then(async function (info) {
const depDbName = info.db_name + '-mrview-' +
- (temporary ? 'temp' : stringMd5(viewSignature));
+ (temporary ? 'temp' : await stringMd5(viewSignature));
// save the view name in the source db so it can be cleaned up if necessary
// (e.g. when the _design doc is deleted, remove all associated view data)
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/createViewSignature.js b/packages/pouchdb-abstract-mapreduce/src/createViewSignature.js
similarity index 100%
rename from packages/node_modules/pouchdb-abstract-mapreduce/src/createViewSignature.js
rename to packages/pouchdb-abstract-mapreduce/src/createViewSignature.js
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js b/packages/pouchdb-abstract-mapreduce/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-abstract-mapreduce/src/index.js
rename to packages/pouchdb-abstract-mapreduce/src/index.js
diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js b/packages/pouchdb-abstract-mapreduce/src/taskqueue.js
similarity index 100%
rename from packages/node_modules/pouchdb-abstract-mapreduce/src/taskqueue.js
rename to packages/pouchdb-abstract-mapreduce/src/taskqueue.js
diff --git a/packages/node_modules/pouchdb-adapter-http/LICENSE b/packages/pouchdb-adapter-http/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-http/LICENSE
rename to packages/pouchdb-adapter-http/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-http/README.md b/packages/pouchdb-adapter-http/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-http/README.md
rename to packages/pouchdb-adapter-http/README.md
diff --git a/packages/node_modules/pouchdb-adapter-http/package.json b/packages/pouchdb-adapter-http/package.json
similarity index 80%
rename from packages/node_modules/pouchdb-adapter-http/package.json
rename to packages/pouchdb-adapter-http/package.json
index 5796319c18..3d60f334a3 100644
--- a/packages/node_modules/pouchdb-adapter-http/package.json
+++ b/packages/pouchdb-adapter-http/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using HTTP (e.g. a remote CouchDB) as its data store.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/pouchdb-adapter-http/src/index.js b/packages/pouchdb-adapter-http/src/index.js
new file mode 100644
index 0000000000..3434091cf8
--- /dev/null
+++ b/packages/pouchdb-adapter-http/src/index.js
@@ -0,0 +1,1125 @@
+// // 'use strict'; is default when ESM
+
+// import pool from './promise-pool';
+// import {toBase64} from 'pouchdb-crypto';
+// import { fetch, Headers, AbortController } from 'pouchdb-fetch';
+
+// import {
+// createError,
+// BAD_ARG,
+// generateErrorFromResponse
+// } from 'pouchdb-errors';
+
+// import {
+// pick,
+// filterChange,
+// adapterFun as coreAdapterFun,
+// explainError,
+// clone,
+// parseUri,
+// bulkGetShim,
+// flatten,
+// nextTick
+// } from 'pouchdb-utils';
+
+// import {
+// binaryStringToBlobOrBuffer as binStringToBuffer,
+// base64StringToBlobOrBuffer as b64StringToBuffer,
+// blobOrBufferToBase64 as blufferToBase64
+// } from 'pouchdb-binary-utils';
+
+// const CHANGES_BATCH_SIZE = 25;
+// const MAX_SIMULTANEOUS_REVS = 50;
+// const CHANGES_TIMEOUT_BUFFER = 5000;
+// const DEFAULT_HEARTBEAT = 10000;
+
+// const supportsBulkGetMap = {};
+
+// function readAttachmentsAsBlobOrBuffer(row) {
+// const doc = row.doc || row.ok;
+// const atts = doc && doc._attachments;
+// if (!atts) {
+// return;
+// }
+// Object.keys(atts).forEach(function (filename) {
+// const att = atts[filename];
+// att.data = b64StringToBuffer(att.data, att.content_type);
+// });
+// }
+
+// function encodeDocId(id) {
+// if (/^_design/.test(id)) {
+// return '_design/' + encodeURIComponent(id.slice(8));
+// }
+// if (id.startsWith('_local/')) {
+// return '_local/' + encodeURIComponent(id.slice(7));
+// }
+// return encodeURIComponent(id);
+// }
+
+// function preprocessAttachments(doc) {
+// if (!doc._attachments || !Object.keys(doc._attachments)) {
+// return Promise.resolve();
+// }
+
+// return Promise.all(Object.keys(doc._attachments).map(function (key) {
+// const attachment = doc._attachments[key];
+// if (attachment.data && typeof attachment.data !== 'string') {
+// return new Promise(function (resolve) {
+// blufferToBase64(attachment.data, resolve);
+// }).then(function (b64) {
+// attachment.data = b64;
+// });
+// }
+// }));
+// }
+
+// function hasUrlPrefix(opts) {
+// if (!opts.prefix) {
+// return false;
+// }
+// const protocol = parseUri(opts.prefix).protocol;
+// return protocol === 'http' || protocol === 'https';
+// }
+
+// // Get all the information you possibly can about the URI given by name and
+// // return it as a suitable object.
+// function getHost(name, opts) {
+// // encode db name if opts.prefix is a url (#5574)
+// if (hasUrlPrefix(opts)) {
+// const dbName = opts.name.substr(opts.prefix.length);
+// // Ensure prefix has a trailing slash
+// const prefix = opts.prefix.replace(/\/?$/, '/');
+// name = prefix + encodeURIComponent(dbName);
+// }
+
+// const uri = parseUri(name);
+// if (uri.user || uri.password) {
+// uri.auth = {username: uri.user, password: uri.password};
+// }
+
+// // Split the path part of the URI into parts using '/' as the delimiter
+// // after removing any leading '/' and any trailing '/'
+// const parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
+
+// uri.db = parts.pop();
+// // Prevent double encoding of URI component
+// if (uri.db.indexOf('%') === -1) {
+// uri.db = encodeURIComponent(uri.db);
+// }
+
+// uri.path = parts.join('/');
+
+// return uri;
+// }
+
+// // Generate a URL with the host data given by opts and the given path
+// function genDBUrl(opts, path) {
+// return new URL({...opts, pathname: opts.db + '/' + path });
+// }
+
+// function paramsToStr(params) {
+// const paramKeys = Object.keys(params);
+// if (paramKeys.length === 0) {
+// return '';
+// }
+
+// return '?' + paramKeys.map(key => key + '=' + encodeURIComponent(params[key])).join('&');
+// }
+
+// function shouldCacheBust(opts) {
+// const ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?
+// navigator.userAgent.toLowerCase() : '';
+// const isIE = ua.indexOf('msie') !== -1;
+// const isTrident = ua.indexOf('trident') !== -1;
+// const isEdge = ua.indexOf('edge') !== -1;
+// const isGET = !('method' in opts) || opts.method === 'GET';
+// return (isIE || isTrident || isEdge) && isGET;
+// }
+
+// // Implements the PouchDB API for dealing with CouchDB instances over HTTP
+// function HttpPouch(opts, callback) {
+
+// // The functions that will be publicly available for HttpPouch
+// const api = this;
+
+// const host = getHost(opts.name, opts);
+// const dbUrl = genDBUrl(host, '');
+
+// opts = clone(opts);
+
+// const ourFetch = async function (url, options) {
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// options.credentials = 'include';
+
+// if (opts.auth || host.auth) {
+// const nAuth = opts.auth || host.auth;
+// const str = nAuth.username + ':' + nAuth.password;
+
+// const token = await toBase64(str);
+// //btoa(unescape(encodeURIComponent(str)));
+// options.headers.set('Authorization', 'Basic ' + token);
+// }
+
+// const headers = opts.headers || {};
+// Object.keys(headers).forEach(function (key) {
+// options.headers.append(key, headers[key]);
+// });
+
+// /* istanbul ignore if */
+// if (shouldCacheBust(options)) {
+// url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();
+// }
+
+// const fetchFun = opts.fetch || fetch;
+// return await fetchFun(url, options);
+// };
+
+// function adapterFun(name, fun) {
+// return (function (...args) {
+// setup().then(function () {
+// return fun.apply(this, args);
+// }).catch((e)=>args.pop()(e));
+// }).bind(api);
+// }
+
+// async function fetchJSON(url, options) {
+
+// const result = {};
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// if (!options.headers.get('Content-Type')) {
+// options.headers.set('Content-Type', 'application/json');
+// }
+// if (!options.headers.get('Accept')) {
+// options.headers.set('Accept', 'application/json');
+// }
+
+// const response = await ourFetch(url, options);
+// result.ok = response.ok;
+// result.status = response.status;
+// const json = await response.json();
+
+// result.data = json;
+// if (!result.ok) {
+// result.data.status = result.status;
+// const err = generateErrorFromResponse(result.data);
+// throw err;
+// }
+
+// if (Array.isArray(result.data)) {
+// result.data = result.data.map(function (v) {
+// if (v.error || v.missing) {
+// return generateErrorFromResponse(v);
+// } else {
+// return v;
+// }
+// });
+// }
+
+// return result;
+// }
+
+// let setupPromise;
+
+// async function setup() {
+// if (opts.skip_setup) {
+// return Promise.resolve();
+// }
+
+// // If there is a setup in process or previous successful setup
+// // done then we will use that
+// // If previous setups have been rejected we will try again
+// if (setupPromise) {
+// return setupPromise;
+// }
+
+// setupPromise = fetchJSON(dbUrl).catch(function (err) {
+// if (err && err.status && err.status === 404) {
+// // Doesnt exist, create it
+// explainError(404, 'PouchDB is just detecting if the remote exists.');
+// return fetchJSON(dbUrl, {method: 'PUT'});
+// } else {
+// return Promise.reject(err);
+// }
+// }).catch(function (err) {
+// // If we try to create a database that already exists, skipped in
+// // istanbul since its catching a race condition.
+// /* istanbul ignore if */
+// if (err && err.status && err.status === 412) {
+// return true;
+// }
+// return Promise.reject(err);
+// });
+
+// setupPromise.catch(function () {
+// setupPromise = null;
+// });
+
+// return setupPromise;
+// }
+
+// nextTick(function () {
+// callback(null, api);
+// });
+
+// api._remote = true;
+
+// /* istanbul ignore next */
+// api.type = function () {
+// return 'http';
+// };
+
+// api.id = adapterFun('id', async function (callback) {
+// let result;
+// try {
+// const response = await ourFetch(new URL(host));
+// result = await response.json();
+// } catch (err) {
+// result = {};
+// }
+
+// // Bad response or missing `uuid` should not prevent ID generation.
+// const uuid = (result && result.uuid) ? (result.uuid + host.db) : genDBUrl(host, '');
+// callback(null, uuid);
+// });
+
+// // Sends a POST request to the host calling the couchdb _compact function
+// // version: The version of CouchDB it is running
+// api.compact = adapterFun('compact', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// await fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'});
+
+// function ping() {
+// api.info(function (err, res) {
+// // CouchDB may send a "compact_running:true" if it's
+// // already compacting. PouchDB Server doesn't.
+// /* istanbul ignore else */
+// if (res && !res.compact_running) {
+// callback(null, {ok: true});
+// } else {
+// setTimeout(ping, opts.interval || 200);
+// }
+// });
+// }
+// // Ping the http if it's finished compaction
+// ping();
+// });
+
+// api.bulkGet = coreAdapterFun('bulkGet', function (opts, callback) {
+// const self = this;
+
+// async function doBulkGet(cb) {
+// const params = {};
+// if (opts.revs) {
+// params.revs = true;
+// }
+// if (opts.attachments) {
+// /* istanbul ignore next */
+// params.attachments = true;
+// }
+// if (opts.latest) {
+// params.latest = true;
+// }
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {
+// method: 'POST',
+// body: JSON.stringify({ docs: opts.docs})
+// });
+
+// if (opts.attachments && opts.binary) {
+// result.data.results.forEach(function (res) {
+// res.docs.forEach(readAttachmentsAsBlobOrBuffer);
+// });
+// }
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// }
+
+// /* istanbul ignore next */
+// function doBulkGetShim() {
+// // avoid "url too long error" by splitting up into multiple requests
+// const batchSize = MAX_SIMULTANEOUS_REVS;
+// const numBatches = Math.ceil(opts.docs.length / batchSize);
+// let numDone = 0;
+// const results = new Array(numBatches);
+
+// function onResult(batchNum) {
+// return function (err, res) {
+// // err is impossible because shim returns a list of errs in that case
+// results[batchNum] = res.results;
+// if (++numDone === numBatches) {
+// callback(null, {results: flatten(results)});
+// }
+// };
+// }
+
+// for (let i = 0; i < numBatches; i++) {
+// const subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);
+// subOpts.docs = opts.docs.slice(i * batchSize,
+// Math.min(opts.docs.length, (i + 1) * batchSize));
+// bulkGetShim(self, subOpts, onResult(i));
+// }
+// }
+
+// // mark the whole database as either supporting or not supporting _bulk_get
+// const dbUrl = new URL(host);
+// const supportsBulkGet = supportsBulkGetMap[dbUrl];
+
+// /* istanbul ignore next */
+// if (typeof supportsBulkGet !== 'boolean') {
+// // check if this database supports _bulk_get
+// doBulkGet(function (err, res) {
+// if (err) {
+// supportsBulkGetMap[dbUrl] = false;
+// explainError(
+// err.status,
+// 'PouchDB is just detecting if the remote ' +
+// 'supports the _bulk_get API.'
+// );
+// doBulkGetShim();
+// } else {
+// supportsBulkGetMap[dbUrl] = true;
+// callback(null, res);
+// }
+// });
+// } else if (supportsBulkGet) {
+// doBulkGet(callback);
+// } else {
+// doBulkGetShim();
+// }
+// });
+
+// // Calls GET on the host, which gets back a JSON string containing
+// // couchdb: A welcome string
+// // version: The version of CouchDB it is running
+// api._info = async function (callback) {
+// try {
+// await setup();
+// const response = await ourFetch(genDBUrl(host, ''));
+// const info = await response.json();
+// info.host = genDBUrl(host, '');
+// callback(null, info);
+// } catch (err) {
+// callback(err);
+// }
+// };
+
+// api.fetch = async function (path, options) {
+// await setup();
+// const url = path.substring(0, 1) === '/' ?
+// new URL(path.substring(1), new URL(host)) :
+// genDBUrl(host, path);
+// return ourFetch(url, options);
+// };
+
+// // Get the document with the given id from the database given by host.
+// // The id could be solely the _id in the database, or it may be a
+// // _design/ID or _local/ID path
+// api.get = adapterFun('get', async function (id, opts, callback) {
+// // If no options were given, set the callback to the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+
+// if (opts.revs) {
+// params.revs = true;
+// }
+
+// if (opts.revs_info) {
+// params.revs_info = true;
+// }
+
+// if (opts.latest) {
+// params.latest = true;
+// }
+
+// if (opts.open_revs) {
+// if (opts.open_revs !== "all") {
+// opts.open_revs = JSON.stringify(opts.open_revs);
+// }
+// params.open_revs = opts.open_revs;
+// }
+
+// if (opts.rev) {
+// params.rev = opts.rev;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = opts.conflicts;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = opts.update_seq;
+// }
+
+// id = encodeDocId(id);
+
+// function fetchAttachments(doc) {
+// const atts = doc._attachments;
+// const filenames = atts && Object.keys(atts);
+// if (!atts || !filenames.length) {
+// return;
+// }
+// // we fetch these manually in separate XHRs, because
+// // Sync Gateway would normally send it back as multipart/mixed,
+// // which we cannot parse. Also, this is more efficient than
+// // receiving attachments as base64-encoded strings.
+// async function fetchData(filename) {
+// const att = atts[filename];
+// const path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +
+// '?rev=' + doc._rev;
+
+// const response = await ourFetch(genDBUrl(host, path));
+
+// let blob;
+// if ('buffer' in response) {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// let data;
+// if (opts.binary) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = att.content_type;
+// }
+// data = blob;
+// } else {
+// data = await toBase64(blob);
+// // await new Promise(function (resolve) {
+// // blufferToBase64(blob, resolve);
+// // });
+// }
+
+// delete att.stub;
+// delete att.length;
+// att.data = data;
+// }
+
+// const promiseFactories = filenames.map(function (filename) {
+// return function () {
+// return fetchData(filename);
+// };
+// });
+
+// // This limits the number of parallel xhr requests to 5 any time
+// // to avoid issues with maximum browser request limits
+// return pool(promiseFactories, 5);
+// }
+
+// function fetchAllAttachments(docOrDocs) {
+// if (Array.isArray(docOrDocs)) {
+// return Promise.all(docOrDocs.map(function (doc) {
+// if (doc.ok) {
+// return fetchAttachments(doc.ok);
+// }
+// }));
+// }
+// return fetchAttachments(docOrDocs);
+// }
+
+// const url = genDBUrl(host, id + paramsToStr(params));
+// try {
+// const res = await fetchJSON(url);
+// if (opts.attachments) {
+// await fetchAllAttachments(res.data);
+// }
+// callback(null, res.data);
+// } catch (error) {
+// error.docId = id;
+// callback(error);
+// }
+// });
+
+
+// // Delete the document given by doc from the database given by host.
+// api.remove = adapterFun('remove', async function (docOrId, optsOrRev, opts, cb) {
+// let doc;
+// if (typeof optsOrRev === 'string') {
+// // id, rev, opts, callback style
+// doc = {
+// _id: docOrId,
+// _rev: optsOrRev
+// };
+// if (typeof opts === 'function') {
+// cb = opts;
+// opts = {};
+// }
+// } else {
+// // doc, opts, callback style
+// doc = docOrId;
+// if (typeof optsOrRev === 'function') {
+// cb = optsOrRev;
+// opts = {};
+// } else {
+// cb = opts;
+// opts = optsOrRev;
+// }
+// }
+
+// const rev = (doc._rev || opts.rev);
+// const url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// });
+
+// function encodeAttachmentId(attachmentId) {
+// return attachmentId.split("/").map(encodeURIComponent).join("/");
+// }
+
+// // Get the attachment
+// api.getAttachment = adapterFun('getAttachment', async function (docId, attachmentId,
+// opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// const params = opts.rev ? ('?rev=' + opts.rev) : '';
+// const url = genDBUrl(host, encodeDocId(docId)) + '/' +
+// encodeAttachmentId(attachmentId) + params;
+// let contentType;
+// try {
+// const response = await ourFetch(url, {method: 'GET'});
+
+// if (!response.ok) {
+// throw response;
+// }
+
+// contentType = response.headers.get('content-type');
+// let blob;
+// if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// // TODO: also remove
+// if (typeof process !== 'undefined' && !process.browser) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = contentType;
+// }
+// }
+// callback(null, blob);
+// } catch (err) {
+// callback(err);
+// }
+// });
+
+// // Remove the attachment given by the id and rev
+// api.removeAttachment = adapterFun('removeAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// callback,
+// ) {
+// const url = genDBUrl(host, encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Add the attachment given by blob and its contentType property
+// // to the document with the given id, the revision given by rev, and
+// // add it to the database given by host.
+// api.putAttachment = adapterFun('putAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// blob,
+// type,
+// callback,
+// ) {
+// if (typeof type === 'function') {
+// callback = type;
+// type = blob;
+// blob = rev;
+// rev = null;
+// }
+// const id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);
+// let url = genDBUrl(host, id);
+// if (rev) {
+// url += '?rev=' + rev;
+// }
+
+// if (typeof blob === 'string') {
+// // input is assumed to be a base64 string
+// let binary;
+// try {
+// binary = atob(blob);
+// } catch (err) {
+// return callback(createError(BAD_ARG,
+// 'Attachment is not a valid base64 string'));
+// }
+// blob = binary ? binStringToBuffer(binary, type) : '';
+// }
+
+// try {
+// // Add the attachment
+// const result = await fetchJSON(url, {
+// headers: new Headers({'Content-Type': type}),
+// method: 'PUT',
+// body: blob
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Update/create multiple documents given by req in the database
+// // given by host.
+// api._bulkDocs = async function (req, opts, callback) {
+// // If new_edits=false then it prevents the database from creating
+// // new revision numbers for the documents. Instead it just uses
+// // the old ones. This is used in database replication.
+// req.new_edits = opts.new_edits;
+
+// try {
+// await setup();
+// await Promise.all(req.docs.map(preprocessAttachments));
+
+// // Update/create the documents
+// const result = await fetchJSON(genDBUrl(host, '_bulk_docs'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // Update/create document
+// api._put = async function (doc, opts, callback) {
+// try {
+// await setup();
+// await preprocessAttachments(doc);
+
+// const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
+// method: 'PUT',
+// body: JSON.stringify(doc)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// error.docId = doc && doc._id;
+// callback(error);
+// }
+// };
+
+
+// // Get a listing of the documents in the database given
+// // by host and ordered by increasing id.
+// api.allDocs = adapterFun('allDocs', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+// let body;
+// let method = 'GET';
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// if (opts.include_docs) {
+// params.include_docs = true;
+// }
+
+// // added in CouchDB 1.6.0
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.key) {
+// params.key = JSON.stringify(opts.key);
+// }
+
+// if (opts.start_key) {
+// opts.startkey = opts.start_key;
+// }
+
+// if (opts.startkey) {
+// params.startkey = JSON.stringify(opts.startkey);
+// }
+
+// if (opts.end_key) {
+// opts.endkey = opts.end_key;
+// }
+
+// if (opts.endkey) {
+// params.endkey = JSON.stringify(opts.endkey);
+// }
+
+// if (typeof opts.inclusive_end !== 'undefined') {
+// params.inclusive_end = !!opts.inclusive_end;
+// }
+
+// if (typeof opts.limit !== 'undefined') {
+// params.limit = opts.limit;
+// }
+
+// if (typeof opts.skip !== 'undefined') {
+// params.skip = opts.skip;
+// }
+
+// const paramStr = paramsToStr(params);
+
+// if (typeof opts.keys !== 'undefined') {
+// method = 'POST';
+// body = {keys: opts.keys};
+// }
+
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {
+// method: method,
+// body: JSON.stringify(body)
+// });
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
+// }
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Get a list of changes made to documents in the database given by host.
+// // TODO According to the README, there should be two other methods here,
+// // api.changes.addListener and api.changes.removeListener.
+// api._changes = function (opts) {
+
+// // We internally page the results of a changes request, this means
+// // if there is a large set of changes to be returned we can start
+// // processing them quicker instead of waiting on the entire
+// // set of changes to return and attempting to process them at once
+// const batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;
+
+// opts = clone(opts);
+
+// if (opts.continuous && !('heartbeat' in opts)) {
+// opts.heartbeat = DEFAULT_HEARTBEAT;
+// }
+
+// let requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;
+
+// // ensure CHANGES_TIMEOUT_BUFFER applies
+// if ('timeout' in opts && opts.timeout &&
+// (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// /* istanbul ignore if */
+// if ('heartbeat' in opts && opts.heartbeat &&
+// (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// const params = {};
+// if ('timeout' in opts && opts.timeout) {
+// params.timeout = opts.timeout;
+// }
+
+// const limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;
+// let leftToFetch = limit;
+
+// if (opts.style) {
+// params.style = opts.style;
+// }
+
+// if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {
+// params.include_docs = true;
+// }
+
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.continuous) {
+// params.feed = 'longpoll';
+// }
+
+// if (opts.seq_interval) {
+// params.seq_interval = opts.seq_interval;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if ('heartbeat' in opts) {
+// // If the heartbeat value is false, it disables the default heartbeat
+// if (opts.heartbeat) {
+// params.heartbeat = opts.heartbeat;
+// }
+// }
+
+// if (opts.filter && typeof opts.filter === 'string') {
+// params.filter = opts.filter;
+// }
+
+// if (opts.view && typeof opts.view === 'string') {
+// params.filter = '_view';
+// params.view = opts.view;
+// }
+
+// // If opts.query_params exists, pass it through to the changes request.
+// // These parameters may be used by the filter on the source database.
+// if (opts.query_params && typeof opts.query_params === 'object') {
+// for (const param_name in opts.query_params) {
+// /* istanbul ignore else */
+// if (Object.prototype.hasOwnProperty.call(opts.query_params, param_name)) {
+// params[param_name] = opts.query_params[param_name];
+// }
+// }
+// }
+
+// let method = 'GET';
+// let body;
+
+// if (opts.doc_ids) {
+// // set this automagically for the user; it's annoying that couchdb
+// // requires both a "filter" and a "doc_ids" param.
+// params.filter = '_doc_ids';
+// method = 'POST';
+// body = {doc_ids: opts.doc_ids };
+// }
+// /* istanbul ignore next */
+// else if (opts.selector) {
+// // set this automagically for the user, similar to above
+// params.filter = '_selector';
+// method = 'POST';
+// body = {selector: opts.selector };
+// }
+
+// const controller = new AbortController();
+// let lastFetchedSeq;
+
+// // Get all the changes starting wtih the one immediately after the
+// // sequence number given by since.
+// const fetchData = async function (since, callback) {
+// if (opts.aborted) {
+// return;
+// }
+// params.since = since;
+// // "since" can be any kind of json object in Cloudant/CouchDB 2.x
+// /* istanbul ignore next */
+// if (typeof params.since === "object") {
+// params.since = JSON.stringify(params.since);
+// }
+
+// if (opts.descending) {
+// if (limit) {
+// params.limit = leftToFetch;
+// }
+// } else {
+// params.limit = (!limit || leftToFetch > batchSize) ?
+// batchSize : leftToFetch;
+// }
+
+// // Set the options for the ajax call
+// const url = genDBUrl(host, '_changes' + paramsToStr(params));
+// const fetchOpts = {
+// signal: controller.signal,
+// method: method,
+// body: JSON.stringify(body)
+// };
+// lastFetchedSeq = since;
+
+// /* istanbul ignore if */
+// if (opts.aborted) {
+// return;
+// }
+
+// // Get the changes
+// try {
+// await setup();
+// const result = await fetchJSON(url, fetchOpts);
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // If opts.since exists, get all the changes from the sequence
+// // number given by opts.since. Otherwise, get all the changes
+// // from the sequence number 0.
+// const results = {results: []};
+
+// const fetched = function (err, res) {
+// if (opts.aborted) {
+// return;
+// }
+// let raw_results_length = 0;
+// // If the result of the ajax call (res) contains changes (res.results)
+// if (res && res.results) {
+// raw_results_length = res.results.length;
+// results.last_seq = res.last_seq;
+// let pending = null;
+// let lastSeq = null;
+// // Attach 'pending' property if server supports it (CouchDB 2.0+)
+// /* istanbul ignore if */
+// if (typeof res.pending === 'number') {
+// pending = res.pending;
+// }
+// if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {
+// lastSeq = results.last_seq;
+// }
+// // For each change
+// const req = {};
+// req.query = opts.query_params;
+// res.results = res.results.filter(function (c) {
+// leftToFetch--;
+// const ret = filterChange(opts)(c);
+// if (ret) {
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// readAttachmentsAsBlobOrBuffer(c);
+// }
+// if (opts.return_docs) {
+// results.results.push(c);
+// }
+// opts.onChange(c, pending, lastSeq);
+// }
+// return ret;
+// });
+// } else if (err) {
+// // In case of an error, stop listening for changes and call
+// // opts.complete
+// opts.aborted = true;
+// opts.complete(err);
+// return;
+// }
+
+// // The changes feed may have timed out with no results
+// // if so reuse last update sequence
+// if (res && res.last_seq) {
+// lastFetchedSeq = res.last_seq;
+// }
+
+// const finished = (limit && leftToFetch <= 0) ||
+// (res && raw_results_length < batchSize) ||
+// (opts.descending);
+
+// if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {
+// // Queue a call to fetch again with the newest sequence number
+// nextTick(function () { fetchData(lastFetchedSeq, fetched); });
+// } else {
+// // We're done, call the callback
+// opts.complete(null, results);
+// }
+// };
+
+// fetchData(opts.since || 0, fetched);
+
+// // Return a method to cancel this method from processing any more
+// return {
+// cancel: function () {
+// opts.aborted = true;
+// controller.abort();
+// }
+// };
+// };
+
+// // Given a set of document/revision IDs (given by req), tets the subset of
+// // those that do NOT correspond to revisions stored in the database.
+// // See http://wiki.apache.org/couchdb/HttpPostRevsDiff
+// api.revsDiff = adapterFun('revsDiff', async function (req, opts, callback) {
+// // If no options were given, set the callback to be the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+
+// try {
+// // Get the missing document/revision IDs
+// const result = await fetchJSON(genDBUrl(host, '_revs_diff'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// api._close = function (callback) {
+// callback();
+// };
+
+// api._destroy = async function (options, callback) {
+// try {
+// const json = await fetchJSON(genDBUrl(host, ''), {method: 'DELETE'});
+// callback(null, json);
+// } catch (error) {
+// if (error.status === 404) {
+// callback(null, {ok: true});
+// } else {
+// callback(error);
+// }
+// }
+// };
+// }
+
+// // HttpPouch is a valid adapter.
+// HttpPouch.valid = function () {
+// return true;
+// };
+
+// export default function (PouchDB) {
+// PouchDB.adapter('http', HttpPouch, false);
+// PouchDB.adapter('https', HttpPouch, false);
+// }
+export default {}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-http/src/promise-pool.js b/packages/pouchdb-adapter-http/src/promise-pool.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-http/src/promise-pool.js
rename to packages/pouchdb-adapter-http/src/promise-pool.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/LICENSE b/packages/pouchdb-adapter-idb/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/LICENSE
rename to packages/pouchdb-adapter-idb/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-idb/README.md b/packages/pouchdb-adapter-idb/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/README.md
rename to packages/pouchdb-adapter-idb/README.md
diff --git a/packages/node_modules/pouchdb-adapter-idb/package.json b/packages/pouchdb-adapter-idb/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-adapter-idb/package.json
rename to packages/pouchdb-adapter-idb/package.json
index 5750a83a8f..92b0769a32 100644
--- a/packages/node_modules/pouchdb-adapter-idb/package.json
+++ b/packages/pouchdb-adapter-idb/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using IndexedDB as its data store.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/allDocs.js b/packages/pouchdb-adapter-idb/src/allDocs.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-idb/src/allDocs.js
rename to packages/pouchdb-adapter-idb/src/allDocs.js
index 3508efc084..29981f9acd 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/allDocs.js
+++ b/packages/pouchdb-adapter-idb/src/allDocs.js
@@ -5,7 +5,7 @@ import {
BY_SEQ_STORE,
DOC_STORE,
META_STORE
-} from './constants';
+} from './constants.js';
import {
decodeDoc,
decodeMetadata,
@@ -13,9 +13,9 @@ import {
postProcessAttachments,
openTransactionSafely,
idbError
-} from './utils';
-import runBatchedCursor from './runBatchedCursor';
-import getAll from './getAll';
+} from './utils.js';
+import runBatchedCursor from './runBatchedCursor.js';
+import getAll from './getAll.js';
function allDocsKeys(keys, docStore, onBatch) {
// It's not guaranted to be returned in right order
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js b/packages/pouchdb-adapter-idb/src/blobSupport.js
similarity index 94%
rename from packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js
rename to packages/pouchdb-adapter-idb/src/blobSupport.js
index a9f3c3e213..ea29b7709e 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js
+++ b/packages/pouchdb-adapter-idb/src/blobSupport.js
@@ -1,4 +1,3 @@
-import { blob as createBlob } from 'pouchdb-binary-utils';
import { DETECT_BLOB_SUPPORT_STORE } from './constants';
//
@@ -15,7 +14,7 @@ import { DETECT_BLOB_SUPPORT_STORE } from './constants';
//
function checkBlobSupport(txn) {
return new Promise(function (resolve) {
- var blob = createBlob(['']);
+ var blob = new Blob(['']);
var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');
req.onsuccess = function () {
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js b/packages/pouchdb-adapter-idb/src/bulkDocs.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/bulkDocs.js
rename to packages/pouchdb-adapter-idb/src/bulkDocs.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/changes.js b/packages/pouchdb-adapter-idb/src/changes.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/changes.js
rename to packages/pouchdb-adapter-idb/src/changes.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/changesHandler.js b/packages/pouchdb-adapter-idb/src/changesHandler.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/changesHandler.js
rename to packages/pouchdb-adapter-idb/src/changesHandler.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/constants.js b/packages/pouchdb-adapter-idb/src/constants.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/constants.js
rename to packages/pouchdb-adapter-idb/src/constants.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/countDocs.js b/packages/pouchdb-adapter-idb/src/countDocs.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/countDocs.js
rename to packages/pouchdb-adapter-idb/src/countDocs.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/getAll.js b/packages/pouchdb-adapter-idb/src/getAll.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/getAll.js
rename to packages/pouchdb-adapter-idb/src/getAll.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/index.js b/packages/pouchdb-adapter-idb/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/index.js
rename to packages/pouchdb-adapter-idb/src/index.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/runBatchedCursor.js b/packages/pouchdb-adapter-idb/src/runBatchedCursor.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/runBatchedCursor.js
rename to packages/pouchdb-adapter-idb/src/runBatchedCursor.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/taskQueue.js b/packages/pouchdb-adapter-idb/src/taskQueue.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-idb/src/taskQueue.js
rename to packages/pouchdb-adapter-idb/src/taskQueue.js
diff --git a/packages/node_modules/pouchdb-adapter-idb/src/utils.js b/packages/pouchdb-adapter-idb/src/utils.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-idb/src/utils.js
rename to packages/pouchdb-adapter-idb/src/utils.js
index baeb990fda..42543fadad 100644
--- a/packages/node_modules/pouchdb-adapter-idb/src/utils.js
+++ b/packages/pouchdb-adapter-idb/src/utils.js
@@ -8,10 +8,8 @@ import {
safeJsonStringify
} from 'pouchdb-json';
import {
- btoa,
readAsBinaryString,
base64StringToBlobOrBuffer as b64StringToBlob,
- blob as createBlob
} from 'pouchdb-binary-utils';
import { ATTACH_AND_SEQ_STORE, ATTACH_STORE, BY_SEQ_STORE } from './constants';
@@ -72,7 +70,7 @@ function decodeDoc(doc) {
function readBlobData(body, type, asBlob, callback) {
if (asBlob) {
if (!body) {
- callback(createBlob([''], {type: type}));
+ callback(new Blob([''], {type: type}));
} else if (typeof body !== 'string') { // we have blob support
callback(body);
} else { // no blob support
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/LICENSE b/packages/pouchdb-adapter-indexeddb/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-indexeddb/LICENSE
rename to packages/pouchdb-adapter-indexeddb/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/README.md b/packages/pouchdb-adapter-indexeddb/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-indexeddb/README.md
rename to packages/pouchdb-adapter-indexeddb/README.md
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/package.json b/packages/pouchdb-adapter-indexeddb/package.json
similarity index 74%
rename from packages/node_modules/pouchdb-adapter-indexeddb/package.json
rename to packages/pouchdb-adapter-indexeddb/package.json
index 258595a9eb..2598902dda 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/package.json
+++ b/packages/pouchdb-adapter-indexeddb/package.json
@@ -3,6 +3,12 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using IndexedDB as its data store.",
"main": "./lib/index.js",
+ "module": "./src/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
@@ -10,6 +16,5 @@
"type": "git",
"url": "https://github.com/pouchdb/pouchdb.git",
"directory": "packages/node_modules/pouchdb-adapter-indexeddb"
- },
- "module": "./src/index.js"
+ }
}
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/allDocs.js b/packages/pouchdb-adapter-indexeddb/src/allDocs.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/allDocs.js
rename to packages/pouchdb-adapter-indexeddb/src/allDocs.js
index 9d07595569..a20aeae5f1 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/allDocs.js
+++ b/packages/pouchdb-adapter-indexeddb/src/allDocs.js
@@ -1,9 +1,9 @@
-'use strict';
+// 'use strict'; is default when ESM
import { createError, IDB_ERROR } from 'pouchdb-errors';
import { collectConflicts } from 'pouchdb-merge';
-import { DOC_STORE, processAttachment } from './util';
+import { DOC_STORE, processAttachment } from './util.js';
function allDocsKeys(keys, docStore, allDocsInner) {
// It's not guaranted to be returned in right order
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/bulkDocs.js b/packages/pouchdb-adapter-indexeddb/src/bulkDocs.js
similarity index 99%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/bulkDocs.js
rename to packages/pouchdb-adapter-indexeddb/src/bulkDocs.js
index aed1a5eea5..26d04f4c42 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/bulkDocs.js
+++ b/packages/pouchdb-adapter-indexeddb/src/bulkDocs.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
import {
createError,
@@ -17,7 +17,7 @@ import { parseDoc } from 'pouchdb-adapter-utils';
import { binaryMd5 as md5 } from 'pouchdb-md5';
import { winningRev as calculateWinningRev, merge, compactTree } from 'pouchdb-merge';
-import { DOC_STORE, META_STORE, idbError } from './util';
+import { DOC_STORE, META_STORE, idbError } from './util.js';
import { rewrite } from './rewrite';
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/changes.js b/packages/pouchdb-adapter-indexeddb/src/changes.js
similarity index 97%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/changes.js
rename to packages/pouchdb-adapter-indexeddb/src/changes.js
index f2b6d31f99..844daac7b0 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/changes.js
+++ b/packages/pouchdb-adapter-indexeddb/src/changes.js
@@ -1,6 +1,4 @@
-'use strict';
-
-import { DOC_STORE, processAttachment } from './util';
+import { DOC_STORE, processAttachment } from './util.js';
import { uuid, filterChange } from 'pouchdb-utils';
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/destroy.js b/packages/pouchdb-adapter-indexeddb/src/destroy.js
similarity index 97%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/destroy.js
rename to packages/pouchdb-adapter-indexeddb/src/destroy.js
index cd8dd781ee..248c7b1369 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/destroy.js
+++ b/packages/pouchdb-adapter-indexeddb/src/destroy.js
@@ -1,5 +1,3 @@
-'use strict';
-
export default function (dbOpts, openDatabases, idbChanges, callback) {
idbChanges.removeAllListeners(dbOpts.name);
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/doCompaction.js b/packages/pouchdb-adapter-indexeddb/src/doCompaction.js
similarity index 94%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/doCompaction.js
rename to packages/pouchdb-adapter-indexeddb/src/doCompaction.js
index 09be288664..4ee9bedca7 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/doCompaction.js
+++ b/packages/pouchdb-adapter-indexeddb/src/doCompaction.js
@@ -1,6 +1,6 @@
-'use strict';
+// 'use strict'; is default when ESM
-import { DOC_STORE } from './util';
+import { DOC_STORE } from './util.js';
import { traverseRevTree } from 'pouchdb-merge';
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/find.js b/packages/pouchdb-adapter-indexeddb/src/find.js
similarity index 99%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/find.js
rename to packages/pouchdb-adapter-indexeddb/src/find.js
index a9a40bf8f9..d5f2beadf1 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/find.js
+++ b/packages/pouchdb-adapter-indexeddb/src/find.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
import {
DOC_STORE,
@@ -6,7 +6,7 @@ import {
rawIndexFields,
isPartialFilterView,
naturalIndexName
-} from './util';
+} from './util.js';
import {
IDB_NULL,
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/get.js b/packages/pouchdb-adapter-indexeddb/src/get.js
similarity index 92%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/get.js
rename to packages/pouchdb-adapter-indexeddb/src/get.js
index f3e5ac6de1..0a4a0a957a 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/get.js
+++ b/packages/pouchdb-adapter-indexeddb/src/get.js
@@ -1,8 +1,8 @@
-'use strict';
+// 'use strict'; is default when ESM
import { createError, MISSING_DOC } from 'pouchdb-errors';
-import { DOC_STORE } from './util';
+import { DOC_STORE } from './util.js';
import { latest as getLatest } from 'pouchdb-merge';
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/getAttachment.js b/packages/pouchdb-adapter-indexeddb/src/getAttachment.js
similarity index 85%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/getAttachment.js
rename to packages/pouchdb-adapter-indexeddb/src/getAttachment.js
index 8bf00b5cbc..cbba30736c 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/getAttachment.js
+++ b/packages/pouchdb-adapter-indexeddb/src/getAttachment.js
@@ -1,8 +1,8 @@
-'use strict';
+// 'use strict'; is default when ESM
-import { btoa, readAsBinaryString } from 'pouchdb-binary-utils';
+import { readAsBinaryString } from 'pouchdb-binary-utils';
-import { DOC_STORE } from './util';
+import { DOC_STORE } from './util.js';
function parseAttachment(attachment, opts, cb) {
if (opts.binary) {
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/getRevisionTree.js b/packages/pouchdb-adapter-indexeddb/src/getRevisionTree.js
similarity index 84%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/getRevisionTree.js
rename to packages/pouchdb-adapter-indexeddb/src/getRevisionTree.js
index ffb334170d..46b140c9c1 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/getRevisionTree.js
+++ b/packages/pouchdb-adapter-indexeddb/src/getRevisionTree.js
@@ -1,8 +1,8 @@
-'use strict';
+// 'use strict'; is default when ESM
import { createError, MISSING_DOC } from 'pouchdb-errors';
-import {DOC_STORE} from './util';
+import {DOC_STORE} from './util.js';
export default function (txn, id, callback) {
if (txn.error) {
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js b/packages/pouchdb-adapter-indexeddb/src/index.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/index.js
rename to packages/pouchdb-adapter-indexeddb/src/index.js
index 4f4755a5ae..59b7b22d68 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/index.js
+++ b/packages/pouchdb-adapter-indexeddb/src/index.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
import { changesHandler } from 'pouchdb-utils';
import setup from './setup';
@@ -16,7 +16,7 @@ import destroy from './destroy';
import {query, viewCleanup} from './find';
import purge from './purge';
-import { DOC_STORE } from './util';
+import { DOC_STORE } from './util.js';
var ADAPTER_NAME = 'indexeddb';
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/info.js b/packages/pouchdb-adapter-indexeddb/src/info.js
similarity index 78%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/info.js
rename to packages/pouchdb-adapter-indexeddb/src/info.js
index 66a000c775..3d093299b6 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/info.js
+++ b/packages/pouchdb-adapter-indexeddb/src/info.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
export default function (metadata, callback) {
callback(null, {
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/purge.js b/packages/pouchdb-adapter-indexeddb/src/purge.js
similarity index 97%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/purge.js
rename to packages/pouchdb-adapter-indexeddb/src/purge.js
index 4a69453759..b55f750ad5 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/purge.js
+++ b/packages/pouchdb-adapter-indexeddb/src/purge.js
@@ -1,4 +1,4 @@
-import { DOC_STORE } from "pouchdb-adapter-indexeddb/src/util";
+import { DOC_STORE } from "../../pouchdb-adapter-indexeddb/src/util.js";
import { removeLeafFromTree, winningRev } from "pouchdb-merge";
function purgeAttachments(doc, revs) {
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/rewrite.js b/packages/pouchdb-adapter-indexeddb/src/rewrite.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/rewrite.js
rename to packages/pouchdb-adapter-indexeddb/src/rewrite.js
index 1c49e3fc4f..3f5821116e 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/rewrite.js
+++ b/packages/pouchdb-adapter-indexeddb/src/rewrite.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
var IDB_NULL = Number.MIN_SAFE_INTEGER;
var IDB_FALSE = Number.MIN_SAFE_INTEGER + 1;
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/setup.js b/packages/pouchdb-adapter-indexeddb/src/setup.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/setup.js
rename to packages/pouchdb-adapter-indexeddb/src/setup.js
index 672abb776c..90b331b6f8 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/setup.js
+++ b/packages/pouchdb-adapter-indexeddb/src/setup.js
@@ -1,8 +1,8 @@
-'use strict';
+// 'use strict'; is default when ESM
import { uuid } from 'pouchdb-utils';
-import { META_STORE, DOC_STORE, rawIndexFields, naturalIndexName, correctIndexFields } from './util';
+import { META_STORE, DOC_STORE, rawIndexFields, naturalIndexName, correctIndexFields } from './util.js';
//
// Core PouchDB schema version. Increment this if we, as a library, want to make
diff --git a/packages/node_modules/pouchdb-adapter-indexeddb/src/util.js b/packages/pouchdb-adapter-indexeddb/src/util.js
similarity index 96%
rename from packages/node_modules/pouchdb-adapter-indexeddb/src/util.js
rename to packages/pouchdb-adapter-indexeddb/src/util.js
index 91e923297b..96d1f47fb0 100644
--- a/packages/node_modules/pouchdb-adapter-indexeddb/src/util.js
+++ b/packages/pouchdb-adapter-indexeddb/src/util.js
@@ -1,7 +1,7 @@
-'use strict';
+// 'use strict'; is default when ESM
import { createError, IDB_ERROR } from 'pouchdb-errors';
-import { btoa, readAsBinaryString } from 'pouchdb-binary-utils';
+import { readAsBinaryString } from 'pouchdb-binary-utils';
import { sanitise } from './rewrite';
var DOC_STORE = 'docs';
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/LICENSE b/packages/pouchdb-adapter-leveldb-core/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/LICENSE
rename to packages/pouchdb-adapter-leveldb-core/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/README.md b/packages/pouchdb-adapter-leveldb-core/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/README.md
rename to packages/pouchdb-adapter-leveldb-core/README.md
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/package.json b/packages/pouchdb-adapter-leveldb-core/package.json
similarity index 60%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/package.json
rename to packages/pouchdb-adapter-leveldb-core/package.json
index d505d06186..f0b6b9eca1 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/package.json
+++ b/packages/pouchdb-adapter-leveldb-core/package.json
@@ -3,6 +3,12 @@
"version": "7.0.0-prerelease",
"description": "Core PouchDB adapter code for LevelDOWN-based adapters",
"main": "./lib/index.js",
+ "module": "./src/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
@@ -10,12 +16,5 @@
"type": "git",
"url": "https://github.com/pouchdb/pouchdb.git",
"directory": "packages/node_modules/pouchdb-adapter-leveldb-core"
- },
- "module": "./src/index.js",
- "browser": {
- "./lib/index.js": "./lib/index-browser.js",
- "./src/createEmptyBlobOrBuffer.js": "./src/createEmptyBlobOrBuffer-browser.js",
- "./src/prepareAttachmentForStorage.js": "./src/prepareAttachmentForStorage-browser.js",
- "./src/readAsBlobOrBuffer.js": "./src/readAsBlobOrBuffer-browser.js"
}
}
diff --git a/packages/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js b/packages/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js
new file mode 100644
index 0000000000..50f71f7f12
--- /dev/null
+++ b/packages/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer-browser.js
@@ -0,0 +1,5 @@
+function createEmptyBlobOrBuffer(type) {
+ return new Blob([''], {type: type});
+}
+
+export default createEmptyBlobOrBuffer;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer.js b/packages/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer.js
rename to packages/pouchdb-adapter-leveldb-core/src/createEmptyBlobOrBuffer.js
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js b/packages/pouchdb-adapter-leveldb-core/src/index.js
similarity index 99%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js
rename to packages/pouchdb-adapter-leveldb-core/src/index.js
index 88dd62a70a..a2364fd918 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/index.js
+++ b/packages/pouchdb-adapter-leveldb-core/src/index.js
@@ -30,12 +30,9 @@ import {
safeJsonStringify
} from 'pouchdb-json';
-import {
- binaryMd5
-} from 'pouchdb-md5';
+import { binaryMd5 } from 'pouchdb-md5';
import {
- atob,
binaryStringToBlobOrBuffer as binStringToBluffer
} from 'pouchdb-binary-utils';
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage-browser.js b/packages/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage-browser.js
rename to packages/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage-browser.js
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage.js b/packages/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage.js
rename to packages/pouchdb-adapter-leveldb-core/src/prepareAttachmentForStorage.js
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js b/packages/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js
similarity index 74%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js
rename to packages/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js
index 393c38a22d..8c8ea96edf 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js
+++ b/packages/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer-browser.js
@@ -1,11 +1,9 @@
-import { blob as createBlob } from 'pouchdb-binary-utils';
-
function readAsBlobOrBuffer(storedObject, type) {
// In the browser, we've stored a binary string. This now comes back as a
// browserified Node-style Buffer (implemented as a typed array),
// but we want a Blob instead.
var byteArray = new Uint8Array(storedObject);
- return createBlob([byteArray], {type: type});
+ return new Blob([byteArray], {type: type});
}
export default readAsBlobOrBuffer;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer.js b/packages/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer.js
rename to packages/pouchdb-adapter-leveldb-core/src/readAsBlobOrBuffer.js
diff --git a/packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js b/packages/pouchdb-adapter-leveldb-core/src/transaction.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb-core/src/transaction.js
rename to packages/pouchdb-adapter-leveldb-core/src/transaction.js
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/LICENSE b/packages/pouchdb-adapter-leveldb/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb/LICENSE
rename to packages/pouchdb-adapter-leveldb/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/README.md b/packages/pouchdb-adapter-leveldb/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb/README.md
rename to packages/pouchdb-adapter-leveldb/README.md
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/package.json b/packages/pouchdb-adapter-leveldb/package.json
similarity index 81%
rename from packages/node_modules/pouchdb-adapter-leveldb/package.json
rename to packages/pouchdb-adapter-leveldb/package.json
index 48629e4343..9ee9ac18b6 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb/package.json
+++ b/packages/pouchdb-adapter-leveldb/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using LevelDB as its backing store.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"browser": {
"leveldown": false
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/src/index.js b/packages/pouchdb-adapter-leveldb/src/index.js
similarity index 91%
rename from packages/node_modules/pouchdb-adapter-leveldb/src/index.js
rename to packages/pouchdb-adapter-leveldb/src/index.js
index 78c3ad6f86..95d17e03d6 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb/src/index.js
+++ b/packages/pouchdb-adapter-leveldb/src/index.js
@@ -28,11 +28,11 @@ function LevelDownPouch(opts, callback) {
}
// overrides for normal LevelDB behavior on Node
-LevelDownPouch.valid = function () {
+LevelDownPouch.valid = () => {
return true;
};
LevelDownPouch.use_prefix = false;
-export default function (PouchDB) {
+export default function LevelPouch(PouchDB) {
PouchDB.adapter('leveldb', LevelDownPouch, true);
}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/src/migrate.js b/packages/pouchdb-adapter-leveldb/src/migrate.js
similarity index 98%
rename from packages/node_modules/pouchdb-adapter-leveldb/src/migrate.js
rename to packages/pouchdb-adapter-leveldb/src/migrate.js
index 3238a15f15..ac500c6614 100644
--- a/packages/node_modules/pouchdb-adapter-leveldb/src/migrate.js
+++ b/packages/pouchdb-adapter-leveldb/src/migrate.js
@@ -1,5 +1,5 @@
-import fs from 'fs';
-import path from 'path';
+import { fs } from 'pouchdb-platform';
+import path from 'node:path';
import { isLocalId, winningRev } from 'pouchdb-merge';
import level from 'level';
import { obj as through } from 'through2';
diff --git a/packages/pouchdb-adapter-leveldb/src/package.json b/packages/pouchdb-adapter-leveldb/src/package.json
new file mode 100644
index 0000000000..1632c2c4df
--- /dev/null
+++ b/packages/pouchdb-adapter-leveldb/src/package.json
@@ -0,0 +1 @@
+{"type": "module"}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-leveldb/src/requireLeveldown.js b/packages/pouchdb-adapter-leveldb/src/requireLeveldown.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-leveldb/src/requireLeveldown.js
rename to packages/pouchdb-adapter-leveldb/src/requireLeveldown.js
diff --git a/packages/node_modules/pouchdb-adapter-localstorage/LICENSE b/packages/pouchdb-adapter-localstorage/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-localstorage/LICENSE
rename to packages/pouchdb-adapter-localstorage/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-localstorage/README.md b/packages/pouchdb-adapter-localstorage/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-localstorage/README.md
rename to packages/pouchdb-adapter-localstorage/README.md
diff --git a/packages/node_modules/pouchdb-adapter-localstorage/package.json b/packages/pouchdb-adapter-localstorage/package.json
similarity index 80%
rename from packages/node_modules/pouchdb-adapter-localstorage/package.json
rename to packages/pouchdb-adapter-localstorage/package.json
index 32648ae30c..36786f266d 100644
--- a/packages/node_modules/pouchdb-adapter-localstorage/package.json
+++ b/packages/pouchdb-adapter-localstorage/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using LocalStorage as its data store.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-adapter-localstorage/src/index.js b/packages/pouchdb-adapter-localstorage/src/index.js
similarity index 74%
rename from packages/node_modules/pouchdb-adapter-localstorage/src/index.js
rename to packages/pouchdb-adapter-localstorage/src/index.js
index 04c5c117e5..acc4b46347 100644
--- a/packages/node_modules/pouchdb-adapter-localstorage/src/index.js
+++ b/packages/pouchdb-adapter-localstorage/src/index.js
@@ -1,6 +1,4 @@
import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-
-
import localstoragedown from 'localstorage-down';
function LocalStoragePouch(opts, callback) {
@@ -12,11 +10,11 @@ function LocalStoragePouch(opts, callback) {
}
// overrides for normal LevelDB behavior on Node
-LocalStoragePouch.valid = function () {
- return typeof localStorage !== 'undefined';
-};
+LocalStoragePouch.valid = () => typeof localStorage !== 'undefined';
LocalStoragePouch.use_prefix = true;
-export default function (PouchDB) {
+const localstorageAdapter = (PouchDB) => {
PouchDB.adapter('localstorage', LocalStoragePouch, true);
-}
\ No newline at end of file
+};
+
+export default localstorageAdapter;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-memory/LICENSE b/packages/pouchdb-adapter-memory/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-memory/LICENSE
rename to packages/pouchdb-adapter-memory/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-memory/README.md b/packages/pouchdb-adapter-memory/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-memory/README.md
rename to packages/pouchdb-adapter-memory/README.md
diff --git a/packages/node_modules/pouchdb-adapter-memory/package.json b/packages/pouchdb-adapter-memory/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-adapter-memory/package.json
rename to packages/pouchdb-adapter-memory/package.json
index 69201f88bb..a3d66c4ead 100644
--- a/packages/node_modules/pouchdb-adapter-memory/package.json
+++ b/packages/pouchdb-adapter-memory/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB adapter using in-memory as its data store.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-adapter-memory/src/index.js b/packages/pouchdb-adapter-memory/src/index.js
similarity index 91%
rename from packages/node_modules/pouchdb-adapter-memory/src/index.js
rename to packages/pouchdb-adapter-memory/src/index.js
index 145aba9f79..8bc3c85439 100644
--- a/packages/node_modules/pouchdb-adapter-memory/src/index.js
+++ b/packages/pouchdb-adapter-memory/src/index.js
@@ -1,6 +1,4 @@
import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
-
-
import memdown from 'memdown';
function MemDownPouch(opts, callback) {
@@ -17,6 +15,6 @@ MemDownPouch.valid = function () {
};
MemDownPouch.use_prefix = false;
-export default function (PouchDB) {
+export default function index(PouchDB) {
PouchDB.adapter('memory', MemDownPouch, true);
}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-adapter-utils/LICENSE b/packages/pouchdb-adapter-utils/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/LICENSE
rename to packages/pouchdb-adapter-utils/LICENSE
diff --git a/packages/node_modules/pouchdb-adapter-utils/README.md b/packages/pouchdb-adapter-utils/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/README.md
rename to packages/pouchdb-adapter-utils/README.md
diff --git a/packages/node_modules/pouchdb-adapter-utils/package.json b/packages/pouchdb-adapter-utils/package.json
similarity index 78%
rename from packages/node_modules/pouchdb-adapter-utils/package.json
rename to packages/pouchdb-adapter-utils/package.json
index 6bcfc3be06..02980e780e 100644
--- a/packages/node_modules/pouchdb-adapter-utils/package.json
+++ b/packages/pouchdb-adapter-utils/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Utilities for PouchDB adapters.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/pouchdb-adapter-utils/src/allDocsKeysQuery.js b/packages/pouchdb-adapter-utils/src/allDocsKeysQuery.js
new file mode 100644
index 0000000000..51ae2a8f9c
--- /dev/null
+++ b/packages/pouchdb-adapter-utils/src/allDocsKeysQuery.js
@@ -0,0 +1,27 @@
+// eslint-disable-next-line no-unused-vars
+export async function allDocsKeysQuery(api, {limit, skip: offset, keys,...subOpts}) {
+
+ const finalResults = {
+ offset, rows: await Promise.all(keys.map(async (key) => {
+ return await new Promise((resolve) => (api._allDocs(Object.assign(
+ {key: key, deleted: 'ok'}, subOpts
+ ), (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ throw new Error(err);
+ }
+ /* istanbul ignore if */
+ if (subOpts.update_seq && res.update_seq !== undefined) {
+ finalResults.update_seq = res.update_seq;
+ }
+ finalResults.total_rows = res.total_rows;
+ resolve(res.rows[0] || {key: key, error: 'not_found'});
+ })));
+ })),
+ };
+
+ return finalResults;
+
+}
+
+export default allDocsKeysQuery;
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/index.js b/packages/pouchdb-adapter-utils/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/src/index.js
rename to packages/pouchdb-adapter-utils/src/index.js
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/parseDoc.js b/packages/pouchdb-adapter-utils/src/parseDoc.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/src/parseDoc.js
rename to packages/pouchdb-adapter-utils/src/parseDoc.js
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/preprocessAttachments.js b/packages/pouchdb-adapter-utils/src/preprocessAttachments.js
similarity index 99%
rename from packages/node_modules/pouchdb-adapter-utils/src/preprocessAttachments.js
rename to packages/pouchdb-adapter-utils/src/preprocessAttachments.js
index 515783f869..989c0e060f 100644
--- a/packages/node_modules/pouchdb-adapter-utils/src/preprocessAttachments.js
+++ b/packages/pouchdb-adapter-utils/src/preprocessAttachments.js
@@ -1,6 +1,4 @@
import {
- atob,
- btoa,
binaryStringToBlobOrBuffer as binStringToBlobOrBuffer,
blobOrBufferToBinaryString as blufferToBinaryString,
blobOrBufferToBase64 as blufferToBase64
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/processDocs.js b/packages/pouchdb-adapter-utils/src/processDocs.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/src/processDocs.js
rename to packages/pouchdb-adapter-utils/src/processDocs.js
diff --git a/packages/node_modules/pouchdb-adapter-utils/src/updateDoc.js b/packages/pouchdb-adapter-utils/src/updateDoc.js
similarity index 100%
rename from packages/node_modules/pouchdb-adapter-utils/src/updateDoc.js
rename to packages/pouchdb-adapter-utils/src/updateDoc.js
diff --git a/packages/node_modules/pouchdb-binary-utils/LICENSE b/packages/pouchdb-binary-utils/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/LICENSE
rename to packages/pouchdb-binary-utils/LICENSE
diff --git a/packages/node_modules/pouchdb-binary-utils/README.md b/packages/pouchdb-binary-utils/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/README.md
rename to packages/pouchdb-binary-utils/README.md
diff --git a/packages/node_modules/pouchdb-binary-utils/package.json b/packages/pouchdb-binary-utils/package.json
similarity index 89%
rename from packages/node_modules/pouchdb-binary-utils/package.json
rename to packages/pouchdb-binary-utils/package.json
index 4a19310e7e..530e99e9a8 100644
--- a/packages/node_modules/pouchdb-binary-utils/package.json
+++ b/packages/pouchdb-binary-utils/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB utilities for operating on binary strings and Buffers/Blobs.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-binary-utils/src/base64-browser.js b/packages/pouchdb-binary-utils/src/base64-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/base64-browser.js
rename to packages/pouchdb-binary-utils/src/base64-browser.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/base64.js b/packages/pouchdb-binary-utils/src/base64.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/base64.js
rename to packages/pouchdb-binary-utils/src/base64.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js b/packages/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js
similarity index 85%
rename from packages/node_modules/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js
rename to packages/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js
index 20a26df7b8..7e2f241a94 100644
--- a/packages/node_modules/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js
+++ b/packages/pouchdb-binary-utils/src/base64StringToBlobOrBuffer-browser.js
@@ -1,4 +1,3 @@
-import { atob } from './base64';
import binaryStringToBlobOrBuffer from './binaryStringToBlobOrBuffer';
function b64ToBluffer(b64, type) {
diff --git a/packages/node_modules/pouchdb-binary-utils/src/base64StringToBlobOrBuffer.js b/packages/pouchdb-binary-utils/src/base64StringToBlobOrBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/base64StringToBlobOrBuffer.js
rename to packages/pouchdb-binary-utils/src/base64StringToBlobOrBuffer.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/binaryStringToArrayBuffer.js b/packages/pouchdb-binary-utils/src/binaryStringToArrayBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/binaryStringToArrayBuffer.js
rename to packages/pouchdb-binary-utils/src/binaryStringToArrayBuffer.js
diff --git a/packages/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js b/packages/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js
new file mode 100644
index 0000000000..53009920fe
--- /dev/null
+++ b/packages/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer-browser.js
@@ -0,0 +1,8 @@
+//import createBlob from './blob';
+//import binaryStringToArrayBuffer from './binaryStringToArrayBuffer';
+
+function binStringToBluffer(binString, type) {
+ return new Blob(binString, {type: type});
+}
+
+export default binStringToBluffer;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer.js b/packages/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer.js
rename to packages/pouchdb-binary-utils/src/binaryStringToBlobOrBuffer.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js b/packages/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js
similarity index 83%
rename from packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js
rename to packages/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js
index 09781d5c60..6b5932cd2f 100644
--- a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js
+++ b/packages/pouchdb-binary-utils/src/blobOrBufferToBase64-browser.js
@@ -1,5 +1,5 @@
-import { btoa } from './base64';
-import blobOrBufferToBinaryString from './blobOrBufferToBinaryString';
+import { btoa } from './base64.js';
+import blobOrBufferToBinaryString from './blobOrBufferToBinaryString.js';
function blobToBase64(blobOrBuffer, callback) {
blobOrBufferToBinaryString(blobOrBuffer, function (base64) {
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBase64.js b/packages/pouchdb-binary-utils/src/blobOrBufferToBase64.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBase64.js
rename to packages/pouchdb-binary-utils/src/blobOrBufferToBase64.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBinaryString-browser.js b/packages/pouchdb-binary-utils/src/blobOrBufferToBinaryString-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/blobOrBufferToBinaryString-browser.js
rename to packages/pouchdb-binary-utils/src/blobOrBufferToBinaryString-browser.js
diff --git a/packages/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js b/packages/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js
new file mode 100644
index 0000000000..f18be1e12a
--- /dev/null
+++ b/packages/pouchdb-binary-utils/src/blobOrBufferToBinaryString.js
@@ -0,0 +1,11 @@
+const toBase64 = (arrayBuffer) => btoa(String.fromCharCode(
+ ...new Uint8Array(arrayBuffer)
+));
+
+function blobToBase64(blobOrBuffer, callback) {
+ new Response(blobOrBuffer).arrayBuffer().then(toBase64).then(
+ (b64)=>callback(null,b64),err=>callback(err));
+ //callback(blobOrBuffer.toString('binary'));
+}
+
+export default blobToBase64;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-binary-utils/src/index.js b/packages/pouchdb-binary-utils/src/index.js
similarity index 83%
rename from packages/node_modules/pouchdb-binary-utils/src/index.js
rename to packages/pouchdb-binary-utils/src/index.js
index a3c80d18e9..ff95de273f 100644
--- a/packages/node_modules/pouchdb-binary-utils/src/index.js
+++ b/packages/pouchdb-binary-utils/src/index.js
@@ -1,21 +1,19 @@
-import {atob, btoa} from './base64';
import base64StringToBlobOrBuffer from './base64StringToBlobOrBuffer';
import binaryStringToArrayBuffer from './binaryStringToArrayBuffer';
import binaryStringToBlobOrBuffer from './binaryStringToBlobOrBuffer';
-import blob from './blob';
+
import blobOrBufferToBase64 from './blobOrBufferToBase64';
import blobOrBufferToBinaryString from './blobOrBufferToBinaryString';
import readAsArrayBuffer from './readAsArrayBuffer';
import readAsBinaryString from './readAsBinaryString';
import typedBuffer from './typedBuffer';
-
+// export const atob = globalThis.atob;
+// export const btoa = globalThis.btoa;
+// export const blob = (data) => new Blob([].concat(data));
export {
- atob,
- btoa,
base64StringToBlobOrBuffer,
binaryStringToArrayBuffer,
binaryStringToBlobOrBuffer,
- blob,
blobOrBufferToBase64,
blobOrBufferToBinaryString,
readAsArrayBuffer,
diff --git a/packages/node_modules/pouchdb-binary-utils/src/readAsArrayBuffer.js b/packages/pouchdb-binary-utils/src/readAsArrayBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/readAsArrayBuffer.js
rename to packages/pouchdb-binary-utils/src/readAsArrayBuffer.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/readAsBinaryString.js b/packages/pouchdb-binary-utils/src/readAsBinaryString.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/readAsBinaryString.js
rename to packages/pouchdb-binary-utils/src/readAsBinaryString.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/typedBuffer-browser.js b/packages/pouchdb-binary-utils/src/typedBuffer-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/typedBuffer-browser.js
rename to packages/pouchdb-binary-utils/src/typedBuffer-browser.js
diff --git a/packages/node_modules/pouchdb-binary-utils/src/typedBuffer.js b/packages/pouchdb-binary-utils/src/typedBuffer.js
similarity index 100%
rename from packages/node_modules/pouchdb-binary-utils/src/typedBuffer.js
rename to packages/pouchdb-binary-utils/src/typedBuffer.js
diff --git a/packages/node_modules/pouchdb-browser/LICENSE b/packages/pouchdb-browser/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-browser/LICENSE
rename to packages/pouchdb-browser/LICENSE
diff --git a/packages/node_modules/pouchdb-browser/README.md b/packages/pouchdb-browser/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-browser/README.md
rename to packages/pouchdb-browser/README.md
diff --git a/packages/node_modules/pouchdb-browser/package.json b/packages/pouchdb-browser/package.json
similarity index 77%
rename from packages/node_modules/pouchdb-browser/package.json
rename to packages/pouchdb-browser/package.json
index 4f77428b83..14a864e8c6 100644
--- a/packages/node_modules/pouchdb-browser/package.json
+++ b/packages/pouchdb-browser/package.json
@@ -4,6 +4,11 @@
"description": "PouchDB, the browser-only edition.",
"main": "./lib/index.js",
"module": "./lib/index.es.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"author": "Dale Harvey ",
"license": "Apache-2.0",
"repository": {
diff --git a/packages/node_modules/pouchdb-browser/src/index.js b/packages/pouchdb-browser/src/index.js
similarity index 78%
rename from packages/node_modules/pouchdb-browser/src/index.js
rename to packages/pouchdb-browser/src/index.js
index 0cf1dbd7eb..5de590a626 100644
--- a/packages/node_modules/pouchdb-browser/src/index.js
+++ b/packages/pouchdb-browser/src/index.js
@@ -1,12 +1,12 @@
import PouchDB from 'pouchdb-core';
import IDBPouch from 'pouchdb-adapter-idb';
-import HttpPouch from 'pouchdb-adapter-http';
+// import HttpPouch from 'pouchdb-adapter-http';
import mapreduce from 'pouchdb-mapreduce';
import replication from 'pouchdb-replication';
PouchDB.plugin(IDBPouch)
- .plugin(HttpPouch)
+ //.plugin(HttpPouch)
.plugin(mapreduce)
.plugin(replication);
diff --git a/packages/node_modules/pouchdb-changes-filter/LICENSE b/packages/pouchdb-changes-filter/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/LICENSE
rename to packages/pouchdb-changes-filter/LICENSE
diff --git a/packages/node_modules/pouchdb-changes-filter/README.md b/packages/pouchdb-changes-filter/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/README.md
rename to packages/pouchdb-changes-filter/README.md
diff --git a/packages/node_modules/pouchdb-changes-filter/package.json b/packages/pouchdb-changes-filter/package.json
similarity index 84%
rename from packages/node_modules/pouchdb-changes-filter/package.json
rename to packages/pouchdb-changes-filter/package.json
index 33d4b77377..a74505e31f 100644
--- a/packages/node_modules/pouchdb-changes-filter/package.json
+++ b/packages/pouchdb-changes-filter/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Adds \"filter\", \"selector\", etc. to PouchDB's changes/replicate/sync APIs",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-changes-filter/src/evalFilter-browser.js b/packages/pouchdb-changes-filter/src/evalFilter-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/src/evalFilter-browser.js
rename to packages/pouchdb-changes-filter/src/evalFilter-browser.js
diff --git a/packages/node_modules/pouchdb-changes-filter/src/evalFilter.js b/packages/pouchdb-changes-filter/src/evalFilter.js
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/src/evalFilter.js
rename to packages/pouchdb-changes-filter/src/evalFilter.js
diff --git a/packages/node_modules/pouchdb-changes-filter/src/evalView-browser.js b/packages/pouchdb-changes-filter/src/evalView-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/src/evalView-browser.js
rename to packages/pouchdb-changes-filter/src/evalView-browser.js
diff --git a/packages/node_modules/pouchdb-changes-filter/src/evalView.js b/packages/pouchdb-changes-filter/src/evalView.js
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/src/evalView.js
rename to packages/pouchdb-changes-filter/src/evalView.js
diff --git a/packages/node_modules/pouchdb-changes-filter/src/index.js b/packages/pouchdb-changes-filter/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-changes-filter/src/index.js
rename to packages/pouchdb-changes-filter/src/index.js
diff --git a/packages/node_modules/pouchdb-checkpointer/LICENSE b/packages/pouchdb-checkpointer/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-checkpointer/LICENSE
rename to packages/pouchdb-checkpointer/LICENSE
diff --git a/packages/node_modules/pouchdb-checkpointer/README.md b/packages/pouchdb-checkpointer/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-checkpointer/README.md
rename to packages/pouchdb-checkpointer/README.md
diff --git a/packages/node_modules/pouchdb-checkpointer/package.json b/packages/pouchdb-checkpointer/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-checkpointer/package.json
rename to packages/pouchdb-checkpointer/package.json
index 704653f2fc..f7ec5c78ec 100644
--- a/packages/node_modules/pouchdb-checkpointer/package.json
+++ b/packages/pouchdb-checkpointer/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB tool to write a checkpoint, e.g. during replication.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-checkpointer/src/index.js b/packages/pouchdb-checkpointer/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-checkpointer/src/index.js
rename to packages/pouchdb-checkpointer/src/index.js
diff --git a/packages/node_modules/pouchdb-collate/LICENSE b/packages/pouchdb-collate/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-collate/LICENSE
rename to packages/pouchdb-collate/LICENSE
diff --git a/packages/node_modules/pouchdb-collate/README.md b/packages/pouchdb-collate/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-collate/README.md
rename to packages/pouchdb-collate/README.md
diff --git a/packages/node_modules/pouchdb-collate/package.json b/packages/pouchdb-collate/package.json
similarity index 78%
rename from packages/node_modules/pouchdb-collate/package.json
rename to packages/pouchdb-collate/package.json
index a99ea6c30b..4a13470592 100644
--- a/packages/node_modules/pouchdb-collate/package.json
+++ b/packages/pouchdb-collate/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Collation functions for PouchDB map/reduce",
"main": "lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [
"pouchdb",
"pouch",
diff --git a/packages/node_modules/pouchdb-collate/src/index.js b/packages/pouchdb-collate/src/index.js
similarity index 99%
rename from packages/node_modules/pouchdb-collate/src/index.js
rename to packages/pouchdb-collate/src/index.js
index 739d54fe26..1278f904db 100644
--- a/packages/node_modules/pouchdb-collate/src/index.js
+++ b/packages/pouchdb-collate/src/index.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
var MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE
var MAGNITUDE_DIGITS = 3; // ditto
diff --git a/packages/node_modules/pouchdb-collate/src/utils.js b/packages/pouchdb-collate/src/utils.js
similarity index 97%
rename from packages/node_modules/pouchdb-collate/src/utils.js
rename to packages/pouchdb-collate/src/utils.js
index b8e4425690..e7443d77ca 100644
--- a/packages/node_modules/pouchdb-collate/src/utils.js
+++ b/packages/pouchdb-collate/src/utils.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
function pad(str, padWith, upToLength) {
var padding = '';
diff --git a/packages/node_modules/pouchdb-collections/LICENSE b/packages/pouchdb-collections/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-collections/LICENSE
rename to packages/pouchdb-collections/LICENSE
diff --git a/packages/node_modules/pouchdb-collections/README.md b/packages/pouchdb-collections/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-collections/README.md
rename to packages/pouchdb-collections/README.md
diff --git a/packages/node_modules/pouchdb-collections/package.json b/packages/pouchdb-collections/package.json
similarity index 83%
rename from packages/node_modules/pouchdb-collections/package.json
rename to packages/pouchdb-collections/package.json
index f504fdd7bb..a9730e93dc 100644
--- a/packages/node_modules/pouchdb-collections/package.json
+++ b/packages/pouchdb-collections/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Map and Set shims for PouchDB",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [
"map",
"set",
diff --git a/packages/node_modules/pouchdb-collections/src/Map.js b/packages/pouchdb-collections/src/Map.js
similarity index 100%
rename from packages/node_modules/pouchdb-collections/src/Map.js
rename to packages/pouchdb-collections/src/Map.js
diff --git a/packages/node_modules/pouchdb-collections/src/Set.js b/packages/pouchdb-collections/src/Set.js
similarity index 95%
rename from packages/node_modules/pouchdb-collections/src/Set.js
rename to packages/pouchdb-collections/src/Set.js
index 9c2e24ecdf..8aa51132cb 100644
--- a/packages/node_modules/pouchdb-collections/src/Set.js
+++ b/packages/pouchdb-collections/src/Set.js
@@ -1,4 +1,4 @@
-import Map from './Map';
+import Map from './Map.js';
function Set(array) {
this._store = new Map();
diff --git a/packages/node_modules/pouchdb-collections/src/index.js b/packages/pouchdb-collections/src/index.js
similarity index 79%
rename from packages/node_modules/pouchdb-collections/src/index.js
rename to packages/pouchdb-collections/src/index.js
index 1d35f4a4b8..873ee7bd90 100644
--- a/packages/node_modules/pouchdb-collections/src/index.js
+++ b/packages/pouchdb-collections/src/index.js
@@ -1,8 +1,8 @@
// based on https://github.com/montagejs/collections
-import ShimmedMap from './Map';
-import ShimmedSet from './Set';
-import supportsMapAndSet from './supportsMapAndSet';
+import ShimmedMap from './Map.js';
+import ShimmedSet from './Set.js';
+import supportsMapAndSet from './supportsMapAndSet.js';
var ExportedSet;
var ExportedMap;
diff --git a/packages/node_modules/pouchdb-collections/src/supportsMapAndSet.js b/packages/pouchdb-collections/src/supportsMapAndSet.js
similarity index 100%
rename from packages/node_modules/pouchdb-collections/src/supportsMapAndSet.js
rename to packages/pouchdb-collections/src/supportsMapAndSet.js
diff --git a/packages/node_modules/pouchdb-core/LICENSE b/packages/pouchdb-core/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-core/LICENSE
rename to packages/pouchdb-core/LICENSE
diff --git a/packages/node_modules/pouchdb-core/README.md b/packages/pouchdb-core/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-core/README.md
rename to packages/pouchdb-core/README.md
diff --git a/packages/node_modules/pouchdb-core/package.json b/packages/pouchdb-core/package.json
similarity index 78%
rename from packages/node_modules/pouchdb-core/package.json
rename to packages/pouchdb-core/package.json
index 76a92b444c..596bf4b820 100644
--- a/packages/node_modules/pouchdb-core/package.json
+++ b/packages/pouchdb-core/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "The core of PouchDB as a standalone package.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-core/src/active-tasks.js b/packages/pouchdb-core/src/active-tasks.js
similarity index 100%
rename from packages/node_modules/pouchdb-core/src/active-tasks.js
rename to packages/pouchdb-core/src/active-tasks.js
diff --git a/packages/node_modules/pouchdb-core/src/adapter.js b/packages/pouchdb-core/src/adapter.js
similarity index 69%
rename from packages/node_modules/pouchdb-core/src/adapter.js
rename to packages/pouchdb-core/src/adapter.js
index 9f90ce8452..d559d59d70 100644
--- a/packages/node_modules/pouchdb-core/src/adapter.js
+++ b/packages/pouchdb-core/src/adapter.js
@@ -1,13 +1,7 @@
-import {
- rev,
- guardedConsole,
- isRemote
-} from 'pouchdb-utils';
-import EventEmitter from 'events';
-import Changes from './changes';
+import { rev, guardedConsole, isRemote } from 'pouchdb-utils';
+import Changes from './changes.js';
import {
pick,
- adapterFun,
upsert,
bulkGetShim,
invalidIdError,
@@ -36,6 +30,13 @@ import {
createError
} from 'pouchdb-errors';
+/**
+ * About Adapter FUN it is not funny
+ * we can use new Proxy to get all calls or we simple use
+ * the new message bassed api which can log for obvious reaasons
+ */
+
+
/*
* A generic pouch adapter
*/
@@ -47,7 +48,7 @@ function compare(left, right) {
// Wrapper for functions that call the bulkdocs api with a single doc,
// if the first result is an error, return an error
function yankError(callback, docId) {
- return function (err, results) {
+ return (err, results) => {
if (err || (results[0] && results[0].error)) {
err = err || results[0];
err.docId = docId;
@@ -60,15 +61,15 @@ function yankError(callback, docId) {
// clean docs given to us by the user
function cleanDocs(docs) {
- for (var i = 0; i < docs.length; i++) {
- var doc = docs[i];
+ for (let i = 0; i < docs.length; i++) {
+ const doc = docs[i];
if (doc._deleted) {
delete doc._attachments; // ignore atts for deleted docs
} else if (doc._attachments) {
// filter out extraneous keys from _attachments
- var atts = Object.keys(doc._attachments);
- for (var j = 0; j < atts.length; j++) {
- var att = atts[j];
+ const atts = Object.keys(doc._attachments);
+ for (let j = 0; j < atts.length; j++) {
+ const att = atts[j];
doc._attachments[att] = pick(doc._attachments[att],
['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);
}
@@ -77,23 +78,23 @@ function cleanDocs(docs) {
}
// compare two docs, first by _id then by _rev
-function compareByIdThenRev(a, b) {
- var idCompare = compare(a._id, b._id);
+function compareByIdThenRev({_id, _revisions}, b) {
+ const idCompare = compare(_id, b._id);
if (idCompare !== 0) {
return idCompare;
}
- var aStart = a._revisions ? a._revisions.start : 0;
- var bStart = b._revisions ? b._revisions.start : 0;
+ const aStart = _revisions ? _revisions.start : 0;
+ const bStart = b._revisions ? b._revisions.start : 0;
return compare(aStart, bStart);
}
// for every node in a revision tree computes its distance from the closest
// leaf
function computeHeight(revs) {
- var height = {};
- var edges = [];
- traverseRevTree(revs, function (isLeaf, pos, id, prnt) {
- var rev = pos + "-" + id;
+ const height = {};
+ const edges = [];
+ traverseRevTree(revs, (isLeaf, pos, id, prnt) => {
+ const rev = `${pos}-${id}`;
if (isLeaf) {
height[rev] = 0;
}
@@ -104,18 +105,18 @@ function computeHeight(revs) {
});
edges.reverse();
- edges.forEach(function (edge) {
- if (height[edge.from] === undefined) {
- height[edge.from] = 1 + height[edge.to];
+ edges.forEach(({from, to}) => {
+ if (height[from] === undefined) {
+ height[from] = 1 + height[to];
} else {
- height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);
+ height[from] = Math.min(height[from], 1 + height[to]);
}
});
return height;
}
function allDocsKeysParse(opts) {
- var keys = ('limit' in opts) ?
+ const keys = ('limit' in opts) ?
opts.keys.slice(opts.skip, opts.limit + opts.skip) :
(opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;
opts.keys = keys;
@@ -130,23 +131,21 @@ function allDocsKeysParse(opts) {
// all compaction is done in a queue, to avoid attaching
// too many listeners at once
function doNextCompaction(self) {
- var task = self._compactionQueue[0];
- var opts = task.opts;
- var callback = task.callback;
- self.get('_local/compaction').catch(function () {
- return false;
- }).then(function (doc) {
+ const task = self._compactionQueue[0];
+ const opts = task.opts;
+ const callback = task.callback;
+ self.get('_local/compaction').catch(() => false).then(doc => {
if (doc && doc.last_seq) {
opts.last_seq = doc.last_seq;
}
- self._compact(opts, function (err, res) {
+ self._compact(opts, (err, res) => {
/* istanbul ignore if */
if (err) {
callback(err);
} else {
callback(null, res);
}
- nextTick(function () {
+ nextTick(() => {
self._compactionQueue.shift();
if (self._compactionQueue.length) {
doNextCompaction(self);
@@ -157,7 +156,7 @@ function doNextCompaction(self) {
}
function appendPurgeSeq(db, docId, rev) {
- return db.get('_local/purges').then(function (doc) {
+ return db.get('_local/purges').then(doc => {
const purgeSeq = doc.purgeSeq + 1;
doc.purges.push({
docId,
@@ -169,7 +168,7 @@ function appendPurgeSeq(db, docId, rev) {
}
doc.purgeSeq = purgeSeq;
return doc;
- }).catch(function (err) {
+ }).catch(err => {
if (err.status !== 404) {
throw err;
}
@@ -182,22 +181,19 @@ function appendPurgeSeq(db, docId, rev) {
}],
purgeSeq: 0,
};
- }).then(function (doc) {
- return db.put(doc);
- });
+ }).then(doc => db.put(doc));
}
function attachmentNameError(name) {
if (name.charAt(0) === '_') {
- return name + ' is not a valid attachment name, attachment ' +
- 'names cannot start with \'_\'';
+ return `${name} is not a valid attachment name, attachment names cannot start with '_'`;
}
return false;
}
-class AbstractPouchDB extends EventEmitter {
+class AbstractPouchDB extends BroadcastChannel {
_setup() {
- this.post = adapterFun('post', function (doc, opts, callback) {
+ this.post = (doc, opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
@@ -206,9 +202,9 @@ class AbstractPouchDB extends EventEmitter {
return callback(createError(NOT_AN_OBJECT));
}
this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));
- }).bind(this);
+ };
- this.put = adapterFun('put', function (doc, opts, cb) {
+ this.put = (doc, opts, cb) => {
if (typeof opts === 'function') {
cb = opts;
opts = {};
@@ -235,8 +231,8 @@ class AbstractPouchDB extends EventEmitter {
if (opts.force && doc._rev) {
transformForceOptionToNewEditsOption();
- putDoc(function (err) {
- var result = err ? null : {ok: true, id: doc._id, rev: doc._rev};
+ putDoc(err => {
+ const result = err ? null : {ok: true, id: doc._id, rev: doc._rev};
cb(err, result);
});
} else {
@@ -244,24 +240,24 @@ class AbstractPouchDB extends EventEmitter {
}
function transformForceOptionToNewEditsOption() {
- var parts = doc._rev.split('-');
- var oldRevId = parts[1];
- var oldRevNum = parseInt(parts[0], 10);
+ const parts = doc._rev.split('-');
+ const oldRevId = parts[1];
+ const oldRevNum = parseInt(parts[0], 10);
- var newRevNum = oldRevNum + 1;
- var newRevId = rev();
+ const newRevNum = oldRevNum + 1;
+ const newRevId = rev();
doc._revisions = {
start: newRevNum,
ids: [newRevId, oldRevId]
};
- doc._rev = newRevNum + '-' + newRevId;
+ doc._rev = `${newRevNum}-${newRevId}`;
opts.new_edits = false;
}
- }).bind(this);
+ };
- this.putAttachment = adapterFun('putAttachment', function (docId, attachmentId, rev, blob, type) {
- var api = this;
+ this.putAttachment = (docId, attachmentId, rev, blob, type) => {
+ const api = this;
if (typeof type === 'function') {
type = blob;
blob = rev;
@@ -279,7 +275,7 @@ class AbstractPouchDB extends EventEmitter {
}
function createAttachment(doc) {
- var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;
+ let prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;
doc._attachments = doc._attachments || {};
doc._attachments[attachmentId] = {
content_type: type,
@@ -289,13 +285,13 @@ class AbstractPouchDB extends EventEmitter {
return api.put(doc);
}
- return api.get(docId).then(function (doc) {
+ return api.get(docId).then(doc => {
if (doc._rev !== rev) {
throw createError(REV_CONFLICT);
}
return createAttachment(doc);
- }, function (err) {
+ }, err => {
// create new doc
/* istanbul ignore else */
if (err.reason === MISSING_DOC.message) {
@@ -304,9 +300,9 @@ class AbstractPouchDB extends EventEmitter {
throw err;
}
});
- }).bind(this);
+ };
- this.removeAttachment = adapterFun('removeAttachment', function (docId, attachmentId, rev, callback) {
+ this.removeAttachment = (docId, attachmentId, rev, callback) => {
this.get(docId, (err, obj) => {
/* istanbul ignore if */
if (err) {
@@ -327,10 +323,10 @@ class AbstractPouchDB extends EventEmitter {
}
this.put(obj, callback);
});
- }).bind(this);
+ };
- this.remove = adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {
- var doc;
+ this.remove = (docOrId, optsOrRev, opts, callback) => {
+ let doc;
if (typeof optsOrRev === 'string') {
// id, rev, opts, callback style
doc = {
@@ -354,27 +350,27 @@ class AbstractPouchDB extends EventEmitter {
}
opts = opts || {};
opts.was_delete = true;
- var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};
+ const newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};
newDoc._deleted = true;
if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {
return this._removeLocal(doc, callback);
}
this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));
- }).bind(this);
+ };
- this.revsDiff = adapterFun('revsDiff', function (req, opts, callback) {
+ this.revsDiff = (req, opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
}
- var ids = Object.keys(req);
+ const ids = Object.keys(req);
if (!ids.length) {
return callback(null, {});
}
- var count = 0;
- var missing = new Map();
+ let count = 0;
+ const missing = new Map();
function addToMissing(id, revId) {
if (!missing.has(id)) {
@@ -385,31 +381,30 @@ class AbstractPouchDB extends EventEmitter {
function processDoc(id, rev_tree) {
// Is this fast enough? Maybe we should switch to a set simulated by a map
- var missingForId = req[id].slice(0);
- traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,
- opts) {
- var rev = pos + '-' + revHash;
- var idx = missingForId.indexOf(rev);
+ const missingForId = req[id].slice(0);
+ traverseRevTree(rev_tree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ const idx = missingForId.indexOf(rev);
if (idx === -1) {
return;
}
missingForId.splice(idx, 1);
/* istanbul ignore if */
- if (opts.status !== 'available') {
+ if (status !== 'available') {
addToMissing(id, rev);
}
});
// Traversing the tree is synchronous, so now `missingForId` contains
// revisions that were not found in the tree
- missingForId.forEach(function (rev) {
+ missingForId.forEach(rev => {
addToMissing(id, rev);
});
}
ids.map(function (id) {
- this._getRevisionTree(id, function (err, rev_tree) {
+ this._getRevisionTree(id, (err, rev_tree) => {
if (err && err.status === 404 && err.message === 'missing') {
missing.set(id, {missing: req[id]});
} else if (err) {
@@ -421,15 +416,15 @@ class AbstractPouchDB extends EventEmitter {
if (++count === ids.length) {
// convert LazyMap to object
- var missingObj = {};
- missing.forEach(function (value, key) {
+ const missingObj = {};
+ missing.forEach((value, key) => {
missingObj[key] = value;
});
return callback(null, missingObj);
}
});
}, this);
- }).bind(this);
+ };
// _bulk_get API for faster replication, as described in
// https://github.com/apache/couchdb-chttpd/pull/33
@@ -438,41 +433,41 @@ class AbstractPouchDB extends EventEmitter {
// for local databases (except the cost of multiple transactions, which is
// small). The http adapter overrides this in order
// to do a more efficient single HTTP request.
- this.bulkGet = adapterFun('bulkGet', function (opts, callback) {
+ this.bulkGet = (opts, callback) => {
bulkGetShim(this, opts, callback);
- }).bind(this);
+ };
// compact one document and fire callback
// by compacting we mean removing all revisions which
// are further from the leaf in revision tree than max_height
- this.compactDocument = adapterFun('compactDocument', function (docId, maxHeight, callback) {
+ this.compactDocument = (docId, maxHeight, callback) => {
this._getRevisionTree(docId, (err, revTree) => {
/* istanbul ignore if */
if (err) {
return callback(err);
}
- var height = computeHeight(revTree);
- var candidates = [];
- var revs = [];
- Object.keys(height).forEach(function (rev) {
+ const height = computeHeight(revTree);
+ const candidates = [];
+ const revs = [];
+ Object.keys(height).forEach(rev => {
if (height[rev] > maxHeight) {
candidates.push(rev);
}
});
- traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {
- var rev = pos + '-' + revHash;
- if (opts.status === 'available' && candidates.indexOf(rev) !== -1) {
+ traverseRevTree(revTree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ if (status === 'available' && candidates.includes(rev)) {
revs.push(rev);
}
});
this._doCompaction(docId, revs, callback);
});
- }).bind(this);
+ };
// compact the whole database using single document
// compaction
- this.compact = adapterFun('compact', function (opts, callback) {
+ this.compact = (opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
@@ -481,14 +476,14 @@ class AbstractPouchDB extends EventEmitter {
opts = opts || {};
this._compactionQueue = this._compactionQueue || [];
- this._compactionQueue.push({opts: opts, callback: callback});
+ this._compactionQueue.push({opts, callback});
if (this._compactionQueue.length === 1) {
doNextCompaction(this);
}
- }).bind(this);
+ };
/* Begin api wrappers. Specific functionality to storage belongs in the _[method] */
- this.get = adapterFun('get', function (id, opts, cb) {
+ this.get = (id, opts, cb) => {
if (typeof opts === 'function') {
cb = opts;
opts = {};
@@ -499,11 +494,11 @@ class AbstractPouchDB extends EventEmitter {
if (isLocalId(id) && typeof this._getLocal === 'function') {
return this._getLocal(id, cb);
}
- var leaves = [];
+ let leaves = [];
const finishOpenRevs = () => {
- var result = [];
- var count = leaves.length;
+ const result = [];
+ let count = leaves.length;
/* istanbul ignore if */
if (!count) {
return cb(null, result);
@@ -517,11 +512,11 @@ class AbstractPouchDB extends EventEmitter {
latest: opts.latest,
attachments: opts.attachments,
binary: opts.binary
- }, function (err, doc) {
+ }, (err, doc) => {
if (!err) {
// using latest=true can produce duplicates
- var existing;
- for (var i = 0, l = result.length; i < l; i++) {
+ let existing;
+ for (let i = 0, l = result.length; i < l; i++) {
if (result[i].ok && result[i].ok._rev === doc._rev) {
existing = true;
break;
@@ -543,21 +538,19 @@ class AbstractPouchDB extends EventEmitter {
if (opts.open_revs) {
if (opts.open_revs === "all") {
- this._getRevisionTree(id, function (err, rev_tree) {
+ this._getRevisionTree(id, (err, rev_tree) => {
/* istanbul ignore if */
if (err) {
return cb(err);
}
- leaves = collectLeaves(rev_tree).map(function (leaf) {
- return leaf.rev;
- });
+ leaves = collectLeaves(rev_tree).map(leaf => leaf.rev);
finishOpenRevs();
});
} else {
if (Array.isArray(opts.open_revs)) {
leaves = opts.open_revs;
- for (var i = 0; i < leaves.length; i++) {
- var l = leaves[i];
+ for (let i = 0; i < leaves.length; i++) {
+ const l = leaves[i];
// looks like it's the only thing couchdb checks
if (!(typeof (l) === "string" && /^\d+-/.test(l))) {
return cb(createError(INVALID_REV));
@@ -577,12 +570,12 @@ class AbstractPouchDB extends EventEmitter {
return cb(err);
}
- var doc = result.doc;
- var metadata = result.metadata;
- var ctx = result.ctx;
+ const doc = result.doc;
+ const metadata = result.metadata;
+ const ctx = result.ctx;
if (opts.conflicts) {
- var conflicts = collectConflicts(metadata);
+ const conflicts = collectConflicts(metadata);
if (conflicts.length) {
doc._conflicts = conflicts;
}
@@ -593,18 +586,18 @@ class AbstractPouchDB extends EventEmitter {
}
if (opts.revs || opts.revs_info) {
- var splittedRev = doc._rev.split('-');
- var revNo = parseInt(splittedRev[0], 10);
- var revHash = splittedRev[1];
+ const splittedRev = doc._rev.split('-');
+ const revNo = parseInt(splittedRev[0], 10);
+ const revHash = splittedRev[1];
- var paths = rootToLeaf(metadata.rev_tree);
- var path = null;
+ const paths = rootToLeaf(metadata.rev_tree);
+ let path = null;
- for (var i = 0; i < paths.length; i++) {
- var currentPath = paths[i];
- var hashIndex = currentPath.ids.map(function (x) { return x.id; })
+ for (let i = 0; i < paths.length; i++) {
+ const currentPath = paths[i];
+ const hashIndex = currentPath.ids.map(x => x.id)
.indexOf(revHash);
- var hashFoundAtRevPos = hashIndex === (revNo - 1);
+ const hashFoundAtRevPos = hashIndex === (revNo - 1);
if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {
path = currentPath;
@@ -618,26 +611,24 @@ class AbstractPouchDB extends EventEmitter {
return cb(err);
}
- var indexOfRev = path.ids.map(function (x) { return x.id; })
+ const indexOfRev = path.ids.map(x => x.id)
.indexOf(doc._rev.split('-')[1]) + 1;
- var howMany = path.ids.length - indexOfRev;
+ const howMany = path.ids.length - indexOfRev;
path.ids.splice(indexOfRev, howMany);
path.ids.reverse();
if (opts.revs) {
doc._revisions = {
start: (path.pos + path.ids.length) - 1,
- ids: path.ids.map(function (rev) {
- return rev.id;
- })
+ ids: path.ids.map(rev => rev.id)
};
}
if (opts.revs_info) {
- var pos = path.pos + path.ids.length;
- doc._revs_info = path.ids.map(function (rev) {
+ let pos = path.pos + path.ids.length;
+ doc._revs_info = path.ids.map(rev => {
pos--;
return {
- rev: pos + '-' + rev.id,
+ rev: `${pos}-${rev.id}`,
status: rev.opts.status
};
});
@@ -645,8 +636,8 @@ class AbstractPouchDB extends EventEmitter {
}
if (opts.attachments && doc._attachments) {
- var attachments = doc._attachments;
- var count = Object.keys(attachments).length;
+ const attachments = doc._attachments;
+ let count = Object.keys(attachments).length;
if (count === 0) {
return cb(null, doc);
}
@@ -657,9 +648,9 @@ class AbstractPouchDB extends EventEmitter {
// pass the rev through
rev: doc._rev,
binary: opts.binary,
- ctx: ctx
- }, function (err, data) {
- var att = doc._attachments[key];
+ ctx
+ }, (err, data) => {
+ const att = doc._attachments[key];
att.data = data;
delete att.stub;
delete att.length;
@@ -670,7 +661,7 @@ class AbstractPouchDB extends EventEmitter {
});
} else {
if (doc._attachments) {
- for (var key in doc._attachments) {
+ for (const key in doc._attachments) {
/* istanbul ignore else */
if (Object.prototype.hasOwnProperty.call(doc._attachments, key)) {
doc._attachments[key].stub = true;
@@ -680,32 +671,32 @@ class AbstractPouchDB extends EventEmitter {
cb(null, doc);
}
});
- }).bind(this);
+ };
// TODO: I dont like this, it forces an extra read for every
// attachment read and enforces a confusing api between
// adapter.js and the adapter implementation
- this.getAttachment = adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {
+ this.getAttachment = (docId, attachmentId, opts, callback) => {
if (opts instanceof Function) {
callback = opts;
opts = {};
}
- this._get(docId, opts, (err, res) => {
+ this._get(docId, opts, (err, {doc, ctx}) => {
if (err) {
return callback(err);
}
- if (res.doc._attachments && res.doc._attachments[attachmentId]) {
- opts.ctx = res.ctx;
+ if (doc._attachments && doc._attachments[attachmentId]) {
+ opts.ctx = ctx;
opts.binary = true;
this._getAttachment(docId, attachmentId,
- res.doc._attachments[attachmentId], opts, callback);
+ doc._attachments[attachmentId], opts, callback);
} else {
return callback(createError(MISSING_DOC));
}
});
- }).bind(this);
+ };
- this.allDocs = adapterFun('allDocs', function (opts, callback) {
+ this.allDocs = (opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
@@ -721,14 +712,11 @@ class AbstractPouchDB extends EventEmitter {
if (!Array.isArray(opts.keys)) {
return callback(new TypeError('options.keys must be an array'));
}
- var incompatibleOpt =
- ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {
- return incompatibleOpt in opts;
- })[0];
+ const incompatibleOpt =
+ ['startkey', 'endkey', 'key'].filter(incompatibleOpt => incompatibleOpt in opts)[0];
if (incompatibleOpt) {
callback(createError(QUERY_PARSE_ERROR,
- 'Query parameter `' + incompatibleOpt +
- '` is not compatible with multi-get'
+ `Query parameter \`${incompatibleOpt}\` is not compatible with multi-get`
));
return;
}
@@ -741,15 +729,15 @@ class AbstractPouchDB extends EventEmitter {
}
return this._allDocs(opts, callback);
- }).bind(this);
+ };
- this.close = adapterFun('close', function (callback) {
+ this.close = (callback) => {
this._closed = true;
- this.emit('closed');
+ this.postMessage('closed');
return this._close(callback);
- }).bind(this);
+ };
- this.info = adapterFun('info', function (callback) {
+ this.info = function (callback) {
this._info((err, info) => {
if (err) {
return callback(err);
@@ -760,13 +748,13 @@ class AbstractPouchDB extends EventEmitter {
info.adapter = this.adapter;
callback(null, info);
});
- }).bind(this);
+ };
- this.id = adapterFun('id', function (callback) {
+ this.id = (callback) => {
return this._id(callback);
- }).bind(this);
+ };
- this.bulkDocs = adapterFun('bulkDocs', function (req, opts, callback) {
+ this.bulkDocs = (req, opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
@@ -784,19 +772,19 @@ class AbstractPouchDB extends EventEmitter {
return callback(createError(MISSING_BULK_DOCS));
}
- for (var i = 0; i < req.docs.length; ++i) {
+ for (let i = 0; i < req.docs.length; ++i) {
if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {
return callback(createError(NOT_AN_OBJECT));
}
}
- var attachmentError;
- req.docs.forEach(function (doc) {
- if (doc._attachments) {
- Object.keys(doc._attachments).forEach(function (name) {
+ let attachmentError;
+ req.docs.forEach(({_attachments, _id}) => {
+ if (_attachments) {
+ Object.keys(_attachments).forEach(name => {
attachmentError = attachmentError || attachmentNameError(name);
- if (!doc._attachments[name].content_type) {
- guardedConsole('warn', 'Attachment', name, 'on document', doc._id, 'is missing content_type');
+ if (!_attachments[name].content_type) {
+ guardedConsole('warn', 'Attachment', name, 'on document', _id, 'is missing content_type');
}
});
}
@@ -814,7 +802,7 @@ class AbstractPouchDB extends EventEmitter {
}
}
- var adapter = this;
+ const adapter = this;
if (!opts.new_edits && !isRemote(adapter)) {
// ensure revisions of the same doc are sorted, so that
// the local adapter processes them correctly (#2935)
@@ -826,38 +814,34 @@ class AbstractPouchDB extends EventEmitter {
// in the case of conflicts, we want to return the _ids to the user
// however, the underlying adapter may destroy the docs array, so
// create a copy here
- var ids = req.docs.map(function (doc) {
- return doc._id;
- });
+ const ids = req.docs.map(({_id}) => _id);
- this._bulkDocs(req, opts, function (err, res) {
+ this._bulkDocs(req, opts, (err, res) => {
if (err) {
return callback(err);
}
if (!opts.new_edits) {
// this is what couch does when new_edits is false
- res = res.filter(function (x) {
- return x.error;
- });
+ res = res.filter(({error}) => error);
}
// add ids for error/conflict responses (not required for CouchDB)
if (!isRemote(adapter)) {
- for (var i = 0, l = res.length; i < l; i++) {
+ for (let i = 0, l = res.length; i < l; i++) {
res[i].id = res[i].id || ids[i];
}
}
callback(null, res);
});
- }).bind(this);
+ };
- this.registerDependentDatabase = adapterFun('registerDependentDatabase', function (dependentDb, callback) {
- var dbOptions = clone(this.__opts);
+ this.registerDependentDatabase = (dependentDb, callback) => {
+ const dbOptions = clone(this.__opts);
if (this.__opts.view_adapter) {
dbOptions.adapter = this.__opts.view_adapter;
}
- var depDB = new this.constructor(dependentDb, dbOptions);
+ const depDB = new this.constructor(dependentDb, dbOptions);
function diffFun(doc) {
doc.dependentDbs = doc.dependentDbs || {};
@@ -867,19 +851,19 @@ class AbstractPouchDB extends EventEmitter {
doc.dependentDbs[dependentDb] = true;
return doc;
}
- upsert(this, '_local/_pouch_dependentDbs', diffFun).then(function () {
+ upsert(this, '_local/_pouch_dependentDbs', diffFun).then(() => {
callback(null, {db: depDB});
}).catch(callback);
- }).bind(this);
+ };
- this.destroy = adapterFun('destroy', function (opts, callback) {
+ this.destroy = (opts, callback) => {
if (typeof opts === 'function') {
callback = opts;
opts = {};
}
- var usePrefix = 'use_prefix' in this ? this.use_prefix : true;
+ const usePrefix = 'use_prefix' in this ? this.use_prefix : true;
const destroyDb = () => {
// call destroy method of the particular adaptor
@@ -888,7 +872,7 @@ class AbstractPouchDB extends EventEmitter {
return callback(err);
}
this._destroyed = true;
- this.emit('destroyed');
+ this.postMessage('destroyed');
callback(null, resp || { 'ok': true });
});
};
@@ -907,60 +891,58 @@ class AbstractPouchDB extends EventEmitter {
return destroyDb();
}
}
- var dependentDbs = localDoc.dependentDbs;
- var PouchDB = this.constructor;
- var deletedMap = Object.keys(dependentDbs).map((name) => {
+ const dependentDbs = localDoc.dependentDbs;
+ const PouchDB = this.constructor;
+ const deletedMap = Object.keys(dependentDbs).map((name) => {
// use_prefix is only false in the browser
/* istanbul ignore next */
- var trueName = usePrefix ?
- name.replace(new RegExp('^' + PouchDB.prefix), '') : name;
+ const trueName = usePrefix ?
+ name.replace(new RegExp(`^${PouchDB.prefix}`), '') : name;
return new PouchDB(trueName, this.__opts).destroy();
});
Promise.all(deletedMap).then(destroyDb, callback);
});
- }).bind(this);
+ };
}
- _compact(opts, callback) {
- var changesOpts = {
+ _compact({last_seq}, callback) {
+ const changesOpts = {
return_docs: false,
- last_seq: opts.last_seq || 0
+ last_seq: last_seq || 0
};
- var promises = [];
+ const promises = [];
- var taskId;
- var compactedDocs = 0;
+ let taskId;
+ let compactedDocs = 0;
- const onChange = (row) => {
+ const onChange = ({id}) => {
this.activeTasks.update(taskId, {
completed_items: ++compactedDocs
});
- promises.push(this.compactDocument(row.id, 0));
+ promises.push(this.compactDocument(id, 0));
};
const onError = (err) => {
this.activeTasks.remove(taskId, err);
callback(err);
};
- const onComplete = (resp) => {
- var lastSeq = resp.last_seq;
- Promise.all(promises).then(() => {
- return upsert(this, '_local/compaction', (doc) => {
- if (!doc.last_seq || doc.last_seq < lastSeq) {
- doc.last_seq = lastSeq;
- return doc;
- }
- return false; // somebody else got here first, don't update
- });
- }).then(() => {
+ const onComplete = ({last_seq}) => {
+ const lastSeq = last_seq;
+ Promise.all(promises).then(() => upsert(this, '_local/compaction', (doc) => {
+ if (!doc.last_seq || doc.last_seq < lastSeq) {
+ doc.last_seq = lastSeq;
+ return doc;
+ }
+ return false; // somebody else got here first, don't update
+ })).then(() => {
this.activeTasks.remove(taskId);
callback(null, {ok: true});
}).catch(onError);
};
- this.info().then((info) => {
+ this.info().then(({update_seq}) => {
taskId = this.activeTasks.add({
name: 'database_compaction',
- total_items: info.update_seq - changesOpts.last_seq,
+ total_items: update_seq - changesOpts.last_seq,
});
this.changes(changesOpts)
@@ -993,11 +975,13 @@ class AbstractPouchDB extends EventEmitter {
// The abstract purge implementation expects a doc id and the rev of a leaf node in that doc.
// It will return errors if the rev doesn’t exist or isn’t a leaf.
-AbstractPouchDB.prototype.purge = adapterFun('_purge', function (docId, rev, callback) {
+AbstractPouchDB.prototype.purge = function purge(docId, rev, callback) {
if (typeof this._purge === 'undefined') {
- return callback(createError(UNKNOWN_ERROR, 'Purge is not implemented in the ' + this.adapter + ' adapter.'));
+ return callback(createError(UNKNOWN_ERROR,
+ `Purge is not implemented in the ${this.adapter} adapter.`
+ ));
}
- var self = this;
+ const self = this;
self._getRevisionTree(docId, (error, revs) => {
if (error) {
@@ -1016,12 +1000,10 @@ AbstractPouchDB.prototype.purge = adapterFun('_purge', function (docId, rev, cal
if (error) {
return callback(error);
} else {
- appendPurgeSeq(self, docId, rev).then(function () {
- return callback(null, result);
- });
+ appendPurgeSeq(self, docId, rev).then(() => callback(null, result));
}
});
});
-});
+};
-export default AbstractPouchDB;
+export default AbstractPouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-core/src/changes.js b/packages/pouchdb-core/src/changes.js
similarity index 98%
rename from packages/node_modules/pouchdb-core/src/changes.js
rename to packages/pouchdb-core/src/changes.js
index bb481810b8..aa48b50cec 100644
--- a/packages/node_modules/pouchdb-core/src/changes.js
+++ b/packages/pouchdb-core/src/changes.js
@@ -9,8 +9,7 @@ import {
collectLeaves,
collectConflicts
} from 'pouchdb-merge';
-import EE from 'events';
-
+import { events } from 'pouchdb-platform';
import PouchDB from './setup';
@@ -47,7 +46,7 @@ function processChange(doc, metadata, opts) {
return change;
}
-class Changes extends EE {
+class Changes extends events {
constructor(db, opts, callback) {
super();
this.db = db;
diff --git a/packages/pouchdb-core/src/constructor.js b/packages/pouchdb-core/src/constructor.js
new file mode 100644
index 0000000000..b3191de01e
--- /dev/null
+++ b/packages/pouchdb-core/src/constructor.js
@@ -0,0 +1,3 @@
+
+
+export default PouchDB;
diff --git a/packages/node_modules/pouchdb-core/src/index.js b/packages/pouchdb-core/src/index.js
similarity index 64%
rename from packages/node_modules/pouchdb-core/src/index.js
rename to packages/pouchdb-core/src/index.js
index d744eb6268..757726e486 100644
--- a/packages/node_modules/pouchdb-core/src/index.js
+++ b/packages/pouchdb-core/src/index.js
@@ -1,10 +1,7 @@
-import PouchDB from './setup';
-import version from './version';
+import PouchDB from './setup.js';
import pouchChangesFilter from 'pouchdb-changes-filter';
// TODO: remove from pouchdb-core (breaking)
PouchDB.plugin(pouchChangesFilter);
-PouchDB.version = version;
-
export default PouchDB;
diff --git a/packages/node_modules/pouchdb-core/src/parseAdapter.js b/packages/pouchdb-core/src/parseAdapter.js
similarity index 93%
rename from packages/node_modules/pouchdb-core/src/parseAdapter.js
rename to packages/pouchdb-core/src/parseAdapter.js
index a5a071ce78..aac9433442 100644
--- a/packages/node_modules/pouchdb-core/src/parseAdapter.js
+++ b/packages/pouchdb-core/src/parseAdapter.js
@@ -1,7 +1,6 @@
-import PouchDB from './constructor';
import { guardedConsole, hasLocalStorage } from 'pouchdb-utils';
-function parseAdapter(name, opts) {
+const getParseAdapter = (PouchDB) => function parseAdapter(name, opts) {
var match = name.match(/([a-z-]*):\/\/(.*)/);
if (match) {
// the http adapter expects the fully qualified name
@@ -42,6 +41,8 @@ function parseAdapter(name, opts) {
name: usePrefix ? (prefix + name) : name,
adapter: adapterName
};
-}
+};
-export default parseAdapter;
\ No newline at end of file
+
+
+export default getParseAdapter;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-core/src/setup.js b/packages/pouchdb-core/src/setup.js
similarity index 55%
rename from packages/node_modules/pouchdb-core/src/setup.js
rename to packages/pouchdb-core/src/setup.js
index 1f93847b0b..32a30c0189 100644
--- a/packages/node_modules/pouchdb-core/src/setup.js
+++ b/packages/pouchdb-core/src/setup.js
@@ -1,10 +1,88 @@
-'use strict';
-
-import PouchDB from './constructor';
-import EE from 'events';
+import EE from 'node:events';
import { fetch } from 'pouchdb-fetch';
-import ActiveTasks from './active-tasks';
+import ActiveTasks from './active-tasks.js';
import { createClass } from './utils';
+import Adapter from './adapter.js';
+import TaskQueue from './taskqueue.js';
+import { clone } from 'pouchdb-utils.js';
+import getParseAdapter from './parseAdapter.js';
+
+class PouchInternal extends Adapter {
+ constructor(name, opts) {
+ super();
+ this._setup(name, opts);
+ }
+
+ _setup(name, opts) {
+ super._setup();
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ if (opts.deterministic_revs === undefined) {
+ opts.deterministic_revs = true;
+ }
+
+ this.__opts = opts = clone(opts);
+
+ this.auto_compaction = opts.auto_compaction;
+ this.purged_infos_limit = opts.purged_infos_limit || 1000;
+ this.prefix = PouchDB.prefix;
+
+ if (typeof name !== 'string') {
+ throw new Error('Missing/invalid DB name');
+ }
+
+ var prefixedName = (opts.prefix || '') + name;
+ var backend = parseAdapter(prefixedName, opts);
+
+ opts.name = backend.name;
+ opts.adapter = opts.adapter || backend.adapter;
+
+ this.name = name;
+ this._adapter = opts.adapter;
+ PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);
+
+ if (!PouchDB.adapters[opts.adapter] ||
+ !PouchDB.adapters[opts.adapter].valid()) {
+ throw new Error('Invalid Adapter: ' + opts.adapter);
+ }
+
+ if (opts.view_adapter) {
+ if (!PouchDB.adapters[opts.view_adapter] ||
+ !PouchDB.adapters[opts.view_adapter].valid()) {
+ throw new Error('Invalid View Adapter: ' + opts.view_adapter);
+ }
+ }
+
+ this.taskqueue = new TaskQueue();
+
+ this.adapter = opts.adapter;
+
+ PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
+ if (err) {
+ return this.taskqueue.fail(err);
+ }
+
+
+ this.emit('created', this);
+ PouchDB.emit('created', this.name);
+ this.taskqueue.ready(this);
+ });
+ }
+}
+
+const PouchDB = createClass(PouchInternal, function (name, opts) {
+ PouchInternal.prototype._setup.call(this, name, opts);
+});
+
+const parseAdapter = getParseAdapter(PouchDB);
+
+
PouchDB.adapters = {};
PouchDB.preferredAdapters = [];
@@ -13,25 +91,25 @@ PouchDB.prefix = '_pouch_';
var eventEmitter = new EE();
-function setUpEventEmitter(Pouch) {
+
Object.keys(EE.prototype).forEach(function (key) {
if (typeof EE.prototype[key] === 'function') {
- Pouch[key] = eventEmitter[key].bind(eventEmitter);
+ PouchDB[key] = eventEmitter[key].bind(eventEmitter);
}
});
// these are created in constructor.js, and allow us to notify each DB with
// the same name that it was destroyed, via the constructor object
- var destructListeners = Pouch._destructionListeners = new Map();
+ var destructListeners = PouchDB._destructionListeners = new Map();
- Pouch.on('ref', function onConstructorRef(db) {
+ PouchDB.on('ref', function onConstructorRef(db) {
if (!destructListeners.has(db.name)) {
destructListeners.set(db.name, []);
}
destructListeners.get(db.name).push(db);
});
- Pouch.on('unref', function onConstructorUnref(db) {
+ PouchDB.on('unref', function onConstructorUnref(db) {
if (!destructListeners.has(db.name)) {
return;
}
@@ -50,7 +128,7 @@ function setUpEventEmitter(Pouch) {
}
});
- Pouch.on('destroyed', function onConstructorDestroyed(name) {
+ PouchDB.on('destroyed', function onConstructorDestroyed(name) {
if (!destructListeners.has(name)) {
return;
}
@@ -60,9 +138,7 @@ function setUpEventEmitter(Pouch) {
db.emit('destroyed',true);
});
});
-}
-setUpEventEmitter(PouchDB);
PouchDB.adapter = function (id, obj, addToPreferredAdapters) {
/* istanbul ignore else */
diff --git a/packages/node_modules/pouchdb-core/src/taskqueue.js b/packages/pouchdb-core/src/taskqueue.js
similarity index 100%
rename from packages/node_modules/pouchdb-core/src/taskqueue.js
rename to packages/pouchdb-core/src/taskqueue.js
diff --git a/packages/node_modules/pouchdb-core/src/utils.js b/packages/pouchdb-core/src/utils.js
similarity index 100%
rename from packages/node_modules/pouchdb-core/src/utils.js
rename to packages/pouchdb-core/src/utils.js
diff --git a/packages/node_modules/pouchdb-core/src/version.js b/packages/pouchdb-core/src/version.js
similarity index 100%
rename from packages/node_modules/pouchdb-core/src/version.js
rename to packages/pouchdb-core/src/version.js
diff --git a/packages/pouchdb-crypto/package.json b/packages/pouchdb-crypto/package.json
new file mode 100644
index 0000000000..c5b24f9377
--- /dev/null
+++ b/packages/pouchdb-crypto/package.json
@@ -0,0 +1,3 @@
+{
+ "exports": { "import": "./src/index.js" }
+}
\ No newline at end of file
diff --git a/packages/pouchdb-crypto/src/broadcast-channel.js b/packages/pouchdb-crypto/src/broadcast-channel.js
new file mode 100644
index 0000000000..00261ad6c2
--- /dev/null
+++ b/packages/pouchdb-crypto/src/broadcast-channel.js
@@ -0,0 +1,75 @@
+/* eslint-disable no-undef */
+var channels = [];
+// MessagePorts are Supported in Node 15.x
+class BroadcastChannel {
+ constructor(channel="") {
+ this._name = channel;
+ this._id = `$BroadcastChannel$${channel}$`;
+ channels[this._id] = channels[this._id] || [];
+ channels[this._id].push(this);
+
+ this._closed = false;
+ this._mc = new MessageChannel();
+ this._mc.port1.start();
+ this._mc.port2.start();
+ // Routing via net.socket
+ // Routing via localStroage events
+ // globalThis.addEventListener('storage', (e) => {
+ // if (e.storageArea !== global.localStorage) return;
+ // if (e.newValue === null) return;
+ // if (e.key.substring(0, id.length) !== id) return;
+ // var data = JSON.parse(e.newValue);
+ // this._mc.port2.postMessage(data);
+ // });
+ }
+ // BroadcastChannel API
+ get name() { return this._name; }
+ postMessage(message) {
+
+ if (this._closed) {
+ throw Object.assign(
+ new Error(),{name:'InvalidStateError'}
+ );
+ }
+ const value = JSON.stringify(message);
+
+ // Routing via net.socket
+
+ // Broadcast to other contexts via storage events...
+ // const key = this._id + String(Date.now()) + '$' + String(Math.random());
+ // global.localStorage.setItem(key, value);
+ // setTimeout(function() { global.localStorage.removeItem(key); }, 500);
+
+ // Broadcast to current context via ports
+ channels[this._id].forEach((bC) => {
+ bC !== this && bC._mc.port2.postMessage(JSON.parse(value));
+ });
+ }
+ close() {
+ if (this._closed) {return;}
+ this._closed = true;
+ this._mc.port1.close();
+ this._mc.port2.close();
+
+ var index = channels[this._id].indexOf(this);
+ channels[this._id].splice(index, 1);
+ }
+
+ // EventTarget API
+ get onmessage() { return this._mc.port1.onmessage; }
+ set onmessage(value) { this._mc.port1.onmessage = value; }
+ addEventListener(type, listener /*, useCapture*/) {
+ return this._mc.port1.addEventListener.apply(this._mc.port1, type,listener);
+ }
+ removeEventListener(type, listener /*, useCapture*/) {
+ return this._mc.port1.removeEventListener.apply(this._mc.port1, type,listener);
+ }
+ dispatchEvent(event) {
+ return this._mc.port1.dispatchEvent.apply(this._mc.port1, event);
+ }
+}
+
+// NodeJS 15.x Supports MessageChannel v18 Broadcast Channel
+const implementation = globalThis.BroadcastChannel || BroadcastChannel;
+
+export { implementation as BroadcastChannel };
\ No newline at end of file
diff --git a/packages/pouchdb-crypto/src/pouchdb-hash.js b/packages/pouchdb-crypto/src/pouchdb-hash.js
new file mode 100644
index 0000000000..82191c0755
--- /dev/null
+++ b/packages/pouchdb-crypto/src/pouchdb-hash.js
@@ -0,0 +1,163 @@
+/* eslint-disable no-undef */
+
+// Hashing Checksums and more
+
+// Todo: crypto api useage must be async browser api is async and hash-wasm is async
+// Todo: we should use hash-wasm md5 only at present and use where supported
+// nodejs / browser(secure context only)
+// const { subtle } = globalThis.crypto;
+// Importing only usefull methods that are not included in globalThis.crypto.subtle
+import { md5 } from 'hash-wasm';
+
+export {
+ blake3,
+ blake2s,
+ blake2b,
+ md5,
+ createMD5,
+ createBLAKE3,
+ createBLAKE2s,
+ createBLAKE2b,
+} from 'hash-wasm';
+
+// string2base64
+export const btoa = globalThis.btoa
+ ? (str="") => globalThis.btoa(str) // Links to deprecated Buffer.btoa in node
+ : globalThis.Buffer && ( // is the new replacement for Buffer.btoa in node
+ (string) => globalThis.Buffer.from(string).toString('base64')
+ );
+
+export const atob = globalThis.atob
+ ? (string="") => globalThis.btoa(string) // Links to deprecated Buffer.atob in node
+ : globalThis.Buffer.from(string, 'base64');
+
+//import { md5, sha1, sha512, sha3 } from 'hash-wasm'
+// replaces stringMd5 returns hex should also use message.normalize('NFKC')
+export const createoldMD5 = async (message="") => md5(new TextEncoder().encode(message));
+/** @type {(x:string)=>string} string containing Hex */
+export const stringMd5 = async (message="") => md5(message);
+
+// used by hash-wasm to convert digest: hex to Response(arrayBuffer)
+// Note that hex is a text representation of bytes like base64
+// Note that UTF-8 Strings can get turned into hex and base64
+// Note base64 is only usefull in URLS json supports hex strings
+export const hex2arrayBuffer = (hex="") => new Uint8Array(hex.match(
+ /../g).map(h=>parseInt(h,16))).buffer;
+
+export const hex2utf16 = (hex="") => hex.match(
+ /\w{2}/g).map(b=>String.fromCharCode(parseInt(b, 16))).join("");
+
+export const hex2base64 = (hex="") => btoa(hex2utf16(hex));
+
+export async function binaryMd5(data, callback=()=>{}) {
+ // var base64 = crypto.createHash('md5').update(data, 'binary').digest('base64');
+ // callback(base64);
+ return md5(data).then(btoa).then((base64)=>[callback(base64)] && base64);
+}
+
+export const arrayBufferToBase64 = (arrayBuffer) => btoa(
+ String.fromCharCode(...new Uint8Array(arrayBuffer))
+);
+// Old But gold
+export async function blobToBase64(blobOrBuffer, callback=(_err,val)=>val) {
+ return new Response(blobOrBuffer).arrayBuffer().then(arrayBufferToBase64).then((
+ b64)=>callback(null,b64)||b64,err=>callback(err)
+ );
+ //callback(blobOrBuffer.toString('binary'));
+}
+// Implements nodes Buffer.toString('hex','base64','utf-8')
+export const StringBuffer = async (arrayBuffer) => {
+ const formats = {
+ hex: () =>
+ Array.from(new Uint8Array(arrayBuffer))
+ // converted buffer to byte array
+ .map((b) => b.toString(16).padStart(2, "0"))
+ .join(""), // converted bytes to hex string;
+ base64: () => btoa(new TextDecoder().decode(arrayBuffer)),
+ utf16: () => new TextDecoder().decode(arrayBuffer),
+ };
+
+ return {
+ toString(format='hex') {
+ return formats[format]
+ ? formats[format]()
+ : (format.startsWith('u') || format.startsWith('U'))
+ ? formats.utf16()
+ : arrayBuffer.toString();
+ },
+ };
+};
+
+// message is UTF-16 String
+export async function digestFromMessage(message,algo='SHA-256') {
+ // hash the message
+ const arrayBuffer = await crypto.subtle.digest(
+ algo, await new Blob([message]).arrayBuffer()
+ );
+
+ return StringBuffer(arrayBuffer);
+}
+
+// Enables binary raw fetch eliminates the need for ascii conversation
+// eliminates the need for base64
+const charset = 'x-user-defined';
+
+// UTF-8 based replacement alternative for base64
+// Nativ UTF-8 Binary mode.
+// Maps to the UTF Private Address Space Area so you can get bits as chars
+const binaryRawEnablingHeader = `text/plain; charset=${charset}`;
+
+// supports 'range': 'bytes=2-5,10-13'
+// Returns byteArray from raw bytes represented by UTF-8 Binary
+export const _BinaryRawFetch = (url) => fetch(url,{ headers: {
+ 'Content-Type': binaryRawEnablingHeader,
+}}).then((r)=>r.text()).then((chars) => new Array(chars.length).map(
+ // UNICODE Private Area 0xF700-0xF7ff.
+ (_byte,offset) => chars.charCodeAt(offset) & 0xff));
+
+
+export const base64encoderStream = {
+ transform(data,ready) {
+ let reader = new FileReader();
+ reader.onloadend = () => {
+ ready.enqueue(reader.result.split(';base64,',1));
+ reader = null;
+ };
+ reader.readAsDataURL(new Blob(data));
+ }
+};
+
+//new TransformStream(base64encoderStream)
+
+// eg "digest":"md5-yDbs1scfYdqqLpxyFb1gFw==",
+// base642hex new Buffer('yDbs1scfYdqqLpxyFb1gFw==', 'base64').toString('hex')
+// hex2base64 new Buffer('c836ecd6c71f61daaa2e9c7215bd6017', 'hex').toString('base64')
+
+// Node does not even support the fileReader Api
+// Returns only the ${base64Data}
+// Reverse: await fetch(`data:${'image/jpeg'||''};base64,${base64Data}`);
+export const readBase64DataFromBlob = (blob) => new Promise((resolve, reject) => {
+ const reader = new FileReader;
+ reader.onerror = reject;
+ reader.onload = () => {
+ resolve(reader.result.split('base64,',1)[1]);
+ };
+ reader.readAsDataURL(new Blob([].concat([blob])));
+});
+
+// Development notes
+// Todo: Improve base64 use maybe deprecate it complet in favor of nativ UTF8 PrivateArea
+// Todo: Improve Linking refactor to use pouchdb-lib/src/index.js pouchdb_package_name
+// Todo: we should stay with atob for browsers and btoa Buffer.string('base64') for node
+
+// Todo: node buffer should only get used in the edge case of base64
+
+// Node 18 is stable so we got flagbased backward compatability till 16.x
+
+// Node 19 crypto support v16.x upward need --experimental-global-webcrypto
+// Node 18 fetch support v16.x upward needs --experimental-fetch
+// => Response Support abort controller Blob
+// Node 18 BroadcastChannel (replacement for eventEmitter)
+// Future roadmap if globalThis.crypto does not exist use hash-wasm
+// Node 16 needs the broadcast-channel.js Polyfill
+// Node 18 got Compression Streams all other need to use zlib
diff --git a/packages/node_modules/pouchdb-errors/LICENSE b/packages/pouchdb-errors/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-errors/LICENSE
rename to packages/pouchdb-errors/LICENSE
diff --git a/packages/node_modules/pouchdb-errors/README.md b/packages/pouchdb-errors/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-errors/README.md
rename to packages/pouchdb-errors/README.md
diff --git a/packages/node_modules/pouchdb-errors/package.json b/packages/pouchdb-errors/package.json
similarity index 77%
rename from packages/node_modules/pouchdb-errors/package.json
rename to packages/pouchdb-errors/package.json
index 18364275dd..c914b34b1b 100644
--- a/packages/node_modules/pouchdb-errors/package.json
+++ b/packages/pouchdb-errors/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Errors exposed by PouchDB.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-errors/src/index.js b/packages/pouchdb-errors/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-errors/src/index.js
rename to packages/pouchdb-errors/src/index.js
diff --git a/packages/node_modules/pouchdb-fetch/LICENSE b/packages/pouchdb-fetch/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-fetch/LICENSE
rename to packages/pouchdb-fetch/LICENSE
diff --git a/packages/node_modules/pouchdb-fetch/README.md b/packages/pouchdb-fetch/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-fetch/README.md
rename to packages/pouchdb-fetch/README.md
diff --git a/packages/node_modules/pouchdb-fetch/package.json b/packages/pouchdb-fetch/package.json
similarity index 81%
rename from packages/node_modules/pouchdb-fetch/package.json
rename to packages/pouchdb-fetch/package.json
index af22b2ca32..8224f5189d 100644
--- a/packages/node_modules/pouchdb-fetch/package.json
+++ b/packages/pouchdb-fetch/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's fetch() method.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/pouchdb-fetch/src/fetch-browser.js b/packages/pouchdb-fetch/src/fetch-browser.js
new file mode 100644
index 0000000000..1a1d46a35d
--- /dev/null
+++ b/packages/pouchdb-fetch/src/fetch-browser.js
@@ -0,0 +1,12 @@
+/* eslint-disable no-undef */
+// 'use strict'; is default when ESM
+
+// AbortController was introduced quite a while after fetch and
+// isnt required for PouchDB to function so polyfill if needed
+const AbortController = globalThis.AbortController ||
+ function () { return {abort: function () {}}; };
+
+const fetch = globalThis.fetch;
+const Headers = globalThis.Headers;
+
+export {fetch, Headers, AbortController};
diff --git a/packages/node_modules/pouchdb-fetch/src/fetch.js b/packages/pouchdb-fetch/src/fetch.js
similarity index 85%
rename from packages/node_modules/pouchdb-fetch/src/fetch.js
rename to packages/pouchdb-fetch/src/fetch.js
index 647b9c1c90..9ae1f62f76 100644
--- a/packages/node_modules/pouchdb-fetch/src/fetch.js
+++ b/packages/pouchdb-fetch/src/fetch.js
@@ -1,4 +1,4 @@
-'use strict';
+// 'use strict'; is default when ESM
import nodeFetch, {Headers} from 'node-fetch';
import fetchCookie from 'fetch-cookie';
diff --git a/packages/pouchdb-fetch/src/index.js b/packages/pouchdb-fetch/src/index.js
new file mode 100644
index 0000000000..65f6abe6cd
--- /dev/null
+++ b/packages/pouchdb-fetch/src/index.js
@@ -0,0 +1 @@
+export {fetch, Headers, AbortController} from './fetch.js';
diff --git a/packages/node_modules/pouchdb-find/LICENSE b/packages/pouchdb-find/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-find/LICENSE
rename to packages/pouchdb-find/LICENSE
diff --git a/packages/node_modules/pouchdb-find/README.md b/packages/pouchdb-find/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-find/README.md
rename to packages/pouchdb-find/README.md
diff --git a/packages/node_modules/pouchdb-find/package.json b/packages/pouchdb-find/package.json
similarity index 83%
rename from packages/node_modules/pouchdb-find/package.json
rename to packages/pouchdb-find/package.json
index 22b3709266..786e842760 100644
--- a/packages/node_modules/pouchdb-find/package.json
+++ b/packages/pouchdb-find/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Easy-to-use query language for PouchDB",
"main": "lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [
"pouch",
"pouchdb",
diff --git a/packages/node_modules/pouchdb-find/src/adapters/http/index.js b/packages/pouchdb-find/src/adapters/http/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/http/index.js
rename to packages/pouchdb-find/src/adapters/http/index.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/abstract-mapper.js b/packages/pouchdb-find/src/adapters/local/abstract-mapper.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/abstract-mapper.js
rename to packages/pouchdb-find/src/adapters/local/abstract-mapper.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/create-index/index.js b/packages/pouchdb-find/src/adapters/local/create-index/index.js
similarity index 87%
rename from packages/node_modules/pouchdb-find/src/adapters/local/create-index/index.js
rename to packages/pouchdb-find/src/adapters/local/create-index/index.js
index 32cfe04fc4..d652140cae 100644
--- a/packages/node_modules/pouchdb-find/src/adapters/local/create-index/index.js
+++ b/packages/pouchdb-find/src/adapters/local/create-index/index.js
@@ -1,11 +1,11 @@
import abstractMapper from '../abstract-mapper';
import { massageIndexDef, validateIndex } from '../utils';
import { clone, upsert } from 'pouchdb-utils';
-import { stringMd5 } from 'pouchdb-md5';
+import { stringMd5 } from 'pouchdb-crypto';
import massageCreateIndexRequest from '../../../massageCreateIndexRequest';
import { mergeObjects } from '../../../utils';
-function createIndex(db, requestDef) {
+async function createIndex(db, requestDef) {
requestDef = massageCreateIndexRequest(requestDef);
var originalIndexDef = clone(requestDef.index);
requestDef.index = massageIndexDef(requestDef.index);
@@ -14,14 +14,11 @@ function createIndex(db, requestDef) {
// calculating md5 is expensive - memoize and only
// run if required
- var md5;
- function getMd5() {
- return md5 || (md5 = stringMd5(JSON.stringify(requestDef)));
- }
-
- var viewName = requestDef.name || ('idx-' + getMd5());
+ var md5 = await stringMd5(JSON.stringify(requestDef));
+
+ var viewName = requestDef.name || ('idx-' + md5);
- var ddocName = requestDef.ddoc || ('idx-' + getMd5());
+ var ddocName = requestDef.ddoc || ('idx-' + md5);
var ddocId = '_design/' + ddocName;
var hasInvalidLanguage = false;
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/delete-index/index.js b/packages/pouchdb-find/src/adapters/local/delete-index/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/delete-index/index.js
rename to packages/pouchdb-find/src/adapters/local/delete-index/index.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/find/index.js b/packages/pouchdb-find/src/adapters/local/find/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/find/index.js
rename to packages/pouchdb-find/src/adapters/local/find/index.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/find/query-planner.js b/packages/pouchdb-find/src/adapters/local/find/query-planner.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/find/query-planner.js
rename to packages/pouchdb-find/src/adapters/local/find/query-planner.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/get-indexes/index.js b/packages/pouchdb-find/src/adapters/local/get-indexes/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/get-indexes/index.js
rename to packages/pouchdb-find/src/adapters/local/get-indexes/index.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/index.js b/packages/pouchdb-find/src/adapters/local/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/index.js
rename to packages/pouchdb-find/src/adapters/local/index.js
diff --git a/packages/node_modules/pouchdb-find/src/adapters/local/utils.js b/packages/pouchdb-find/src/adapters/local/utils.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/adapters/local/utils.js
rename to packages/pouchdb-find/src/adapters/local/utils.js
diff --git a/packages/node_modules/pouchdb-find/src/index.js b/packages/pouchdb-find/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/index.js
rename to packages/pouchdb-find/src/index.js
diff --git a/packages/node_modules/pouchdb-find/src/massageCreateIndexRequest.js b/packages/pouchdb-find/src/massageCreateIndexRequest.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/massageCreateIndexRequest.js
rename to packages/pouchdb-find/src/massageCreateIndexRequest.js
diff --git a/packages/node_modules/pouchdb-find/src/utils.js b/packages/pouchdb-find/src/utils.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/utils.js
rename to packages/pouchdb-find/src/utils.js
diff --git a/packages/node_modules/pouchdb-find/src/validateSelector.js b/packages/pouchdb-find/src/validateSelector.js
similarity index 100%
rename from packages/node_modules/pouchdb-find/src/validateSelector.js
rename to packages/pouchdb-find/src/validateSelector.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/ajax.js b/packages/pouchdb-for-coverage/extras/ajax.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/ajax.js
rename to packages/pouchdb-for-coverage/extras/ajax.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/checkpointer.js b/packages/pouchdb-for-coverage/extras/checkpointer.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/checkpointer.js
rename to packages/pouchdb-for-coverage/extras/checkpointer.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/fruitdown.js b/packages/pouchdb-for-coverage/extras/fruitdown.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/fruitdown.js
rename to packages/pouchdb-for-coverage/extras/fruitdown.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/generateReplicationId.js b/packages/pouchdb-for-coverage/extras/generateReplicationId.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/generateReplicationId.js
rename to packages/pouchdb-for-coverage/extras/generateReplicationId.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/localstorage.js b/packages/pouchdb-for-coverage/extras/localstorage.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/localstorage.js
rename to packages/pouchdb-for-coverage/extras/localstorage.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/memory.js b/packages/pouchdb-for-coverage/extras/memory.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/memory.js
rename to packages/pouchdb-for-coverage/extras/memory.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/promise.js b/packages/pouchdb-for-coverage/extras/promise.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/promise.js
rename to packages/pouchdb-for-coverage/extras/promise.js
diff --git a/packages/node_modules/pouchdb-for-coverage/extras/websql.js b/packages/pouchdb-for-coverage/extras/websql.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/extras/websql.js
rename to packages/pouchdb-for-coverage/extras/websql.js
diff --git a/packages/node_modules/pouchdb-for-coverage/package.json b/packages/pouchdb-for-coverage/package.json
similarity index 89%
rename from packages/node_modules/pouchdb-for-coverage/package.json
rename to packages/pouchdb-for-coverage/package.json
index 1bc827b765..b5ca94ba9b 100644
--- a/packages/node_modules/pouchdb-for-coverage/package.json
+++ b/packages/pouchdb-for-coverage/package.json
@@ -1,7 +1,8 @@
{
"name": "pouchdb-for-coverage",
"version": "7.0.0-prerelease",
- "main": "./lib/index.js",
+ "exports": {"import": "./src/index.js"},
+ "type": "module",
"private": true,
"//": [
"Below, the node version is used for coverage tests.",
diff --git a/packages/node_modules/pouchdb-for-coverage/src/errors.js b/packages/pouchdb-for-coverage/src/errors.js
similarity index 100%
rename from packages/node_modules/pouchdb-for-coverage/src/errors.js
rename to packages/pouchdb-for-coverage/src/errors.js
diff --git a/packages/pouchdb-for-coverage/src/index.js b/packages/pouchdb-for-coverage/src/index.js
new file mode 100644
index 0000000000..6f3088120a
--- /dev/null
+++ b/packages/pouchdb-for-coverage/src/index.js
@@ -0,0 +1,13 @@
+import PouchDB from 'pouchdb-lib/lib/pouchdb-node.js';
+import utils from './utils.js';
+import errors from './errors.js';
+import * as collate from 'pouchdb-lib/lib/pouchdb-collate.js';
+// explicitly include pouchdb-find so coverage captures it correctly
+import find from 'pouchdb-lib/lib/pouchdb-find.js';
+
+PouchDB.utils = utils;
+PouchDB.Errors = errors;
+PouchDB.collate = collate;
+PouchDB.plugin(find);
+
+export default PouchDB;
diff --git a/packages/node_modules/pouchdb-for-coverage/src/pouchdb-browser.js b/packages/pouchdb-for-coverage/src/pouchdb-browser.js
similarity index 72%
rename from packages/node_modules/pouchdb-for-coverage/src/pouchdb-browser.js
rename to packages/pouchdb-for-coverage/src/pouchdb-browser.js
index 9163878641..ce4298966c 100644
--- a/packages/node_modules/pouchdb-for-coverage/src/pouchdb-browser.js
+++ b/packages/pouchdb-for-coverage/src/pouchdb-browser.js
@@ -1,4 +1,4 @@
// import directly from src rather than jsnext:main because in ths case
// the jsnext:main is actually built (lib/index*.es.js)
-import PouchDB from 'pouchdb-browser/src/index';
+import PouchDB from 'pouchdb-lib/lib/pouchdb-browser.js';
export default PouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-for-coverage/src/utils.js b/packages/pouchdb-for-coverage/src/utils.js
similarity index 96%
rename from packages/node_modules/pouchdb-for-coverage/src/utils.js
rename to packages/pouchdb-for-coverage/src/utils.js
index 5c2a559086..d006fdc8d9 100644
--- a/packages/node_modules/pouchdb-for-coverage/src/utils.js
+++ b/packages/pouchdb-for-coverage/src/utils.js
@@ -24,10 +24,7 @@ import {
} from 'pouchdb-merge';
import {
- atob,
- btoa,
binaryStringToBlobOrBuffer,
- blob
} from 'pouchdb-binary-utils';
import {
@@ -48,13 +45,10 @@ import generateReplicationId from 'pouchdb-generate-replication-id';
import checkpointer from 'pouchdb-checkpointer';
export default {
- blob: blob,
parseUri: parseUri,
uuid: uuid,
rev: rev,
Promise: Promise,
- atob: atob,
- btoa: btoa,
binaryStringToBlobOrBuffer: binaryStringToBlobOrBuffer,
clone: clone,
createError: createError,
diff --git a/packages/node_modules/pouchdb-generate-replication-id/LICENSE b/packages/pouchdb-generate-replication-id/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-generate-replication-id/LICENSE
rename to packages/pouchdb-generate-replication-id/LICENSE
diff --git a/packages/node_modules/pouchdb-generate-replication-id/README.md b/packages/pouchdb-generate-replication-id/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-generate-replication-id/README.md
rename to packages/pouchdb-generate-replication-id/README.md
diff --git a/packages/node_modules/pouchdb-generate-replication-id/package.json b/packages/pouchdb-generate-replication-id/package.json
similarity index 81%
rename from packages/node_modules/pouchdb-generate-replication-id/package.json
rename to packages/pouchdb-generate-replication-id/package.json
index 5f9dfc72e8..d227799909 100644
--- a/packages/node_modules/pouchdb-generate-replication-id/package.json
+++ b/packages/pouchdb-generate-replication-id/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB function to generate a replication ID to mark progress during replications.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-generate-replication-id/src/index.js b/packages/pouchdb-generate-replication-id/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-generate-replication-id/src/index.js
rename to packages/pouchdb-generate-replication-id/src/index.js
diff --git a/packages/node_modules/pouchdb-json/LICENSE b/packages/pouchdb-json/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-json/LICENSE
rename to packages/pouchdb-json/LICENSE
diff --git a/packages/node_modules/pouchdb-json/README.md b/packages/pouchdb-json/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-json/README.md
rename to packages/pouchdb-json/README.md
diff --git a/packages/node_modules/pouchdb-json/package.json b/packages/pouchdb-json/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-json/package.json
rename to packages/pouchdb-json/package.json
index 98938ce6a6..1bdc356327 100644
--- a/packages/node_modules/pouchdb-json/package.json
+++ b/packages/pouchdb-json/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB utilities for safely stringifying and parsing JSON.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-json/src/index.js b/packages/pouchdb-json/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-json/src/index.js
rename to packages/pouchdb-json/src/index.js
diff --git a/packages/node_modules/pouchdb-json/src/safeJsonParse.js b/packages/pouchdb-json/src/safeJsonParse.js
similarity index 89%
rename from packages/node_modules/pouchdb-json/src/safeJsonParse.js
rename to packages/pouchdb-json/src/safeJsonParse.js
index eba01cded2..6dc685b581 100644
--- a/packages/node_modules/pouchdb-json/src/safeJsonParse.js
+++ b/packages/pouchdb-json/src/safeJsonParse.js
@@ -1,4 +1,4 @@
-import vuvuzela from 'vuvuzela';
+import * as vuvuzela from 'vuvuzela';
function safeJsonParse(str) {
// This try/catch guards against stack overflow errors.
diff --git a/packages/node_modules/pouchdb-json/src/safeJsonStringify.js b/packages/pouchdb-json/src/safeJsonStringify.js
similarity index 84%
rename from packages/node_modules/pouchdb-json/src/safeJsonStringify.js
rename to packages/pouchdb-json/src/safeJsonStringify.js
index 44a81f3d1f..69ee410c10 100644
--- a/packages/node_modules/pouchdb-json/src/safeJsonStringify.js
+++ b/packages/pouchdb-json/src/safeJsonStringify.js
@@ -1,4 +1,4 @@
-import vuvuzela from 'vuvuzela';
+import * as vuvuzela from 'vuvuzela';
function safeJsonStringify(json) {
try {
diff --git a/packages/pouchdb-lib/.eslintrc.json b/packages/pouchdb-lib/.eslintrc.json
new file mode 100644
index 0000000000..a80a258c6d
--- /dev/null
+++ b/packages/pouchdb-lib/.eslintrc.json
@@ -0,0 +1,46 @@
+{
+
+ "extends": "eslint:recommended",
+
+ "parserOptions": {
+ "ecmaVersion": "latest",
+ "sourceType": "module"
+ },
+
+ "env": {
+ "browser": true,
+ "node": true,
+ "mocha": true
+ },
+
+ "globals": {
+ "Map": true,
+ "Set": true,
+ "Symbol": true,
+ "chrome": true,
+ "Promise": true,
+ "Uint8Array": true,
+ "ArrayBuffer": true,
+ "FileReaderSync": true,
+ "sqlitePlugin": true,
+ "emit": true,
+ "PouchDB": true,
+ "should": true,
+ "assert": true,
+ "testUtils": true,
+ "importScripts": true,
+ "testCases": true
+ },
+
+ "rules": {
+ "no-empty": "off",
+ "no-console": "off",
+ "semi": ["error", "always"],
+ "curly": ["error", "all"],
+ "space-unary-ops": ["error", {"words": true}],
+ "space-before-function-paren": ["error", {"anonymous": "always", "named": "never"}],
+ "max-len": ["error", 100, {"ignoreComments": true, "ignoreStrings": true, "ignoreRegExpLiterals": true}],
+ "keyword-spacing": ["error"],
+ "space-before-blocks": ["error"]
+ }
+}
diff --git a/packages/pouchdb-lib/lib/_commonjsHelpers-24198af3.js b/packages/pouchdb-lib/lib/_commonjsHelpers-24198af3.js
new file mode 100644
index 0000000000..85dd4f2dd3
--- /dev/null
+++ b/packages/pouchdb-lib/lib/_commonjsHelpers-24198af3.js
@@ -0,0 +1,35 @@
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+function getAugmentedNamespace(n) {
+ if (n.__esModule) return n;
+ var f = n.default;
+ if (typeof f == "function") {
+ var a = function a () {
+ if (this instanceof a) {
+ var args = [null];
+ args.push.apply(args, arguments);
+ var Ctor = Function.bind.apply(f, args);
+ return new Ctor();
+ }
+ return f.apply(this, arguments);
+ };
+ a.prototype = f.prototype;
+ } else a = {};
+ Object.defineProperty(a, '__esModule', {value: true});
+ Object.keys(n).forEach(function (k) {
+ var d = Object.getOwnPropertyDescriptor(n, k);
+ Object.defineProperty(a, k, d.get ? d : {
+ enumerable: true,
+ get: function () {
+ return n[k];
+ }
+ });
+ });
+ return a;
+}
+
+export { getAugmentedNamespace as a, commonjsGlobal as c, getDefaultExportFromCjs as g };
diff --git a/packages/pouchdb-lib/lib/allDocsKeysQuery-7f4fbcb9.js b/packages/pouchdb-lib/lib/allDocsKeysQuery-7f4fbcb9.js
new file mode 100644
index 0000000000..35cccc844e
--- /dev/null
+++ b/packages/pouchdb-lib/lib/allDocsKeysQuery-7f4fbcb9.js
@@ -0,0 +1,27 @@
+// eslint-disable-next-line no-unused-vars
+async function allDocsKeysQuery(api, {limit, skip: offset, keys,...subOpts}) {
+
+ const finalResults = {
+ offset, rows: await Promise.all(keys.map(async (key) => {
+ return await new Promise((resolve) => (api._allDocs(Object.assign(
+ {key: key, deleted: 'ok'}, subOpts
+ ), (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ throw new Error(err);
+ }
+ /* istanbul ignore if */
+ if (subOpts.update_seq && res.update_seq !== undefined) {
+ finalResults.update_seq = res.update_seq;
+ }
+ finalResults.total_rows = res.total_rows;
+ resolve(res.rows[0] || {key: key, error: 'not_found'});
+ })));
+ })),
+ };
+
+ return finalResults;
+
+}
+
+export { allDocsKeysQuery as a };
diff --git a/packages/pouchdb-lib/lib/base64StringToBlobOrBuffer-3fd03be6.js b/packages/pouchdb-lib/lib/base64StringToBlobOrBuffer-3fd03be6.js
new file mode 100644
index 0000000000..656260d453
--- /dev/null
+++ b/packages/pouchdb-lib/lib/base64StringToBlobOrBuffer-3fd03be6.js
@@ -0,0 +1,7 @@
+import { t as typedBuffer } from './typedBuffer-a8220a49.js';
+
+function b64ToBluffer(b64, type) {
+ return typedBuffer(b64, 'base64', type);
+}
+
+export { b64ToBluffer as b };
diff --git a/packages/pouchdb-lib/lib/binaryMd5-601b2421.js b/packages/pouchdb-lib/lib/binaryMd5-601b2421.js
new file mode 100644
index 0000000000..40e42dccd0
--- /dev/null
+++ b/packages/pouchdb-lib/lib/binaryMd5-601b2421.js
@@ -0,0 +1,8 @@
+import crypto from 'crypto';
+
+function binaryMd5(data, callback) {
+ var base64 = crypto.createHash('md5').update(data, 'binary').digest('base64');
+ callback(base64);
+}
+
+export { binaryMd5 as b };
diff --git a/packages/pouchdb-lib/lib/binaryStringToBlobOrBuffer-39ece35b.js b/packages/pouchdb-lib/lib/binaryStringToBlobOrBuffer-39ece35b.js
new file mode 100644
index 0000000000..59600fe7f8
--- /dev/null
+++ b/packages/pouchdb-lib/lib/binaryStringToBlobOrBuffer-39ece35b.js
@@ -0,0 +1,7 @@
+import { t as typedBuffer } from './typedBuffer-a8220a49.js';
+
+function binStringToBluffer(binString, type) {
+ return typedBuffer(binString, 'binary', type);
+}
+
+export { binStringToBluffer as b };
diff --git a/packages/pouchdb-lib/lib/blobOrBufferToBinaryString-56930128.js b/packages/pouchdb-lib/lib/blobOrBufferToBinaryString-56930128.js
new file mode 100644
index 0000000000..25ecfda1df
--- /dev/null
+++ b/packages/pouchdb-lib/lib/blobOrBufferToBinaryString-56930128.js
@@ -0,0 +1,15 @@
+function blobToBase64$1(blobOrBuffer, callback) {
+ callback(blobOrBuffer.toString('base64'));
+}
+
+const toBase64 = (arrayBuffer) => btoa(String.fromCharCode(
+ ...new Uint8Array(arrayBuffer)
+));
+
+function blobToBase64(blobOrBuffer, callback) {
+ new Response(blobOrBuffer).arrayBuffer().then(toBase64).then(
+ (b64)=>callback(null,b64),err=>callback(err));
+ //callback(blobOrBuffer.toString('binary'));
+}
+
+export { blobToBase64$1 as a, blobToBase64 as b };
diff --git a/packages/pouchdb-lib/lib/clone-7eeb6295.js b/packages/pouchdb-lib/lib/clone-7eeb6295.js
new file mode 100644
index 0000000000..7123887fe8
--- /dev/null
+++ b/packages/pouchdb-lib/lib/clone-7eeb6295.js
@@ -0,0 +1,51 @@
+import { c as cloneBuffer, i as isPlainObject } from './functionName-706c6c65.js';
+
+function isBinaryObject(object) {
+ return object instanceof Buffer;
+}
+
+function clone(object) {
+ var newObject;
+ var i;
+ var len;
+
+ if (!object || typeof object !== 'object') {
+ return object;
+ }
+
+ if (Array.isArray(object)) {
+ newObject = [];
+ for (i = 0, len = object.length; i < len; i++) {
+ newObject[i] = clone(object[i]);
+ }
+ return newObject;
+ }
+
+ // special case: to avoid inconsistencies between IndexedDB
+ // and other backends, we automatically stringify Dates
+ if (object instanceof Date && isFinite(object)) {
+ return object.toISOString();
+ }
+
+ if (isBinaryObject(object)) {
+ return cloneBuffer(object);
+ }
+
+ if (!isPlainObject(object)) {
+ return object; // don't clone objects like Workers
+ }
+
+ newObject = {};
+ for (i in object) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(object, i)) {
+ var value = clone(object[i]);
+ if (typeof value !== 'undefined') {
+ newObject[i] = value;
+ }
+ }
+ }
+ return newObject;
+}
+
+export { clone as c };
diff --git a/packages/pouchdb-lib/lib/collectConflicts-ad0b7c70.js b/packages/pouchdb-lib/lib/collectConflicts-ad0b7c70.js
new file mode 100644
index 0000000000..58e8fa4c0f
--- /dev/null
+++ b/packages/pouchdb-lib/lib/collectConflicts-ad0b7c70.js
@@ -0,0 +1,37 @@
+import { t as traverseRevTree, w as winningRev } from './rootToLeaf-f8d0e78a.js';
+
+function sortByPos(a, b) {
+ return a.pos - b.pos;
+}
+
+function collectLeaves(revs) {
+ var leaves = [];
+ traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {
+ if (isLeaf) {
+ leaves.push({rev: pos + "-" + id, pos: pos, opts: opts});
+ }
+ });
+ leaves.sort(sortByPos).reverse();
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ delete leaves[i].pos;
+ }
+ return leaves;
+}
+
+// returns revs of all conflicts that is leaves such that
+// 1. are not deleted and
+// 2. are different than winning revision
+function collectConflicts(metadata) {
+ var win = winningRev(metadata);
+ var leaves = collectLeaves(metadata.rev_tree);
+ var conflicts = [];
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ var leaf = leaves[i];
+ if (leaf.rev !== win && !leaf.opts.deleted) {
+ conflicts.push(leaf.rev);
+ }
+ }
+ return conflicts;
+}
+
+export { collectConflicts as a, collectLeaves as c };
diff --git a/packages/pouchdb-lib/lib/environment-4ed993c7-4ed993c7.js b/packages/pouchdb-lib/lib/environment-4ed993c7-4ed993c7.js
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/packages/pouchdb-lib/lib/environment-4ed993c7-4ed993c7.js
@@ -0,0 +1 @@
+
diff --git a/packages/pouchdb-lib/lib/environment-4ed993c7.js b/packages/pouchdb-lib/lib/environment-4ed993c7.js
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/packages/pouchdb-lib/lib/environment-4ed993c7.js
@@ -0,0 +1 @@
+
diff --git a/packages/pouchdb-lib/lib/fetch-a9c3fc6d.js b/packages/pouchdb-lib/lib/fetch-a9c3fc6d.js
new file mode 100644
index 0000000000..11d11f8c29
--- /dev/null
+++ b/packages/pouchdb-lib/lib/fetch-a9c3fc6d.js
@@ -0,0 +1,95905 @@
+import Stream from 'stream';
+import http from 'http';
+import Url$1 from 'url';
+import require$$0$1 from 'punycode';
+import https from 'https';
+import zlib from 'zlib';
+import { a as getAugmentedNamespace, c as commonjsGlobal, g as getDefaultExportFromCjs } from './_commonjsHelpers-24198af3.js';
+import require$$0$2 from 'util';
+
+var publicApi = {};
+
+var URL$2 = {exports: {}};
+
+var conversions = {};
+var lib = conversions;
+
+function sign(x) {
+ return x < 0 ? -1 : 1;
+}
+
+function evenRound(x) {
+ // Round x to the nearest integer, choosing the even integer if it lies halfway between two.
+ if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)
+ return Math.floor(x);
+ } else {
+ return Math.round(x);
+ }
+}
+
+function createNumberConversion(bitLength, typeOpts) {
+ if (!typeOpts.unsigned) {
+ --bitLength;
+ }
+ const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
+ const upperBound = Math.pow(2, bitLength) - 1;
+
+ const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
+ const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
+
+ return function(V, opts) {
+ if (!opts) opts = {};
+
+ let x = +V;
+
+ if (opts.enforceRange) {
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite number");
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ if (x < lowerBound || x > upperBound) {
+ throw new TypeError("Argument is not in byte range");
+ }
+
+ return x;
+ }
+
+ if (!isNaN(x) && opts.clamp) {
+ x = evenRound(x);
+
+ if (x < lowerBound) x = lowerBound;
+ if (x > upperBound) x = upperBound;
+ return x;
+ }
+
+ if (!Number.isFinite(x) || x === 0) {
+ return 0;
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ x = x % moduloVal;
+
+ if (!typeOpts.unsigned && x >= moduloBound) {
+ return x - moduloVal;
+ } else if (typeOpts.unsigned) {
+ if (x < 0) {
+ x += moduloVal;
+ } else if (x === -0) { // don't return negative zero
+ return 0;
+ }
+ }
+
+ return x;
+ }
+}
+
+conversions["void"] = function () {
+ return undefined;
+};
+
+conversions["boolean"] = function (val) {
+ return !!val;
+};
+
+conversions["byte"] = createNumberConversion(8, { unsigned: false });
+conversions["octet"] = createNumberConversion(8, { unsigned: true });
+
+conversions["short"] = createNumberConversion(16, { unsigned: false });
+conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
+
+conversions["long"] = createNumberConversion(32, { unsigned: false });
+conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
+
+conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
+conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
+
+conversions["double"] = function (V) {
+ const x = +V;
+
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite floating-point value");
+ }
+
+ return x;
+};
+
+conversions["unrestricted double"] = function (V) {
+ const x = +V;
+
+ if (isNaN(x)) {
+ throw new TypeError("Argument is NaN");
+ }
+
+ return x;
+};
+
+// not quite valid, but good enough for JS
+conversions["float"] = conversions["double"];
+conversions["unrestricted float"] = conversions["unrestricted double"];
+
+conversions["DOMString"] = function (V, opts) {
+ if (!opts) opts = {};
+
+ if (opts.treatNullAsEmptyString && V === null) {
+ return "";
+ }
+
+ return String(V);
+};
+
+conversions["ByteString"] = function (V, opts) {
+ const x = String(V);
+ let c = undefined;
+ for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
+ if (c > 255) {
+ throw new TypeError("Argument is not a valid bytestring");
+ }
+ }
+
+ return x;
+};
+
+conversions["USVString"] = function (V) {
+ const S = String(V);
+ const n = S.length;
+ const U = [];
+ for (let i = 0; i < n; ++i) {
+ const c = S.charCodeAt(i);
+ if (c < 0xD800 || c > 0xDFFF) {
+ U.push(String.fromCodePoint(c));
+ } else if (0xDC00 <= c && c <= 0xDFFF) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ if (i === n - 1) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ const d = S.charCodeAt(i + 1);
+ if (0xDC00 <= d && d <= 0xDFFF) {
+ const a = c & 0x3FF;
+ const b = d & 0x3FF;
+ U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
+ ++i;
+ } else {
+ U.push(String.fromCodePoint(0xFFFD));
+ }
+ }
+ }
+ }
+
+ return U.join('');
+};
+
+conversions["Date"] = function (V, opts) {
+ if (!(V instanceof Date)) {
+ throw new TypeError("Argument is not a Date object");
+ }
+ if (isNaN(V)) {
+ return undefined;
+ }
+
+ return V;
+};
+
+conversions["RegExp"] = function (V, opts) {
+ if (!(V instanceof RegExp)) {
+ V = new RegExp(V);
+ }
+
+ return V;
+};
+
+var utils = {exports: {}};
+
+utils.exports;
+
+(function (module) {
+
+ module.exports.mixin = function mixin(target, source) {
+ const keys = Object.getOwnPropertyNames(source);
+ for (let i = 0; i < keys.length; ++i) {
+ Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
+ }
+ };
+
+ module.exports.wrapperSymbol = Symbol("wrapper");
+ module.exports.implSymbol = Symbol("impl");
+
+ module.exports.wrapperForImpl = function (impl) {
+ return impl[module.exports.wrapperSymbol];
+ };
+
+ module.exports.implForWrapper = function (wrapper) {
+ return wrapper[module.exports.implSymbol];
+ };
+} (utils));
+
+var utilsExports = utils.exports;
+
+var URLImpl = {};
+
+var urlStateMachine = {exports: {}};
+
+var tr46 = {};
+
+var require$$1$1 = [
+ [
+ [
+ 0,
+ 44
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 45,
+ 46
+ ],
+ "valid"
+ ],
+ [
+ [
+ 47,
+ 47
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 48,
+ 57
+ ],
+ "valid"
+ ],
+ [
+ [
+ 58,
+ 64
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 65,
+ 65
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 66,
+ 66
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 67,
+ 67
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 68,
+ 68
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 69,
+ 69
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 70,
+ 70
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 71,
+ 71
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 72,
+ 72
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 73,
+ 73
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 74,
+ 74
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 75,
+ 75
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 76,
+ 76
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 77,
+ 77
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 78,
+ 78
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 79,
+ 79
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 80,
+ 80
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 81,
+ 81
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 82,
+ 82
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 83,
+ 83
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 84,
+ 84
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 85,
+ 85
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 86,
+ 86
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 87,
+ 87
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 88,
+ 88
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 89,
+ 89
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 90,
+ 90
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 91,
+ 96
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 97,
+ 122
+ ],
+ "valid"
+ ],
+ [
+ [
+ 123,
+ 127
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 128,
+ 159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 160,
+ 160
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 161,
+ 167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 168,
+ 168
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776
+ ]
+ ],
+ [
+ [
+ 169,
+ 169
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 170,
+ 170
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 171,
+ 172
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 173,
+ 173
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 174,
+ 174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 175,
+ 175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 176,
+ 177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 178,
+ 178
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 179,
+ 179
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 180,
+ 180
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 181,
+ 181
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 182,
+ 182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 183,
+ 183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 184,
+ 184
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 807
+ ]
+ ],
+ [
+ [
+ 185,
+ 185
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 186,
+ 186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 187,
+ 187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 188,
+ 188
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 189,
+ 189
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 50
+ ]
+ ],
+ [
+ [
+ 190,
+ 190
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 191,
+ 191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 192,
+ 192
+ ],
+ "mapped",
+ [
+ 224
+ ]
+ ],
+ [
+ [
+ 193,
+ 193
+ ],
+ "mapped",
+ [
+ 225
+ ]
+ ],
+ [
+ [
+ 194,
+ 194
+ ],
+ "mapped",
+ [
+ 226
+ ]
+ ],
+ [
+ [
+ 195,
+ 195
+ ],
+ "mapped",
+ [
+ 227
+ ]
+ ],
+ [
+ [
+ 196,
+ 196
+ ],
+ "mapped",
+ [
+ 228
+ ]
+ ],
+ [
+ [
+ 197,
+ 197
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 198,
+ 198
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 199,
+ 199
+ ],
+ "mapped",
+ [
+ 231
+ ]
+ ],
+ [
+ [
+ 200,
+ 200
+ ],
+ "mapped",
+ [
+ 232
+ ]
+ ],
+ [
+ [
+ 201,
+ 201
+ ],
+ "mapped",
+ [
+ 233
+ ]
+ ],
+ [
+ [
+ 202,
+ 202
+ ],
+ "mapped",
+ [
+ 234
+ ]
+ ],
+ [
+ [
+ 203,
+ 203
+ ],
+ "mapped",
+ [
+ 235
+ ]
+ ],
+ [
+ [
+ 204,
+ 204
+ ],
+ "mapped",
+ [
+ 236
+ ]
+ ],
+ [
+ [
+ 205,
+ 205
+ ],
+ "mapped",
+ [
+ 237
+ ]
+ ],
+ [
+ [
+ 206,
+ 206
+ ],
+ "mapped",
+ [
+ 238
+ ]
+ ],
+ [
+ [
+ 207,
+ 207
+ ],
+ "mapped",
+ [
+ 239
+ ]
+ ],
+ [
+ [
+ 208,
+ 208
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 209,
+ 209
+ ],
+ "mapped",
+ [
+ 241
+ ]
+ ],
+ [
+ [
+ 210,
+ 210
+ ],
+ "mapped",
+ [
+ 242
+ ]
+ ],
+ [
+ [
+ 211,
+ 211
+ ],
+ "mapped",
+ [
+ 243
+ ]
+ ],
+ [
+ [
+ 212,
+ 212
+ ],
+ "mapped",
+ [
+ 244
+ ]
+ ],
+ [
+ [
+ 213,
+ 213
+ ],
+ "mapped",
+ [
+ 245
+ ]
+ ],
+ [
+ [
+ 214,
+ 214
+ ],
+ "mapped",
+ [
+ 246
+ ]
+ ],
+ [
+ [
+ 215,
+ 215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 216,
+ 216
+ ],
+ "mapped",
+ [
+ 248
+ ]
+ ],
+ [
+ [
+ 217,
+ 217
+ ],
+ "mapped",
+ [
+ 249
+ ]
+ ],
+ [
+ [
+ 218,
+ 218
+ ],
+ "mapped",
+ [
+ 250
+ ]
+ ],
+ [
+ [
+ 219,
+ 219
+ ],
+ "mapped",
+ [
+ 251
+ ]
+ ],
+ [
+ [
+ 220,
+ 220
+ ],
+ "mapped",
+ [
+ 252
+ ]
+ ],
+ [
+ [
+ 221,
+ 221
+ ],
+ "mapped",
+ [
+ 253
+ ]
+ ],
+ [
+ [
+ 222,
+ 222
+ ],
+ "mapped",
+ [
+ 254
+ ]
+ ],
+ [
+ [
+ 223,
+ 223
+ ],
+ "deviation",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 224,
+ 246
+ ],
+ "valid"
+ ],
+ [
+ [
+ 247,
+ 247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 248,
+ 255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 256,
+ 256
+ ],
+ "mapped",
+ [
+ 257
+ ]
+ ],
+ [
+ [
+ 257,
+ 257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 258,
+ 258
+ ],
+ "mapped",
+ [
+ 259
+ ]
+ ],
+ [
+ [
+ 259,
+ 259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 260,
+ 260
+ ],
+ "mapped",
+ [
+ 261
+ ]
+ ],
+ [
+ [
+ 261,
+ 261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 262,
+ 262
+ ],
+ "mapped",
+ [
+ 263
+ ]
+ ],
+ [
+ [
+ 263,
+ 263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 264,
+ 264
+ ],
+ "mapped",
+ [
+ 265
+ ]
+ ],
+ [
+ [
+ 265,
+ 265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 266,
+ 266
+ ],
+ "mapped",
+ [
+ 267
+ ]
+ ],
+ [
+ [
+ 267,
+ 267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 268,
+ 268
+ ],
+ "mapped",
+ [
+ 269
+ ]
+ ],
+ [
+ [
+ 269,
+ 269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 270,
+ 270
+ ],
+ "mapped",
+ [
+ 271
+ ]
+ ],
+ [
+ [
+ 271,
+ 271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 272,
+ 272
+ ],
+ "mapped",
+ [
+ 273
+ ]
+ ],
+ [
+ [
+ 273,
+ 273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 274,
+ 274
+ ],
+ "mapped",
+ [
+ 275
+ ]
+ ],
+ [
+ [
+ 275,
+ 275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 276,
+ 276
+ ],
+ "mapped",
+ [
+ 277
+ ]
+ ],
+ [
+ [
+ 277,
+ 277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 278,
+ 278
+ ],
+ "mapped",
+ [
+ 279
+ ]
+ ],
+ [
+ [
+ 279,
+ 279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 280,
+ 280
+ ],
+ "mapped",
+ [
+ 281
+ ]
+ ],
+ [
+ [
+ 281,
+ 281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 282,
+ 282
+ ],
+ "mapped",
+ [
+ 283
+ ]
+ ],
+ [
+ [
+ 283,
+ 283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 284,
+ 284
+ ],
+ "mapped",
+ [
+ 285
+ ]
+ ],
+ [
+ [
+ 285,
+ 285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 286,
+ 286
+ ],
+ "mapped",
+ [
+ 287
+ ]
+ ],
+ [
+ [
+ 287,
+ 287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 288,
+ 288
+ ],
+ "mapped",
+ [
+ 289
+ ]
+ ],
+ [
+ [
+ 289,
+ 289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 290,
+ 290
+ ],
+ "mapped",
+ [
+ 291
+ ]
+ ],
+ [
+ [
+ 291,
+ 291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 292,
+ 292
+ ],
+ "mapped",
+ [
+ 293
+ ]
+ ],
+ [
+ [
+ 293,
+ 293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 294,
+ 294
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 295,
+ 295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 296,
+ 296
+ ],
+ "mapped",
+ [
+ 297
+ ]
+ ],
+ [
+ [
+ 297,
+ 297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 298,
+ 298
+ ],
+ "mapped",
+ [
+ 299
+ ]
+ ],
+ [
+ [
+ 299,
+ 299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 300,
+ 300
+ ],
+ "mapped",
+ [
+ 301
+ ]
+ ],
+ [
+ [
+ 301,
+ 301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 302,
+ 302
+ ],
+ "mapped",
+ [
+ 303
+ ]
+ ],
+ [
+ [
+ 303,
+ 303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 304,
+ 304
+ ],
+ "mapped",
+ [
+ 105,
+ 775
+ ]
+ ],
+ [
+ [
+ 305,
+ 305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 306,
+ 307
+ ],
+ "mapped",
+ [
+ 105,
+ 106
+ ]
+ ],
+ [
+ [
+ 308,
+ 308
+ ],
+ "mapped",
+ [
+ 309
+ ]
+ ],
+ [
+ [
+ 309,
+ 309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 310,
+ 310
+ ],
+ "mapped",
+ [
+ 311
+ ]
+ ],
+ [
+ [
+ 311,
+ 312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 313,
+ 313
+ ],
+ "mapped",
+ [
+ 314
+ ]
+ ],
+ [
+ [
+ 314,
+ 314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 315,
+ 315
+ ],
+ "mapped",
+ [
+ 316
+ ]
+ ],
+ [
+ [
+ 316,
+ 316
+ ],
+ "valid"
+ ],
+ [
+ [
+ 317,
+ 317
+ ],
+ "mapped",
+ [
+ 318
+ ]
+ ],
+ [
+ [
+ 318,
+ 318
+ ],
+ "valid"
+ ],
+ [
+ [
+ 319,
+ 320
+ ],
+ "mapped",
+ [
+ 108,
+ 183
+ ]
+ ],
+ [
+ [
+ 321,
+ 321
+ ],
+ "mapped",
+ [
+ 322
+ ]
+ ],
+ [
+ [
+ 322,
+ 322
+ ],
+ "valid"
+ ],
+ [
+ [
+ 323,
+ 323
+ ],
+ "mapped",
+ [
+ 324
+ ]
+ ],
+ [
+ [
+ 324,
+ 324
+ ],
+ "valid"
+ ],
+ [
+ [
+ 325,
+ 325
+ ],
+ "mapped",
+ [
+ 326
+ ]
+ ],
+ [
+ [
+ 326,
+ 326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 327,
+ 327
+ ],
+ "mapped",
+ [
+ 328
+ ]
+ ],
+ [
+ [
+ 328,
+ 328
+ ],
+ "valid"
+ ],
+ [
+ [
+ 329,
+ 329
+ ],
+ "mapped",
+ [
+ 700,
+ 110
+ ]
+ ],
+ [
+ [
+ 330,
+ 330
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 331,
+ 331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 332,
+ 332
+ ],
+ "mapped",
+ [
+ 333
+ ]
+ ],
+ [
+ [
+ 333,
+ 333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 334,
+ 334
+ ],
+ "mapped",
+ [
+ 335
+ ]
+ ],
+ [
+ [
+ 335,
+ 335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 336,
+ 336
+ ],
+ "mapped",
+ [
+ 337
+ ]
+ ],
+ [
+ [
+ 337,
+ 337
+ ],
+ "valid"
+ ],
+ [
+ [
+ 338,
+ 338
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 339,
+ 339
+ ],
+ "valid"
+ ],
+ [
+ [
+ 340,
+ 340
+ ],
+ "mapped",
+ [
+ 341
+ ]
+ ],
+ [
+ [
+ 341,
+ 341
+ ],
+ "valid"
+ ],
+ [
+ [
+ 342,
+ 342
+ ],
+ "mapped",
+ [
+ 343
+ ]
+ ],
+ [
+ [
+ 343,
+ 343
+ ],
+ "valid"
+ ],
+ [
+ [
+ 344,
+ 344
+ ],
+ "mapped",
+ [
+ 345
+ ]
+ ],
+ [
+ [
+ 345,
+ 345
+ ],
+ "valid"
+ ],
+ [
+ [
+ 346,
+ 346
+ ],
+ "mapped",
+ [
+ 347
+ ]
+ ],
+ [
+ [
+ 347,
+ 347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 348,
+ 348
+ ],
+ "mapped",
+ [
+ 349
+ ]
+ ],
+ [
+ [
+ 349,
+ 349
+ ],
+ "valid"
+ ],
+ [
+ [
+ 350,
+ 350
+ ],
+ "mapped",
+ [
+ 351
+ ]
+ ],
+ [
+ [
+ 351,
+ 351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 352,
+ 352
+ ],
+ "mapped",
+ [
+ 353
+ ]
+ ],
+ [
+ [
+ 353,
+ 353
+ ],
+ "valid"
+ ],
+ [
+ [
+ 354,
+ 354
+ ],
+ "mapped",
+ [
+ 355
+ ]
+ ],
+ [
+ [
+ 355,
+ 355
+ ],
+ "valid"
+ ],
+ [
+ [
+ 356,
+ 356
+ ],
+ "mapped",
+ [
+ 357
+ ]
+ ],
+ [
+ [
+ 357,
+ 357
+ ],
+ "valid"
+ ],
+ [
+ [
+ 358,
+ 358
+ ],
+ "mapped",
+ [
+ 359
+ ]
+ ],
+ [
+ [
+ 359,
+ 359
+ ],
+ "valid"
+ ],
+ [
+ [
+ 360,
+ 360
+ ],
+ "mapped",
+ [
+ 361
+ ]
+ ],
+ [
+ [
+ 361,
+ 361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 362,
+ 362
+ ],
+ "mapped",
+ [
+ 363
+ ]
+ ],
+ [
+ [
+ 363,
+ 363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 364,
+ 364
+ ],
+ "mapped",
+ [
+ 365
+ ]
+ ],
+ [
+ [
+ 365,
+ 365
+ ],
+ "valid"
+ ],
+ [
+ [
+ 366,
+ 366
+ ],
+ "mapped",
+ [
+ 367
+ ]
+ ],
+ [
+ [
+ 367,
+ 367
+ ],
+ "valid"
+ ],
+ [
+ [
+ 368,
+ 368
+ ],
+ "mapped",
+ [
+ 369
+ ]
+ ],
+ [
+ [
+ 369,
+ 369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 370,
+ 370
+ ],
+ "mapped",
+ [
+ 371
+ ]
+ ],
+ [
+ [
+ 371,
+ 371
+ ],
+ "valid"
+ ],
+ [
+ [
+ 372,
+ 372
+ ],
+ "mapped",
+ [
+ 373
+ ]
+ ],
+ [
+ [
+ 373,
+ 373
+ ],
+ "valid"
+ ],
+ [
+ [
+ 374,
+ 374
+ ],
+ "mapped",
+ [
+ 375
+ ]
+ ],
+ [
+ [
+ 375,
+ 375
+ ],
+ "valid"
+ ],
+ [
+ [
+ 376,
+ 376
+ ],
+ "mapped",
+ [
+ 255
+ ]
+ ],
+ [
+ [
+ 377,
+ 377
+ ],
+ "mapped",
+ [
+ 378
+ ]
+ ],
+ [
+ [
+ 378,
+ 378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 379,
+ 379
+ ],
+ "mapped",
+ [
+ 380
+ ]
+ ],
+ [
+ [
+ 380,
+ 380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 381,
+ 381
+ ],
+ "mapped",
+ [
+ 382
+ ]
+ ],
+ [
+ [
+ 382,
+ 382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 383,
+ 383
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 384,
+ 384
+ ],
+ "valid"
+ ],
+ [
+ [
+ 385,
+ 385
+ ],
+ "mapped",
+ [
+ 595
+ ]
+ ],
+ [
+ [
+ 386,
+ 386
+ ],
+ "mapped",
+ [
+ 387
+ ]
+ ],
+ [
+ [
+ 387,
+ 387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 388,
+ 388
+ ],
+ "mapped",
+ [
+ 389
+ ]
+ ],
+ [
+ [
+ 389,
+ 389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 390,
+ 390
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 391,
+ 391
+ ],
+ "mapped",
+ [
+ 392
+ ]
+ ],
+ [
+ [
+ 392,
+ 392
+ ],
+ "valid"
+ ],
+ [
+ [
+ 393,
+ 393
+ ],
+ "mapped",
+ [
+ 598
+ ]
+ ],
+ [
+ [
+ 394,
+ 394
+ ],
+ "mapped",
+ [
+ 599
+ ]
+ ],
+ [
+ [
+ 395,
+ 395
+ ],
+ "mapped",
+ [
+ 396
+ ]
+ ],
+ [
+ [
+ 396,
+ 397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 398,
+ 398
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 399,
+ 399
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 400,
+ 400
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 401,
+ 401
+ ],
+ "mapped",
+ [
+ 402
+ ]
+ ],
+ [
+ [
+ 402,
+ 402
+ ],
+ "valid"
+ ],
+ [
+ [
+ 403,
+ 403
+ ],
+ "mapped",
+ [
+ 608
+ ]
+ ],
+ [
+ [
+ 404,
+ 404
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 405,
+ 405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 406,
+ 406
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 407,
+ 407
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 408,
+ 408
+ ],
+ "mapped",
+ [
+ 409
+ ]
+ ],
+ [
+ [
+ 409,
+ 411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 412,
+ 412
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 413,
+ 413
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 414,
+ 414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 415,
+ 415
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 416,
+ 416
+ ],
+ "mapped",
+ [
+ 417
+ ]
+ ],
+ [
+ [
+ 417,
+ 417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 418,
+ 418
+ ],
+ "mapped",
+ [
+ 419
+ ]
+ ],
+ [
+ [
+ 419,
+ 419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 420,
+ 420
+ ],
+ "mapped",
+ [
+ 421
+ ]
+ ],
+ [
+ [
+ 421,
+ 421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 422,
+ 422
+ ],
+ "mapped",
+ [
+ 640
+ ]
+ ],
+ [
+ [
+ 423,
+ 423
+ ],
+ "mapped",
+ [
+ 424
+ ]
+ ],
+ [
+ [
+ 424,
+ 424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 425,
+ 425
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 426,
+ 427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 428,
+ 428
+ ],
+ "mapped",
+ [
+ 429
+ ]
+ ],
+ [
+ [
+ 429,
+ 429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 430,
+ 430
+ ],
+ "mapped",
+ [
+ 648
+ ]
+ ],
+ [
+ [
+ 431,
+ 431
+ ],
+ "mapped",
+ [
+ 432
+ ]
+ ],
+ [
+ [
+ 432,
+ 432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 433,
+ 433
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 434,
+ 434
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 435,
+ 435
+ ],
+ "mapped",
+ [
+ 436
+ ]
+ ],
+ [
+ [
+ 436,
+ 436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 437,
+ 437
+ ],
+ "mapped",
+ [
+ 438
+ ]
+ ],
+ [
+ [
+ 438,
+ 438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 439,
+ 439
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 440,
+ 440
+ ],
+ "mapped",
+ [
+ 441
+ ]
+ ],
+ [
+ [
+ 441,
+ 443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 444,
+ 444
+ ],
+ "mapped",
+ [
+ 445
+ ]
+ ],
+ [
+ [
+ 445,
+ 451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 452,
+ 454
+ ],
+ "mapped",
+ [
+ 100,
+ 382
+ ]
+ ],
+ [
+ [
+ 455,
+ 457
+ ],
+ "mapped",
+ [
+ 108,
+ 106
+ ]
+ ],
+ [
+ [
+ 458,
+ 460
+ ],
+ "mapped",
+ [
+ 110,
+ 106
+ ]
+ ],
+ [
+ [
+ 461,
+ 461
+ ],
+ "mapped",
+ [
+ 462
+ ]
+ ],
+ [
+ [
+ 462,
+ 462
+ ],
+ "valid"
+ ],
+ [
+ [
+ 463,
+ 463
+ ],
+ "mapped",
+ [
+ 464
+ ]
+ ],
+ [
+ [
+ 464,
+ 464
+ ],
+ "valid"
+ ],
+ [
+ [
+ 465,
+ 465
+ ],
+ "mapped",
+ [
+ 466
+ ]
+ ],
+ [
+ [
+ 466,
+ 466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 467,
+ 467
+ ],
+ "mapped",
+ [
+ 468
+ ]
+ ],
+ [
+ [
+ 468,
+ 468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 469,
+ 469
+ ],
+ "mapped",
+ [
+ 470
+ ]
+ ],
+ [
+ [
+ 470,
+ 470
+ ],
+ "valid"
+ ],
+ [
+ [
+ 471,
+ 471
+ ],
+ "mapped",
+ [
+ 472
+ ]
+ ],
+ [
+ [
+ 472,
+ 472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 473,
+ 473
+ ],
+ "mapped",
+ [
+ 474
+ ]
+ ],
+ [
+ [
+ 474,
+ 474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 475,
+ 475
+ ],
+ "mapped",
+ [
+ 476
+ ]
+ ],
+ [
+ [
+ 476,
+ 477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 478,
+ 478
+ ],
+ "mapped",
+ [
+ 479
+ ]
+ ],
+ [
+ [
+ 479,
+ 479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 480,
+ 480
+ ],
+ "mapped",
+ [
+ 481
+ ]
+ ],
+ [
+ [
+ 481,
+ 481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 482,
+ 482
+ ],
+ "mapped",
+ [
+ 483
+ ]
+ ],
+ [
+ [
+ 483,
+ 483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 484,
+ 484
+ ],
+ "mapped",
+ [
+ 485
+ ]
+ ],
+ [
+ [
+ 485,
+ 485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 486,
+ 486
+ ],
+ "mapped",
+ [
+ 487
+ ]
+ ],
+ [
+ [
+ 487,
+ 487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 488,
+ 488
+ ],
+ "mapped",
+ [
+ 489
+ ]
+ ],
+ [
+ [
+ 489,
+ 489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 490,
+ 490
+ ],
+ "mapped",
+ [
+ 491
+ ]
+ ],
+ [
+ [
+ 491,
+ 491
+ ],
+ "valid"
+ ],
+ [
+ [
+ 492,
+ 492
+ ],
+ "mapped",
+ [
+ 493
+ ]
+ ],
+ [
+ [
+ 493,
+ 493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 494,
+ 494
+ ],
+ "mapped",
+ [
+ 495
+ ]
+ ],
+ [
+ [
+ 495,
+ 496
+ ],
+ "valid"
+ ],
+ [
+ [
+ 497,
+ 499
+ ],
+ "mapped",
+ [
+ 100,
+ 122
+ ]
+ ],
+ [
+ [
+ 500,
+ 500
+ ],
+ "mapped",
+ [
+ 501
+ ]
+ ],
+ [
+ [
+ 501,
+ 501
+ ],
+ "valid"
+ ],
+ [
+ [
+ 502,
+ 502
+ ],
+ "mapped",
+ [
+ 405
+ ]
+ ],
+ [
+ [
+ 503,
+ 503
+ ],
+ "mapped",
+ [
+ 447
+ ]
+ ],
+ [
+ [
+ 504,
+ 504
+ ],
+ "mapped",
+ [
+ 505
+ ]
+ ],
+ [
+ [
+ 505,
+ 505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 506,
+ 506
+ ],
+ "mapped",
+ [
+ 507
+ ]
+ ],
+ [
+ [
+ 507,
+ 507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 508,
+ 508
+ ],
+ "mapped",
+ [
+ 509
+ ]
+ ],
+ [
+ [
+ 509,
+ 509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 510,
+ 510
+ ],
+ "mapped",
+ [
+ 511
+ ]
+ ],
+ [
+ [
+ 511,
+ 511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 512,
+ 512
+ ],
+ "mapped",
+ [
+ 513
+ ]
+ ],
+ [
+ [
+ 513,
+ 513
+ ],
+ "valid"
+ ],
+ [
+ [
+ 514,
+ 514
+ ],
+ "mapped",
+ [
+ 515
+ ]
+ ],
+ [
+ [
+ 515,
+ 515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 516,
+ 516
+ ],
+ "mapped",
+ [
+ 517
+ ]
+ ],
+ [
+ [
+ 517,
+ 517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 518,
+ 518
+ ],
+ "mapped",
+ [
+ 519
+ ]
+ ],
+ [
+ [
+ 519,
+ 519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 520,
+ 520
+ ],
+ "mapped",
+ [
+ 521
+ ]
+ ],
+ [
+ [
+ 521,
+ 521
+ ],
+ "valid"
+ ],
+ [
+ [
+ 522,
+ 522
+ ],
+ "mapped",
+ [
+ 523
+ ]
+ ],
+ [
+ [
+ 523,
+ 523
+ ],
+ "valid"
+ ],
+ [
+ [
+ 524,
+ 524
+ ],
+ "mapped",
+ [
+ 525
+ ]
+ ],
+ [
+ [
+ 525,
+ 525
+ ],
+ "valid"
+ ],
+ [
+ [
+ 526,
+ 526
+ ],
+ "mapped",
+ [
+ 527
+ ]
+ ],
+ [
+ [
+ 527,
+ 527
+ ],
+ "valid"
+ ],
+ [
+ [
+ 528,
+ 528
+ ],
+ "mapped",
+ [
+ 529
+ ]
+ ],
+ [
+ [
+ 529,
+ 529
+ ],
+ "valid"
+ ],
+ [
+ [
+ 530,
+ 530
+ ],
+ "mapped",
+ [
+ 531
+ ]
+ ],
+ [
+ [
+ 531,
+ 531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 532,
+ 532
+ ],
+ "mapped",
+ [
+ 533
+ ]
+ ],
+ [
+ [
+ 533,
+ 533
+ ],
+ "valid"
+ ],
+ [
+ [
+ 534,
+ 534
+ ],
+ "mapped",
+ [
+ 535
+ ]
+ ],
+ [
+ [
+ 535,
+ 535
+ ],
+ "valid"
+ ],
+ [
+ [
+ 536,
+ 536
+ ],
+ "mapped",
+ [
+ 537
+ ]
+ ],
+ [
+ [
+ 537,
+ 537
+ ],
+ "valid"
+ ],
+ [
+ [
+ 538,
+ 538
+ ],
+ "mapped",
+ [
+ 539
+ ]
+ ],
+ [
+ [
+ 539,
+ 539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 540,
+ 540
+ ],
+ "mapped",
+ [
+ 541
+ ]
+ ],
+ [
+ [
+ 541,
+ 541
+ ],
+ "valid"
+ ],
+ [
+ [
+ 542,
+ 542
+ ],
+ "mapped",
+ [
+ 543
+ ]
+ ],
+ [
+ [
+ 543,
+ 543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 544,
+ 544
+ ],
+ "mapped",
+ [
+ 414
+ ]
+ ],
+ [
+ [
+ 545,
+ 545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 546,
+ 546
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 547,
+ 547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 548,
+ 548
+ ],
+ "mapped",
+ [
+ 549
+ ]
+ ],
+ [
+ [
+ 549,
+ 549
+ ],
+ "valid"
+ ],
+ [
+ [
+ 550,
+ 550
+ ],
+ "mapped",
+ [
+ 551
+ ]
+ ],
+ [
+ [
+ 551,
+ 551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 552,
+ 552
+ ],
+ "mapped",
+ [
+ 553
+ ]
+ ],
+ [
+ [
+ 553,
+ 553
+ ],
+ "valid"
+ ],
+ [
+ [
+ 554,
+ 554
+ ],
+ "mapped",
+ [
+ 555
+ ]
+ ],
+ [
+ [
+ 555,
+ 555
+ ],
+ "valid"
+ ],
+ [
+ [
+ 556,
+ 556
+ ],
+ "mapped",
+ [
+ 557
+ ]
+ ],
+ [
+ [
+ 557,
+ 557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 558,
+ 558
+ ],
+ "mapped",
+ [
+ 559
+ ]
+ ],
+ [
+ [
+ 559,
+ 559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 560,
+ 560
+ ],
+ "mapped",
+ [
+ 561
+ ]
+ ],
+ [
+ [
+ 561,
+ 561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 562,
+ 562
+ ],
+ "mapped",
+ [
+ 563
+ ]
+ ],
+ [
+ [
+ 563,
+ 563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 564,
+ 566
+ ],
+ "valid"
+ ],
+ [
+ [
+ 567,
+ 569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 570,
+ 570
+ ],
+ "mapped",
+ [
+ 11365
+ ]
+ ],
+ [
+ [
+ 571,
+ 571
+ ],
+ "mapped",
+ [
+ 572
+ ]
+ ],
+ [
+ [
+ 572,
+ 572
+ ],
+ "valid"
+ ],
+ [
+ [
+ 573,
+ 573
+ ],
+ "mapped",
+ [
+ 410
+ ]
+ ],
+ [
+ [
+ 574,
+ 574
+ ],
+ "mapped",
+ [
+ 11366
+ ]
+ ],
+ [
+ [
+ 575,
+ 576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 577,
+ 577
+ ],
+ "mapped",
+ [
+ 578
+ ]
+ ],
+ [
+ [
+ 578,
+ 578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 579,
+ 579
+ ],
+ "mapped",
+ [
+ 384
+ ]
+ ],
+ [
+ [
+ 580,
+ 580
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 581,
+ 581
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 582,
+ 582
+ ],
+ "mapped",
+ [
+ 583
+ ]
+ ],
+ [
+ [
+ 583,
+ 583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 584,
+ 584
+ ],
+ "mapped",
+ [
+ 585
+ ]
+ ],
+ [
+ [
+ 585,
+ 585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 586,
+ 586
+ ],
+ "mapped",
+ [
+ 587
+ ]
+ ],
+ [
+ [
+ 587,
+ 587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 588,
+ 588
+ ],
+ "mapped",
+ [
+ 589
+ ]
+ ],
+ [
+ [
+ 589,
+ 589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 590,
+ 590
+ ],
+ "mapped",
+ [
+ 591
+ ]
+ ],
+ [
+ [
+ 591,
+ 591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 592,
+ 680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 681,
+ 685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 686,
+ 687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 688,
+ 688
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 689,
+ 689
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 690,
+ 690
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 691,
+ 691
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 692,
+ 692
+ ],
+ "mapped",
+ [
+ 633
+ ]
+ ],
+ [
+ [
+ 693,
+ 693
+ ],
+ "mapped",
+ [
+ 635
+ ]
+ ],
+ [
+ [
+ 694,
+ 694
+ ],
+ "mapped",
+ [
+ 641
+ ]
+ ],
+ [
+ [
+ 695,
+ 695
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 696,
+ 696
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 697,
+ 705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 706,
+ 709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 710,
+ 721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 722,
+ 727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 728,
+ 728
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 774
+ ]
+ ],
+ [
+ [
+ 729,
+ 729
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 775
+ ]
+ ],
+ [
+ [
+ 730,
+ 730
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 778
+ ]
+ ],
+ [
+ [
+ 731,
+ 731
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 808
+ ]
+ ],
+ [
+ [
+ 732,
+ 732
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 771
+ ]
+ ],
+ [
+ [
+ 733,
+ 733
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 779
+ ]
+ ],
+ [
+ [
+ 734,
+ 734
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 735,
+ 735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 736,
+ 736
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 737,
+ 737
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 738,
+ 738
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 739,
+ 739
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 740,
+ 740
+ ],
+ "mapped",
+ [
+ 661
+ ]
+ ],
+ [
+ [
+ 741,
+ 745
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 746,
+ 747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 748,
+ 748
+ ],
+ "valid"
+ ],
+ [
+ [
+ 749,
+ 749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 750,
+ 750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 751,
+ 767
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 768,
+ 831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 832,
+ 832
+ ],
+ "mapped",
+ [
+ 768
+ ]
+ ],
+ [
+ [
+ 833,
+ 833
+ ],
+ "mapped",
+ [
+ 769
+ ]
+ ],
+ [
+ [
+ 834,
+ 834
+ ],
+ "valid"
+ ],
+ [
+ [
+ 835,
+ 835
+ ],
+ "mapped",
+ [
+ 787
+ ]
+ ],
+ [
+ [
+ 836,
+ 836
+ ],
+ "mapped",
+ [
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 837,
+ 837
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 838,
+ 846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 847,
+ 847
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 848,
+ 855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 856,
+ 860
+ ],
+ "valid"
+ ],
+ [
+ [
+ 861,
+ 863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 864,
+ 865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 866,
+ 866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 867,
+ 879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 880,
+ 880
+ ],
+ "mapped",
+ [
+ 881
+ ]
+ ],
+ [
+ [
+ 881,
+ 881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 882,
+ 882
+ ],
+ "mapped",
+ [
+ 883
+ ]
+ ],
+ [
+ [
+ 883,
+ 883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 884,
+ 884
+ ],
+ "mapped",
+ [
+ 697
+ ]
+ ],
+ [
+ [
+ 885,
+ 885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 886,
+ 886
+ ],
+ "mapped",
+ [
+ 887
+ ]
+ ],
+ [
+ [
+ 887,
+ 887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 888,
+ 889
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 890,
+ 890
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 953
+ ]
+ ],
+ [
+ [
+ 891,
+ 893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 894,
+ 894
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 895,
+ 895
+ ],
+ "mapped",
+ [
+ 1011
+ ]
+ ],
+ [
+ [
+ 896,
+ 899
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 900,
+ 900
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 901,
+ 901
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 902,
+ 902
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 903,
+ 903
+ ],
+ "mapped",
+ [
+ 183
+ ]
+ ],
+ [
+ [
+ 904,
+ 904
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 905,
+ 905
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 906,
+ 906
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 907,
+ 907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 908,
+ 908
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 909,
+ 909
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 910,
+ 910
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 911,
+ 911
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 912,
+ 912
+ ],
+ "valid"
+ ],
+ [
+ [
+ 913,
+ 913
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 914,
+ 914
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 915,
+ 915
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 916,
+ 916
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 917,
+ 917
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 918,
+ 918
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 919,
+ 919
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 920,
+ 920
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 921,
+ 921
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 922,
+ 922
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 923,
+ 923
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 924,
+ 924
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 925,
+ 925
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 926,
+ 926
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 927,
+ 927
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 928,
+ 928
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 929,
+ 929
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 930,
+ 930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 931,
+ 931
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 932,
+ 932
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 933,
+ 933
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 934,
+ 934
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 935,
+ 935
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 936,
+ 936
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 937,
+ 937
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 938,
+ 938
+ ],
+ "mapped",
+ [
+ 970
+ ]
+ ],
+ [
+ [
+ 939,
+ 939
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 940,
+ 961
+ ],
+ "valid"
+ ],
+ [
+ [
+ 962,
+ 962
+ ],
+ "deviation",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 963,
+ 974
+ ],
+ "valid"
+ ],
+ [
+ [
+ 975,
+ 975
+ ],
+ "mapped",
+ [
+ 983
+ ]
+ ],
+ [
+ [
+ 976,
+ 976
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 977,
+ 977
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 978,
+ 978
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 979,
+ 979
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 980,
+ 980
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 981,
+ 981
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 982,
+ 982
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 983,
+ 983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 984,
+ 984
+ ],
+ "mapped",
+ [
+ 985
+ ]
+ ],
+ [
+ [
+ 985,
+ 985
+ ],
+ "valid"
+ ],
+ [
+ [
+ 986,
+ 986
+ ],
+ "mapped",
+ [
+ 987
+ ]
+ ],
+ [
+ [
+ 987,
+ 987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 988,
+ 988
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 989,
+ 989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 990,
+ 990
+ ],
+ "mapped",
+ [
+ 991
+ ]
+ ],
+ [
+ [
+ 991,
+ 991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 992,
+ 992
+ ],
+ "mapped",
+ [
+ 993
+ ]
+ ],
+ [
+ [
+ 993,
+ 993
+ ],
+ "valid"
+ ],
+ [
+ [
+ 994,
+ 994
+ ],
+ "mapped",
+ [
+ 995
+ ]
+ ],
+ [
+ [
+ 995,
+ 995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 996,
+ 996
+ ],
+ "mapped",
+ [
+ 997
+ ]
+ ],
+ [
+ [
+ 997,
+ 997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 998,
+ 998
+ ],
+ "mapped",
+ [
+ 999
+ ]
+ ],
+ [
+ [
+ 999,
+ 999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1000,
+ 1000
+ ],
+ "mapped",
+ [
+ 1001
+ ]
+ ],
+ [
+ [
+ 1001,
+ 1001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1002,
+ 1002
+ ],
+ "mapped",
+ [
+ 1003
+ ]
+ ],
+ [
+ [
+ 1003,
+ 1003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1004,
+ 1004
+ ],
+ "mapped",
+ [
+ 1005
+ ]
+ ],
+ [
+ [
+ 1005,
+ 1005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1006,
+ 1006
+ ],
+ "mapped",
+ [
+ 1007
+ ]
+ ],
+ [
+ [
+ 1007,
+ 1007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1008,
+ 1008
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 1009,
+ 1009
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 1010,
+ 1010
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1011,
+ 1011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1012,
+ 1012
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 1013,
+ 1013
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 1014,
+ 1014
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1015,
+ 1015
+ ],
+ "mapped",
+ [
+ 1016
+ ]
+ ],
+ [
+ [
+ 1016,
+ 1016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1017,
+ 1017
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1018,
+ 1018
+ ],
+ "mapped",
+ [
+ 1019
+ ]
+ ],
+ [
+ [
+ 1019,
+ 1019
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1020,
+ 1020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1021,
+ 1021
+ ],
+ "mapped",
+ [
+ 891
+ ]
+ ],
+ [
+ [
+ 1022,
+ 1022
+ ],
+ "mapped",
+ [
+ 892
+ ]
+ ],
+ [
+ [
+ 1023,
+ 1023
+ ],
+ "mapped",
+ [
+ 893
+ ]
+ ],
+ [
+ [
+ 1024,
+ 1024
+ ],
+ "mapped",
+ [
+ 1104
+ ]
+ ],
+ [
+ [
+ 1025,
+ 1025
+ ],
+ "mapped",
+ [
+ 1105
+ ]
+ ],
+ [
+ [
+ 1026,
+ 1026
+ ],
+ "mapped",
+ [
+ 1106
+ ]
+ ],
+ [
+ [
+ 1027,
+ 1027
+ ],
+ "mapped",
+ [
+ 1107
+ ]
+ ],
+ [
+ [
+ 1028,
+ 1028
+ ],
+ "mapped",
+ [
+ 1108
+ ]
+ ],
+ [
+ [
+ 1029,
+ 1029
+ ],
+ "mapped",
+ [
+ 1109
+ ]
+ ],
+ [
+ [
+ 1030,
+ 1030
+ ],
+ "mapped",
+ [
+ 1110
+ ]
+ ],
+ [
+ [
+ 1031,
+ 1031
+ ],
+ "mapped",
+ [
+ 1111
+ ]
+ ],
+ [
+ [
+ 1032,
+ 1032
+ ],
+ "mapped",
+ [
+ 1112
+ ]
+ ],
+ [
+ [
+ 1033,
+ 1033
+ ],
+ "mapped",
+ [
+ 1113
+ ]
+ ],
+ [
+ [
+ 1034,
+ 1034
+ ],
+ "mapped",
+ [
+ 1114
+ ]
+ ],
+ [
+ [
+ 1035,
+ 1035
+ ],
+ "mapped",
+ [
+ 1115
+ ]
+ ],
+ [
+ [
+ 1036,
+ 1036
+ ],
+ "mapped",
+ [
+ 1116
+ ]
+ ],
+ [
+ [
+ 1037,
+ 1037
+ ],
+ "mapped",
+ [
+ 1117
+ ]
+ ],
+ [
+ [
+ 1038,
+ 1038
+ ],
+ "mapped",
+ [
+ 1118
+ ]
+ ],
+ [
+ [
+ 1039,
+ 1039
+ ],
+ "mapped",
+ [
+ 1119
+ ]
+ ],
+ [
+ [
+ 1040,
+ 1040
+ ],
+ "mapped",
+ [
+ 1072
+ ]
+ ],
+ [
+ [
+ 1041,
+ 1041
+ ],
+ "mapped",
+ [
+ 1073
+ ]
+ ],
+ [
+ [
+ 1042,
+ 1042
+ ],
+ "mapped",
+ [
+ 1074
+ ]
+ ],
+ [
+ [
+ 1043,
+ 1043
+ ],
+ "mapped",
+ [
+ 1075
+ ]
+ ],
+ [
+ [
+ 1044,
+ 1044
+ ],
+ "mapped",
+ [
+ 1076
+ ]
+ ],
+ [
+ [
+ 1045,
+ 1045
+ ],
+ "mapped",
+ [
+ 1077
+ ]
+ ],
+ [
+ [
+ 1046,
+ 1046
+ ],
+ "mapped",
+ [
+ 1078
+ ]
+ ],
+ [
+ [
+ 1047,
+ 1047
+ ],
+ "mapped",
+ [
+ 1079
+ ]
+ ],
+ [
+ [
+ 1048,
+ 1048
+ ],
+ "mapped",
+ [
+ 1080
+ ]
+ ],
+ [
+ [
+ 1049,
+ 1049
+ ],
+ "mapped",
+ [
+ 1081
+ ]
+ ],
+ [
+ [
+ 1050,
+ 1050
+ ],
+ "mapped",
+ [
+ 1082
+ ]
+ ],
+ [
+ [
+ 1051,
+ 1051
+ ],
+ "mapped",
+ [
+ 1083
+ ]
+ ],
+ [
+ [
+ 1052,
+ 1052
+ ],
+ "mapped",
+ [
+ 1084
+ ]
+ ],
+ [
+ [
+ 1053,
+ 1053
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 1054,
+ 1054
+ ],
+ "mapped",
+ [
+ 1086
+ ]
+ ],
+ [
+ [
+ 1055,
+ 1055
+ ],
+ "mapped",
+ [
+ 1087
+ ]
+ ],
+ [
+ [
+ 1056,
+ 1056
+ ],
+ "mapped",
+ [
+ 1088
+ ]
+ ],
+ [
+ [
+ 1057,
+ 1057
+ ],
+ "mapped",
+ [
+ 1089
+ ]
+ ],
+ [
+ [
+ 1058,
+ 1058
+ ],
+ "mapped",
+ [
+ 1090
+ ]
+ ],
+ [
+ [
+ 1059,
+ 1059
+ ],
+ "mapped",
+ [
+ 1091
+ ]
+ ],
+ [
+ [
+ 1060,
+ 1060
+ ],
+ "mapped",
+ [
+ 1092
+ ]
+ ],
+ [
+ [
+ 1061,
+ 1061
+ ],
+ "mapped",
+ [
+ 1093
+ ]
+ ],
+ [
+ [
+ 1062,
+ 1062
+ ],
+ "mapped",
+ [
+ 1094
+ ]
+ ],
+ [
+ [
+ 1063,
+ 1063
+ ],
+ "mapped",
+ [
+ 1095
+ ]
+ ],
+ [
+ [
+ 1064,
+ 1064
+ ],
+ "mapped",
+ [
+ 1096
+ ]
+ ],
+ [
+ [
+ 1065,
+ 1065
+ ],
+ "mapped",
+ [
+ 1097
+ ]
+ ],
+ [
+ [
+ 1066,
+ 1066
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 1067,
+ 1067
+ ],
+ "mapped",
+ [
+ 1099
+ ]
+ ],
+ [
+ [
+ 1068,
+ 1068
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 1069,
+ 1069
+ ],
+ "mapped",
+ [
+ 1101
+ ]
+ ],
+ [
+ [
+ 1070,
+ 1070
+ ],
+ "mapped",
+ [
+ 1102
+ ]
+ ],
+ [
+ [
+ 1071,
+ 1071
+ ],
+ "mapped",
+ [
+ 1103
+ ]
+ ],
+ [
+ [
+ 1072,
+ 1103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1104,
+ 1104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1105,
+ 1116
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1117,
+ 1117
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1118,
+ 1119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1120,
+ 1120
+ ],
+ "mapped",
+ [
+ 1121
+ ]
+ ],
+ [
+ [
+ 1121,
+ 1121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1122,
+ 1122
+ ],
+ "mapped",
+ [
+ 1123
+ ]
+ ],
+ [
+ [
+ 1123,
+ 1123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1124,
+ 1124
+ ],
+ "mapped",
+ [
+ 1125
+ ]
+ ],
+ [
+ [
+ 1125,
+ 1125
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1126,
+ 1126
+ ],
+ "mapped",
+ [
+ 1127
+ ]
+ ],
+ [
+ [
+ 1127,
+ 1127
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1128,
+ 1128
+ ],
+ "mapped",
+ [
+ 1129
+ ]
+ ],
+ [
+ [
+ 1129,
+ 1129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1130,
+ 1130
+ ],
+ "mapped",
+ [
+ 1131
+ ]
+ ],
+ [
+ [
+ 1131,
+ 1131
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1132,
+ 1132
+ ],
+ "mapped",
+ [
+ 1133
+ ]
+ ],
+ [
+ [
+ 1133,
+ 1133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1134,
+ 1134
+ ],
+ "mapped",
+ [
+ 1135
+ ]
+ ],
+ [
+ [
+ 1135,
+ 1135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1136,
+ 1136
+ ],
+ "mapped",
+ [
+ 1137
+ ]
+ ],
+ [
+ [
+ 1137,
+ 1137
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1138,
+ 1138
+ ],
+ "mapped",
+ [
+ 1139
+ ]
+ ],
+ [
+ [
+ 1139,
+ 1139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1140,
+ 1140
+ ],
+ "mapped",
+ [
+ 1141
+ ]
+ ],
+ [
+ [
+ 1141,
+ 1141
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1142,
+ 1142
+ ],
+ "mapped",
+ [
+ 1143
+ ]
+ ],
+ [
+ [
+ 1143,
+ 1143
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1144,
+ 1144
+ ],
+ "mapped",
+ [
+ 1145
+ ]
+ ],
+ [
+ [
+ 1145,
+ 1145
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1146,
+ 1146
+ ],
+ "mapped",
+ [
+ 1147
+ ]
+ ],
+ [
+ [
+ 1147,
+ 1147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1148,
+ 1148
+ ],
+ "mapped",
+ [
+ 1149
+ ]
+ ],
+ [
+ [
+ 1149,
+ 1149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1150,
+ 1150
+ ],
+ "mapped",
+ [
+ 1151
+ ]
+ ],
+ [
+ [
+ 1151,
+ 1151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1152,
+ 1152
+ ],
+ "mapped",
+ [
+ 1153
+ ]
+ ],
+ [
+ [
+ 1153,
+ 1153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1154,
+ 1154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1155,
+ 1158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1159,
+ 1159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1160,
+ 1161
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1162,
+ 1162
+ ],
+ "mapped",
+ [
+ 1163
+ ]
+ ],
+ [
+ [
+ 1163,
+ 1163
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1164,
+ 1164
+ ],
+ "mapped",
+ [
+ 1165
+ ]
+ ],
+ [
+ [
+ 1165,
+ 1165
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1166,
+ 1166
+ ],
+ "mapped",
+ [
+ 1167
+ ]
+ ],
+ [
+ [
+ 1167,
+ 1167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1168,
+ 1168
+ ],
+ "mapped",
+ [
+ 1169
+ ]
+ ],
+ [
+ [
+ 1169,
+ 1169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1170,
+ 1170
+ ],
+ "mapped",
+ [
+ 1171
+ ]
+ ],
+ [
+ [
+ 1171,
+ 1171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1172,
+ 1172
+ ],
+ "mapped",
+ [
+ 1173
+ ]
+ ],
+ [
+ [
+ 1173,
+ 1173
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1174,
+ 1174
+ ],
+ "mapped",
+ [
+ 1175
+ ]
+ ],
+ [
+ [
+ 1175,
+ 1175
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1176,
+ 1176
+ ],
+ "mapped",
+ [
+ 1177
+ ]
+ ],
+ [
+ [
+ 1177,
+ 1177
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1178,
+ 1178
+ ],
+ "mapped",
+ [
+ 1179
+ ]
+ ],
+ [
+ [
+ 1179,
+ 1179
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1180,
+ 1180
+ ],
+ "mapped",
+ [
+ 1181
+ ]
+ ],
+ [
+ [
+ 1181,
+ 1181
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1182,
+ 1182
+ ],
+ "mapped",
+ [
+ 1183
+ ]
+ ],
+ [
+ [
+ 1183,
+ 1183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1184,
+ 1184
+ ],
+ "mapped",
+ [
+ 1185
+ ]
+ ],
+ [
+ [
+ 1185,
+ 1185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1186,
+ 1186
+ ],
+ "mapped",
+ [
+ 1187
+ ]
+ ],
+ [
+ [
+ 1187,
+ 1187
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1188,
+ 1188
+ ],
+ "mapped",
+ [
+ 1189
+ ]
+ ],
+ [
+ [
+ 1189,
+ 1189
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1190,
+ 1190
+ ],
+ "mapped",
+ [
+ 1191
+ ]
+ ],
+ [
+ [
+ 1191,
+ 1191
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1192,
+ 1192
+ ],
+ "mapped",
+ [
+ 1193
+ ]
+ ],
+ [
+ [
+ 1193,
+ 1193
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1194,
+ 1194
+ ],
+ "mapped",
+ [
+ 1195
+ ]
+ ],
+ [
+ [
+ 1195,
+ 1195
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1196,
+ 1196
+ ],
+ "mapped",
+ [
+ 1197
+ ]
+ ],
+ [
+ [
+ 1197,
+ 1197
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1198,
+ 1198
+ ],
+ "mapped",
+ [
+ 1199
+ ]
+ ],
+ [
+ [
+ 1199,
+ 1199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1200,
+ 1200
+ ],
+ "mapped",
+ [
+ 1201
+ ]
+ ],
+ [
+ [
+ 1201,
+ 1201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1202,
+ 1202
+ ],
+ "mapped",
+ [
+ 1203
+ ]
+ ],
+ [
+ [
+ 1203,
+ 1203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1204,
+ 1204
+ ],
+ "mapped",
+ [
+ 1205
+ ]
+ ],
+ [
+ [
+ 1205,
+ 1205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1206,
+ 1206
+ ],
+ "mapped",
+ [
+ 1207
+ ]
+ ],
+ [
+ [
+ 1207,
+ 1207
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1208,
+ 1208
+ ],
+ "mapped",
+ [
+ 1209
+ ]
+ ],
+ [
+ [
+ 1209,
+ 1209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1210,
+ 1210
+ ],
+ "mapped",
+ [
+ 1211
+ ]
+ ],
+ [
+ [
+ 1211,
+ 1211
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1212,
+ 1212
+ ],
+ "mapped",
+ [
+ 1213
+ ]
+ ],
+ [
+ [
+ 1213,
+ 1213
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1214,
+ 1214
+ ],
+ "mapped",
+ [
+ 1215
+ ]
+ ],
+ [
+ [
+ 1215,
+ 1215
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1216,
+ 1216
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1217,
+ 1217
+ ],
+ "mapped",
+ [
+ 1218
+ ]
+ ],
+ [
+ [
+ 1218,
+ 1218
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1219,
+ 1219
+ ],
+ "mapped",
+ [
+ 1220
+ ]
+ ],
+ [
+ [
+ 1220,
+ 1220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1221,
+ 1221
+ ],
+ "mapped",
+ [
+ 1222
+ ]
+ ],
+ [
+ [
+ 1222,
+ 1222
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1223,
+ 1223
+ ],
+ "mapped",
+ [
+ 1224
+ ]
+ ],
+ [
+ [
+ 1224,
+ 1224
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1225,
+ 1225
+ ],
+ "mapped",
+ [
+ 1226
+ ]
+ ],
+ [
+ [
+ 1226,
+ 1226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1227,
+ 1227
+ ],
+ "mapped",
+ [
+ 1228
+ ]
+ ],
+ [
+ [
+ 1228,
+ 1228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1229,
+ 1229
+ ],
+ "mapped",
+ [
+ 1230
+ ]
+ ],
+ [
+ [
+ 1230,
+ 1230
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1231,
+ 1231
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1232,
+ 1232
+ ],
+ "mapped",
+ [
+ 1233
+ ]
+ ],
+ [
+ [
+ 1233,
+ 1233
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1234,
+ 1234
+ ],
+ "mapped",
+ [
+ 1235
+ ]
+ ],
+ [
+ [
+ 1235,
+ 1235
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1236,
+ 1236
+ ],
+ "mapped",
+ [
+ 1237
+ ]
+ ],
+ [
+ [
+ 1237,
+ 1237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1238,
+ 1238
+ ],
+ "mapped",
+ [
+ 1239
+ ]
+ ],
+ [
+ [
+ 1239,
+ 1239
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1240,
+ 1240
+ ],
+ "mapped",
+ [
+ 1241
+ ]
+ ],
+ [
+ [
+ 1241,
+ 1241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1242,
+ 1242
+ ],
+ "mapped",
+ [
+ 1243
+ ]
+ ],
+ [
+ [
+ 1243,
+ 1243
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1244,
+ 1244
+ ],
+ "mapped",
+ [
+ 1245
+ ]
+ ],
+ [
+ [
+ 1245,
+ 1245
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1246,
+ 1246
+ ],
+ "mapped",
+ [
+ 1247
+ ]
+ ],
+ [
+ [
+ 1247,
+ 1247
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1248,
+ 1248
+ ],
+ "mapped",
+ [
+ 1249
+ ]
+ ],
+ [
+ [
+ 1249,
+ 1249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1250,
+ 1250
+ ],
+ "mapped",
+ [
+ 1251
+ ]
+ ],
+ [
+ [
+ 1251,
+ 1251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1252,
+ 1252
+ ],
+ "mapped",
+ [
+ 1253
+ ]
+ ],
+ [
+ [
+ 1253,
+ 1253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1254,
+ 1254
+ ],
+ "mapped",
+ [
+ 1255
+ ]
+ ],
+ [
+ [
+ 1255,
+ 1255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1256,
+ 1256
+ ],
+ "mapped",
+ [
+ 1257
+ ]
+ ],
+ [
+ [
+ 1257,
+ 1257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1258,
+ 1258
+ ],
+ "mapped",
+ [
+ 1259
+ ]
+ ],
+ [
+ [
+ 1259,
+ 1259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1260,
+ 1260
+ ],
+ "mapped",
+ [
+ 1261
+ ]
+ ],
+ [
+ [
+ 1261,
+ 1261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1262,
+ 1262
+ ],
+ "mapped",
+ [
+ 1263
+ ]
+ ],
+ [
+ [
+ 1263,
+ 1263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1264,
+ 1264
+ ],
+ "mapped",
+ [
+ 1265
+ ]
+ ],
+ [
+ [
+ 1265,
+ 1265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1266,
+ 1266
+ ],
+ "mapped",
+ [
+ 1267
+ ]
+ ],
+ [
+ [
+ 1267,
+ 1267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1268,
+ 1268
+ ],
+ "mapped",
+ [
+ 1269
+ ]
+ ],
+ [
+ [
+ 1269,
+ 1269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1270,
+ 1270
+ ],
+ "mapped",
+ [
+ 1271
+ ]
+ ],
+ [
+ [
+ 1271,
+ 1271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1272,
+ 1272
+ ],
+ "mapped",
+ [
+ 1273
+ ]
+ ],
+ [
+ [
+ 1273,
+ 1273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1274,
+ 1274
+ ],
+ "mapped",
+ [
+ 1275
+ ]
+ ],
+ [
+ [
+ 1275,
+ 1275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1276,
+ 1276
+ ],
+ "mapped",
+ [
+ 1277
+ ]
+ ],
+ [
+ [
+ 1277,
+ 1277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1278,
+ 1278
+ ],
+ "mapped",
+ [
+ 1279
+ ]
+ ],
+ [
+ [
+ 1279,
+ 1279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1280,
+ 1280
+ ],
+ "mapped",
+ [
+ 1281
+ ]
+ ],
+ [
+ [
+ 1281,
+ 1281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1282,
+ 1282
+ ],
+ "mapped",
+ [
+ 1283
+ ]
+ ],
+ [
+ [
+ 1283,
+ 1283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1284,
+ 1284
+ ],
+ "mapped",
+ [
+ 1285
+ ]
+ ],
+ [
+ [
+ 1285,
+ 1285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1286,
+ 1286
+ ],
+ "mapped",
+ [
+ 1287
+ ]
+ ],
+ [
+ [
+ 1287,
+ 1287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1288,
+ 1288
+ ],
+ "mapped",
+ [
+ 1289
+ ]
+ ],
+ [
+ [
+ 1289,
+ 1289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1290,
+ 1290
+ ],
+ "mapped",
+ [
+ 1291
+ ]
+ ],
+ [
+ [
+ 1291,
+ 1291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1292,
+ 1292
+ ],
+ "mapped",
+ [
+ 1293
+ ]
+ ],
+ [
+ [
+ 1293,
+ 1293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1294,
+ 1294
+ ],
+ "mapped",
+ [
+ 1295
+ ]
+ ],
+ [
+ [
+ 1295,
+ 1295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1296,
+ 1296
+ ],
+ "mapped",
+ [
+ 1297
+ ]
+ ],
+ [
+ [
+ 1297,
+ 1297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1298,
+ 1298
+ ],
+ "mapped",
+ [
+ 1299
+ ]
+ ],
+ [
+ [
+ 1299,
+ 1299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1300,
+ 1300
+ ],
+ "mapped",
+ [
+ 1301
+ ]
+ ],
+ [
+ [
+ 1301,
+ 1301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1302,
+ 1302
+ ],
+ "mapped",
+ [
+ 1303
+ ]
+ ],
+ [
+ [
+ 1303,
+ 1303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1304,
+ 1304
+ ],
+ "mapped",
+ [
+ 1305
+ ]
+ ],
+ [
+ [
+ 1305,
+ 1305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1306,
+ 1306
+ ],
+ "mapped",
+ [
+ 1307
+ ]
+ ],
+ [
+ [
+ 1307,
+ 1307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1308,
+ 1308
+ ],
+ "mapped",
+ [
+ 1309
+ ]
+ ],
+ [
+ [
+ 1309,
+ 1309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1310,
+ 1310
+ ],
+ "mapped",
+ [
+ 1311
+ ]
+ ],
+ [
+ [
+ 1311,
+ 1311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1312,
+ 1312
+ ],
+ "mapped",
+ [
+ 1313
+ ]
+ ],
+ [
+ [
+ 1313,
+ 1313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1314,
+ 1314
+ ],
+ "mapped",
+ [
+ 1315
+ ]
+ ],
+ [
+ [
+ 1315,
+ 1315
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1316,
+ 1316
+ ],
+ "mapped",
+ [
+ 1317
+ ]
+ ],
+ [
+ [
+ 1317,
+ 1317
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1318,
+ 1318
+ ],
+ "mapped",
+ [
+ 1319
+ ]
+ ],
+ [
+ [
+ 1319,
+ 1319
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1320,
+ 1320
+ ],
+ "mapped",
+ [
+ 1321
+ ]
+ ],
+ [
+ [
+ 1321,
+ 1321
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1322,
+ 1322
+ ],
+ "mapped",
+ [
+ 1323
+ ]
+ ],
+ [
+ [
+ 1323,
+ 1323
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1324,
+ 1324
+ ],
+ "mapped",
+ [
+ 1325
+ ]
+ ],
+ [
+ [
+ 1325,
+ 1325
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1326,
+ 1326
+ ],
+ "mapped",
+ [
+ 1327
+ ]
+ ],
+ [
+ [
+ 1327,
+ 1327
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1328,
+ 1328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1329,
+ 1329
+ ],
+ "mapped",
+ [
+ 1377
+ ]
+ ],
+ [
+ [
+ 1330,
+ 1330
+ ],
+ "mapped",
+ [
+ 1378
+ ]
+ ],
+ [
+ [
+ 1331,
+ 1331
+ ],
+ "mapped",
+ [
+ 1379
+ ]
+ ],
+ [
+ [
+ 1332,
+ 1332
+ ],
+ "mapped",
+ [
+ 1380
+ ]
+ ],
+ [
+ [
+ 1333,
+ 1333
+ ],
+ "mapped",
+ [
+ 1381
+ ]
+ ],
+ [
+ [
+ 1334,
+ 1334
+ ],
+ "mapped",
+ [
+ 1382
+ ]
+ ],
+ [
+ [
+ 1335,
+ 1335
+ ],
+ "mapped",
+ [
+ 1383
+ ]
+ ],
+ [
+ [
+ 1336,
+ 1336
+ ],
+ "mapped",
+ [
+ 1384
+ ]
+ ],
+ [
+ [
+ 1337,
+ 1337
+ ],
+ "mapped",
+ [
+ 1385
+ ]
+ ],
+ [
+ [
+ 1338,
+ 1338
+ ],
+ "mapped",
+ [
+ 1386
+ ]
+ ],
+ [
+ [
+ 1339,
+ 1339
+ ],
+ "mapped",
+ [
+ 1387
+ ]
+ ],
+ [
+ [
+ 1340,
+ 1340
+ ],
+ "mapped",
+ [
+ 1388
+ ]
+ ],
+ [
+ [
+ 1341,
+ 1341
+ ],
+ "mapped",
+ [
+ 1389
+ ]
+ ],
+ [
+ [
+ 1342,
+ 1342
+ ],
+ "mapped",
+ [
+ 1390
+ ]
+ ],
+ [
+ [
+ 1343,
+ 1343
+ ],
+ "mapped",
+ [
+ 1391
+ ]
+ ],
+ [
+ [
+ 1344,
+ 1344
+ ],
+ "mapped",
+ [
+ 1392
+ ]
+ ],
+ [
+ [
+ 1345,
+ 1345
+ ],
+ "mapped",
+ [
+ 1393
+ ]
+ ],
+ [
+ [
+ 1346,
+ 1346
+ ],
+ "mapped",
+ [
+ 1394
+ ]
+ ],
+ [
+ [
+ 1347,
+ 1347
+ ],
+ "mapped",
+ [
+ 1395
+ ]
+ ],
+ [
+ [
+ 1348,
+ 1348
+ ],
+ "mapped",
+ [
+ 1396
+ ]
+ ],
+ [
+ [
+ 1349,
+ 1349
+ ],
+ "mapped",
+ [
+ 1397
+ ]
+ ],
+ [
+ [
+ 1350,
+ 1350
+ ],
+ "mapped",
+ [
+ 1398
+ ]
+ ],
+ [
+ [
+ 1351,
+ 1351
+ ],
+ "mapped",
+ [
+ 1399
+ ]
+ ],
+ [
+ [
+ 1352,
+ 1352
+ ],
+ "mapped",
+ [
+ 1400
+ ]
+ ],
+ [
+ [
+ 1353,
+ 1353
+ ],
+ "mapped",
+ [
+ 1401
+ ]
+ ],
+ [
+ [
+ 1354,
+ 1354
+ ],
+ "mapped",
+ [
+ 1402
+ ]
+ ],
+ [
+ [
+ 1355,
+ 1355
+ ],
+ "mapped",
+ [
+ 1403
+ ]
+ ],
+ [
+ [
+ 1356,
+ 1356
+ ],
+ "mapped",
+ [
+ 1404
+ ]
+ ],
+ [
+ [
+ 1357,
+ 1357
+ ],
+ "mapped",
+ [
+ 1405
+ ]
+ ],
+ [
+ [
+ 1358,
+ 1358
+ ],
+ "mapped",
+ [
+ 1406
+ ]
+ ],
+ [
+ [
+ 1359,
+ 1359
+ ],
+ "mapped",
+ [
+ 1407
+ ]
+ ],
+ [
+ [
+ 1360,
+ 1360
+ ],
+ "mapped",
+ [
+ 1408
+ ]
+ ],
+ [
+ [
+ 1361,
+ 1361
+ ],
+ "mapped",
+ [
+ 1409
+ ]
+ ],
+ [
+ [
+ 1362,
+ 1362
+ ],
+ "mapped",
+ [
+ 1410
+ ]
+ ],
+ [
+ [
+ 1363,
+ 1363
+ ],
+ "mapped",
+ [
+ 1411
+ ]
+ ],
+ [
+ [
+ 1364,
+ 1364
+ ],
+ "mapped",
+ [
+ 1412
+ ]
+ ],
+ [
+ [
+ 1365,
+ 1365
+ ],
+ "mapped",
+ [
+ 1413
+ ]
+ ],
+ [
+ [
+ 1366,
+ 1366
+ ],
+ "mapped",
+ [
+ 1414
+ ]
+ ],
+ [
+ [
+ 1367,
+ 1368
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1369,
+ 1369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1370,
+ 1375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1376,
+ 1376
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1377,
+ 1414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1415,
+ 1415
+ ],
+ "mapped",
+ [
+ 1381,
+ 1410
+ ]
+ ],
+ [
+ [
+ 1416,
+ 1416
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1417,
+ 1417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1418,
+ 1418
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1419,
+ 1420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1421,
+ 1422
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1423,
+ 1423
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1424,
+ 1424
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1425,
+ 1441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1442,
+ 1442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1443,
+ 1455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1456,
+ 1465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1466,
+ 1466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1467,
+ 1469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1470,
+ 1470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1471,
+ 1471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1472,
+ 1472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1473,
+ 1474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1475,
+ 1475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1476,
+ 1476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1477,
+ 1477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1478,
+ 1478
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1479,
+ 1479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1480,
+ 1487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1488,
+ 1514
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1515,
+ 1519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1520,
+ 1524
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1525,
+ 1535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1536,
+ 1539
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1540,
+ 1540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1541,
+ 1541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1542,
+ 1546
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1547,
+ 1547
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1548,
+ 1548
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1549,
+ 1551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1552,
+ 1557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1558,
+ 1562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1563,
+ 1563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1564,
+ 1564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1565,
+ 1565
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1566,
+ 1566
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1567,
+ 1567
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1568,
+ 1568
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1569,
+ 1594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1595,
+ 1599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1600,
+ 1600
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1601,
+ 1618
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1619,
+ 1621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1622,
+ 1624
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1625,
+ 1630
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1631,
+ 1631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1632,
+ 1641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1642,
+ 1645
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1646,
+ 1647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1648,
+ 1652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1653,
+ 1653
+ ],
+ "mapped",
+ [
+ 1575,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1654,
+ 1654
+ ],
+ "mapped",
+ [
+ 1608,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1655,
+ 1655
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1656,
+ 1656
+ ],
+ "mapped",
+ [
+ 1610,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1657,
+ 1719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1720,
+ 1721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1722,
+ 1726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1727,
+ 1727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1728,
+ 1742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1743,
+ 1743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1744,
+ 1747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1748,
+ 1748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1749,
+ 1756
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1757,
+ 1757
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1758,
+ 1758
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1759,
+ 1768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1769,
+ 1769
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1770,
+ 1773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1774,
+ 1775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1776,
+ 1785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1786,
+ 1790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1791,
+ 1791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1792,
+ 1805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1806,
+ 1806
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1807,
+ 1807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1808,
+ 1836
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1837,
+ 1839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1840,
+ 1866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1867,
+ 1868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1869,
+ 1871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1872,
+ 1901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1902,
+ 1919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1920,
+ 1968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1969,
+ 1969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1970,
+ 1983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1984,
+ 2037
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2038,
+ 2042
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2043,
+ 2047
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2048,
+ 2093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2094,
+ 2095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2096,
+ 2110
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2111,
+ 2111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2112,
+ 2139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2140,
+ 2141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2142,
+ 2142
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2143,
+ 2207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2208,
+ 2208
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2209,
+ 2209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2210,
+ 2220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2221,
+ 2226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2227,
+ 2228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2229,
+ 2274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2275,
+ 2275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2276,
+ 2302
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2303,
+ 2303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2304,
+ 2304
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2305,
+ 2307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2308,
+ 2308
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2309,
+ 2361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2362,
+ 2363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2364,
+ 2381
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2382,
+ 2382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2383,
+ 2383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2384,
+ 2388
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2389,
+ 2389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2390,
+ 2391
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2392,
+ 2392
+ ],
+ "mapped",
+ [
+ 2325,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2393,
+ 2393
+ ],
+ "mapped",
+ [
+ 2326,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2394,
+ 2394
+ ],
+ "mapped",
+ [
+ 2327,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2395,
+ 2395
+ ],
+ "mapped",
+ [
+ 2332,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2396,
+ 2396
+ ],
+ "mapped",
+ [
+ 2337,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2397,
+ 2397
+ ],
+ "mapped",
+ [
+ 2338,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2398,
+ 2398
+ ],
+ "mapped",
+ [
+ 2347,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2399,
+ 2399
+ ],
+ "mapped",
+ [
+ 2351,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2400,
+ 2403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2404,
+ 2405
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2406,
+ 2415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2416,
+ 2416
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2417,
+ 2418
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2419,
+ 2423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2424,
+ 2424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2425,
+ 2426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2427,
+ 2428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2429,
+ 2429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2430,
+ 2431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2432,
+ 2432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2433,
+ 2435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2436,
+ 2436
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2437,
+ 2444
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2445,
+ 2446
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2447,
+ 2448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2449,
+ 2450
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2451,
+ 2472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2473,
+ 2473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2474,
+ 2480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2481,
+ 2481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2482,
+ 2482
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2483,
+ 2485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2486,
+ 2489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2490,
+ 2491
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2492,
+ 2492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2493,
+ 2493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2494,
+ 2500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2501,
+ 2502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2503,
+ 2504
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2505,
+ 2506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2507,
+ 2509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2510,
+ 2510
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2511,
+ 2518
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2519,
+ 2519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2520,
+ 2523
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2524,
+ 2524
+ ],
+ "mapped",
+ [
+ 2465,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2525,
+ 2525
+ ],
+ "mapped",
+ [
+ 2466,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2526,
+ 2526
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2527,
+ 2527
+ ],
+ "mapped",
+ [
+ 2479,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2528,
+ 2531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2532,
+ 2533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2534,
+ 2545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2546,
+ 2554
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2555,
+ 2555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2556,
+ 2560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2561,
+ 2561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2562,
+ 2562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2563,
+ 2563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2564,
+ 2564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2565,
+ 2570
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2571,
+ 2574
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2575,
+ 2576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2577,
+ 2578
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2579,
+ 2600
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2601,
+ 2601
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2602,
+ 2608
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2609,
+ 2609
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2610,
+ 2610
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2611,
+ 2611
+ ],
+ "mapped",
+ [
+ 2610,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2612,
+ 2612
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2613,
+ 2613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2614,
+ 2614
+ ],
+ "mapped",
+ [
+ 2616,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2615,
+ 2615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2616,
+ 2617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2618,
+ 2619
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2620,
+ 2620
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2621,
+ 2621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2622,
+ 2626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2627,
+ 2630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2631,
+ 2632
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2633,
+ 2634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2635,
+ 2637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2638,
+ 2640
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2641,
+ 2641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2642,
+ 2648
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2649,
+ 2649
+ ],
+ "mapped",
+ [
+ 2582,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2650,
+ 2650
+ ],
+ "mapped",
+ [
+ 2583,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2651,
+ 2651
+ ],
+ "mapped",
+ [
+ 2588,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2652,
+ 2652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2653,
+ 2653
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2654,
+ 2654
+ ],
+ "mapped",
+ [
+ 2603,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2655,
+ 2661
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2662,
+ 2676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2677,
+ 2677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2678,
+ 2688
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2689,
+ 2691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2692,
+ 2692
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2693,
+ 2699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2700,
+ 2700
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2701,
+ 2701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2702,
+ 2702
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2703,
+ 2705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2706,
+ 2706
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2707,
+ 2728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2729,
+ 2729
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2730,
+ 2736
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2737,
+ 2737
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2738,
+ 2739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2740,
+ 2740
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2741,
+ 2745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2746,
+ 2747
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2748,
+ 2757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2758,
+ 2758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2759,
+ 2761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2762,
+ 2762
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2763,
+ 2765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2766,
+ 2767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2768,
+ 2768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2769,
+ 2783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2784,
+ 2784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2785,
+ 2787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2788,
+ 2789
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2790,
+ 2799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2800,
+ 2800
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2801,
+ 2801
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2802,
+ 2808
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2809,
+ 2809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2810,
+ 2816
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2817,
+ 2819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2820,
+ 2820
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2821,
+ 2828
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2829,
+ 2830
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2831,
+ 2832
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2833,
+ 2834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2835,
+ 2856
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2857,
+ 2857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2858,
+ 2864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2865,
+ 2865
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2866,
+ 2867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2868,
+ 2868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2869,
+ 2869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2870,
+ 2873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2874,
+ 2875
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2876,
+ 2883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2884,
+ 2884
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2885,
+ 2886
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2887,
+ 2888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2889,
+ 2890
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2891,
+ 2893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2894,
+ 2901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2902,
+ 2903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2904,
+ 2907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2908,
+ 2908
+ ],
+ "mapped",
+ [
+ 2849,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2909,
+ 2909
+ ],
+ "mapped",
+ [
+ 2850,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2910,
+ 2910
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2911,
+ 2913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2914,
+ 2915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2916,
+ 2917
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2918,
+ 2927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2928,
+ 2928
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2929,
+ 2929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2930,
+ 2935
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2936,
+ 2945
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2946,
+ 2947
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2948,
+ 2948
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2949,
+ 2954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2955,
+ 2957
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2958,
+ 2960
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2961,
+ 2961
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2962,
+ 2965
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2966,
+ 2968
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2969,
+ 2970
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2971,
+ 2971
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2972,
+ 2972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2973,
+ 2973
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2974,
+ 2975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2976,
+ 2978
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2979,
+ 2980
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2981,
+ 2983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2984,
+ 2986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2987,
+ 2989
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2990,
+ 2997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2998,
+ 2998
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2999,
+ 3001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3002,
+ 3005
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3006,
+ 3010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3011,
+ 3013
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3014,
+ 3016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3017,
+ 3017
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3018,
+ 3021
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3022,
+ 3023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3024,
+ 3024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3025,
+ 3030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3031,
+ 3031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3032,
+ 3045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3046,
+ 3046
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3047,
+ 3055
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3056,
+ 3058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3059,
+ 3066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3067,
+ 3071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3072,
+ 3072
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3073,
+ 3075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3076,
+ 3076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3077,
+ 3084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3085,
+ 3085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3086,
+ 3088
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3089,
+ 3089
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3090,
+ 3112
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3113,
+ 3113
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3114,
+ 3123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3124,
+ 3124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3125,
+ 3129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3130,
+ 3132
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3133,
+ 3133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3134,
+ 3140
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3141,
+ 3141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3142,
+ 3144
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3145,
+ 3145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3146,
+ 3149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3150,
+ 3156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3157,
+ 3158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3159,
+ 3159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3160,
+ 3161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3162,
+ 3162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3163,
+ 3167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3168,
+ 3169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3170,
+ 3171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3172,
+ 3173
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3174,
+ 3183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3184,
+ 3191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3192,
+ 3199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3200,
+ 3200
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3201,
+ 3201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3202,
+ 3203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3204,
+ 3204
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3205,
+ 3212
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3213,
+ 3213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3214,
+ 3216
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3217,
+ 3217
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3218,
+ 3240
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3241,
+ 3241
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3242,
+ 3251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3252,
+ 3252
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3253,
+ 3257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3258,
+ 3259
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3260,
+ 3261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3262,
+ 3268
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3269,
+ 3269
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3270,
+ 3272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3273,
+ 3273
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3274,
+ 3277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3278,
+ 3284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3285,
+ 3286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3287,
+ 3293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3294,
+ 3294
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3295,
+ 3295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3296,
+ 3297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3298,
+ 3299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3300,
+ 3301
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3302,
+ 3311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3312,
+ 3312
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3313,
+ 3314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3315,
+ 3328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3329,
+ 3329
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3330,
+ 3331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3332,
+ 3332
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3333,
+ 3340
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3341,
+ 3341
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3342,
+ 3344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3345,
+ 3345
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3346,
+ 3368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3369,
+ 3369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3370,
+ 3385
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3386,
+ 3386
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3387,
+ 3388
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3389,
+ 3389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3390,
+ 3395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3396,
+ 3396
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3397,
+ 3397
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3398,
+ 3400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3401,
+ 3401
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3402,
+ 3405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3406,
+ 3406
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3407,
+ 3414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3415,
+ 3415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3416,
+ 3422
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3423,
+ 3423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3424,
+ 3425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3426,
+ 3427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3428,
+ 3429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3430,
+ 3439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3440,
+ 3445
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3446,
+ 3448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3449,
+ 3449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3450,
+ 3455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3456,
+ 3457
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3458,
+ 3459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3460,
+ 3460
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3461,
+ 3478
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3479,
+ 3481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3482,
+ 3505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3506,
+ 3506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3507,
+ 3515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3516,
+ 3516
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3517,
+ 3517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3518,
+ 3519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3520,
+ 3526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3527,
+ 3529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3530,
+ 3530
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3531,
+ 3534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3535,
+ 3540
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3541,
+ 3541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3542,
+ 3542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3543,
+ 3543
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3544,
+ 3551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3552,
+ 3557
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3558,
+ 3567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3568,
+ 3569
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3570,
+ 3571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3572,
+ 3572
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3573,
+ 3584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3585,
+ 3634
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3635,
+ 3635
+ ],
+ "mapped",
+ [
+ 3661,
+ 3634
+ ]
+ ],
+ [
+ [
+ 3636,
+ 3642
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3643,
+ 3646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3647,
+ 3647
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3648,
+ 3662
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3663,
+ 3663
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3664,
+ 3673
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3674,
+ 3675
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3676,
+ 3712
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3713,
+ 3714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3715,
+ 3715
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3716,
+ 3716
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3717,
+ 3718
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3719,
+ 3720
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3721,
+ 3721
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3722,
+ 3722
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3723,
+ 3724
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3725,
+ 3725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3726,
+ 3731
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3732,
+ 3735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3736,
+ 3736
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3737,
+ 3743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3744,
+ 3744
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3745,
+ 3747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3748,
+ 3748
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3749,
+ 3749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3750,
+ 3750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3751,
+ 3751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3752,
+ 3753
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3754,
+ 3755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3756,
+ 3756
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3757,
+ 3762
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3763,
+ 3763
+ ],
+ "mapped",
+ [
+ 3789,
+ 3762
+ ]
+ ],
+ [
+ [
+ 3764,
+ 3769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3770,
+ 3770
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3771,
+ 3773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3774,
+ 3775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3776,
+ 3780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3781,
+ 3781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3782,
+ 3782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3783,
+ 3783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3784,
+ 3789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3790,
+ 3791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3792,
+ 3801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3802,
+ 3803
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3804,
+ 3804
+ ],
+ "mapped",
+ [
+ 3755,
+ 3737
+ ]
+ ],
+ [
+ [
+ 3805,
+ 3805
+ ],
+ "mapped",
+ [
+ 3755,
+ 3745
+ ]
+ ],
+ [
+ [
+ 3806,
+ 3807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3808,
+ 3839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3840,
+ 3840
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3841,
+ 3850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3851,
+ 3851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3852,
+ 3852
+ ],
+ "mapped",
+ [
+ 3851
+ ]
+ ],
+ [
+ [
+ 3853,
+ 3863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3864,
+ 3865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3866,
+ 3871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3872,
+ 3881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3882,
+ 3892
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3893,
+ 3893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3894,
+ 3894
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3895,
+ 3895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3896,
+ 3896
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3897,
+ 3897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3898,
+ 3901
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3902,
+ 3906
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3907,
+ 3907
+ ],
+ "mapped",
+ [
+ 3906,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3908,
+ 3911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3912,
+ 3912
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3913,
+ 3916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3917,
+ 3917
+ ],
+ "mapped",
+ [
+ 3916,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3918,
+ 3921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3922,
+ 3922
+ ],
+ "mapped",
+ [
+ 3921,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3923,
+ 3926
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3927,
+ 3927
+ ],
+ "mapped",
+ [
+ 3926,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3928,
+ 3931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3932,
+ 3932
+ ],
+ "mapped",
+ [
+ 3931,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3933,
+ 3944
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3945,
+ 3945
+ ],
+ "mapped",
+ [
+ 3904,
+ 4021
+ ]
+ ],
+ [
+ [
+ 3946,
+ 3946
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3947,
+ 3948
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3949,
+ 3952
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3953,
+ 3954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3955,
+ 3955
+ ],
+ "mapped",
+ [
+ 3953,
+ 3954
+ ]
+ ],
+ [
+ [
+ 3956,
+ 3956
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3957,
+ 3957
+ ],
+ "mapped",
+ [
+ 3953,
+ 3956
+ ]
+ ],
+ [
+ [
+ 3958,
+ 3958
+ ],
+ "mapped",
+ [
+ 4018,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3959,
+ 3959
+ ],
+ "mapped",
+ [
+ 4018,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3960,
+ 3960
+ ],
+ "mapped",
+ [
+ 4019,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3961,
+ 3961
+ ],
+ "mapped",
+ [
+ 4019,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3962,
+ 3968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3969,
+ 3969
+ ],
+ "mapped",
+ [
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3970,
+ 3972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3973,
+ 3973
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3974,
+ 3979
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3980,
+ 3983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3984,
+ 3986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3987,
+ 3987
+ ],
+ "mapped",
+ [
+ 3986,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3988,
+ 3989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3990,
+ 3990
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3991,
+ 3991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3992,
+ 3992
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3993,
+ 3996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3997,
+ 3997
+ ],
+ "mapped",
+ [
+ 3996,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3998,
+ 4001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4002,
+ 4002
+ ],
+ "mapped",
+ [
+ 4001,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4003,
+ 4006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4007,
+ 4007
+ ],
+ "mapped",
+ [
+ 4006,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4008,
+ 4011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4012,
+ 4012
+ ],
+ "mapped",
+ [
+ 4011,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4013,
+ 4013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4014,
+ 4016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4017,
+ 4023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4024,
+ 4024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4025,
+ 4025
+ ],
+ "mapped",
+ [
+ 3984,
+ 4021
+ ]
+ ],
+ [
+ [
+ 4026,
+ 4028
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4029,
+ 4029
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4030,
+ 4037
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4038,
+ 4038
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4039,
+ 4044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4045,
+ 4045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4046,
+ 4046
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4047,
+ 4047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4048,
+ 4049
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4050,
+ 4052
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4053,
+ 4056
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4057,
+ 4058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4059,
+ 4095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4096,
+ 4129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4130,
+ 4130
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4131,
+ 4135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4136,
+ 4136
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4137,
+ 4138
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4139,
+ 4139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4140,
+ 4146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4147,
+ 4149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4150,
+ 4153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4154,
+ 4159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4160,
+ 4169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4170,
+ 4175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4176,
+ 4185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4186,
+ 4249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4250,
+ 4253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4254,
+ 4255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4256,
+ 4293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4294,
+ 4294
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4295,
+ 4295
+ ],
+ "mapped",
+ [
+ 11559
+ ]
+ ],
+ [
+ [
+ 4296,
+ 4300
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4301,
+ 4301
+ ],
+ "mapped",
+ [
+ 11565
+ ]
+ ],
+ [
+ [
+ 4302,
+ 4303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4304,
+ 4342
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4343,
+ 4344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4345,
+ 4346
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4347,
+ 4347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4348,
+ 4348
+ ],
+ "mapped",
+ [
+ 4316
+ ]
+ ],
+ [
+ [
+ 4349,
+ 4351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4352,
+ 4441
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4442,
+ 4446
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4447,
+ 4448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4449,
+ 4514
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4515,
+ 4519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4520,
+ 4601
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4602,
+ 4607
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4608,
+ 4614
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4615,
+ 4615
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4616,
+ 4678
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4679,
+ 4679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4680,
+ 4680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4681,
+ 4681
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4682,
+ 4685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4686,
+ 4687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4688,
+ 4694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4695,
+ 4695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4696,
+ 4696
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4697,
+ 4697
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4698,
+ 4701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4702,
+ 4703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4704,
+ 4742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4743,
+ 4743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4744,
+ 4744
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4745,
+ 4745
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4746,
+ 4749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4750,
+ 4751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4752,
+ 4782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4783,
+ 4783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4784,
+ 4784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4785,
+ 4785
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4786,
+ 4789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4790,
+ 4791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4792,
+ 4798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4799,
+ 4799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4800,
+ 4800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4801,
+ 4801
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4802,
+ 4805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4806,
+ 4807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4808,
+ 4814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4815,
+ 4815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4816,
+ 4822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4823,
+ 4823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4824,
+ 4846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4847,
+ 4847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4848,
+ 4878
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4879,
+ 4879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4880,
+ 4880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4881,
+ 4881
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4882,
+ 4885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4886,
+ 4887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4888,
+ 4894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4895,
+ 4895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4896,
+ 4934
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4935,
+ 4935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4936,
+ 4954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4955,
+ 4956
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4957,
+ 4958
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4959,
+ 4959
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4960,
+ 4960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4961,
+ 4988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4989,
+ 4991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4992,
+ 5007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5008,
+ 5017
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5018,
+ 5023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5024,
+ 5108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5109,
+ 5109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5110,
+ 5111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5112,
+ 5112
+ ],
+ "mapped",
+ [
+ 5104
+ ]
+ ],
+ [
+ [
+ 5113,
+ 5113
+ ],
+ "mapped",
+ [
+ 5105
+ ]
+ ],
+ [
+ [
+ 5114,
+ 5114
+ ],
+ "mapped",
+ [
+ 5106
+ ]
+ ],
+ [
+ [
+ 5115,
+ 5115
+ ],
+ "mapped",
+ [
+ 5107
+ ]
+ ],
+ [
+ [
+ 5116,
+ 5116
+ ],
+ "mapped",
+ [
+ 5108
+ ]
+ ],
+ [
+ [
+ 5117,
+ 5117
+ ],
+ "mapped",
+ [
+ 5109
+ ]
+ ],
+ [
+ [
+ 5118,
+ 5119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5120,
+ 5120
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5121,
+ 5740
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5741,
+ 5742
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5743,
+ 5750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5751,
+ 5759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5760,
+ 5760
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5761,
+ 5786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5787,
+ 5788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5789,
+ 5791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5792,
+ 5866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5867,
+ 5872
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5873,
+ 5880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5881,
+ 5887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5888,
+ 5900
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5901,
+ 5901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5902,
+ 5908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5909,
+ 5919
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5920,
+ 5940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5941,
+ 5942
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5943,
+ 5951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5952,
+ 5971
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5972,
+ 5983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5984,
+ 5996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5997,
+ 5997
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5998,
+ 6000
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6001,
+ 6001
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6002,
+ 6003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6004,
+ 6015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6016,
+ 6067
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6068,
+ 6069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6070,
+ 6099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6100,
+ 6102
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6103,
+ 6103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6104,
+ 6107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6108,
+ 6108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6109,
+ 6109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6110,
+ 6111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6112,
+ 6121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6122,
+ 6127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6128,
+ 6137
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6138,
+ 6143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6144,
+ 6149
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6150,
+ 6150
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6151,
+ 6154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6155,
+ 6157
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 6158,
+ 6158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6159,
+ 6159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6160,
+ 6169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6170,
+ 6175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6176,
+ 6263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6264,
+ 6271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6272,
+ 6313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6314,
+ 6314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6315,
+ 6319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6320,
+ 6389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6390,
+ 6399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6400,
+ 6428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6429,
+ 6430
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6431,
+ 6431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6432,
+ 6443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6444,
+ 6447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6448,
+ 6459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6460,
+ 6463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6464,
+ 6464
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6465,
+ 6467
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6468,
+ 6469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6470,
+ 6509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6510,
+ 6511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6512,
+ 6516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6517,
+ 6527
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6528,
+ 6569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6570,
+ 6571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6572,
+ 6575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6576,
+ 6601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6602,
+ 6607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6608,
+ 6617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6618,
+ 6618
+ ],
+ "valid",
+ [
+ ],
+ "XV8"
+ ],
+ [
+ [
+ 6619,
+ 6621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6622,
+ 6623
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6624,
+ 6655
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6656,
+ 6683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6684,
+ 6685
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6686,
+ 6687
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6688,
+ 6750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6751,
+ 6751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6752,
+ 6780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6781,
+ 6782
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6783,
+ 6793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6794,
+ 6799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6800,
+ 6809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6810,
+ 6815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6816,
+ 6822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6823,
+ 6823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6824,
+ 6829
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6830,
+ 6831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6832,
+ 6845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6846,
+ 6846
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6847,
+ 6911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6912,
+ 6987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6988,
+ 6991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6992,
+ 7001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7002,
+ 7018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7019,
+ 7027
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7028,
+ 7036
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7037,
+ 7039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7040,
+ 7082
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7083,
+ 7085
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7086,
+ 7097
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7098,
+ 7103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7104,
+ 7155
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7156,
+ 7163
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7164,
+ 7167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7168,
+ 7223
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7224,
+ 7226
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7227,
+ 7231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7232,
+ 7241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7242,
+ 7244
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7245,
+ 7293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7294,
+ 7295
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7296,
+ 7359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7360,
+ 7367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7368,
+ 7375
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7376,
+ 7378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7379,
+ 7379
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7380,
+ 7410
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7411,
+ 7414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7415,
+ 7415
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7416,
+ 7417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7418,
+ 7423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7424,
+ 7467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7468,
+ 7468
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7469,
+ 7469
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 7470,
+ 7470
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7471,
+ 7471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7472,
+ 7472
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7473,
+ 7473
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7474,
+ 7474
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 7475,
+ 7475
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7476,
+ 7476
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 7477,
+ 7477
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7478,
+ 7478
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 7479,
+ 7479
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7480,
+ 7480
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 7481,
+ 7481
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7482,
+ 7482
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 7483,
+ 7483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7484,
+ 7484
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7485,
+ 7485
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 7486,
+ 7486
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7487,
+ 7487
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7488,
+ 7488
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7489,
+ 7489
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7490,
+ 7490
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 7491,
+ 7491
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7492,
+ 7492
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 7493,
+ 7493
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 7494,
+ 7494
+ ],
+ "mapped",
+ [
+ 7426
+ ]
+ ],
+ [
+ [
+ 7495,
+ 7495
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7496,
+ 7496
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7497,
+ 7497
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7498,
+ 7498
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 7499,
+ 7499
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 7500,
+ 7500
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7501,
+ 7501
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7502,
+ 7502
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7503,
+ 7503
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7504,
+ 7504
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7505,
+ 7505
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 7506,
+ 7506
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7507,
+ 7507
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 7508,
+ 7508
+ ],
+ "mapped",
+ [
+ 7446
+ ]
+ ],
+ [
+ [
+ 7509,
+ 7509
+ ],
+ "mapped",
+ [
+ 7447
+ ]
+ ],
+ [
+ [
+ 7510,
+ 7510
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7511,
+ 7511
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7512,
+ 7512
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7513,
+ 7513
+ ],
+ "mapped",
+ [
+ 7453
+ ]
+ ],
+ [
+ [
+ 7514,
+ 7514
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 7515,
+ 7515
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7516,
+ 7516
+ ],
+ "mapped",
+ [
+ 7461
+ ]
+ ],
+ [
+ [
+ 7517,
+ 7517
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7518,
+ 7518
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7519,
+ 7519
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 7520,
+ 7520
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7521,
+ 7521
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7522,
+ 7522
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7523,
+ 7523
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7524,
+ 7524
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7525,
+ 7525
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7526,
+ 7526
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7527,
+ 7527
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7528,
+ 7528
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 7529,
+ 7529
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7530,
+ 7530
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7531,
+ 7531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7532,
+ 7543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7544,
+ 7544
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 7545,
+ 7578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7579,
+ 7579
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 7580,
+ 7580
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 7581,
+ 7581
+ ],
+ "mapped",
+ [
+ 597
+ ]
+ ],
+ [
+ [
+ 7582,
+ 7582
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 7583,
+ 7583
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7584,
+ 7584
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 7585,
+ 7585
+ ],
+ "mapped",
+ [
+ 607
+ ]
+ ],
+ [
+ [
+ 7586,
+ 7586
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 7587,
+ 7587
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 7588,
+ 7588
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 7589,
+ 7589
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 7590,
+ 7590
+ ],
+ "mapped",
+ [
+ 618
+ ]
+ ],
+ [
+ [
+ 7591,
+ 7591
+ ],
+ "mapped",
+ [
+ 7547
+ ]
+ ],
+ [
+ [
+ 7592,
+ 7592
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 7593,
+ 7593
+ ],
+ "mapped",
+ [
+ 621
+ ]
+ ],
+ [
+ [
+ 7594,
+ 7594
+ ],
+ "mapped",
+ [
+ 7557
+ ]
+ ],
+ [
+ [
+ 7595,
+ 7595
+ ],
+ "mapped",
+ [
+ 671
+ ]
+ ],
+ [
+ [
+ 7596,
+ 7596
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 7597,
+ 7597
+ ],
+ "mapped",
+ [
+ 624
+ ]
+ ],
+ [
+ [
+ 7598,
+ 7598
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 7599,
+ 7599
+ ],
+ "mapped",
+ [
+ 627
+ ]
+ ],
+ [
+ [
+ 7600,
+ 7600
+ ],
+ "mapped",
+ [
+ 628
+ ]
+ ],
+ [
+ [
+ 7601,
+ 7601
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 7602,
+ 7602
+ ],
+ "mapped",
+ [
+ 632
+ ]
+ ],
+ [
+ [
+ 7603,
+ 7603
+ ],
+ "mapped",
+ [
+ 642
+ ]
+ ],
+ [
+ [
+ 7604,
+ 7604
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 7605,
+ 7605
+ ],
+ "mapped",
+ [
+ 427
+ ]
+ ],
+ [
+ [
+ 7606,
+ 7606
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 7607,
+ 7607
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 7608,
+ 7608
+ ],
+ "mapped",
+ [
+ 7452
+ ]
+ ],
+ [
+ [
+ 7609,
+ 7609
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 7610,
+ 7610
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 7611,
+ 7611
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 7612,
+ 7612
+ ],
+ "mapped",
+ [
+ 656
+ ]
+ ],
+ [
+ [
+ 7613,
+ 7613
+ ],
+ "mapped",
+ [
+ 657
+ ]
+ ],
+ [
+ [
+ 7614,
+ 7614
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 7615,
+ 7615
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 7616,
+ 7619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7620,
+ 7626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7627,
+ 7654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7655,
+ 7669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7670,
+ 7675
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7676,
+ 7676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7677,
+ 7677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7678,
+ 7679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7680,
+ 7680
+ ],
+ "mapped",
+ [
+ 7681
+ ]
+ ],
+ [
+ [
+ 7681,
+ 7681
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7682,
+ 7682
+ ],
+ "mapped",
+ [
+ 7683
+ ]
+ ],
+ [
+ [
+ 7683,
+ 7683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7684,
+ 7684
+ ],
+ "mapped",
+ [
+ 7685
+ ]
+ ],
+ [
+ [
+ 7685,
+ 7685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7686,
+ 7686
+ ],
+ "mapped",
+ [
+ 7687
+ ]
+ ],
+ [
+ [
+ 7687,
+ 7687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7688,
+ 7688
+ ],
+ "mapped",
+ [
+ 7689
+ ]
+ ],
+ [
+ [
+ 7689,
+ 7689
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7690,
+ 7690
+ ],
+ "mapped",
+ [
+ 7691
+ ]
+ ],
+ [
+ [
+ 7691,
+ 7691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7692,
+ 7692
+ ],
+ "mapped",
+ [
+ 7693
+ ]
+ ],
+ [
+ [
+ 7693,
+ 7693
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7694,
+ 7694
+ ],
+ "mapped",
+ [
+ 7695
+ ]
+ ],
+ [
+ [
+ 7695,
+ 7695
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7696,
+ 7696
+ ],
+ "mapped",
+ [
+ 7697
+ ]
+ ],
+ [
+ [
+ 7697,
+ 7697
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7698,
+ 7698
+ ],
+ "mapped",
+ [
+ 7699
+ ]
+ ],
+ [
+ [
+ 7699,
+ 7699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7700,
+ 7700
+ ],
+ "mapped",
+ [
+ 7701
+ ]
+ ],
+ [
+ [
+ 7701,
+ 7701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7702,
+ 7702
+ ],
+ "mapped",
+ [
+ 7703
+ ]
+ ],
+ [
+ [
+ 7703,
+ 7703
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7704,
+ 7704
+ ],
+ "mapped",
+ [
+ 7705
+ ]
+ ],
+ [
+ [
+ 7705,
+ 7705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7706,
+ 7706
+ ],
+ "mapped",
+ [
+ 7707
+ ]
+ ],
+ [
+ [
+ 7707,
+ 7707
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7708,
+ 7708
+ ],
+ "mapped",
+ [
+ 7709
+ ]
+ ],
+ [
+ [
+ 7709,
+ 7709
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7710,
+ 7710
+ ],
+ "mapped",
+ [
+ 7711
+ ]
+ ],
+ [
+ [
+ 7711,
+ 7711
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7712,
+ 7712
+ ],
+ "mapped",
+ [
+ 7713
+ ]
+ ],
+ [
+ [
+ 7713,
+ 7713
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7714,
+ 7714
+ ],
+ "mapped",
+ [
+ 7715
+ ]
+ ],
+ [
+ [
+ 7715,
+ 7715
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7716,
+ 7716
+ ],
+ "mapped",
+ [
+ 7717
+ ]
+ ],
+ [
+ [
+ 7717,
+ 7717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7718,
+ 7718
+ ],
+ "mapped",
+ [
+ 7719
+ ]
+ ],
+ [
+ [
+ 7719,
+ 7719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7720,
+ 7720
+ ],
+ "mapped",
+ [
+ 7721
+ ]
+ ],
+ [
+ [
+ 7721,
+ 7721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7722,
+ 7722
+ ],
+ "mapped",
+ [
+ 7723
+ ]
+ ],
+ [
+ [
+ 7723,
+ 7723
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7724,
+ 7724
+ ],
+ "mapped",
+ [
+ 7725
+ ]
+ ],
+ [
+ [
+ 7725,
+ 7725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7726,
+ 7726
+ ],
+ "mapped",
+ [
+ 7727
+ ]
+ ],
+ [
+ [
+ 7727,
+ 7727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7728,
+ 7728
+ ],
+ "mapped",
+ [
+ 7729
+ ]
+ ],
+ [
+ [
+ 7729,
+ 7729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7730,
+ 7730
+ ],
+ "mapped",
+ [
+ 7731
+ ]
+ ],
+ [
+ [
+ 7731,
+ 7731
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7732,
+ 7732
+ ],
+ "mapped",
+ [
+ 7733
+ ]
+ ],
+ [
+ [
+ 7733,
+ 7733
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7734,
+ 7734
+ ],
+ "mapped",
+ [
+ 7735
+ ]
+ ],
+ [
+ [
+ 7735,
+ 7735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7736,
+ 7736
+ ],
+ "mapped",
+ [
+ 7737
+ ]
+ ],
+ [
+ [
+ 7737,
+ 7737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7738,
+ 7738
+ ],
+ "mapped",
+ [
+ 7739
+ ]
+ ],
+ [
+ [
+ 7739,
+ 7739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7740,
+ 7740
+ ],
+ "mapped",
+ [
+ 7741
+ ]
+ ],
+ [
+ [
+ 7741,
+ 7741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7742,
+ 7742
+ ],
+ "mapped",
+ [
+ 7743
+ ]
+ ],
+ [
+ [
+ 7743,
+ 7743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7744,
+ 7744
+ ],
+ "mapped",
+ [
+ 7745
+ ]
+ ],
+ [
+ [
+ 7745,
+ 7745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7746,
+ 7746
+ ],
+ "mapped",
+ [
+ 7747
+ ]
+ ],
+ [
+ [
+ 7747,
+ 7747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7748,
+ 7748
+ ],
+ "mapped",
+ [
+ 7749
+ ]
+ ],
+ [
+ [
+ 7749,
+ 7749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7750,
+ 7750
+ ],
+ "mapped",
+ [
+ 7751
+ ]
+ ],
+ [
+ [
+ 7751,
+ 7751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7752,
+ 7752
+ ],
+ "mapped",
+ [
+ 7753
+ ]
+ ],
+ [
+ [
+ 7753,
+ 7753
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7754,
+ 7754
+ ],
+ "mapped",
+ [
+ 7755
+ ]
+ ],
+ [
+ [
+ 7755,
+ 7755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7756,
+ 7756
+ ],
+ "mapped",
+ [
+ 7757
+ ]
+ ],
+ [
+ [
+ 7757,
+ 7757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7758,
+ 7758
+ ],
+ "mapped",
+ [
+ 7759
+ ]
+ ],
+ [
+ [
+ 7759,
+ 7759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7760,
+ 7760
+ ],
+ "mapped",
+ [
+ 7761
+ ]
+ ],
+ [
+ [
+ 7761,
+ 7761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7762,
+ 7762
+ ],
+ "mapped",
+ [
+ 7763
+ ]
+ ],
+ [
+ [
+ 7763,
+ 7763
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7764,
+ 7764
+ ],
+ "mapped",
+ [
+ 7765
+ ]
+ ],
+ [
+ [
+ 7765,
+ 7765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7766,
+ 7766
+ ],
+ "mapped",
+ [
+ 7767
+ ]
+ ],
+ [
+ [
+ 7767,
+ 7767
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7768,
+ 7768
+ ],
+ "mapped",
+ [
+ 7769
+ ]
+ ],
+ [
+ [
+ 7769,
+ 7769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7770,
+ 7770
+ ],
+ "mapped",
+ [
+ 7771
+ ]
+ ],
+ [
+ [
+ 7771,
+ 7771
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7772,
+ 7772
+ ],
+ "mapped",
+ [
+ 7773
+ ]
+ ],
+ [
+ [
+ 7773,
+ 7773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7774,
+ 7774
+ ],
+ "mapped",
+ [
+ 7775
+ ]
+ ],
+ [
+ [
+ 7775,
+ 7775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7776,
+ 7776
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7777,
+ 7777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7778,
+ 7778
+ ],
+ "mapped",
+ [
+ 7779
+ ]
+ ],
+ [
+ [
+ 7779,
+ 7779
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7780,
+ 7780
+ ],
+ "mapped",
+ [
+ 7781
+ ]
+ ],
+ [
+ [
+ 7781,
+ 7781
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7782,
+ 7782
+ ],
+ "mapped",
+ [
+ 7783
+ ]
+ ],
+ [
+ [
+ 7783,
+ 7783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7784,
+ 7784
+ ],
+ "mapped",
+ [
+ 7785
+ ]
+ ],
+ [
+ [
+ 7785,
+ 7785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7786,
+ 7786
+ ],
+ "mapped",
+ [
+ 7787
+ ]
+ ],
+ [
+ [
+ 7787,
+ 7787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7788,
+ 7788
+ ],
+ "mapped",
+ [
+ 7789
+ ]
+ ],
+ [
+ [
+ 7789,
+ 7789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7790,
+ 7790
+ ],
+ "mapped",
+ [
+ 7791
+ ]
+ ],
+ [
+ [
+ 7791,
+ 7791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7792,
+ 7792
+ ],
+ "mapped",
+ [
+ 7793
+ ]
+ ],
+ [
+ [
+ 7793,
+ 7793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7794,
+ 7794
+ ],
+ "mapped",
+ [
+ 7795
+ ]
+ ],
+ [
+ [
+ 7795,
+ 7795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7796,
+ 7796
+ ],
+ "mapped",
+ [
+ 7797
+ ]
+ ],
+ [
+ [
+ 7797,
+ 7797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7798,
+ 7798
+ ],
+ "mapped",
+ [
+ 7799
+ ]
+ ],
+ [
+ [
+ 7799,
+ 7799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7800,
+ 7800
+ ],
+ "mapped",
+ [
+ 7801
+ ]
+ ],
+ [
+ [
+ 7801,
+ 7801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7802,
+ 7802
+ ],
+ "mapped",
+ [
+ 7803
+ ]
+ ],
+ [
+ [
+ 7803,
+ 7803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7804,
+ 7804
+ ],
+ "mapped",
+ [
+ 7805
+ ]
+ ],
+ [
+ [
+ 7805,
+ 7805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7806,
+ 7806
+ ],
+ "mapped",
+ [
+ 7807
+ ]
+ ],
+ [
+ [
+ 7807,
+ 7807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7808,
+ 7808
+ ],
+ "mapped",
+ [
+ 7809
+ ]
+ ],
+ [
+ [
+ 7809,
+ 7809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7810,
+ 7810
+ ],
+ "mapped",
+ [
+ 7811
+ ]
+ ],
+ [
+ [
+ 7811,
+ 7811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7812,
+ 7812
+ ],
+ "mapped",
+ [
+ 7813
+ ]
+ ],
+ [
+ [
+ 7813,
+ 7813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7814,
+ 7814
+ ],
+ "mapped",
+ [
+ 7815
+ ]
+ ],
+ [
+ [
+ 7815,
+ 7815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7816,
+ 7816
+ ],
+ "mapped",
+ [
+ 7817
+ ]
+ ],
+ [
+ [
+ 7817,
+ 7817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7818,
+ 7818
+ ],
+ "mapped",
+ [
+ 7819
+ ]
+ ],
+ [
+ [
+ 7819,
+ 7819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7820,
+ 7820
+ ],
+ "mapped",
+ [
+ 7821
+ ]
+ ],
+ [
+ [
+ 7821,
+ 7821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7822,
+ 7822
+ ],
+ "mapped",
+ [
+ 7823
+ ]
+ ],
+ [
+ [
+ 7823,
+ 7823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7824,
+ 7824
+ ],
+ "mapped",
+ [
+ 7825
+ ]
+ ],
+ [
+ [
+ 7825,
+ 7825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7826,
+ 7826
+ ],
+ "mapped",
+ [
+ 7827
+ ]
+ ],
+ [
+ [
+ 7827,
+ 7827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7828,
+ 7828
+ ],
+ "mapped",
+ [
+ 7829
+ ]
+ ],
+ [
+ [
+ 7829,
+ 7833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7834,
+ 7834
+ ],
+ "mapped",
+ [
+ 97,
+ 702
+ ]
+ ],
+ [
+ [
+ 7835,
+ 7835
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7836,
+ 7837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7838,
+ 7838
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 7839,
+ 7839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7840,
+ 7840
+ ],
+ "mapped",
+ [
+ 7841
+ ]
+ ],
+ [
+ [
+ 7841,
+ 7841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7842,
+ 7842
+ ],
+ "mapped",
+ [
+ 7843
+ ]
+ ],
+ [
+ [
+ 7843,
+ 7843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7844,
+ 7844
+ ],
+ "mapped",
+ [
+ 7845
+ ]
+ ],
+ [
+ [
+ 7845,
+ 7845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7846,
+ 7846
+ ],
+ "mapped",
+ [
+ 7847
+ ]
+ ],
+ [
+ [
+ 7847,
+ 7847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7848,
+ 7848
+ ],
+ "mapped",
+ [
+ 7849
+ ]
+ ],
+ [
+ [
+ 7849,
+ 7849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7850,
+ 7850
+ ],
+ "mapped",
+ [
+ 7851
+ ]
+ ],
+ [
+ [
+ 7851,
+ 7851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7852,
+ 7852
+ ],
+ "mapped",
+ [
+ 7853
+ ]
+ ],
+ [
+ [
+ 7853,
+ 7853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7854,
+ 7854
+ ],
+ "mapped",
+ [
+ 7855
+ ]
+ ],
+ [
+ [
+ 7855,
+ 7855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7856,
+ 7856
+ ],
+ "mapped",
+ [
+ 7857
+ ]
+ ],
+ [
+ [
+ 7857,
+ 7857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7858,
+ 7858
+ ],
+ "mapped",
+ [
+ 7859
+ ]
+ ],
+ [
+ [
+ 7859,
+ 7859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7860,
+ 7860
+ ],
+ "mapped",
+ [
+ 7861
+ ]
+ ],
+ [
+ [
+ 7861,
+ 7861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7862,
+ 7862
+ ],
+ "mapped",
+ [
+ 7863
+ ]
+ ],
+ [
+ [
+ 7863,
+ 7863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7864,
+ 7864
+ ],
+ "mapped",
+ [
+ 7865
+ ]
+ ],
+ [
+ [
+ 7865,
+ 7865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7866,
+ 7866
+ ],
+ "mapped",
+ [
+ 7867
+ ]
+ ],
+ [
+ [
+ 7867,
+ 7867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7868,
+ 7868
+ ],
+ "mapped",
+ [
+ 7869
+ ]
+ ],
+ [
+ [
+ 7869,
+ 7869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7870,
+ 7870
+ ],
+ "mapped",
+ [
+ 7871
+ ]
+ ],
+ [
+ [
+ 7871,
+ 7871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7872,
+ 7872
+ ],
+ "mapped",
+ [
+ 7873
+ ]
+ ],
+ [
+ [
+ 7873,
+ 7873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7874,
+ 7874
+ ],
+ "mapped",
+ [
+ 7875
+ ]
+ ],
+ [
+ [
+ 7875,
+ 7875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7876,
+ 7876
+ ],
+ "mapped",
+ [
+ 7877
+ ]
+ ],
+ [
+ [
+ 7877,
+ 7877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7878,
+ 7878
+ ],
+ "mapped",
+ [
+ 7879
+ ]
+ ],
+ [
+ [
+ 7879,
+ 7879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7880,
+ 7880
+ ],
+ "mapped",
+ [
+ 7881
+ ]
+ ],
+ [
+ [
+ 7881,
+ 7881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7882,
+ 7882
+ ],
+ "mapped",
+ [
+ 7883
+ ]
+ ],
+ [
+ [
+ 7883,
+ 7883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7884,
+ 7884
+ ],
+ "mapped",
+ [
+ 7885
+ ]
+ ],
+ [
+ [
+ 7885,
+ 7885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7886,
+ 7886
+ ],
+ "mapped",
+ [
+ 7887
+ ]
+ ],
+ [
+ [
+ 7887,
+ 7887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7888,
+ 7888
+ ],
+ "mapped",
+ [
+ 7889
+ ]
+ ],
+ [
+ [
+ 7889,
+ 7889
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7890,
+ 7890
+ ],
+ "mapped",
+ [
+ 7891
+ ]
+ ],
+ [
+ [
+ 7891,
+ 7891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7892,
+ 7892
+ ],
+ "mapped",
+ [
+ 7893
+ ]
+ ],
+ [
+ [
+ 7893,
+ 7893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7894,
+ 7894
+ ],
+ "mapped",
+ [
+ 7895
+ ]
+ ],
+ [
+ [
+ 7895,
+ 7895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7896,
+ 7896
+ ],
+ "mapped",
+ [
+ 7897
+ ]
+ ],
+ [
+ [
+ 7897,
+ 7897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7898,
+ 7898
+ ],
+ "mapped",
+ [
+ 7899
+ ]
+ ],
+ [
+ [
+ 7899,
+ 7899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7900,
+ 7900
+ ],
+ "mapped",
+ [
+ 7901
+ ]
+ ],
+ [
+ [
+ 7901,
+ 7901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7902,
+ 7902
+ ],
+ "mapped",
+ [
+ 7903
+ ]
+ ],
+ [
+ [
+ 7903,
+ 7903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7904,
+ 7904
+ ],
+ "mapped",
+ [
+ 7905
+ ]
+ ],
+ [
+ [
+ 7905,
+ 7905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7906,
+ 7906
+ ],
+ "mapped",
+ [
+ 7907
+ ]
+ ],
+ [
+ [
+ 7907,
+ 7907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7908,
+ 7908
+ ],
+ "mapped",
+ [
+ 7909
+ ]
+ ],
+ [
+ [
+ 7909,
+ 7909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7910,
+ 7910
+ ],
+ "mapped",
+ [
+ 7911
+ ]
+ ],
+ [
+ [
+ 7911,
+ 7911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7912,
+ 7912
+ ],
+ "mapped",
+ [
+ 7913
+ ]
+ ],
+ [
+ [
+ 7913,
+ 7913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7914,
+ 7914
+ ],
+ "mapped",
+ [
+ 7915
+ ]
+ ],
+ [
+ [
+ 7915,
+ 7915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7916,
+ 7916
+ ],
+ "mapped",
+ [
+ 7917
+ ]
+ ],
+ [
+ [
+ 7917,
+ 7917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7918,
+ 7918
+ ],
+ "mapped",
+ [
+ 7919
+ ]
+ ],
+ [
+ [
+ 7919,
+ 7919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7920,
+ 7920
+ ],
+ "mapped",
+ [
+ 7921
+ ]
+ ],
+ [
+ [
+ 7921,
+ 7921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7922,
+ 7922
+ ],
+ "mapped",
+ [
+ 7923
+ ]
+ ],
+ [
+ [
+ 7923,
+ 7923
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7924,
+ 7924
+ ],
+ "mapped",
+ [
+ 7925
+ ]
+ ],
+ [
+ [
+ 7925,
+ 7925
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7926,
+ 7926
+ ],
+ "mapped",
+ [
+ 7927
+ ]
+ ],
+ [
+ [
+ 7927,
+ 7927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7928,
+ 7928
+ ],
+ "mapped",
+ [
+ 7929
+ ]
+ ],
+ [
+ [
+ 7929,
+ 7929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7930,
+ 7930
+ ],
+ "mapped",
+ [
+ 7931
+ ]
+ ],
+ [
+ [
+ 7931,
+ 7931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7932,
+ 7932
+ ],
+ "mapped",
+ [
+ 7933
+ ]
+ ],
+ [
+ [
+ 7933,
+ 7933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7934,
+ 7934
+ ],
+ "mapped",
+ [
+ 7935
+ ]
+ ],
+ [
+ [
+ 7935,
+ 7935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7936,
+ 7943
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7944,
+ 7944
+ ],
+ "mapped",
+ [
+ 7936
+ ]
+ ],
+ [
+ [
+ 7945,
+ 7945
+ ],
+ "mapped",
+ [
+ 7937
+ ]
+ ],
+ [
+ [
+ 7946,
+ 7946
+ ],
+ "mapped",
+ [
+ 7938
+ ]
+ ],
+ [
+ [
+ 7947,
+ 7947
+ ],
+ "mapped",
+ [
+ 7939
+ ]
+ ],
+ [
+ [
+ 7948,
+ 7948
+ ],
+ "mapped",
+ [
+ 7940
+ ]
+ ],
+ [
+ [
+ 7949,
+ 7949
+ ],
+ "mapped",
+ [
+ 7941
+ ]
+ ],
+ [
+ [
+ 7950,
+ 7950
+ ],
+ "mapped",
+ [
+ 7942
+ ]
+ ],
+ [
+ [
+ 7951,
+ 7951
+ ],
+ "mapped",
+ [
+ 7943
+ ]
+ ],
+ [
+ [
+ 7952,
+ 7957
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7958,
+ 7959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7960,
+ 7960
+ ],
+ "mapped",
+ [
+ 7952
+ ]
+ ],
+ [
+ [
+ 7961,
+ 7961
+ ],
+ "mapped",
+ [
+ 7953
+ ]
+ ],
+ [
+ [
+ 7962,
+ 7962
+ ],
+ "mapped",
+ [
+ 7954
+ ]
+ ],
+ [
+ [
+ 7963,
+ 7963
+ ],
+ "mapped",
+ [
+ 7955
+ ]
+ ],
+ [
+ [
+ 7964,
+ 7964
+ ],
+ "mapped",
+ [
+ 7956
+ ]
+ ],
+ [
+ [
+ 7965,
+ 7965
+ ],
+ "mapped",
+ [
+ 7957
+ ]
+ ],
+ [
+ [
+ 7966,
+ 7967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7968,
+ 7975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7976,
+ 7976
+ ],
+ "mapped",
+ [
+ 7968
+ ]
+ ],
+ [
+ [
+ 7977,
+ 7977
+ ],
+ "mapped",
+ [
+ 7969
+ ]
+ ],
+ [
+ [
+ 7978,
+ 7978
+ ],
+ "mapped",
+ [
+ 7970
+ ]
+ ],
+ [
+ [
+ 7979,
+ 7979
+ ],
+ "mapped",
+ [
+ 7971
+ ]
+ ],
+ [
+ [
+ 7980,
+ 7980
+ ],
+ "mapped",
+ [
+ 7972
+ ]
+ ],
+ [
+ [
+ 7981,
+ 7981
+ ],
+ "mapped",
+ [
+ 7973
+ ]
+ ],
+ [
+ [
+ 7982,
+ 7982
+ ],
+ "mapped",
+ [
+ 7974
+ ]
+ ],
+ [
+ [
+ 7983,
+ 7983
+ ],
+ "mapped",
+ [
+ 7975
+ ]
+ ],
+ [
+ [
+ 7984,
+ 7991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7992,
+ 7992
+ ],
+ "mapped",
+ [
+ 7984
+ ]
+ ],
+ [
+ [
+ 7993,
+ 7993
+ ],
+ "mapped",
+ [
+ 7985
+ ]
+ ],
+ [
+ [
+ 7994,
+ 7994
+ ],
+ "mapped",
+ [
+ 7986
+ ]
+ ],
+ [
+ [
+ 7995,
+ 7995
+ ],
+ "mapped",
+ [
+ 7987
+ ]
+ ],
+ [
+ [
+ 7996,
+ 7996
+ ],
+ "mapped",
+ [
+ 7988
+ ]
+ ],
+ [
+ [
+ 7997,
+ 7997
+ ],
+ "mapped",
+ [
+ 7989
+ ]
+ ],
+ [
+ [
+ 7998,
+ 7998
+ ],
+ "mapped",
+ [
+ 7990
+ ]
+ ],
+ [
+ [
+ 7999,
+ 7999
+ ],
+ "mapped",
+ [
+ 7991
+ ]
+ ],
+ [
+ [
+ 8000,
+ 8005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8006,
+ 8007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8008,
+ 8008
+ ],
+ "mapped",
+ [
+ 8000
+ ]
+ ],
+ [
+ [
+ 8009,
+ 8009
+ ],
+ "mapped",
+ [
+ 8001
+ ]
+ ],
+ [
+ [
+ 8010,
+ 8010
+ ],
+ "mapped",
+ [
+ 8002
+ ]
+ ],
+ [
+ [
+ 8011,
+ 8011
+ ],
+ "mapped",
+ [
+ 8003
+ ]
+ ],
+ [
+ [
+ 8012,
+ 8012
+ ],
+ "mapped",
+ [
+ 8004
+ ]
+ ],
+ [
+ [
+ 8013,
+ 8013
+ ],
+ "mapped",
+ [
+ 8005
+ ]
+ ],
+ [
+ [
+ 8014,
+ 8015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8016,
+ 8023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8024,
+ 8024
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8025,
+ 8025
+ ],
+ "mapped",
+ [
+ 8017
+ ]
+ ],
+ [
+ [
+ 8026,
+ 8026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8027,
+ 8027
+ ],
+ "mapped",
+ [
+ 8019
+ ]
+ ],
+ [
+ [
+ 8028,
+ 8028
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8029,
+ 8029
+ ],
+ "mapped",
+ [
+ 8021
+ ]
+ ],
+ [
+ [
+ 8030,
+ 8030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8031,
+ 8031
+ ],
+ "mapped",
+ [
+ 8023
+ ]
+ ],
+ [
+ [
+ 8032,
+ 8039
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8040,
+ 8040
+ ],
+ "mapped",
+ [
+ 8032
+ ]
+ ],
+ [
+ [
+ 8041,
+ 8041
+ ],
+ "mapped",
+ [
+ 8033
+ ]
+ ],
+ [
+ [
+ 8042,
+ 8042
+ ],
+ "mapped",
+ [
+ 8034
+ ]
+ ],
+ [
+ [
+ 8043,
+ 8043
+ ],
+ "mapped",
+ [
+ 8035
+ ]
+ ],
+ [
+ [
+ 8044,
+ 8044
+ ],
+ "mapped",
+ [
+ 8036
+ ]
+ ],
+ [
+ [
+ 8045,
+ 8045
+ ],
+ "mapped",
+ [
+ 8037
+ ]
+ ],
+ [
+ [
+ 8046,
+ 8046
+ ],
+ "mapped",
+ [
+ 8038
+ ]
+ ],
+ [
+ [
+ 8047,
+ 8047
+ ],
+ "mapped",
+ [
+ 8039
+ ]
+ ],
+ [
+ [
+ 8048,
+ 8048
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8049,
+ 8049
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8050,
+ 8050
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8051,
+ 8051
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8052,
+ 8052
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8053,
+ 8053
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8054,
+ 8054
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8055,
+ 8055
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8056,
+ 8056
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8057,
+ 8057
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8058,
+ 8058
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8059,
+ 8059
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8060,
+ 8060
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8061,
+ 8061
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8062,
+ 8063
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8064,
+ 8064
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8065,
+ 8065
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8066,
+ 8066
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8067,
+ 8067
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8068,
+ 8068
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8069,
+ 8069
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8070,
+ 8070
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8071,
+ 8071
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8072,
+ 8072
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8073,
+ 8073
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8074,
+ 8074
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8075,
+ 8075
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8076,
+ 8076
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8077,
+ 8077
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8078,
+ 8078
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8079,
+ 8079
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8080,
+ 8080
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8081,
+ 8081
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8082,
+ 8082
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8083,
+ 8083
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8084,
+ 8084
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8085,
+ 8085
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8086,
+ 8086
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8087,
+ 8087
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8088,
+ 8088
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8089,
+ 8089
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8090,
+ 8090
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8091,
+ 8091
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8092,
+ 8092
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8093,
+ 8093
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8094,
+ 8094
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8095,
+ 8095
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8096,
+ 8096
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8097,
+ 8097
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8098,
+ 8098
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8099,
+ 8099
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8100,
+ 8100
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8101,
+ 8101
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8102,
+ 8102
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8103,
+ 8103
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8104,
+ 8104
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8105,
+ 8105
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8106,
+ 8106
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8107,
+ 8107
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8108,
+ 8108
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8109,
+ 8109
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8110,
+ 8110
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8111,
+ 8111
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8112,
+ 8113
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8114,
+ 8114
+ ],
+ "mapped",
+ [
+ 8048,
+ 953
+ ]
+ ],
+ [
+ [
+ 8115,
+ 8115
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8116,
+ 8116
+ ],
+ "mapped",
+ [
+ 940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8117,
+ 8117
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8118,
+ 8118
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8119,
+ 8119
+ ],
+ "mapped",
+ [
+ 8118,
+ 953
+ ]
+ ],
+ [
+ [
+ 8120,
+ 8120
+ ],
+ "mapped",
+ [
+ 8112
+ ]
+ ],
+ [
+ [
+ 8121,
+ 8121
+ ],
+ "mapped",
+ [
+ 8113
+ ]
+ ],
+ [
+ [
+ 8122,
+ 8122
+ ],
+ "mapped",
+ [
+ 8048
+ ]
+ ],
+ [
+ [
+ 8123,
+ 8123
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8124,
+ 8124
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8125,
+ 8125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8126,
+ 8126
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 8127,
+ 8127
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8128,
+ 8128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 834
+ ]
+ ],
+ [
+ [
+ 8129,
+ 8129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 834
+ ]
+ ],
+ [
+ [
+ 8130,
+ 8130
+ ],
+ "mapped",
+ [
+ 8052,
+ 953
+ ]
+ ],
+ [
+ [
+ 8131,
+ 8131
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8132,
+ 8132
+ ],
+ "mapped",
+ [
+ 942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8133,
+ 8133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8134,
+ 8134
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8135,
+ 8135
+ ],
+ "mapped",
+ [
+ 8134,
+ 953
+ ]
+ ],
+ [
+ [
+ 8136,
+ 8136
+ ],
+ "mapped",
+ [
+ 8050
+ ]
+ ],
+ [
+ [
+ 8137,
+ 8137
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8138,
+ 8138
+ ],
+ "mapped",
+ [
+ 8052
+ ]
+ ],
+ [
+ [
+ 8139,
+ 8139
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8140,
+ 8140
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8141,
+ 8141
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 768
+ ]
+ ],
+ [
+ [
+ 8142,
+ 8142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 769
+ ]
+ ],
+ [
+ [
+ 8143,
+ 8143
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 834
+ ]
+ ],
+ [
+ [
+ 8144,
+ 8146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8147,
+ 8147
+ ],
+ "mapped",
+ [
+ 912
+ ]
+ ],
+ [
+ [
+ 8148,
+ 8149
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8150,
+ 8151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8152,
+ 8152
+ ],
+ "mapped",
+ [
+ 8144
+ ]
+ ],
+ [
+ [
+ 8153,
+ 8153
+ ],
+ "mapped",
+ [
+ 8145
+ ]
+ ],
+ [
+ [
+ 8154,
+ 8154
+ ],
+ "mapped",
+ [
+ 8054
+ ]
+ ],
+ [
+ [
+ 8155,
+ 8155
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8156,
+ 8156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8157,
+ 8157
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 768
+ ]
+ ],
+ [
+ [
+ 8158,
+ 8158
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 769
+ ]
+ ],
+ [
+ [
+ 8159,
+ 8159
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 834
+ ]
+ ],
+ [
+ [
+ 8160,
+ 8162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8163,
+ 8163
+ ],
+ "mapped",
+ [
+ 944
+ ]
+ ],
+ [
+ [
+ 8164,
+ 8167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8168,
+ 8168
+ ],
+ "mapped",
+ [
+ 8160
+ ]
+ ],
+ [
+ [
+ 8169,
+ 8169
+ ],
+ "mapped",
+ [
+ 8161
+ ]
+ ],
+ [
+ [
+ 8170,
+ 8170
+ ],
+ "mapped",
+ [
+ 8058
+ ]
+ ],
+ [
+ [
+ 8171,
+ 8171
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8172,
+ 8172
+ ],
+ "mapped",
+ [
+ 8165
+ ]
+ ],
+ [
+ [
+ 8173,
+ 8173
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 768
+ ]
+ ],
+ [
+ [
+ 8174,
+ 8174
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 8175,
+ 8175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 8176,
+ 8177
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8178,
+ 8178
+ ],
+ "mapped",
+ [
+ 8060,
+ 953
+ ]
+ ],
+ [
+ [
+ 8179,
+ 8179
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8180,
+ 8180
+ ],
+ "mapped",
+ [
+ 974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8181,
+ 8181
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8182,
+ 8182
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8183,
+ 8183
+ ],
+ "mapped",
+ [
+ 8182,
+ 953
+ ]
+ ],
+ [
+ [
+ 8184,
+ 8184
+ ],
+ "mapped",
+ [
+ 8056
+ ]
+ ],
+ [
+ [
+ 8185,
+ 8185
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8186,
+ 8186
+ ],
+ "mapped",
+ [
+ 8060
+ ]
+ ],
+ [
+ [
+ 8187,
+ 8187
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8188,
+ 8188
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8189,
+ 8189
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 8190,
+ 8190
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788
+ ]
+ ],
+ [
+ [
+ 8191,
+ 8191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8192,
+ 8202
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8203,
+ 8203
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8204,
+ 8205
+ ],
+ "deviation",
+ [
+ ]
+ ],
+ [
+ [
+ 8206,
+ 8207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8208,
+ 8208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8209,
+ 8209
+ ],
+ "mapped",
+ [
+ 8208
+ ]
+ ],
+ [
+ [
+ 8210,
+ 8214
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8215,
+ 8215
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 819
+ ]
+ ],
+ [
+ [
+ 8216,
+ 8227
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8228,
+ 8230
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8231,
+ 8231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8232,
+ 8238
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8239,
+ 8239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8240,
+ 8242
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8243,
+ 8243
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8244,
+ 8244
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8245,
+ 8245
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8246,
+ 8246
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8247,
+ 8247
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8248,
+ 8251
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8252,
+ 8252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 33
+ ]
+ ],
+ [
+ [
+ 8253,
+ 8253
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8254,
+ 8254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 8255,
+ 8262
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8263,
+ 8263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 63
+ ]
+ ],
+ [
+ [
+ 8264,
+ 8264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 33
+ ]
+ ],
+ [
+ [
+ 8265,
+ 8265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 63
+ ]
+ ],
+ [
+ [
+ 8266,
+ 8269
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8270,
+ 8274
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8275,
+ 8276
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8277,
+ 8278
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8279,
+ 8279
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8280,
+ 8286
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8287,
+ 8287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8288,
+ 8288
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8289,
+ 8291
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8292,
+ 8292
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8293,
+ 8293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8294,
+ 8297
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8298,
+ 8303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8304,
+ 8304
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8305,
+ 8305
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8306,
+ 8307
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8308,
+ 8308
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8309,
+ 8309
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8310,
+ 8310
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8311,
+ 8311
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8312,
+ 8312
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8313,
+ 8313
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8314,
+ 8314
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8315,
+ 8315
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8316,
+ 8316
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8317,
+ 8317
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8318,
+ 8318
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8319,
+ 8319
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8320,
+ 8320
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8321,
+ 8321
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 8322,
+ 8322
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 8323,
+ 8323
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 8324,
+ 8324
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8325,
+ 8325
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8326,
+ 8326
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8327,
+ 8327
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8328,
+ 8328
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8329,
+ 8329
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8330,
+ 8330
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8331,
+ 8331
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8332,
+ 8332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8333,
+ 8333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8334,
+ 8334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8335,
+ 8335
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8336,
+ 8336
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 8337,
+ 8337
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8338,
+ 8338
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8339,
+ 8339
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8340,
+ 8340
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 8341,
+ 8341
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8342,
+ 8342
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8343,
+ 8343
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8344,
+ 8344
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8345,
+ 8345
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8346,
+ 8346
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8347,
+ 8347
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 8348,
+ 8348
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 8349,
+ 8351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8352,
+ 8359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8360,
+ 8360
+ ],
+ "mapped",
+ [
+ 114,
+ 115
+ ]
+ ],
+ [
+ [
+ 8361,
+ 8362
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8363,
+ 8363
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8364,
+ 8364
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8365,
+ 8367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8368,
+ 8369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8370,
+ 8373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8374,
+ 8376
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8377,
+ 8377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8378,
+ 8378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8379,
+ 8381
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8382,
+ 8382
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8383,
+ 8399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8400,
+ 8417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8418,
+ 8419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8420,
+ 8426
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8427,
+ 8427
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8428,
+ 8431
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8432,
+ 8432
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8433,
+ 8447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8448,
+ 8448
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 99
+ ]
+ ],
+ [
+ [
+ 8449,
+ 8449
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 115
+ ]
+ ],
+ [
+ [
+ 8450,
+ 8450
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8451,
+ 8451
+ ],
+ "mapped",
+ [
+ 176,
+ 99
+ ]
+ ],
+ [
+ [
+ 8452,
+ 8452
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8453,
+ 8453
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 111
+ ]
+ ],
+ [
+ [
+ 8454,
+ 8454
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 117
+ ]
+ ],
+ [
+ [
+ 8455,
+ 8455
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 8456,
+ 8456
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8457,
+ 8457
+ ],
+ "mapped",
+ [
+ 176,
+ 102
+ ]
+ ],
+ [
+ [
+ 8458,
+ 8458
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 8459,
+ 8462
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8463,
+ 8463
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 8464,
+ 8465
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8466,
+ 8467
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8468,
+ 8468
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8469,
+ 8469
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8470,
+ 8470
+ ],
+ "mapped",
+ [
+ 110,
+ 111
+ ]
+ ],
+ [
+ [
+ 8471,
+ 8472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8473,
+ 8473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8474,
+ 8474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 8475,
+ 8477
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 8478,
+ 8479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8480,
+ 8480
+ ],
+ "mapped",
+ [
+ 115,
+ 109
+ ]
+ ],
+ [
+ [
+ 8481,
+ 8481
+ ],
+ "mapped",
+ [
+ 116,
+ 101,
+ 108
+ ]
+ ],
+ [
+ [
+ 8482,
+ 8482
+ ],
+ "mapped",
+ [
+ 116,
+ 109
+ ]
+ ],
+ [
+ [
+ 8483,
+ 8483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8484,
+ 8484
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8485,
+ 8485
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8486,
+ 8486
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 8487,
+ 8487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8488,
+ 8488
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8489,
+ 8489
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8490,
+ 8490
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8491,
+ 8491
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 8492,
+ 8492
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 8493,
+ 8493
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8494,
+ 8494
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8495,
+ 8496
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8497,
+ 8497
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 8498,
+ 8498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8499,
+ 8499
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8500,
+ 8500
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8501,
+ 8501
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 8502,
+ 8502
+ ],
+ "mapped",
+ [
+ 1489
+ ]
+ ],
+ [
+ [
+ 8503,
+ 8503
+ ],
+ "mapped",
+ [
+ 1490
+ ]
+ ],
+ [
+ [
+ 8504,
+ 8504
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 8505,
+ 8505
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8506,
+ 8506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8507,
+ 8507
+ ],
+ "mapped",
+ [
+ 102,
+ 97,
+ 120
+ ]
+ ],
+ [
+ [
+ 8508,
+ 8508
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8509,
+ 8510
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 8511,
+ 8511
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8512,
+ 8512
+ ],
+ "mapped",
+ [
+ 8721
+ ]
+ ],
+ [
+ [
+ 8513,
+ 8516
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8517,
+ 8518
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8519,
+ 8519
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8520,
+ 8520
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8521,
+ 8521
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 8522,
+ 8523
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8524,
+ 8524
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8525,
+ 8525
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8526,
+ 8526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8527,
+ 8527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8528,
+ 8528
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 55
+ ]
+ ],
+ [
+ [
+ 8529,
+ 8529
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 57
+ ]
+ ],
+ [
+ [
+ 8530,
+ 8530
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 8531,
+ 8531
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8532,
+ 8532
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8533,
+ 8533
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8534,
+ 8534
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8535,
+ 8535
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8536,
+ 8536
+ ],
+ "mapped",
+ [
+ 52,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8537,
+ 8537
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8538,
+ 8538
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8539,
+ 8539
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8540,
+ 8540
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8541,
+ 8541
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8542,
+ 8542
+ ],
+ "mapped",
+ [
+ 55,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8543,
+ 8543
+ ],
+ "mapped",
+ [
+ 49,
+ 8260
+ ]
+ ],
+ [
+ [
+ 8544,
+ 8544
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8545,
+ 8545
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8546,
+ 8546
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8547,
+ 8547
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8548,
+ 8548
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8549,
+ 8549
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8550,
+ 8550
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8551,
+ 8551
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8552,
+ 8552
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8553,
+ 8553
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8554,
+ 8554
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8555,
+ 8555
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8556,
+ 8556
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8557,
+ 8557
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8558,
+ 8558
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8559,
+ 8559
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8560,
+ 8560
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8561,
+ 8561
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8562,
+ 8562
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8563,
+ 8563
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8564,
+ 8564
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8565,
+ 8565
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8566,
+ 8566
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8567,
+ 8567
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8568,
+ 8568
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8569,
+ 8569
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8570,
+ 8570
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8571,
+ 8571
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8572,
+ 8572
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8573,
+ 8573
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8574,
+ 8574
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8575,
+ 8575
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8576,
+ 8578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8579,
+ 8579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8580,
+ 8580
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8581,
+ 8584
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8585,
+ 8585
+ ],
+ "mapped",
+ [
+ 48,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8586,
+ 8587
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8588,
+ 8591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8592,
+ 8682
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8683,
+ 8691
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8692,
+ 8703
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8704,
+ 8747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8748,
+ 8748
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8749,
+ 8749
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8750,
+ 8750
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8751,
+ 8751
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8752,
+ 8752
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8753,
+ 8799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8800,
+ 8800
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8801,
+ 8813
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8814,
+ 8815
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8816,
+ 8945
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8946,
+ 8959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8960,
+ 8960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8961,
+ 8961
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8962,
+ 9000
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9001,
+ 9001
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 9002,
+ 9002
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 9003,
+ 9082
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9083,
+ 9083
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9084,
+ 9084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9085,
+ 9114
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9115,
+ 9166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9167,
+ 9168
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9169,
+ 9179
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9180,
+ 9191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9192,
+ 9192
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9193,
+ 9203
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9204,
+ 9210
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9211,
+ 9215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9216,
+ 9252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9253,
+ 9254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9255,
+ 9279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9280,
+ 9290
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9291,
+ 9311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9312,
+ 9312
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 9313,
+ 9313
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 9314,
+ 9314
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 9315,
+ 9315
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 9316,
+ 9316
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 9317,
+ 9317
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 9318,
+ 9318
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 9319,
+ 9319
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 9320,
+ 9320
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 9321,
+ 9321
+ ],
+ "mapped",
+ [
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 9322,
+ 9322
+ ],
+ "mapped",
+ [
+ 49,
+ 49
+ ]
+ ],
+ [
+ [
+ 9323,
+ 9323
+ ],
+ "mapped",
+ [
+ 49,
+ 50
+ ]
+ ],
+ [
+ [
+ 9324,
+ 9324
+ ],
+ "mapped",
+ [
+ 49,
+ 51
+ ]
+ ],
+ [
+ [
+ 9325,
+ 9325
+ ],
+ "mapped",
+ [
+ 49,
+ 52
+ ]
+ ],
+ [
+ [
+ 9326,
+ 9326
+ ],
+ "mapped",
+ [
+ 49,
+ 53
+ ]
+ ],
+ [
+ [
+ 9327,
+ 9327
+ ],
+ "mapped",
+ [
+ 49,
+ 54
+ ]
+ ],
+ [
+ [
+ 9328,
+ 9328
+ ],
+ "mapped",
+ [
+ 49,
+ 55
+ ]
+ ],
+ [
+ [
+ 9329,
+ 9329
+ ],
+ "mapped",
+ [
+ 49,
+ 56
+ ]
+ ],
+ [
+ [
+ 9330,
+ 9330
+ ],
+ "mapped",
+ [
+ 49,
+ 57
+ ]
+ ],
+ [
+ [
+ 9331,
+ 9331
+ ],
+ "mapped",
+ [
+ 50,
+ 48
+ ]
+ ],
+ [
+ [
+ 9332,
+ 9332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9333,
+ 9333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9334,
+ 9334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9335,
+ 9335
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9336,
+ 9336
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9337,
+ 9337
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9338,
+ 9338
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9339,
+ 9339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9340,
+ 9340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9341,
+ 9341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9342,
+ 9342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9343,
+ 9343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9344,
+ 9344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9345,
+ 9345
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9346,
+ 9346
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9347,
+ 9347
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9348,
+ 9348
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9349,
+ 9349
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9350,
+ 9350
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9351,
+ 9351
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9352,
+ 9371
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9372,
+ 9372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 9373,
+ 9373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 9374,
+ 9374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 9375,
+ 9375
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 9376,
+ 9376
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 9377,
+ 9377
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 9378,
+ 9378
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 9379,
+ 9379
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 9380,
+ 9380
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 9381,
+ 9381
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 9382,
+ 9382
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 9383,
+ 9383
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 9384,
+ 9384
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 9385,
+ 9385
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 9386,
+ 9386
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 9387,
+ 9387
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 9388,
+ 9388
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 9389,
+ 9389
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 9390,
+ 9390
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 9391,
+ 9391
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 9392,
+ 9392
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 9393,
+ 9393
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 9394,
+ 9394
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 9395,
+ 9395
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 9396,
+ 9396
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 9397,
+ 9397
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 9398,
+ 9398
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9399,
+ 9399
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9400,
+ 9400
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9401,
+ 9401
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9402,
+ 9402
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9403,
+ 9403
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9404,
+ 9404
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9405,
+ 9405
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9406,
+ 9406
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9407,
+ 9407
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9408,
+ 9408
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9409,
+ 9409
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9410,
+ 9410
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9411,
+ 9411
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9412,
+ 9412
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9413,
+ 9413
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9414,
+ 9414
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9415,
+ 9415
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9416,
+ 9416
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9417,
+ 9417
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9418,
+ 9418
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9419,
+ 9419
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9420,
+ 9420
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9421,
+ 9421
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9422,
+ 9422
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9423,
+ 9423
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9424,
+ 9424
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9425,
+ 9425
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9426,
+ 9426
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9427,
+ 9427
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9428,
+ 9428
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9429,
+ 9429
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9430,
+ 9430
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9431,
+ 9431
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9432,
+ 9432
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9433,
+ 9433
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9434,
+ 9434
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9435,
+ 9435
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9436,
+ 9436
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9437,
+ 9437
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9438,
+ 9438
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9439,
+ 9439
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9440,
+ 9440
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9441,
+ 9441
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9442,
+ 9442
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9443,
+ 9443
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9444,
+ 9444
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9445,
+ 9445
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9446,
+ 9446
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9447,
+ 9447
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9448,
+ 9448
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9449,
+ 9449
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9450,
+ 9450
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 9451,
+ 9470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9471,
+ 9471
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9472,
+ 9621
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9622,
+ 9631
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9632,
+ 9711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9712,
+ 9719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9720,
+ 9727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9728,
+ 9747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9748,
+ 9749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9750,
+ 9751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9752,
+ 9752
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9753,
+ 9753
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9754,
+ 9839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9840,
+ 9841
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9842,
+ 9853
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9854,
+ 9855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9856,
+ 9865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9866,
+ 9873
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9874,
+ 9884
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9885,
+ 9885
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9886,
+ 9887
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9888,
+ 9889
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9890,
+ 9905
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9906,
+ 9906
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9907,
+ 9916
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9917,
+ 9919
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9920,
+ 9923
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9924,
+ 9933
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9934,
+ 9934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9935,
+ 9953
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9954,
+ 9954
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9955,
+ 9955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9956,
+ 9959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9960,
+ 9983
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9984,
+ 9984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9985,
+ 9988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9989,
+ 9989
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9990,
+ 9993
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9994,
+ 9995
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9996,
+ 10023
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10024,
+ 10024
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10025,
+ 10059
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10060,
+ 10060
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10061,
+ 10061
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10062,
+ 10062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10063,
+ 10066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10067,
+ 10069
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10070,
+ 10070
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10071,
+ 10071
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10072,
+ 10078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10079,
+ 10080
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10081,
+ 10087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10088,
+ 10101
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10102,
+ 10132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10133,
+ 10135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10136,
+ 10159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10160,
+ 10160
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10161,
+ 10174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10175,
+ 10175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10176,
+ 10182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10183,
+ 10186
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10187,
+ 10187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10188,
+ 10188
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10189,
+ 10189
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10190,
+ 10191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10192,
+ 10219
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10220,
+ 10223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10224,
+ 10239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10240,
+ 10495
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10496,
+ 10763
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10764,
+ 10764
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 10765,
+ 10867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10868,
+ 10868
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58,
+ 58,
+ 61
+ ]
+ ],
+ [
+ [
+ 10869,
+ 10869
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10870,
+ 10870
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10871,
+ 10971
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10972,
+ 10972
+ ],
+ "mapped",
+ [
+ 10973,
+ 824
+ ]
+ ],
+ [
+ [
+ 10973,
+ 11007
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11008,
+ 11021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11022,
+ 11027
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11028,
+ 11034
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11035,
+ 11039
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11040,
+ 11043
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11044,
+ 11084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11085,
+ 11087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11088,
+ 11092
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11093,
+ 11097
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11098,
+ 11123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11124,
+ 11125
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11126,
+ 11157
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11158,
+ 11159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11160,
+ 11193
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11194,
+ 11196
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11197,
+ 11208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11209,
+ 11209
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11210,
+ 11217
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11218,
+ 11243
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11244,
+ 11247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11248,
+ 11263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11264,
+ 11264
+ ],
+ "mapped",
+ [
+ 11312
+ ]
+ ],
+ [
+ [
+ 11265,
+ 11265
+ ],
+ "mapped",
+ [
+ 11313
+ ]
+ ],
+ [
+ [
+ 11266,
+ 11266
+ ],
+ "mapped",
+ [
+ 11314
+ ]
+ ],
+ [
+ [
+ 11267,
+ 11267
+ ],
+ "mapped",
+ [
+ 11315
+ ]
+ ],
+ [
+ [
+ 11268,
+ 11268
+ ],
+ "mapped",
+ [
+ 11316
+ ]
+ ],
+ [
+ [
+ 11269,
+ 11269
+ ],
+ "mapped",
+ [
+ 11317
+ ]
+ ],
+ [
+ [
+ 11270,
+ 11270
+ ],
+ "mapped",
+ [
+ 11318
+ ]
+ ],
+ [
+ [
+ 11271,
+ 11271
+ ],
+ "mapped",
+ [
+ 11319
+ ]
+ ],
+ [
+ [
+ 11272,
+ 11272
+ ],
+ "mapped",
+ [
+ 11320
+ ]
+ ],
+ [
+ [
+ 11273,
+ 11273
+ ],
+ "mapped",
+ [
+ 11321
+ ]
+ ],
+ [
+ [
+ 11274,
+ 11274
+ ],
+ "mapped",
+ [
+ 11322
+ ]
+ ],
+ [
+ [
+ 11275,
+ 11275
+ ],
+ "mapped",
+ [
+ 11323
+ ]
+ ],
+ [
+ [
+ 11276,
+ 11276
+ ],
+ "mapped",
+ [
+ 11324
+ ]
+ ],
+ [
+ [
+ 11277,
+ 11277
+ ],
+ "mapped",
+ [
+ 11325
+ ]
+ ],
+ [
+ [
+ 11278,
+ 11278
+ ],
+ "mapped",
+ [
+ 11326
+ ]
+ ],
+ [
+ [
+ 11279,
+ 11279
+ ],
+ "mapped",
+ [
+ 11327
+ ]
+ ],
+ [
+ [
+ 11280,
+ 11280
+ ],
+ "mapped",
+ [
+ 11328
+ ]
+ ],
+ [
+ [
+ 11281,
+ 11281
+ ],
+ "mapped",
+ [
+ 11329
+ ]
+ ],
+ [
+ [
+ 11282,
+ 11282
+ ],
+ "mapped",
+ [
+ 11330
+ ]
+ ],
+ [
+ [
+ 11283,
+ 11283
+ ],
+ "mapped",
+ [
+ 11331
+ ]
+ ],
+ [
+ [
+ 11284,
+ 11284
+ ],
+ "mapped",
+ [
+ 11332
+ ]
+ ],
+ [
+ [
+ 11285,
+ 11285
+ ],
+ "mapped",
+ [
+ 11333
+ ]
+ ],
+ [
+ [
+ 11286,
+ 11286
+ ],
+ "mapped",
+ [
+ 11334
+ ]
+ ],
+ [
+ [
+ 11287,
+ 11287
+ ],
+ "mapped",
+ [
+ 11335
+ ]
+ ],
+ [
+ [
+ 11288,
+ 11288
+ ],
+ "mapped",
+ [
+ 11336
+ ]
+ ],
+ [
+ [
+ 11289,
+ 11289
+ ],
+ "mapped",
+ [
+ 11337
+ ]
+ ],
+ [
+ [
+ 11290,
+ 11290
+ ],
+ "mapped",
+ [
+ 11338
+ ]
+ ],
+ [
+ [
+ 11291,
+ 11291
+ ],
+ "mapped",
+ [
+ 11339
+ ]
+ ],
+ [
+ [
+ 11292,
+ 11292
+ ],
+ "mapped",
+ [
+ 11340
+ ]
+ ],
+ [
+ [
+ 11293,
+ 11293
+ ],
+ "mapped",
+ [
+ 11341
+ ]
+ ],
+ [
+ [
+ 11294,
+ 11294
+ ],
+ "mapped",
+ [
+ 11342
+ ]
+ ],
+ [
+ [
+ 11295,
+ 11295
+ ],
+ "mapped",
+ [
+ 11343
+ ]
+ ],
+ [
+ [
+ 11296,
+ 11296
+ ],
+ "mapped",
+ [
+ 11344
+ ]
+ ],
+ [
+ [
+ 11297,
+ 11297
+ ],
+ "mapped",
+ [
+ 11345
+ ]
+ ],
+ [
+ [
+ 11298,
+ 11298
+ ],
+ "mapped",
+ [
+ 11346
+ ]
+ ],
+ [
+ [
+ 11299,
+ 11299
+ ],
+ "mapped",
+ [
+ 11347
+ ]
+ ],
+ [
+ [
+ 11300,
+ 11300
+ ],
+ "mapped",
+ [
+ 11348
+ ]
+ ],
+ [
+ [
+ 11301,
+ 11301
+ ],
+ "mapped",
+ [
+ 11349
+ ]
+ ],
+ [
+ [
+ 11302,
+ 11302
+ ],
+ "mapped",
+ [
+ 11350
+ ]
+ ],
+ [
+ [
+ 11303,
+ 11303
+ ],
+ "mapped",
+ [
+ 11351
+ ]
+ ],
+ [
+ [
+ 11304,
+ 11304
+ ],
+ "mapped",
+ [
+ 11352
+ ]
+ ],
+ [
+ [
+ 11305,
+ 11305
+ ],
+ "mapped",
+ [
+ 11353
+ ]
+ ],
+ [
+ [
+ 11306,
+ 11306
+ ],
+ "mapped",
+ [
+ 11354
+ ]
+ ],
+ [
+ [
+ 11307,
+ 11307
+ ],
+ "mapped",
+ [
+ 11355
+ ]
+ ],
+ [
+ [
+ 11308,
+ 11308
+ ],
+ "mapped",
+ [
+ 11356
+ ]
+ ],
+ [
+ [
+ 11309,
+ 11309
+ ],
+ "mapped",
+ [
+ 11357
+ ]
+ ],
+ [
+ [
+ 11310,
+ 11310
+ ],
+ "mapped",
+ [
+ 11358
+ ]
+ ],
+ [
+ [
+ 11311,
+ 11311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11312,
+ 11358
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11359,
+ 11359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11360,
+ 11360
+ ],
+ "mapped",
+ [
+ 11361
+ ]
+ ],
+ [
+ [
+ 11361,
+ 11361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11362,
+ 11362
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 11363,
+ 11363
+ ],
+ "mapped",
+ [
+ 7549
+ ]
+ ],
+ [
+ [
+ 11364,
+ 11364
+ ],
+ "mapped",
+ [
+ 637
+ ]
+ ],
+ [
+ [
+ 11365,
+ 11366
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11367,
+ 11367
+ ],
+ "mapped",
+ [
+ 11368
+ ]
+ ],
+ [
+ [
+ 11368,
+ 11368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11369,
+ 11369
+ ],
+ "mapped",
+ [
+ 11370
+ ]
+ ],
+ [
+ [
+ 11370,
+ 11370
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11371,
+ 11371
+ ],
+ "mapped",
+ [
+ 11372
+ ]
+ ],
+ [
+ [
+ 11372,
+ 11372
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11373,
+ 11373
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 11374,
+ 11374
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 11375,
+ 11375
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 11376,
+ 11376
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 11377,
+ 11377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11378,
+ 11378
+ ],
+ "mapped",
+ [
+ 11379
+ ]
+ ],
+ [
+ [
+ 11379,
+ 11379
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11380,
+ 11380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11381,
+ 11381
+ ],
+ "mapped",
+ [
+ 11382
+ ]
+ ],
+ [
+ [
+ 11382,
+ 11383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11384,
+ 11387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11388,
+ 11388
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 11389,
+ 11389
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 11390,
+ 11390
+ ],
+ "mapped",
+ [
+ 575
+ ]
+ ],
+ [
+ [
+ 11391,
+ 11391
+ ],
+ "mapped",
+ [
+ 576
+ ]
+ ],
+ [
+ [
+ 11392,
+ 11392
+ ],
+ "mapped",
+ [
+ 11393
+ ]
+ ],
+ [
+ [
+ 11393,
+ 11393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11394,
+ 11394
+ ],
+ "mapped",
+ [
+ 11395
+ ]
+ ],
+ [
+ [
+ 11395,
+ 11395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11396,
+ 11396
+ ],
+ "mapped",
+ [
+ 11397
+ ]
+ ],
+ [
+ [
+ 11397,
+ 11397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11398,
+ 11398
+ ],
+ "mapped",
+ [
+ 11399
+ ]
+ ],
+ [
+ [
+ 11399,
+ 11399
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11400,
+ 11400
+ ],
+ "mapped",
+ [
+ 11401
+ ]
+ ],
+ [
+ [
+ 11401,
+ 11401
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11402,
+ 11402
+ ],
+ "mapped",
+ [
+ 11403
+ ]
+ ],
+ [
+ [
+ 11403,
+ 11403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11404,
+ 11404
+ ],
+ "mapped",
+ [
+ 11405
+ ]
+ ],
+ [
+ [
+ 11405,
+ 11405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11406,
+ 11406
+ ],
+ "mapped",
+ [
+ 11407
+ ]
+ ],
+ [
+ [
+ 11407,
+ 11407
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11408,
+ 11408
+ ],
+ "mapped",
+ [
+ 11409
+ ]
+ ],
+ [
+ [
+ 11409,
+ 11409
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11410,
+ 11410
+ ],
+ "mapped",
+ [
+ 11411
+ ]
+ ],
+ [
+ [
+ 11411,
+ 11411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11412,
+ 11412
+ ],
+ "mapped",
+ [
+ 11413
+ ]
+ ],
+ [
+ [
+ 11413,
+ 11413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11414,
+ 11414
+ ],
+ "mapped",
+ [
+ 11415
+ ]
+ ],
+ [
+ [
+ 11415,
+ 11415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11416,
+ 11416
+ ],
+ "mapped",
+ [
+ 11417
+ ]
+ ],
+ [
+ [
+ 11417,
+ 11417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11418,
+ 11418
+ ],
+ "mapped",
+ [
+ 11419
+ ]
+ ],
+ [
+ [
+ 11419,
+ 11419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11420,
+ 11420
+ ],
+ "mapped",
+ [
+ 11421
+ ]
+ ],
+ [
+ [
+ 11421,
+ 11421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11422,
+ 11422
+ ],
+ "mapped",
+ [
+ 11423
+ ]
+ ],
+ [
+ [
+ 11423,
+ 11423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11424,
+ 11424
+ ],
+ "mapped",
+ [
+ 11425
+ ]
+ ],
+ [
+ [
+ 11425,
+ 11425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11426,
+ 11426
+ ],
+ "mapped",
+ [
+ 11427
+ ]
+ ],
+ [
+ [
+ 11427,
+ 11427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11428,
+ 11428
+ ],
+ "mapped",
+ [
+ 11429
+ ]
+ ],
+ [
+ [
+ 11429,
+ 11429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11430,
+ 11430
+ ],
+ "mapped",
+ [
+ 11431
+ ]
+ ],
+ [
+ [
+ 11431,
+ 11431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11432,
+ 11432
+ ],
+ "mapped",
+ [
+ 11433
+ ]
+ ],
+ [
+ [
+ 11433,
+ 11433
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11434,
+ 11434
+ ],
+ "mapped",
+ [
+ 11435
+ ]
+ ],
+ [
+ [
+ 11435,
+ 11435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11436,
+ 11436
+ ],
+ "mapped",
+ [
+ 11437
+ ]
+ ],
+ [
+ [
+ 11437,
+ 11437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11438,
+ 11438
+ ],
+ "mapped",
+ [
+ 11439
+ ]
+ ],
+ [
+ [
+ 11439,
+ 11439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11440,
+ 11440
+ ],
+ "mapped",
+ [
+ 11441
+ ]
+ ],
+ [
+ [
+ 11441,
+ 11441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11442,
+ 11442
+ ],
+ "mapped",
+ [
+ 11443
+ ]
+ ],
+ [
+ [
+ 11443,
+ 11443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11444,
+ 11444
+ ],
+ "mapped",
+ [
+ 11445
+ ]
+ ],
+ [
+ [
+ 11445,
+ 11445
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11446,
+ 11446
+ ],
+ "mapped",
+ [
+ 11447
+ ]
+ ],
+ [
+ [
+ 11447,
+ 11447
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11448,
+ 11448
+ ],
+ "mapped",
+ [
+ 11449
+ ]
+ ],
+ [
+ [
+ 11449,
+ 11449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11450,
+ 11450
+ ],
+ "mapped",
+ [
+ 11451
+ ]
+ ],
+ [
+ [
+ 11451,
+ 11451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11452,
+ 11452
+ ],
+ "mapped",
+ [
+ 11453
+ ]
+ ],
+ [
+ [
+ 11453,
+ 11453
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11454,
+ 11454
+ ],
+ "mapped",
+ [
+ 11455
+ ]
+ ],
+ [
+ [
+ 11455,
+ 11455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11456,
+ 11456
+ ],
+ "mapped",
+ [
+ 11457
+ ]
+ ],
+ [
+ [
+ 11457,
+ 11457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11458,
+ 11458
+ ],
+ "mapped",
+ [
+ 11459
+ ]
+ ],
+ [
+ [
+ 11459,
+ 11459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11460,
+ 11460
+ ],
+ "mapped",
+ [
+ 11461
+ ]
+ ],
+ [
+ [
+ 11461,
+ 11461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11462,
+ 11462
+ ],
+ "mapped",
+ [
+ 11463
+ ]
+ ],
+ [
+ [
+ 11463,
+ 11463
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11464,
+ 11464
+ ],
+ "mapped",
+ [
+ 11465
+ ]
+ ],
+ [
+ [
+ 11465,
+ 11465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11466,
+ 11466
+ ],
+ "mapped",
+ [
+ 11467
+ ]
+ ],
+ [
+ [
+ 11467,
+ 11467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11468,
+ 11468
+ ],
+ "mapped",
+ [
+ 11469
+ ]
+ ],
+ [
+ [
+ 11469,
+ 11469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11470,
+ 11470
+ ],
+ "mapped",
+ [
+ 11471
+ ]
+ ],
+ [
+ [
+ 11471,
+ 11471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11472,
+ 11472
+ ],
+ "mapped",
+ [
+ 11473
+ ]
+ ],
+ [
+ [
+ 11473,
+ 11473
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11474,
+ 11474
+ ],
+ "mapped",
+ [
+ 11475
+ ]
+ ],
+ [
+ [
+ 11475,
+ 11475
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11476,
+ 11476
+ ],
+ "mapped",
+ [
+ 11477
+ ]
+ ],
+ [
+ [
+ 11477,
+ 11477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11478,
+ 11478
+ ],
+ "mapped",
+ [
+ 11479
+ ]
+ ],
+ [
+ [
+ 11479,
+ 11479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11480,
+ 11480
+ ],
+ "mapped",
+ [
+ 11481
+ ]
+ ],
+ [
+ [
+ 11481,
+ 11481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11482,
+ 11482
+ ],
+ "mapped",
+ [
+ 11483
+ ]
+ ],
+ [
+ [
+ 11483,
+ 11483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11484,
+ 11484
+ ],
+ "mapped",
+ [
+ 11485
+ ]
+ ],
+ [
+ [
+ 11485,
+ 11485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11486,
+ 11486
+ ],
+ "mapped",
+ [
+ 11487
+ ]
+ ],
+ [
+ [
+ 11487,
+ 11487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11488,
+ 11488
+ ],
+ "mapped",
+ [
+ 11489
+ ]
+ ],
+ [
+ [
+ 11489,
+ 11489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11490,
+ 11490
+ ],
+ "mapped",
+ [
+ 11491
+ ]
+ ],
+ [
+ [
+ 11491,
+ 11492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11493,
+ 11498
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11499,
+ 11499
+ ],
+ "mapped",
+ [
+ 11500
+ ]
+ ],
+ [
+ [
+ 11500,
+ 11500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11501,
+ 11501
+ ],
+ "mapped",
+ [
+ 11502
+ ]
+ ],
+ [
+ [
+ 11502,
+ 11505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11506,
+ 11506
+ ],
+ "mapped",
+ [
+ 11507
+ ]
+ ],
+ [
+ [
+ 11507,
+ 11507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11508,
+ 11512
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11513,
+ 11519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11520,
+ 11557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11558,
+ 11558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11559,
+ 11559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11560,
+ 11564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11565,
+ 11565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11566,
+ 11567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11568,
+ 11621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11622,
+ 11623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11624,
+ 11630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11631,
+ 11631
+ ],
+ "mapped",
+ [
+ 11617
+ ]
+ ],
+ [
+ [
+ 11632,
+ 11632
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11633,
+ 11646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11647,
+ 11647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11648,
+ 11670
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11671,
+ 11679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11680,
+ 11686
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11687,
+ 11687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11688,
+ 11694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11695,
+ 11695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11696,
+ 11702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11703,
+ 11703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11704,
+ 11710
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11711,
+ 11711
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11712,
+ 11718
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11719,
+ 11719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11720,
+ 11726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11727,
+ 11727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11728,
+ 11734
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11735,
+ 11735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11736,
+ 11742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11743,
+ 11743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11744,
+ 11775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11776,
+ 11799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11800,
+ 11803
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11804,
+ 11805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11806,
+ 11822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11823,
+ 11823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11824,
+ 11824
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11825,
+ 11825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11826,
+ 11835
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11836,
+ 11842
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11843,
+ 11903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11904,
+ 11929
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11930,
+ 11930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11931,
+ 11934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11935,
+ 11935
+ ],
+ "mapped",
+ [
+ 27597
+ ]
+ ],
+ [
+ [
+ 11936,
+ 12018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12019,
+ 12019
+ ],
+ "mapped",
+ [
+ 40863
+ ]
+ ],
+ [
+ [
+ 12020,
+ 12031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12032,
+ 12032
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12033,
+ 12033
+ ],
+ "mapped",
+ [
+ 20008
+ ]
+ ],
+ [
+ [
+ 12034,
+ 12034
+ ],
+ "mapped",
+ [
+ 20022
+ ]
+ ],
+ [
+ [
+ 12035,
+ 12035
+ ],
+ "mapped",
+ [
+ 20031
+ ]
+ ],
+ [
+ [
+ 12036,
+ 12036
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12037,
+ 12037
+ ],
+ "mapped",
+ [
+ 20101
+ ]
+ ],
+ [
+ [
+ 12038,
+ 12038
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12039,
+ 12039
+ ],
+ "mapped",
+ [
+ 20128
+ ]
+ ],
+ [
+ [
+ 12040,
+ 12040
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12041,
+ 12041
+ ],
+ "mapped",
+ [
+ 20799
+ ]
+ ],
+ [
+ [
+ 12042,
+ 12042
+ ],
+ "mapped",
+ [
+ 20837
+ ]
+ ],
+ [
+ [
+ 12043,
+ 12043
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12044,
+ 12044
+ ],
+ "mapped",
+ [
+ 20866
+ ]
+ ],
+ [
+ [
+ 12045,
+ 12045
+ ],
+ "mapped",
+ [
+ 20886
+ ]
+ ],
+ [
+ [
+ 12046,
+ 12046
+ ],
+ "mapped",
+ [
+ 20907
+ ]
+ ],
+ [
+ [
+ 12047,
+ 12047
+ ],
+ "mapped",
+ [
+ 20960
+ ]
+ ],
+ [
+ [
+ 12048,
+ 12048
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 12049,
+ 12049
+ ],
+ "mapped",
+ [
+ 20992
+ ]
+ ],
+ [
+ [
+ 12050,
+ 12050
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 12051,
+ 12051
+ ],
+ "mapped",
+ [
+ 21241
+ ]
+ ],
+ [
+ [
+ 12052,
+ 12052
+ ],
+ "mapped",
+ [
+ 21269
+ ]
+ ],
+ [
+ [
+ 12053,
+ 12053
+ ],
+ "mapped",
+ [
+ 21274
+ ]
+ ],
+ [
+ [
+ 12054,
+ 12054
+ ],
+ "mapped",
+ [
+ 21304
+ ]
+ ],
+ [
+ [
+ 12055,
+ 12055
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12056,
+ 12056
+ ],
+ "mapped",
+ [
+ 21340
+ ]
+ ],
+ [
+ [
+ 12057,
+ 12057
+ ],
+ "mapped",
+ [
+ 21353
+ ]
+ ],
+ [
+ [
+ 12058,
+ 12058
+ ],
+ "mapped",
+ [
+ 21378
+ ]
+ ],
+ [
+ [
+ 12059,
+ 12059
+ ],
+ "mapped",
+ [
+ 21430
+ ]
+ ],
+ [
+ [
+ 12060,
+ 12060
+ ],
+ "mapped",
+ [
+ 21448
+ ]
+ ],
+ [
+ [
+ 12061,
+ 12061
+ ],
+ "mapped",
+ [
+ 21475
+ ]
+ ],
+ [
+ [
+ 12062,
+ 12062
+ ],
+ "mapped",
+ [
+ 22231
+ ]
+ ],
+ [
+ [
+ 12063,
+ 12063
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12064,
+ 12064
+ ],
+ "mapped",
+ [
+ 22763
+ ]
+ ],
+ [
+ [
+ 12065,
+ 12065
+ ],
+ "mapped",
+ [
+ 22786
+ ]
+ ],
+ [
+ [
+ 12066,
+ 12066
+ ],
+ "mapped",
+ [
+ 22794
+ ]
+ ],
+ [
+ [
+ 12067,
+ 12067
+ ],
+ "mapped",
+ [
+ 22805
+ ]
+ ],
+ [
+ [
+ 12068,
+ 12068
+ ],
+ "mapped",
+ [
+ 22823
+ ]
+ ],
+ [
+ [
+ 12069,
+ 12069
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12070,
+ 12070
+ ],
+ "mapped",
+ [
+ 23376
+ ]
+ ],
+ [
+ [
+ 12071,
+ 12071
+ ],
+ "mapped",
+ [
+ 23424
+ ]
+ ],
+ [
+ [
+ 12072,
+ 12072
+ ],
+ "mapped",
+ [
+ 23544
+ ]
+ ],
+ [
+ [
+ 12073,
+ 12073
+ ],
+ "mapped",
+ [
+ 23567
+ ]
+ ],
+ [
+ [
+ 12074,
+ 12074
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 12075,
+ 12075
+ ],
+ "mapped",
+ [
+ 23608
+ ]
+ ],
+ [
+ [
+ 12076,
+ 12076
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 12077,
+ 12077
+ ],
+ "mapped",
+ [
+ 23665
+ ]
+ ],
+ [
+ [
+ 12078,
+ 12078
+ ],
+ "mapped",
+ [
+ 24027
+ ]
+ ],
+ [
+ [
+ 12079,
+ 12079
+ ],
+ "mapped",
+ [
+ 24037
+ ]
+ ],
+ [
+ [
+ 12080,
+ 12080
+ ],
+ "mapped",
+ [
+ 24049
+ ]
+ ],
+ [
+ [
+ 12081,
+ 12081
+ ],
+ "mapped",
+ [
+ 24062
+ ]
+ ],
+ [
+ [
+ 12082,
+ 12082
+ ],
+ "mapped",
+ [
+ 24178
+ ]
+ ],
+ [
+ [
+ 12083,
+ 12083
+ ],
+ "mapped",
+ [
+ 24186
+ ]
+ ],
+ [
+ [
+ 12084,
+ 12084
+ ],
+ "mapped",
+ [
+ 24191
+ ]
+ ],
+ [
+ [
+ 12085,
+ 12085
+ ],
+ "mapped",
+ [
+ 24308
+ ]
+ ],
+ [
+ [
+ 12086,
+ 12086
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 12087,
+ 12087
+ ],
+ "mapped",
+ [
+ 24331
+ ]
+ ],
+ [
+ [
+ 12088,
+ 12088
+ ],
+ "mapped",
+ [
+ 24339
+ ]
+ ],
+ [
+ [
+ 12089,
+ 12089
+ ],
+ "mapped",
+ [
+ 24400
+ ]
+ ],
+ [
+ [
+ 12090,
+ 12090
+ ],
+ "mapped",
+ [
+ 24417
+ ]
+ ],
+ [
+ [
+ 12091,
+ 12091
+ ],
+ "mapped",
+ [
+ 24435
+ ]
+ ],
+ [
+ [
+ 12092,
+ 12092
+ ],
+ "mapped",
+ [
+ 24515
+ ]
+ ],
+ [
+ [
+ 12093,
+ 12093
+ ],
+ "mapped",
+ [
+ 25096
+ ]
+ ],
+ [
+ [
+ 12094,
+ 12094
+ ],
+ "mapped",
+ [
+ 25142
+ ]
+ ],
+ [
+ [
+ 12095,
+ 12095
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 12096,
+ 12096
+ ],
+ "mapped",
+ [
+ 25903
+ ]
+ ],
+ [
+ [
+ 12097,
+ 12097
+ ],
+ "mapped",
+ [
+ 25908
+ ]
+ ],
+ [
+ [
+ 12098,
+ 12098
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12099,
+ 12099
+ ],
+ "mapped",
+ [
+ 26007
+ ]
+ ],
+ [
+ [
+ 12100,
+ 12100
+ ],
+ "mapped",
+ [
+ 26020
+ ]
+ ],
+ [
+ [
+ 12101,
+ 12101
+ ],
+ "mapped",
+ [
+ 26041
+ ]
+ ],
+ [
+ [
+ 12102,
+ 12102
+ ],
+ "mapped",
+ [
+ 26080
+ ]
+ ],
+ [
+ [
+ 12103,
+ 12103
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12104,
+ 12104
+ ],
+ "mapped",
+ [
+ 26352
+ ]
+ ],
+ [
+ [
+ 12105,
+ 12105
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12106,
+ 12106
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12107,
+ 12107
+ ],
+ "mapped",
+ [
+ 27424
+ ]
+ ],
+ [
+ [
+ 12108,
+ 12108
+ ],
+ "mapped",
+ [
+ 27490
+ ]
+ ],
+ [
+ [
+ 12109,
+ 12109
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 12110,
+ 12110
+ ],
+ "mapped",
+ [
+ 27571
+ ]
+ ],
+ [
+ [
+ 12111,
+ 12111
+ ],
+ "mapped",
+ [
+ 27595
+ ]
+ ],
+ [
+ [
+ 12112,
+ 12112
+ ],
+ "mapped",
+ [
+ 27604
+ ]
+ ],
+ [
+ [
+ 12113,
+ 12113
+ ],
+ "mapped",
+ [
+ 27611
+ ]
+ ],
+ [
+ [
+ 12114,
+ 12114
+ ],
+ "mapped",
+ [
+ 27663
+ ]
+ ],
+ [
+ [
+ 12115,
+ 12115
+ ],
+ "mapped",
+ [
+ 27668
+ ]
+ ],
+ [
+ [
+ 12116,
+ 12116
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12117,
+ 12117
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12118,
+ 12118
+ ],
+ "mapped",
+ [
+ 29226
+ ]
+ ],
+ [
+ [
+ 12119,
+ 12119
+ ],
+ "mapped",
+ [
+ 29238
+ ]
+ ],
+ [
+ [
+ 12120,
+ 12120
+ ],
+ "mapped",
+ [
+ 29243
+ ]
+ ],
+ [
+ [
+ 12121,
+ 12121
+ ],
+ "mapped",
+ [
+ 29247
+ ]
+ ],
+ [
+ [
+ 12122,
+ 12122
+ ],
+ "mapped",
+ [
+ 29255
+ ]
+ ],
+ [
+ [
+ 12123,
+ 12123
+ ],
+ "mapped",
+ [
+ 29273
+ ]
+ ],
+ [
+ [
+ 12124,
+ 12124
+ ],
+ "mapped",
+ [
+ 29275
+ ]
+ ],
+ [
+ [
+ 12125,
+ 12125
+ ],
+ "mapped",
+ [
+ 29356
+ ]
+ ],
+ [
+ [
+ 12126,
+ 12126
+ ],
+ "mapped",
+ [
+ 29572
+ ]
+ ],
+ [
+ [
+ 12127,
+ 12127
+ ],
+ "mapped",
+ [
+ 29577
+ ]
+ ],
+ [
+ [
+ 12128,
+ 12128
+ ],
+ "mapped",
+ [
+ 29916
+ ]
+ ],
+ [
+ [
+ 12129,
+ 12129
+ ],
+ "mapped",
+ [
+ 29926
+ ]
+ ],
+ [
+ [
+ 12130,
+ 12130
+ ],
+ "mapped",
+ [
+ 29976
+ ]
+ ],
+ [
+ [
+ 12131,
+ 12131
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 12132,
+ 12132
+ ],
+ "mapped",
+ [
+ 29992
+ ]
+ ],
+ [
+ [
+ 12133,
+ 12133
+ ],
+ "mapped",
+ [
+ 30000
+ ]
+ ],
+ [
+ [
+ 12134,
+ 12134
+ ],
+ "mapped",
+ [
+ 30091
+ ]
+ ],
+ [
+ [
+ 12135,
+ 12135
+ ],
+ "mapped",
+ [
+ 30098
+ ]
+ ],
+ [
+ [
+ 12136,
+ 12136
+ ],
+ "mapped",
+ [
+ 30326
+ ]
+ ],
+ [
+ [
+ 12137,
+ 12137
+ ],
+ "mapped",
+ [
+ 30333
+ ]
+ ],
+ [
+ [
+ 12138,
+ 12138
+ ],
+ "mapped",
+ [
+ 30382
+ ]
+ ],
+ [
+ [
+ 12139,
+ 12139
+ ],
+ "mapped",
+ [
+ 30399
+ ]
+ ],
+ [
+ [
+ 12140,
+ 12140
+ ],
+ "mapped",
+ [
+ 30446
+ ]
+ ],
+ [
+ [
+ 12141,
+ 12141
+ ],
+ "mapped",
+ [
+ 30683
+ ]
+ ],
+ [
+ [
+ 12142,
+ 12142
+ ],
+ "mapped",
+ [
+ 30690
+ ]
+ ],
+ [
+ [
+ 12143,
+ 12143
+ ],
+ "mapped",
+ [
+ 30707
+ ]
+ ],
+ [
+ [
+ 12144,
+ 12144
+ ],
+ "mapped",
+ [
+ 31034
+ ]
+ ],
+ [
+ [
+ 12145,
+ 12145
+ ],
+ "mapped",
+ [
+ 31160
+ ]
+ ],
+ [
+ [
+ 12146,
+ 12146
+ ],
+ "mapped",
+ [
+ 31166
+ ]
+ ],
+ [
+ [
+ 12147,
+ 12147
+ ],
+ "mapped",
+ [
+ 31348
+ ]
+ ],
+ [
+ [
+ 12148,
+ 12148
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 12149,
+ 12149
+ ],
+ "mapped",
+ [
+ 31481
+ ]
+ ],
+ [
+ [
+ 12150,
+ 12150
+ ],
+ "mapped",
+ [
+ 31859
+ ]
+ ],
+ [
+ [
+ 12151,
+ 12151
+ ],
+ "mapped",
+ [
+ 31992
+ ]
+ ],
+ [
+ [
+ 12152,
+ 12152
+ ],
+ "mapped",
+ [
+ 32566
+ ]
+ ],
+ [
+ [
+ 12153,
+ 12153
+ ],
+ "mapped",
+ [
+ 32593
+ ]
+ ],
+ [
+ [
+ 12154,
+ 12154
+ ],
+ "mapped",
+ [
+ 32650
+ ]
+ ],
+ [
+ [
+ 12155,
+ 12155
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 12156,
+ 12156
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 12157,
+ 12157
+ ],
+ "mapped",
+ [
+ 32780
+ ]
+ ],
+ [
+ [
+ 12158,
+ 12158
+ ],
+ "mapped",
+ [
+ 32786
+ ]
+ ],
+ [
+ [
+ 12159,
+ 12159
+ ],
+ "mapped",
+ [
+ 32819
+ ]
+ ],
+ [
+ [
+ 12160,
+ 12160
+ ],
+ "mapped",
+ [
+ 32895
+ ]
+ ],
+ [
+ [
+ 12161,
+ 12161
+ ],
+ "mapped",
+ [
+ 32905
+ ]
+ ],
+ [
+ [
+ 12162,
+ 12162
+ ],
+ "mapped",
+ [
+ 33251
+ ]
+ ],
+ [
+ [
+ 12163,
+ 12163
+ ],
+ "mapped",
+ [
+ 33258
+ ]
+ ],
+ [
+ [
+ 12164,
+ 12164
+ ],
+ "mapped",
+ [
+ 33267
+ ]
+ ],
+ [
+ [
+ 12165,
+ 12165
+ ],
+ "mapped",
+ [
+ 33276
+ ]
+ ],
+ [
+ [
+ 12166,
+ 12166
+ ],
+ "mapped",
+ [
+ 33292
+ ]
+ ],
+ [
+ [
+ 12167,
+ 12167
+ ],
+ "mapped",
+ [
+ 33307
+ ]
+ ],
+ [
+ [
+ 12168,
+ 12168
+ ],
+ "mapped",
+ [
+ 33311
+ ]
+ ],
+ [
+ [
+ 12169,
+ 12169
+ ],
+ "mapped",
+ [
+ 33390
+ ]
+ ],
+ [
+ [
+ 12170,
+ 12170
+ ],
+ "mapped",
+ [
+ 33394
+ ]
+ ],
+ [
+ [
+ 12171,
+ 12171
+ ],
+ "mapped",
+ [
+ 33400
+ ]
+ ],
+ [
+ [
+ 12172,
+ 12172
+ ],
+ "mapped",
+ [
+ 34381
+ ]
+ ],
+ [
+ [
+ 12173,
+ 12173
+ ],
+ "mapped",
+ [
+ 34411
+ ]
+ ],
+ [
+ [
+ 12174,
+ 12174
+ ],
+ "mapped",
+ [
+ 34880
+ ]
+ ],
+ [
+ [
+ 12175,
+ 12175
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 12176,
+ 12176
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 12177,
+ 12177
+ ],
+ "mapped",
+ [
+ 35198
+ ]
+ ],
+ [
+ [
+ 12178,
+ 12178
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 12179,
+ 12179
+ ],
+ "mapped",
+ [
+ 35282
+ ]
+ ],
+ [
+ [
+ 12180,
+ 12180
+ ],
+ "mapped",
+ [
+ 35328
+ ]
+ ],
+ [
+ [
+ 12181,
+ 12181
+ ],
+ "mapped",
+ [
+ 35895
+ ]
+ ],
+ [
+ [
+ 12182,
+ 12182
+ ],
+ "mapped",
+ [
+ 35910
+ ]
+ ],
+ [
+ [
+ 12183,
+ 12183
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 12184,
+ 12184
+ ],
+ "mapped",
+ [
+ 35960
+ ]
+ ],
+ [
+ [
+ 12185,
+ 12185
+ ],
+ "mapped",
+ [
+ 35997
+ ]
+ ],
+ [
+ [
+ 12186,
+ 12186
+ ],
+ "mapped",
+ [
+ 36196
+ ]
+ ],
+ [
+ [
+ 12187,
+ 12187
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 12188,
+ 12188
+ ],
+ "mapped",
+ [
+ 36275
+ ]
+ ],
+ [
+ [
+ 12189,
+ 12189
+ ],
+ "mapped",
+ [
+ 36523
+ ]
+ ],
+ [
+ [
+ 12190,
+ 12190
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 12191,
+ 12191
+ ],
+ "mapped",
+ [
+ 36763
+ ]
+ ],
+ [
+ [
+ 12192,
+ 12192
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 12193,
+ 12193
+ ],
+ "mapped",
+ [
+ 36789
+ ]
+ ],
+ [
+ [
+ 12194,
+ 12194
+ ],
+ "mapped",
+ [
+ 37009
+ ]
+ ],
+ [
+ [
+ 12195,
+ 12195
+ ],
+ "mapped",
+ [
+ 37193
+ ]
+ ],
+ [
+ [
+ 12196,
+ 12196
+ ],
+ "mapped",
+ [
+ 37318
+ ]
+ ],
+ [
+ [
+ 12197,
+ 12197
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 12198,
+ 12198
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12199,
+ 12199
+ ],
+ "mapped",
+ [
+ 38263
+ ]
+ ],
+ [
+ [
+ 12200,
+ 12200
+ ],
+ "mapped",
+ [
+ 38272
+ ]
+ ],
+ [
+ [
+ 12201,
+ 12201
+ ],
+ "mapped",
+ [
+ 38428
+ ]
+ ],
+ [
+ [
+ 12202,
+ 12202
+ ],
+ "mapped",
+ [
+ 38582
+ ]
+ ],
+ [
+ [
+ 12203,
+ 12203
+ ],
+ "mapped",
+ [
+ 38585
+ ]
+ ],
+ [
+ [
+ 12204,
+ 12204
+ ],
+ "mapped",
+ [
+ 38632
+ ]
+ ],
+ [
+ [
+ 12205,
+ 12205
+ ],
+ "mapped",
+ [
+ 38737
+ ]
+ ],
+ [
+ [
+ 12206,
+ 12206
+ ],
+ "mapped",
+ [
+ 38750
+ ]
+ ],
+ [
+ [
+ 12207,
+ 12207
+ ],
+ "mapped",
+ [
+ 38754
+ ]
+ ],
+ [
+ [
+ 12208,
+ 12208
+ ],
+ "mapped",
+ [
+ 38761
+ ]
+ ],
+ [
+ [
+ 12209,
+ 12209
+ ],
+ "mapped",
+ [
+ 38859
+ ]
+ ],
+ [
+ [
+ 12210,
+ 12210
+ ],
+ "mapped",
+ [
+ 38893
+ ]
+ ],
+ [
+ [
+ 12211,
+ 12211
+ ],
+ "mapped",
+ [
+ 38899
+ ]
+ ],
+ [
+ [
+ 12212,
+ 12212
+ ],
+ "mapped",
+ [
+ 38913
+ ]
+ ],
+ [
+ [
+ 12213,
+ 12213
+ ],
+ "mapped",
+ [
+ 39080
+ ]
+ ],
+ [
+ [
+ 12214,
+ 12214
+ ],
+ "mapped",
+ [
+ 39131
+ ]
+ ],
+ [
+ [
+ 12215,
+ 12215
+ ],
+ "mapped",
+ [
+ 39135
+ ]
+ ],
+ [
+ [
+ 12216,
+ 12216
+ ],
+ "mapped",
+ [
+ 39318
+ ]
+ ],
+ [
+ [
+ 12217,
+ 12217
+ ],
+ "mapped",
+ [
+ 39321
+ ]
+ ],
+ [
+ [
+ 12218,
+ 12218
+ ],
+ "mapped",
+ [
+ 39340
+ ]
+ ],
+ [
+ [
+ 12219,
+ 12219
+ ],
+ "mapped",
+ [
+ 39592
+ ]
+ ],
+ [
+ [
+ 12220,
+ 12220
+ ],
+ "mapped",
+ [
+ 39640
+ ]
+ ],
+ [
+ [
+ 12221,
+ 12221
+ ],
+ "mapped",
+ [
+ 39647
+ ]
+ ],
+ [
+ [
+ 12222,
+ 12222
+ ],
+ "mapped",
+ [
+ 39717
+ ]
+ ],
+ [
+ [
+ 12223,
+ 12223
+ ],
+ "mapped",
+ [
+ 39727
+ ]
+ ],
+ [
+ [
+ 12224,
+ 12224
+ ],
+ "mapped",
+ [
+ 39730
+ ]
+ ],
+ [
+ [
+ 12225,
+ 12225
+ ],
+ "mapped",
+ [
+ 39740
+ ]
+ ],
+ [
+ [
+ 12226,
+ 12226
+ ],
+ "mapped",
+ [
+ 39770
+ ]
+ ],
+ [
+ [
+ 12227,
+ 12227
+ ],
+ "mapped",
+ [
+ 40165
+ ]
+ ],
+ [
+ [
+ 12228,
+ 12228
+ ],
+ "mapped",
+ [
+ 40565
+ ]
+ ],
+ [
+ [
+ 12229,
+ 12229
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 12230,
+ 12230
+ ],
+ "mapped",
+ [
+ 40613
+ ]
+ ],
+ [
+ [
+ 12231,
+ 12231
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 12232,
+ 12232
+ ],
+ "mapped",
+ [
+ 40643
+ ]
+ ],
+ [
+ [
+ 12233,
+ 12233
+ ],
+ "mapped",
+ [
+ 40653
+ ]
+ ],
+ [
+ [
+ 12234,
+ 12234
+ ],
+ "mapped",
+ [
+ 40657
+ ]
+ ],
+ [
+ [
+ 12235,
+ 12235
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 12236,
+ 12236
+ ],
+ "mapped",
+ [
+ 40701
+ ]
+ ],
+ [
+ [
+ 12237,
+ 12237
+ ],
+ "mapped",
+ [
+ 40718
+ ]
+ ],
+ [
+ [
+ 12238,
+ 12238
+ ],
+ "mapped",
+ [
+ 40723
+ ]
+ ],
+ [
+ [
+ 12239,
+ 12239
+ ],
+ "mapped",
+ [
+ 40736
+ ]
+ ],
+ [
+ [
+ 12240,
+ 12240
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 12241,
+ 12241
+ ],
+ "mapped",
+ [
+ 40778
+ ]
+ ],
+ [
+ [
+ 12242,
+ 12242
+ ],
+ "mapped",
+ [
+ 40786
+ ]
+ ],
+ [
+ [
+ 12243,
+ 12243
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 12244,
+ 12244
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 12245,
+ 12245
+ ],
+ "mapped",
+ [
+ 40864
+ ]
+ ],
+ [
+ [
+ 12246,
+ 12271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12272,
+ 12283
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12284,
+ 12287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12288,
+ 12288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 12289,
+ 12289
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12290,
+ 12290
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 12291,
+ 12292
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12293,
+ 12295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12296,
+ 12329
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12330,
+ 12333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12334,
+ 12341
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12342,
+ 12342
+ ],
+ "mapped",
+ [
+ 12306
+ ]
+ ],
+ [
+ [
+ 12343,
+ 12343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12344,
+ 12344
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12345,
+ 12345
+ ],
+ "mapped",
+ [
+ 21316
+ ]
+ ],
+ [
+ [
+ 12346,
+ 12346
+ ],
+ "mapped",
+ [
+ 21317
+ ]
+ ],
+ [
+ [
+ 12347,
+ 12347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12348,
+ 12348
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12349,
+ 12349
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12350,
+ 12350
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12351,
+ 12351
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12352,
+ 12352
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12353,
+ 12436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12437,
+ 12438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12439,
+ 12440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12441,
+ 12442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12443,
+ 12443
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12441
+ ]
+ ],
+ [
+ [
+ 12444,
+ 12444
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12442
+ ]
+ ],
+ [
+ [
+ 12445,
+ 12446
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12447,
+ 12447
+ ],
+ "mapped",
+ [
+ 12424,
+ 12426
+ ]
+ ],
+ [
+ [
+ 12448,
+ 12448
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12449,
+ 12542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12543,
+ 12543
+ ],
+ "mapped",
+ [
+ 12467,
+ 12488
+ ]
+ ],
+ [
+ [
+ 12544,
+ 12548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12549,
+ 12588
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12589,
+ 12589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12590,
+ 12592
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12593,
+ 12593
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12594,
+ 12594
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 12595,
+ 12595
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 12596,
+ 12596
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12597,
+ 12597
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 12598,
+ 12598
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 12599,
+ 12599
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12600,
+ 12600
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 12601,
+ 12601
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12602,
+ 12602
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 12603,
+ 12603
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 12604,
+ 12604
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 12605,
+ 12605
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 12606,
+ 12606
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 12607,
+ 12607
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 12608,
+ 12608
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 12609,
+ 12609
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12610,
+ 12610
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12611,
+ 12611
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 12612,
+ 12612
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 12613,
+ 12613
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12614,
+ 12614
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 12615,
+ 12615
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12616,
+ 12616
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12617,
+ 12617
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 12618,
+ 12618
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12619,
+ 12619
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12620,
+ 12620
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12621,
+ 12621
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12622,
+ 12622
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12623,
+ 12623
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 12624,
+ 12624
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 12625,
+ 12625
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 12626,
+ 12626
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 12627,
+ 12627
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 12628,
+ 12628
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 12629,
+ 12629
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 12630,
+ 12630
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 12631,
+ 12631
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 12632,
+ 12632
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 12633,
+ 12633
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 12634,
+ 12634
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 12635,
+ 12635
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 12636,
+ 12636
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 12637,
+ 12637
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 12638,
+ 12638
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 12639,
+ 12639
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 12640,
+ 12640
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 12641,
+ 12641
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 12642,
+ 12642
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 12643,
+ 12643
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 12644,
+ 12644
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12645,
+ 12645
+ ],
+ "mapped",
+ [
+ 4372
+ ]
+ ],
+ [
+ [
+ 12646,
+ 12646
+ ],
+ "mapped",
+ [
+ 4373
+ ]
+ ],
+ [
+ [
+ 12647,
+ 12647
+ ],
+ "mapped",
+ [
+ 4551
+ ]
+ ],
+ [
+ [
+ 12648,
+ 12648
+ ],
+ "mapped",
+ [
+ 4552
+ ]
+ ],
+ [
+ [
+ 12649,
+ 12649
+ ],
+ "mapped",
+ [
+ 4556
+ ]
+ ],
+ [
+ [
+ 12650,
+ 12650
+ ],
+ "mapped",
+ [
+ 4558
+ ]
+ ],
+ [
+ [
+ 12651,
+ 12651
+ ],
+ "mapped",
+ [
+ 4563
+ ]
+ ],
+ [
+ [
+ 12652,
+ 12652
+ ],
+ "mapped",
+ [
+ 4567
+ ]
+ ],
+ [
+ [
+ 12653,
+ 12653
+ ],
+ "mapped",
+ [
+ 4569
+ ]
+ ],
+ [
+ [
+ 12654,
+ 12654
+ ],
+ "mapped",
+ [
+ 4380
+ ]
+ ],
+ [
+ [
+ 12655,
+ 12655
+ ],
+ "mapped",
+ [
+ 4573
+ ]
+ ],
+ [
+ [
+ 12656,
+ 12656
+ ],
+ "mapped",
+ [
+ 4575
+ ]
+ ],
+ [
+ [
+ 12657,
+ 12657
+ ],
+ "mapped",
+ [
+ 4381
+ ]
+ ],
+ [
+ [
+ 12658,
+ 12658
+ ],
+ "mapped",
+ [
+ 4382
+ ]
+ ],
+ [
+ [
+ 12659,
+ 12659
+ ],
+ "mapped",
+ [
+ 4384
+ ]
+ ],
+ [
+ [
+ 12660,
+ 12660
+ ],
+ "mapped",
+ [
+ 4386
+ ]
+ ],
+ [
+ [
+ 12661,
+ 12661
+ ],
+ "mapped",
+ [
+ 4387
+ ]
+ ],
+ [
+ [
+ 12662,
+ 12662
+ ],
+ "mapped",
+ [
+ 4391
+ ]
+ ],
+ [
+ [
+ 12663,
+ 12663
+ ],
+ "mapped",
+ [
+ 4393
+ ]
+ ],
+ [
+ [
+ 12664,
+ 12664
+ ],
+ "mapped",
+ [
+ 4395
+ ]
+ ],
+ [
+ [
+ 12665,
+ 12665
+ ],
+ "mapped",
+ [
+ 4396
+ ]
+ ],
+ [
+ [
+ 12666,
+ 12666
+ ],
+ "mapped",
+ [
+ 4397
+ ]
+ ],
+ [
+ [
+ 12667,
+ 12667
+ ],
+ "mapped",
+ [
+ 4398
+ ]
+ ],
+ [
+ [
+ 12668,
+ 12668
+ ],
+ "mapped",
+ [
+ 4399
+ ]
+ ],
+ [
+ [
+ 12669,
+ 12669
+ ],
+ "mapped",
+ [
+ 4402
+ ]
+ ],
+ [
+ [
+ 12670,
+ 12670
+ ],
+ "mapped",
+ [
+ 4406
+ ]
+ ],
+ [
+ [
+ 12671,
+ 12671
+ ],
+ "mapped",
+ [
+ 4416
+ ]
+ ],
+ [
+ [
+ 12672,
+ 12672
+ ],
+ "mapped",
+ [
+ 4423
+ ]
+ ],
+ [
+ [
+ 12673,
+ 12673
+ ],
+ "mapped",
+ [
+ 4428
+ ]
+ ],
+ [
+ [
+ 12674,
+ 12674
+ ],
+ "mapped",
+ [
+ 4593
+ ]
+ ],
+ [
+ [
+ 12675,
+ 12675
+ ],
+ "mapped",
+ [
+ 4594
+ ]
+ ],
+ [
+ [
+ 12676,
+ 12676
+ ],
+ "mapped",
+ [
+ 4439
+ ]
+ ],
+ [
+ [
+ 12677,
+ 12677
+ ],
+ "mapped",
+ [
+ 4440
+ ]
+ ],
+ [
+ [
+ 12678,
+ 12678
+ ],
+ "mapped",
+ [
+ 4441
+ ]
+ ],
+ [
+ [
+ 12679,
+ 12679
+ ],
+ "mapped",
+ [
+ 4484
+ ]
+ ],
+ [
+ [
+ 12680,
+ 12680
+ ],
+ "mapped",
+ [
+ 4485
+ ]
+ ],
+ [
+ [
+ 12681,
+ 12681
+ ],
+ "mapped",
+ [
+ 4488
+ ]
+ ],
+ [
+ [
+ 12682,
+ 12682
+ ],
+ "mapped",
+ [
+ 4497
+ ]
+ ],
+ [
+ [
+ 12683,
+ 12683
+ ],
+ "mapped",
+ [
+ 4498
+ ]
+ ],
+ [
+ [
+ 12684,
+ 12684
+ ],
+ "mapped",
+ [
+ 4500
+ ]
+ ],
+ [
+ [
+ 12685,
+ 12685
+ ],
+ "mapped",
+ [
+ 4510
+ ]
+ ],
+ [
+ [
+ 12686,
+ 12686
+ ],
+ "mapped",
+ [
+ 4513
+ ]
+ ],
+ [
+ [
+ 12687,
+ 12687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12688,
+ 12689
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12690,
+ 12690
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12691,
+ 12691
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12692,
+ 12692
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12693,
+ 12693
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12694,
+ 12694
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12695,
+ 12695
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12696,
+ 12696
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12697,
+ 12697
+ ],
+ "mapped",
+ [
+ 30002
+ ]
+ ],
+ [
+ [
+ 12698,
+ 12698
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12699,
+ 12699
+ ],
+ "mapped",
+ [
+ 19993
+ ]
+ ],
+ [
+ [
+ 12700,
+ 12700
+ ],
+ "mapped",
+ [
+ 19969
+ ]
+ ],
+ [
+ [
+ 12701,
+ 12701
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 12702,
+ 12702
+ ],
+ "mapped",
+ [
+ 22320
+ ]
+ ],
+ [
+ [
+ 12703,
+ 12703
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12704,
+ 12727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12728,
+ 12730
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12731,
+ 12735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12736,
+ 12751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12752,
+ 12771
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12772,
+ 12783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12784,
+ 12799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12800,
+ 12800
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4352,
+ 41
+ ]
+ ],
+ [
+ [
+ 12801,
+ 12801
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4354,
+ 41
+ ]
+ ],
+ [
+ [
+ 12802,
+ 12802
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4355,
+ 41
+ ]
+ ],
+ [
+ [
+ 12803,
+ 12803
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4357,
+ 41
+ ]
+ ],
+ [
+ [
+ 12804,
+ 12804
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4358,
+ 41
+ ]
+ ],
+ [
+ [
+ 12805,
+ 12805
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4359,
+ 41
+ ]
+ ],
+ [
+ [
+ 12806,
+ 12806
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4361,
+ 41
+ ]
+ ],
+ [
+ [
+ 12807,
+ 12807
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4363,
+ 41
+ ]
+ ],
+ [
+ [
+ 12808,
+ 12808
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4364,
+ 41
+ ]
+ ],
+ [
+ [
+ 12809,
+ 12809
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4366,
+ 41
+ ]
+ ],
+ [
+ [
+ 12810,
+ 12810
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4367,
+ 41
+ ]
+ ],
+ [
+ [
+ 12811,
+ 12811
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4368,
+ 41
+ ]
+ ],
+ [
+ [
+ 12812,
+ 12812
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4369,
+ 41
+ ]
+ ],
+ [
+ [
+ 12813,
+ 12813
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4370,
+ 41
+ ]
+ ],
+ [
+ [
+ 12814,
+ 12814
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 44032,
+ 41
+ ]
+ ],
+ [
+ [
+ 12815,
+ 12815
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45208,
+ 41
+ ]
+ ],
+ [
+ [
+ 12816,
+ 12816
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45796,
+ 41
+ ]
+ ],
+ [
+ [
+ 12817,
+ 12817
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 46972,
+ 41
+ ]
+ ],
+ [
+ [
+ 12818,
+ 12818
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 47560,
+ 41
+ ]
+ ],
+ [
+ [
+ 12819,
+ 12819
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 48148,
+ 41
+ ]
+ ],
+ [
+ [
+ 12820,
+ 12820
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49324,
+ 41
+ ]
+ ],
+ [
+ [
+ 12821,
+ 12821
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50500,
+ 41
+ ]
+ ],
+ [
+ [
+ 12822,
+ 12822
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51088,
+ 41
+ ]
+ ],
+ [
+ [
+ 12823,
+ 12823
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52264,
+ 41
+ ]
+ ],
+ [
+ [
+ 12824,
+ 12824
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52852,
+ 41
+ ]
+ ],
+ [
+ [
+ 12825,
+ 12825
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53440,
+ 41
+ ]
+ ],
+ [
+ [
+ 12826,
+ 12826
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54028,
+ 41
+ ]
+ ],
+ [
+ [
+ 12827,
+ 12827
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54616,
+ 41
+ ]
+ ],
+ [
+ [
+ 12828,
+ 12828
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51452,
+ 41
+ ]
+ ],
+ [
+ [
+ 12829,
+ 12829
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 51204,
+ 41
+ ]
+ ],
+ [
+ [
+ 12830,
+ 12830
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 54980,
+ 41
+ ]
+ ],
+ [
+ [
+ 12831,
+ 12831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12832,
+ 12832
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19968,
+ 41
+ ]
+ ],
+ [
+ [
+ 12833,
+ 12833
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20108,
+ 41
+ ]
+ ],
+ [
+ [
+ 12834,
+ 12834
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19977,
+ 41
+ ]
+ ],
+ [
+ [
+ 12835,
+ 12835
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22235,
+ 41
+ ]
+ ],
+ [
+ [
+ 12836,
+ 12836
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20116,
+ 41
+ ]
+ ],
+ [
+ [
+ 12837,
+ 12837
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20845,
+ 41
+ ]
+ ],
+ [
+ [
+ 12838,
+ 12838
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19971,
+ 41
+ ]
+ ],
+ [
+ [
+ 12839,
+ 12839
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20843,
+ 41
+ ]
+ ],
+ [
+ [
+ 12840,
+ 12840
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20061,
+ 41
+ ]
+ ],
+ [
+ [
+ 12841,
+ 12841
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21313,
+ 41
+ ]
+ ],
+ [
+ [
+ 12842,
+ 12842
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26376,
+ 41
+ ]
+ ],
+ [
+ [
+ 12843,
+ 12843
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 28779,
+ 41
+ ]
+ ],
+ [
+ [
+ 12844,
+ 12844
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 27700,
+ 41
+ ]
+ ],
+ [
+ [
+ 12845,
+ 12845
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26408,
+ 41
+ ]
+ ],
+ [
+ [
+ 12846,
+ 12846
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 37329,
+ 41
+ ]
+ ],
+ [
+ [
+ 12847,
+ 12847
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22303,
+ 41
+ ]
+ ],
+ [
+ [
+ 12848,
+ 12848
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12849,
+ 12849
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26666,
+ 41
+ ]
+ ],
+ [
+ [
+ 12850,
+ 12850
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26377,
+ 41
+ ]
+ ],
+ [
+ [
+ 12851,
+ 12851
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31038,
+ 41
+ ]
+ ],
+ [
+ [
+ 12852,
+ 12852
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21517,
+ 41
+ ]
+ ],
+ [
+ [
+ 12853,
+ 12853
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 29305,
+ 41
+ ]
+ ],
+ [
+ [
+ 12854,
+ 12854
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36001,
+ 41
+ ]
+ ],
+ [
+ [
+ 12855,
+ 12855
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31069,
+ 41
+ ]
+ ],
+ [
+ [
+ 12856,
+ 12856
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21172,
+ 41
+ ]
+ ],
+ [
+ [
+ 12857,
+ 12857
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20195,
+ 41
+ ]
+ ],
+ [
+ [
+ 12858,
+ 12858
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21628,
+ 41
+ ]
+ ],
+ [
+ [
+ 12859,
+ 12859
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 23398,
+ 41
+ ]
+ ],
+ [
+ [
+ 12860,
+ 12860
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 30435,
+ 41
+ ]
+ ],
+ [
+ [
+ 12861,
+ 12861
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20225,
+ 41
+ ]
+ ],
+ [
+ [
+ 12862,
+ 12862
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36039,
+ 41
+ ]
+ ],
+ [
+ [
+ 12863,
+ 12863
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21332,
+ 41
+ ]
+ ],
+ [
+ [
+ 12864,
+ 12864
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12865,
+ 12865
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20241,
+ 41
+ ]
+ ],
+ [
+ [
+ 12866,
+ 12866
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33258,
+ 41
+ ]
+ ],
+ [
+ [
+ 12867,
+ 12867
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33267,
+ 41
+ ]
+ ],
+ [
+ [
+ 12868,
+ 12868
+ ],
+ "mapped",
+ [
+ 21839
+ ]
+ ],
+ [
+ [
+ 12869,
+ 12869
+ ],
+ "mapped",
+ [
+ 24188
+ ]
+ ],
+ [
+ [
+ 12870,
+ 12870
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12871,
+ 12871
+ ],
+ "mapped",
+ [
+ 31631
+ ]
+ ],
+ [
+ [
+ 12872,
+ 12879
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12880,
+ 12880
+ ],
+ "mapped",
+ [
+ 112,
+ 116,
+ 101
+ ]
+ ],
+ [
+ [
+ 12881,
+ 12881
+ ],
+ "mapped",
+ [
+ 50,
+ 49
+ ]
+ ],
+ [
+ [
+ 12882,
+ 12882
+ ],
+ "mapped",
+ [
+ 50,
+ 50
+ ]
+ ],
+ [
+ [
+ 12883,
+ 12883
+ ],
+ "mapped",
+ [
+ 50,
+ 51
+ ]
+ ],
+ [
+ [
+ 12884,
+ 12884
+ ],
+ "mapped",
+ [
+ 50,
+ 52
+ ]
+ ],
+ [
+ [
+ 12885,
+ 12885
+ ],
+ "mapped",
+ [
+ 50,
+ 53
+ ]
+ ],
+ [
+ [
+ 12886,
+ 12886
+ ],
+ "mapped",
+ [
+ 50,
+ 54
+ ]
+ ],
+ [
+ [
+ 12887,
+ 12887
+ ],
+ "mapped",
+ [
+ 50,
+ 55
+ ]
+ ],
+ [
+ [
+ 12888,
+ 12888
+ ],
+ "mapped",
+ [
+ 50,
+ 56
+ ]
+ ],
+ [
+ [
+ 12889,
+ 12889
+ ],
+ "mapped",
+ [
+ 50,
+ 57
+ ]
+ ],
+ [
+ [
+ 12890,
+ 12890
+ ],
+ "mapped",
+ [
+ 51,
+ 48
+ ]
+ ],
+ [
+ [
+ 12891,
+ 12891
+ ],
+ "mapped",
+ [
+ 51,
+ 49
+ ]
+ ],
+ [
+ [
+ 12892,
+ 12892
+ ],
+ "mapped",
+ [
+ 51,
+ 50
+ ]
+ ],
+ [
+ [
+ 12893,
+ 12893
+ ],
+ "mapped",
+ [
+ 51,
+ 51
+ ]
+ ],
+ [
+ [
+ 12894,
+ 12894
+ ],
+ "mapped",
+ [
+ 51,
+ 52
+ ]
+ ],
+ [
+ [
+ 12895,
+ 12895
+ ],
+ "mapped",
+ [
+ 51,
+ 53
+ ]
+ ],
+ [
+ [
+ 12896,
+ 12896
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12897,
+ 12897
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12898,
+ 12898
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12899,
+ 12899
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12900,
+ 12900
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12901,
+ 12901
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12902,
+ 12902
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12903,
+ 12903
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12904,
+ 12904
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12905,
+ 12905
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12906,
+ 12906
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12907,
+ 12907
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12908,
+ 12908
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12909,
+ 12909
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12910,
+ 12910
+ ],
+ "mapped",
+ [
+ 44032
+ ]
+ ],
+ [
+ [
+ 12911,
+ 12911
+ ],
+ "mapped",
+ [
+ 45208
+ ]
+ ],
+ [
+ [
+ 12912,
+ 12912
+ ],
+ "mapped",
+ [
+ 45796
+ ]
+ ],
+ [
+ [
+ 12913,
+ 12913
+ ],
+ "mapped",
+ [
+ 46972
+ ]
+ ],
+ [
+ [
+ 12914,
+ 12914
+ ],
+ "mapped",
+ [
+ 47560
+ ]
+ ],
+ [
+ [
+ 12915,
+ 12915
+ ],
+ "mapped",
+ [
+ 48148
+ ]
+ ],
+ [
+ [
+ 12916,
+ 12916
+ ],
+ "mapped",
+ [
+ 49324
+ ]
+ ],
+ [
+ [
+ 12917,
+ 12917
+ ],
+ "mapped",
+ [
+ 50500
+ ]
+ ],
+ [
+ [
+ 12918,
+ 12918
+ ],
+ "mapped",
+ [
+ 51088
+ ]
+ ],
+ [
+ [
+ 12919,
+ 12919
+ ],
+ "mapped",
+ [
+ 52264
+ ]
+ ],
+ [
+ [
+ 12920,
+ 12920
+ ],
+ "mapped",
+ [
+ 52852
+ ]
+ ],
+ [
+ [
+ 12921,
+ 12921
+ ],
+ "mapped",
+ [
+ 53440
+ ]
+ ],
+ [
+ [
+ 12922,
+ 12922
+ ],
+ "mapped",
+ [
+ 54028
+ ]
+ ],
+ [
+ [
+ 12923,
+ 12923
+ ],
+ "mapped",
+ [
+ 54616
+ ]
+ ],
+ [
+ [
+ 12924,
+ 12924
+ ],
+ "mapped",
+ [
+ 52280,
+ 44256
+ ]
+ ],
+ [
+ [
+ 12925,
+ 12925
+ ],
+ "mapped",
+ [
+ 51452,
+ 51032
+ ]
+ ],
+ [
+ [
+ 12926,
+ 12926
+ ],
+ "mapped",
+ [
+ 50864
+ ]
+ ],
+ [
+ [
+ 12927,
+ 12927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12928,
+ 12928
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12929,
+ 12929
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12930,
+ 12930
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12931,
+ 12931
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12932,
+ 12932
+ ],
+ "mapped",
+ [
+ 20116
+ ]
+ ],
+ [
+ [
+ 12933,
+ 12933
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 12934,
+ 12934
+ ],
+ "mapped",
+ [
+ 19971
+ ]
+ ],
+ [
+ [
+ 12935,
+ 12935
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12936,
+ 12936
+ ],
+ "mapped",
+ [
+ 20061
+ ]
+ ],
+ [
+ [
+ 12937,
+ 12937
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12938,
+ 12938
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12939,
+ 12939
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12940,
+ 12940
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12941,
+ 12941
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12942,
+ 12942
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12943,
+ 12943
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12944,
+ 12944
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12945,
+ 12945
+ ],
+ "mapped",
+ [
+ 26666
+ ]
+ ],
+ [
+ [
+ 12946,
+ 12946
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 12947,
+ 12947
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 12948,
+ 12948
+ ],
+ "mapped",
+ [
+ 21517
+ ]
+ ],
+ [
+ [
+ 12949,
+ 12949
+ ],
+ "mapped",
+ [
+ 29305
+ ]
+ ],
+ [
+ [
+ 12950,
+ 12950
+ ],
+ "mapped",
+ [
+ 36001
+ ]
+ ],
+ [
+ [
+ 12951,
+ 12951
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 12952,
+ 12952
+ ],
+ "mapped",
+ [
+ 21172
+ ]
+ ],
+ [
+ [
+ 12953,
+ 12953
+ ],
+ "mapped",
+ [
+ 31192
+ ]
+ ],
+ [
+ [
+ 12954,
+ 12954
+ ],
+ "mapped",
+ [
+ 30007
+ ]
+ ],
+ [
+ [
+ 12955,
+ 12955
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12956,
+ 12956
+ ],
+ "mapped",
+ [
+ 36969
+ ]
+ ],
+ [
+ [
+ 12957,
+ 12957
+ ],
+ "mapped",
+ [
+ 20778
+ ]
+ ],
+ [
+ [
+ 12958,
+ 12958
+ ],
+ "mapped",
+ [
+ 21360
+ ]
+ ],
+ [
+ [
+ 12959,
+ 12959
+ ],
+ "mapped",
+ [
+ 27880
+ ]
+ ],
+ [
+ [
+ 12960,
+ 12960
+ ],
+ "mapped",
+ [
+ 38917
+ ]
+ ],
+ [
+ [
+ 12961,
+ 12961
+ ],
+ "mapped",
+ [
+ 20241
+ ]
+ ],
+ [
+ [
+ 12962,
+ 12962
+ ],
+ "mapped",
+ [
+ 20889
+ ]
+ ],
+ [
+ [
+ 12963,
+ 12963
+ ],
+ "mapped",
+ [
+ 27491
+ ]
+ ],
+ [
+ [
+ 12964,
+ 12964
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12965,
+ 12965
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12966,
+ 12966
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12967,
+ 12967
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 12968,
+ 12968
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 12969,
+ 12969
+ ],
+ "mapped",
+ [
+ 21307
+ ]
+ ],
+ [
+ [
+ 12970,
+ 12970
+ ],
+ "mapped",
+ [
+ 23447
+ ]
+ ],
+ [
+ [
+ 12971,
+ 12971
+ ],
+ "mapped",
+ [
+ 23398
+ ]
+ ],
+ [
+ [
+ 12972,
+ 12972
+ ],
+ "mapped",
+ [
+ 30435
+ ]
+ ],
+ [
+ [
+ 12973,
+ 12973
+ ],
+ "mapped",
+ [
+ 20225
+ ]
+ ],
+ [
+ [
+ 12974,
+ 12974
+ ],
+ "mapped",
+ [
+ 36039
+ ]
+ ],
+ [
+ [
+ 12975,
+ 12975
+ ],
+ "mapped",
+ [
+ 21332
+ ]
+ ],
+ [
+ [
+ 12976,
+ 12976
+ ],
+ "mapped",
+ [
+ 22812
+ ]
+ ],
+ [
+ [
+ 12977,
+ 12977
+ ],
+ "mapped",
+ [
+ 51,
+ 54
+ ]
+ ],
+ [
+ [
+ 12978,
+ 12978
+ ],
+ "mapped",
+ [
+ 51,
+ 55
+ ]
+ ],
+ [
+ [
+ 12979,
+ 12979
+ ],
+ "mapped",
+ [
+ 51,
+ 56
+ ]
+ ],
+ [
+ [
+ 12980,
+ 12980
+ ],
+ "mapped",
+ [
+ 51,
+ 57
+ ]
+ ],
+ [
+ [
+ 12981,
+ 12981
+ ],
+ "mapped",
+ [
+ 52,
+ 48
+ ]
+ ],
+ [
+ [
+ 12982,
+ 12982
+ ],
+ "mapped",
+ [
+ 52,
+ 49
+ ]
+ ],
+ [
+ [
+ 12983,
+ 12983
+ ],
+ "mapped",
+ [
+ 52,
+ 50
+ ]
+ ],
+ [
+ [
+ 12984,
+ 12984
+ ],
+ "mapped",
+ [
+ 52,
+ 51
+ ]
+ ],
+ [
+ [
+ 12985,
+ 12985
+ ],
+ "mapped",
+ [
+ 52,
+ 52
+ ]
+ ],
+ [
+ [
+ 12986,
+ 12986
+ ],
+ "mapped",
+ [
+ 52,
+ 53
+ ]
+ ],
+ [
+ [
+ 12987,
+ 12987
+ ],
+ "mapped",
+ [
+ 52,
+ 54
+ ]
+ ],
+ [
+ [
+ 12988,
+ 12988
+ ],
+ "mapped",
+ [
+ 52,
+ 55
+ ]
+ ],
+ [
+ [
+ 12989,
+ 12989
+ ],
+ "mapped",
+ [
+ 52,
+ 56
+ ]
+ ],
+ [
+ [
+ 12990,
+ 12990
+ ],
+ "mapped",
+ [
+ 52,
+ 57
+ ]
+ ],
+ [
+ [
+ 12991,
+ 12991
+ ],
+ "mapped",
+ [
+ 53,
+ 48
+ ]
+ ],
+ [
+ [
+ 12992,
+ 12992
+ ],
+ "mapped",
+ [
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12993,
+ 12993
+ ],
+ "mapped",
+ [
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12994,
+ 12994
+ ],
+ "mapped",
+ [
+ 51,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12995,
+ 12995
+ ],
+ "mapped",
+ [
+ 52,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12996,
+ 12996
+ ],
+ "mapped",
+ [
+ 53,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12997,
+ 12997
+ ],
+ "mapped",
+ [
+ 54,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12998,
+ 12998
+ ],
+ "mapped",
+ [
+ 55,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12999,
+ 12999
+ ],
+ "mapped",
+ [
+ 56,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13000,
+ 13000
+ ],
+ "mapped",
+ [
+ 57,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13001,
+ 13001
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13002,
+ 13002
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13003,
+ 13003
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13004,
+ 13004
+ ],
+ "mapped",
+ [
+ 104,
+ 103
+ ]
+ ],
+ [
+ [
+ 13005,
+ 13005
+ ],
+ "mapped",
+ [
+ 101,
+ 114,
+ 103
+ ]
+ ],
+ [
+ [
+ 13006,
+ 13006
+ ],
+ "mapped",
+ [
+ 101,
+ 118
+ ]
+ ],
+ [
+ [
+ 13007,
+ 13007
+ ],
+ "mapped",
+ [
+ 108,
+ 116,
+ 100
+ ]
+ ],
+ [
+ [
+ 13008,
+ 13008
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 13009,
+ 13009
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 13010,
+ 13010
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 13011,
+ 13011
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 13012,
+ 13012
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 13013,
+ 13013
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 13014,
+ 13014
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 13015,
+ 13015
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 13016,
+ 13016
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 13017,
+ 13017
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 13018,
+ 13018
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 13019,
+ 13019
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 13020,
+ 13020
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 13021,
+ 13021
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 13022,
+ 13022
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 13023,
+ 13023
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 13024,
+ 13024
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 13025,
+ 13025
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 13026,
+ 13026
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 13027,
+ 13027
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 13028,
+ 13028
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 13029,
+ 13029
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 13030,
+ 13030
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 13031,
+ 13031
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 13032,
+ 13032
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 13033,
+ 13033
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 13034,
+ 13034
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 13035,
+ 13035
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 13036,
+ 13036
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 13037,
+ 13037
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 13038,
+ 13038
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 13039,
+ 13039
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 13040,
+ 13040
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 13041,
+ 13041
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 13042,
+ 13042
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 13043,
+ 13043
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 13044,
+ 13044
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 13045,
+ 13045
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 13046,
+ 13046
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 13047,
+ 13047
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 13048,
+ 13048
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 13049,
+ 13049
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 13050,
+ 13050
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 13051,
+ 13051
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 13052,
+ 13052
+ ],
+ "mapped",
+ [
+ 12528
+ ]
+ ],
+ [
+ [
+ 13053,
+ 13053
+ ],
+ "mapped",
+ [
+ 12529
+ ]
+ ],
+ [
+ [
+ 13054,
+ 13054
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 13055,
+ 13055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13056,
+ 13056
+ ],
+ "mapped",
+ [
+ 12450,
+ 12497,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13057,
+ 13057
+ ],
+ "mapped",
+ [
+ 12450,
+ 12523,
+ 12501,
+ 12449
+ ]
+ ],
+ [
+ [
+ 13058,
+ 13058
+ ],
+ "mapped",
+ [
+ 12450,
+ 12531,
+ 12506,
+ 12450
+ ]
+ ],
+ [
+ [
+ 13059,
+ 13059
+ ],
+ "mapped",
+ [
+ 12450,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13060,
+ 13060
+ ],
+ "mapped",
+ [
+ 12452,
+ 12491,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13061,
+ 13061
+ ],
+ "mapped",
+ [
+ 12452,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13062,
+ 13062
+ ],
+ "mapped",
+ [
+ 12454,
+ 12457,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13063,
+ 13063
+ ],
+ "mapped",
+ [
+ 12456,
+ 12473,
+ 12463,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13064,
+ 13064
+ ],
+ "mapped",
+ [
+ 12456,
+ 12540,
+ 12459,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13065,
+ 13065
+ ],
+ "mapped",
+ [
+ 12458,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13066,
+ 13066
+ ],
+ "mapped",
+ [
+ 12458,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13067,
+ 13067
+ ],
+ "mapped",
+ [
+ 12459,
+ 12452,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13068,
+ 13068
+ ],
+ "mapped",
+ [
+ 12459,
+ 12521,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13069,
+ 13069
+ ],
+ "mapped",
+ [
+ 12459,
+ 12525,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13070,
+ 13070
+ ],
+ "mapped",
+ [
+ 12460,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13071,
+ 13071
+ ],
+ "mapped",
+ [
+ 12460,
+ 12531,
+ 12510
+ ]
+ ],
+ [
+ [
+ 13072,
+ 13072
+ ],
+ "mapped",
+ [
+ 12462,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13073,
+ 13073
+ ],
+ "mapped",
+ [
+ 12462,
+ 12491,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13074,
+ 13074
+ ],
+ "mapped",
+ [
+ 12461,
+ 12517,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13075,
+ 13075
+ ],
+ "mapped",
+ [
+ 12462,
+ 12523,
+ 12480,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13076,
+ 13076
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13077,
+ 13077
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13078,
+ 13078
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13079,
+ 13079
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13080,
+ 13080
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13081,
+ 13081
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13082,
+ 13082
+ ],
+ "mapped",
+ [
+ 12463,
+ 12523,
+ 12476,
+ 12452,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13083,
+ 13083
+ ],
+ "mapped",
+ [
+ 12463,
+ 12525,
+ 12540,
+ 12493
+ ]
+ ],
+ [
+ [
+ 13084,
+ 13084
+ ],
+ "mapped",
+ [
+ 12465,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13085,
+ 13085
+ ],
+ "mapped",
+ [
+ 12467,
+ 12523,
+ 12490
+ ]
+ ],
+ [
+ [
+ 13086,
+ 13086
+ ],
+ "mapped",
+ [
+ 12467,
+ 12540,
+ 12509
+ ]
+ ],
+ [
+ [
+ 13087,
+ 13087
+ ],
+ "mapped",
+ [
+ 12469,
+ 12452,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13088,
+ 13088
+ ],
+ "mapped",
+ [
+ 12469,
+ 12531,
+ 12481,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13089,
+ 13089
+ ],
+ "mapped",
+ [
+ 12471,
+ 12522,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13090,
+ 13090
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13091,
+ 13091
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13092,
+ 13092
+ ],
+ "mapped",
+ [
+ 12480,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13093,
+ 13093
+ ],
+ "mapped",
+ [
+ 12487,
+ 12471
+ ]
+ ],
+ [
+ [
+ 13094,
+ 13094
+ ],
+ "mapped",
+ [
+ 12489,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13095,
+ 13095
+ ],
+ "mapped",
+ [
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13096,
+ 13096
+ ],
+ "mapped",
+ [
+ 12490,
+ 12494
+ ]
+ ],
+ [
+ [
+ 13097,
+ 13097
+ ],
+ "mapped",
+ [
+ 12494,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13098,
+ 13098
+ ],
+ "mapped",
+ [
+ 12495,
+ 12452,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13099,
+ 13099
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13100,
+ 13100
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13101,
+ 13101
+ ],
+ "mapped",
+ [
+ 12496,
+ 12540,
+ 12524,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13102,
+ 13102
+ ],
+ "mapped",
+ [
+ 12500,
+ 12450,
+ 12473,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13103,
+ 13103
+ ],
+ "mapped",
+ [
+ 12500,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13104,
+ 13104
+ ],
+ "mapped",
+ [
+ 12500,
+ 12467
+ ]
+ ],
+ [
+ [
+ 13105,
+ 13105
+ ],
+ "mapped",
+ [
+ 12499,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13106,
+ 13106
+ ],
+ "mapped",
+ [
+ 12501,
+ 12449,
+ 12521,
+ 12483,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13107,
+ 13107
+ ],
+ "mapped",
+ [
+ 12501,
+ 12451,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13108,
+ 13108
+ ],
+ "mapped",
+ [
+ 12502,
+ 12483,
+ 12471,
+ 12455,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13109,
+ 13109
+ ],
+ "mapped",
+ [
+ 12501,
+ 12521,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13110,
+ 13110
+ ],
+ "mapped",
+ [
+ 12504,
+ 12463,
+ 12479,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13111,
+ 13111
+ ],
+ "mapped",
+ [
+ 12506,
+ 12477
+ ]
+ ],
+ [
+ [
+ 13112,
+ 13112
+ ],
+ "mapped",
+ [
+ 12506,
+ 12491,
+ 12498
+ ]
+ ],
+ [
+ [
+ 13113,
+ 13113
+ ],
+ "mapped",
+ [
+ 12504,
+ 12523,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13114,
+ 13114
+ ],
+ "mapped",
+ [
+ 12506,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13115,
+ 13115
+ ],
+ "mapped",
+ [
+ 12506,
+ 12540,
+ 12472
+ ]
+ ],
+ [
+ [
+ 13116,
+ 13116
+ ],
+ "mapped",
+ [
+ 12505,
+ 12540,
+ 12479
+ ]
+ ],
+ [
+ [
+ 13117,
+ 13117
+ ],
+ "mapped",
+ [
+ 12509,
+ 12452,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13118,
+ 13118
+ ],
+ "mapped",
+ [
+ 12508,
+ 12523,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13119,
+ 13119
+ ],
+ "mapped",
+ [
+ 12507,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13120,
+ 13120
+ ],
+ "mapped",
+ [
+ 12509,
+ 12531,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13121,
+ 13121
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13122,
+ 13122
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13123,
+ 13123
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12463,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13124,
+ 13124
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13125,
+ 13125
+ ],
+ "mapped",
+ [
+ 12510,
+ 12483,
+ 12495
+ ]
+ ],
+ [
+ [
+ 13126,
+ 13126
+ ],
+ "mapped",
+ [
+ 12510,
+ 12523,
+ 12463
+ ]
+ ],
+ [
+ [
+ 13127,
+ 13127
+ ],
+ "mapped",
+ [
+ 12510,
+ 12531,
+ 12471,
+ 12519,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13128,
+ 13128
+ ],
+ "mapped",
+ [
+ 12511,
+ 12463,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13129,
+ 13129
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13130,
+ 13130
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522,
+ 12496,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13131,
+ 13131
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13132,
+ 13132
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13133,
+ 13133
+ ],
+ "mapped",
+ [
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13134,
+ 13134
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13135,
+ 13135
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13136,
+ 13136
+ ],
+ "mapped",
+ [
+ 12518,
+ 12450,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13137,
+ 13137
+ ],
+ "mapped",
+ [
+ 12522,
+ 12483,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13138,
+ 13138
+ ],
+ "mapped",
+ [
+ 12522,
+ 12521
+ ]
+ ],
+ [
+ [
+ 13139,
+ 13139
+ ],
+ "mapped",
+ [
+ 12523,
+ 12500,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13140,
+ 13140
+ ],
+ "mapped",
+ [
+ 12523,
+ 12540,
+ 12502,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13141,
+ 13141
+ ],
+ "mapped",
+ [
+ 12524,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13142,
+ 13142
+ ],
+ "mapped",
+ [
+ 12524,
+ 12531,
+ 12488,
+ 12466,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13143,
+ 13143
+ ],
+ "mapped",
+ [
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13144,
+ 13144
+ ],
+ "mapped",
+ [
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13145,
+ 13145
+ ],
+ "mapped",
+ [
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13146,
+ 13146
+ ],
+ "mapped",
+ [
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13147,
+ 13147
+ ],
+ "mapped",
+ [
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13148,
+ 13148
+ ],
+ "mapped",
+ [
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13149,
+ 13149
+ ],
+ "mapped",
+ [
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13150,
+ 13150
+ ],
+ "mapped",
+ [
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13151,
+ 13151
+ ],
+ "mapped",
+ [
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13152,
+ 13152
+ ],
+ "mapped",
+ [
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13153,
+ 13153
+ ],
+ "mapped",
+ [
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13154,
+ 13154
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13155,
+ 13155
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13156,
+ 13156
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13157,
+ 13157
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13158,
+ 13158
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13159,
+ 13159
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13160,
+ 13160
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13161,
+ 13161
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13162,
+ 13162
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13163,
+ 13163
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13164,
+ 13164
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13165,
+ 13165
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13166,
+ 13166
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13167,
+ 13167
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13168,
+ 13168
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13169,
+ 13169
+ ],
+ "mapped",
+ [
+ 104,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13170,
+ 13170
+ ],
+ "mapped",
+ [
+ 100,
+ 97
+ ]
+ ],
+ [
+ [
+ 13171,
+ 13171
+ ],
+ "mapped",
+ [
+ 97,
+ 117
+ ]
+ ],
+ [
+ [
+ 13172,
+ 13172
+ ],
+ "mapped",
+ [
+ 98,
+ 97,
+ 114
+ ]
+ ],
+ [
+ [
+ 13173,
+ 13173
+ ],
+ "mapped",
+ [
+ 111,
+ 118
+ ]
+ ],
+ [
+ [
+ 13174,
+ 13174
+ ],
+ "mapped",
+ [
+ 112,
+ 99
+ ]
+ ],
+ [
+ [
+ 13175,
+ 13175
+ ],
+ "mapped",
+ [
+ 100,
+ 109
+ ]
+ ],
+ [
+ [
+ 13176,
+ 13176
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13177,
+ 13177
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13178,
+ 13178
+ ],
+ "mapped",
+ [
+ 105,
+ 117
+ ]
+ ],
+ [
+ [
+ 13179,
+ 13179
+ ],
+ "mapped",
+ [
+ 24179,
+ 25104
+ ]
+ ],
+ [
+ [
+ 13180,
+ 13180
+ ],
+ "mapped",
+ [
+ 26157,
+ 21644
+ ]
+ ],
+ [
+ [
+ 13181,
+ 13181
+ ],
+ "mapped",
+ [
+ 22823,
+ 27491
+ ]
+ ],
+ [
+ [
+ 13182,
+ 13182
+ ],
+ "mapped",
+ [
+ 26126,
+ 27835
+ ]
+ ],
+ [
+ [
+ 13183,
+ 13183
+ ],
+ "mapped",
+ [
+ 26666,
+ 24335,
+ 20250,
+ 31038
+ ]
+ ],
+ [
+ [
+ 13184,
+ 13184
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13185,
+ 13185
+ ],
+ "mapped",
+ [
+ 110,
+ 97
+ ]
+ ],
+ [
+ [
+ 13186,
+ 13186
+ ],
+ "mapped",
+ [
+ 956,
+ 97
+ ]
+ ],
+ [
+ [
+ 13187,
+ 13187
+ ],
+ "mapped",
+ [
+ 109,
+ 97
+ ]
+ ],
+ [
+ [
+ 13188,
+ 13188
+ ],
+ "mapped",
+ [
+ 107,
+ 97
+ ]
+ ],
+ [
+ [
+ 13189,
+ 13189
+ ],
+ "mapped",
+ [
+ 107,
+ 98
+ ]
+ ],
+ [
+ [
+ 13190,
+ 13190
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13191,
+ 13191
+ ],
+ "mapped",
+ [
+ 103,
+ 98
+ ]
+ ],
+ [
+ [
+ 13192,
+ 13192
+ ],
+ "mapped",
+ [
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13193,
+ 13193
+ ],
+ "mapped",
+ [
+ 107,
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13194,
+ 13194
+ ],
+ "mapped",
+ [
+ 112,
+ 102
+ ]
+ ],
+ [
+ [
+ 13195,
+ 13195
+ ],
+ "mapped",
+ [
+ 110,
+ 102
+ ]
+ ],
+ [
+ [
+ 13196,
+ 13196
+ ],
+ "mapped",
+ [
+ 956,
+ 102
+ ]
+ ],
+ [
+ [
+ 13197,
+ 13197
+ ],
+ "mapped",
+ [
+ 956,
+ 103
+ ]
+ ],
+ [
+ [
+ 13198,
+ 13198
+ ],
+ "mapped",
+ [
+ 109,
+ 103
+ ]
+ ],
+ [
+ [
+ 13199,
+ 13199
+ ],
+ "mapped",
+ [
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13200,
+ 13200
+ ],
+ "mapped",
+ [
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13201,
+ 13201
+ ],
+ "mapped",
+ [
+ 107,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13202,
+ 13202
+ ],
+ "mapped",
+ [
+ 109,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13203,
+ 13203
+ ],
+ "mapped",
+ [
+ 103,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13204,
+ 13204
+ ],
+ "mapped",
+ [
+ 116,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13205,
+ 13205
+ ],
+ "mapped",
+ [
+ 956,
+ 108
+ ]
+ ],
+ [
+ [
+ 13206,
+ 13206
+ ],
+ "mapped",
+ [
+ 109,
+ 108
+ ]
+ ],
+ [
+ [
+ 13207,
+ 13207
+ ],
+ "mapped",
+ [
+ 100,
+ 108
+ ]
+ ],
+ [
+ [
+ 13208,
+ 13208
+ ],
+ "mapped",
+ [
+ 107,
+ 108
+ ]
+ ],
+ [
+ [
+ 13209,
+ 13209
+ ],
+ "mapped",
+ [
+ 102,
+ 109
+ ]
+ ],
+ [
+ [
+ 13210,
+ 13210
+ ],
+ "mapped",
+ [
+ 110,
+ 109
+ ]
+ ],
+ [
+ [
+ 13211,
+ 13211
+ ],
+ "mapped",
+ [
+ 956,
+ 109
+ ]
+ ],
+ [
+ [
+ 13212,
+ 13212
+ ],
+ "mapped",
+ [
+ 109,
+ 109
+ ]
+ ],
+ [
+ [
+ 13213,
+ 13213
+ ],
+ "mapped",
+ [
+ 99,
+ 109
+ ]
+ ],
+ [
+ [
+ 13214,
+ 13214
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13215,
+ 13215
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13216,
+ 13216
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13217,
+ 13217
+ ],
+ "mapped",
+ [
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13218,
+ 13218
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13219,
+ 13219
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13220,
+ 13220
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13221,
+ 13221
+ ],
+ "mapped",
+ [
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13222,
+ 13222
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13223,
+ 13223
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13224,
+ 13224
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13225,
+ 13225
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13226,
+ 13226
+ ],
+ "mapped",
+ [
+ 107,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13227,
+ 13227
+ ],
+ "mapped",
+ [
+ 109,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13228,
+ 13228
+ ],
+ "mapped",
+ [
+ 103,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13229,
+ 13229
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100
+ ]
+ ],
+ [
+ [
+ 13230,
+ 13230
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13231,
+ 13231
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13232,
+ 13232
+ ],
+ "mapped",
+ [
+ 112,
+ 115
+ ]
+ ],
+ [
+ [
+ 13233,
+ 13233
+ ],
+ "mapped",
+ [
+ 110,
+ 115
+ ]
+ ],
+ [
+ [
+ 13234,
+ 13234
+ ],
+ "mapped",
+ [
+ 956,
+ 115
+ ]
+ ],
+ [
+ [
+ 13235,
+ 13235
+ ],
+ "mapped",
+ [
+ 109,
+ 115
+ ]
+ ],
+ [
+ [
+ 13236,
+ 13236
+ ],
+ "mapped",
+ [
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 13237,
+ 13237
+ ],
+ "mapped",
+ [
+ 110,
+ 118
+ ]
+ ],
+ [
+ [
+ 13238,
+ 13238
+ ],
+ "mapped",
+ [
+ 956,
+ 118
+ ]
+ ],
+ [
+ [
+ 13239,
+ 13239
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13240,
+ 13240
+ ],
+ "mapped",
+ [
+ 107,
+ 118
+ ]
+ ],
+ [
+ [
+ 13241,
+ 13241
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13242,
+ 13242
+ ],
+ "mapped",
+ [
+ 112,
+ 119
+ ]
+ ],
+ [
+ [
+ 13243,
+ 13243
+ ],
+ "mapped",
+ [
+ 110,
+ 119
+ ]
+ ],
+ [
+ [
+ 13244,
+ 13244
+ ],
+ "mapped",
+ [
+ 956,
+ 119
+ ]
+ ],
+ [
+ [
+ 13245,
+ 13245
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13246,
+ 13246
+ ],
+ "mapped",
+ [
+ 107,
+ 119
+ ]
+ ],
+ [
+ [
+ 13247,
+ 13247
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13248,
+ 13248
+ ],
+ "mapped",
+ [
+ 107,
+ 969
+ ]
+ ],
+ [
+ [
+ 13249,
+ 13249
+ ],
+ "mapped",
+ [
+ 109,
+ 969
+ ]
+ ],
+ [
+ [
+ 13250,
+ 13250
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13251,
+ 13251
+ ],
+ "mapped",
+ [
+ 98,
+ 113
+ ]
+ ],
+ [
+ [
+ 13252,
+ 13252
+ ],
+ "mapped",
+ [
+ 99,
+ 99
+ ]
+ ],
+ [
+ [
+ 13253,
+ 13253
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 13254,
+ 13254
+ ],
+ "mapped",
+ [
+ 99,
+ 8725,
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13255,
+ 13255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13256,
+ 13256
+ ],
+ "mapped",
+ [
+ 100,
+ 98
+ ]
+ ],
+ [
+ [
+ 13257,
+ 13257
+ ],
+ "mapped",
+ [
+ 103,
+ 121
+ ]
+ ],
+ [
+ [
+ 13258,
+ 13258
+ ],
+ "mapped",
+ [
+ 104,
+ 97
+ ]
+ ],
+ [
+ [
+ 13259,
+ 13259
+ ],
+ "mapped",
+ [
+ 104,
+ 112
+ ]
+ ],
+ [
+ [
+ 13260,
+ 13260
+ ],
+ "mapped",
+ [
+ 105,
+ 110
+ ]
+ ],
+ [
+ [
+ 13261,
+ 13261
+ ],
+ "mapped",
+ [
+ 107,
+ 107
+ ]
+ ],
+ [
+ [
+ 13262,
+ 13262
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13263,
+ 13263
+ ],
+ "mapped",
+ [
+ 107,
+ 116
+ ]
+ ],
+ [
+ [
+ 13264,
+ 13264
+ ],
+ "mapped",
+ [
+ 108,
+ 109
+ ]
+ ],
+ [
+ [
+ 13265,
+ 13265
+ ],
+ "mapped",
+ [
+ 108,
+ 110
+ ]
+ ],
+ [
+ [
+ 13266,
+ 13266
+ ],
+ "mapped",
+ [
+ 108,
+ 111,
+ 103
+ ]
+ ],
+ [
+ [
+ 13267,
+ 13267
+ ],
+ "mapped",
+ [
+ 108,
+ 120
+ ]
+ ],
+ [
+ [
+ 13268,
+ 13268
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13269,
+ 13269
+ ],
+ "mapped",
+ [
+ 109,
+ 105,
+ 108
+ ]
+ ],
+ [
+ [
+ 13270,
+ 13270
+ ],
+ "mapped",
+ [
+ 109,
+ 111,
+ 108
+ ]
+ ],
+ [
+ [
+ 13271,
+ 13271
+ ],
+ "mapped",
+ [
+ 112,
+ 104
+ ]
+ ],
+ [
+ [
+ 13272,
+ 13272
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13273,
+ 13273
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 109
+ ]
+ ],
+ [
+ [
+ 13274,
+ 13274
+ ],
+ "mapped",
+ [
+ 112,
+ 114
+ ]
+ ],
+ [
+ [
+ 13275,
+ 13275
+ ],
+ "mapped",
+ [
+ 115,
+ 114
+ ]
+ ],
+ [
+ [
+ 13276,
+ 13276
+ ],
+ "mapped",
+ [
+ 115,
+ 118
+ ]
+ ],
+ [
+ [
+ 13277,
+ 13277
+ ],
+ "mapped",
+ [
+ 119,
+ 98
+ ]
+ ],
+ [
+ [
+ 13278,
+ 13278
+ ],
+ "mapped",
+ [
+ 118,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13279,
+ 13279
+ ],
+ "mapped",
+ [
+ 97,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13280,
+ 13280
+ ],
+ "mapped",
+ [
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13281,
+ 13281
+ ],
+ "mapped",
+ [
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13282,
+ 13282
+ ],
+ "mapped",
+ [
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13283,
+ 13283
+ ],
+ "mapped",
+ [
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13284,
+ 13284
+ ],
+ "mapped",
+ [
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13285,
+ 13285
+ ],
+ "mapped",
+ [
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13286,
+ 13286
+ ],
+ "mapped",
+ [
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13287,
+ 13287
+ ],
+ "mapped",
+ [
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13288,
+ 13288
+ ],
+ "mapped",
+ [
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13289,
+ 13289
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13290,
+ 13290
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13291,
+ 13291
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13292,
+ 13292
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13293,
+ 13293
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13294,
+ 13294
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13295,
+ 13295
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13296,
+ 13296
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13297,
+ 13297
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13298,
+ 13298
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13299,
+ 13299
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13300,
+ 13300
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13301,
+ 13301
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13302,
+ 13302
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13303,
+ 13303
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13304,
+ 13304
+ ],
+ "mapped",
+ [
+ 50,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13305,
+ 13305
+ ],
+ "mapped",
+ [
+ 50,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13306,
+ 13306
+ ],
+ "mapped",
+ [
+ 50,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13307,
+ 13307
+ ],
+ "mapped",
+ [
+ 50,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13308,
+ 13308
+ ],
+ "mapped",
+ [
+ 50,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13309,
+ 13309
+ ],
+ "mapped",
+ [
+ 51,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13310,
+ 13310
+ ],
+ "mapped",
+ [
+ 51,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13311,
+ 13311
+ ],
+ "mapped",
+ [
+ 103,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13312,
+ 19893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 19894,
+ 19903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 19904,
+ 19967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 19968,
+ 40869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40870,
+ 40891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40892,
+ 40899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40900,
+ 40907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40908,
+ 40908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40909,
+ 40917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40918,
+ 40959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 40960,
+ 42124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42125,
+ 42127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42128,
+ 42145
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42146,
+ 42147
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42148,
+ 42163
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42164,
+ 42164
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42165,
+ 42176
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42177,
+ 42177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42178,
+ 42180
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42181,
+ 42181
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42182,
+ 42182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42183,
+ 42191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42192,
+ 42237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42238,
+ 42239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42240,
+ 42508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42509,
+ 42511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42512,
+ 42539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42540,
+ 42559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42560,
+ 42560
+ ],
+ "mapped",
+ [
+ 42561
+ ]
+ ],
+ [
+ [
+ 42561,
+ 42561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42562,
+ 42562
+ ],
+ "mapped",
+ [
+ 42563
+ ]
+ ],
+ [
+ [
+ 42563,
+ 42563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42564,
+ 42564
+ ],
+ "mapped",
+ [
+ 42565
+ ]
+ ],
+ [
+ [
+ 42565,
+ 42565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42566,
+ 42566
+ ],
+ "mapped",
+ [
+ 42567
+ ]
+ ],
+ [
+ [
+ 42567,
+ 42567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42568,
+ 42568
+ ],
+ "mapped",
+ [
+ 42569
+ ]
+ ],
+ [
+ [
+ 42569,
+ 42569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42570,
+ 42570
+ ],
+ "mapped",
+ [
+ 42571
+ ]
+ ],
+ [
+ [
+ 42571,
+ 42571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42572,
+ 42572
+ ],
+ "mapped",
+ [
+ 42573
+ ]
+ ],
+ [
+ [
+ 42573,
+ 42573
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42574,
+ 42574
+ ],
+ "mapped",
+ [
+ 42575
+ ]
+ ],
+ [
+ [
+ 42575,
+ 42575
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42576,
+ 42576
+ ],
+ "mapped",
+ [
+ 42577
+ ]
+ ],
+ [
+ [
+ 42577,
+ 42577
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42578,
+ 42578
+ ],
+ "mapped",
+ [
+ 42579
+ ]
+ ],
+ [
+ [
+ 42579,
+ 42579
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42580,
+ 42580
+ ],
+ "mapped",
+ [
+ 42581
+ ]
+ ],
+ [
+ [
+ 42581,
+ 42581
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42582,
+ 42582
+ ],
+ "mapped",
+ [
+ 42583
+ ]
+ ],
+ [
+ [
+ 42583,
+ 42583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42584,
+ 42584
+ ],
+ "mapped",
+ [
+ 42585
+ ]
+ ],
+ [
+ [
+ 42585,
+ 42585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42586,
+ 42586
+ ],
+ "mapped",
+ [
+ 42587
+ ]
+ ],
+ [
+ [
+ 42587,
+ 42587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42588,
+ 42588
+ ],
+ "mapped",
+ [
+ 42589
+ ]
+ ],
+ [
+ [
+ 42589,
+ 42589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42590,
+ 42590
+ ],
+ "mapped",
+ [
+ 42591
+ ]
+ ],
+ [
+ [
+ 42591,
+ 42591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42592,
+ 42592
+ ],
+ "mapped",
+ [
+ 42593
+ ]
+ ],
+ [
+ [
+ 42593,
+ 42593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42594,
+ 42594
+ ],
+ "mapped",
+ [
+ 42595
+ ]
+ ],
+ [
+ [
+ 42595,
+ 42595
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42596,
+ 42596
+ ],
+ "mapped",
+ [
+ 42597
+ ]
+ ],
+ [
+ [
+ 42597,
+ 42597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42598,
+ 42598
+ ],
+ "mapped",
+ [
+ 42599
+ ]
+ ],
+ [
+ [
+ 42599,
+ 42599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42600,
+ 42600
+ ],
+ "mapped",
+ [
+ 42601
+ ]
+ ],
+ [
+ [
+ 42601,
+ 42601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42602,
+ 42602
+ ],
+ "mapped",
+ [
+ 42603
+ ]
+ ],
+ [
+ [
+ 42603,
+ 42603
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42604,
+ 42604
+ ],
+ "mapped",
+ [
+ 42605
+ ]
+ ],
+ [
+ [
+ 42605,
+ 42607
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42608,
+ 42611
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42612,
+ 42619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42620,
+ 42621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42622,
+ 42622
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42623,
+ 42623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42624,
+ 42624
+ ],
+ "mapped",
+ [
+ 42625
+ ]
+ ],
+ [
+ [
+ 42625,
+ 42625
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42626,
+ 42626
+ ],
+ "mapped",
+ [
+ 42627
+ ]
+ ],
+ [
+ [
+ 42627,
+ 42627
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42628,
+ 42628
+ ],
+ "mapped",
+ [
+ 42629
+ ]
+ ],
+ [
+ [
+ 42629,
+ 42629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42630,
+ 42630
+ ],
+ "mapped",
+ [
+ 42631
+ ]
+ ],
+ [
+ [
+ 42631,
+ 42631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42632,
+ 42632
+ ],
+ "mapped",
+ [
+ 42633
+ ]
+ ],
+ [
+ [
+ 42633,
+ 42633
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42634,
+ 42634
+ ],
+ "mapped",
+ [
+ 42635
+ ]
+ ],
+ [
+ [
+ 42635,
+ 42635
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42636,
+ 42636
+ ],
+ "mapped",
+ [
+ 42637
+ ]
+ ],
+ [
+ [
+ 42637,
+ 42637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42638,
+ 42638
+ ],
+ "mapped",
+ [
+ 42639
+ ]
+ ],
+ [
+ [
+ 42639,
+ 42639
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42640,
+ 42640
+ ],
+ "mapped",
+ [
+ 42641
+ ]
+ ],
+ [
+ [
+ 42641,
+ 42641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42642,
+ 42642
+ ],
+ "mapped",
+ [
+ 42643
+ ]
+ ],
+ [
+ [
+ 42643,
+ 42643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42644,
+ 42644
+ ],
+ "mapped",
+ [
+ 42645
+ ]
+ ],
+ [
+ [
+ 42645,
+ 42645
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42646,
+ 42646
+ ],
+ "mapped",
+ [
+ 42647
+ ]
+ ],
+ [
+ [
+ 42647,
+ 42647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42648,
+ 42648
+ ],
+ "mapped",
+ [
+ 42649
+ ]
+ ],
+ [
+ [
+ 42649,
+ 42649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42650,
+ 42650
+ ],
+ "mapped",
+ [
+ 42651
+ ]
+ ],
+ [
+ [
+ 42651,
+ 42651
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42652,
+ 42652
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 42653,
+ 42653
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 42654,
+ 42654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42655,
+ 42655
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42656,
+ 42725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42726,
+ 42735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42736,
+ 42737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42738,
+ 42743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42744,
+ 42751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42752,
+ 42774
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42775,
+ 42778
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42779,
+ 42783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42784,
+ 42785
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42786,
+ 42786
+ ],
+ "mapped",
+ [
+ 42787
+ ]
+ ],
+ [
+ [
+ 42787,
+ 42787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42788,
+ 42788
+ ],
+ "mapped",
+ [
+ 42789
+ ]
+ ],
+ [
+ [
+ 42789,
+ 42789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42790,
+ 42790
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 42791,
+ 42791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42792,
+ 42792
+ ],
+ "mapped",
+ [
+ 42793
+ ]
+ ],
+ [
+ [
+ 42793,
+ 42793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42794,
+ 42794
+ ],
+ "mapped",
+ [
+ 42795
+ ]
+ ],
+ [
+ [
+ 42795,
+ 42795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42796,
+ 42796
+ ],
+ "mapped",
+ [
+ 42797
+ ]
+ ],
+ [
+ [
+ 42797,
+ 42797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42798,
+ 42798
+ ],
+ "mapped",
+ [
+ 42799
+ ]
+ ],
+ [
+ [
+ 42799,
+ 42801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42802,
+ 42802
+ ],
+ "mapped",
+ [
+ 42803
+ ]
+ ],
+ [
+ [
+ 42803,
+ 42803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42804,
+ 42804
+ ],
+ "mapped",
+ [
+ 42805
+ ]
+ ],
+ [
+ [
+ 42805,
+ 42805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42806,
+ 42806
+ ],
+ "mapped",
+ [
+ 42807
+ ]
+ ],
+ [
+ [
+ 42807,
+ 42807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42808,
+ 42808
+ ],
+ "mapped",
+ [
+ 42809
+ ]
+ ],
+ [
+ [
+ 42809,
+ 42809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42810,
+ 42810
+ ],
+ "mapped",
+ [
+ 42811
+ ]
+ ],
+ [
+ [
+ 42811,
+ 42811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42812,
+ 42812
+ ],
+ "mapped",
+ [
+ 42813
+ ]
+ ],
+ [
+ [
+ 42813,
+ 42813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42814,
+ 42814
+ ],
+ "mapped",
+ [
+ 42815
+ ]
+ ],
+ [
+ [
+ 42815,
+ 42815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42816,
+ 42816
+ ],
+ "mapped",
+ [
+ 42817
+ ]
+ ],
+ [
+ [
+ 42817,
+ 42817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42818,
+ 42818
+ ],
+ "mapped",
+ [
+ 42819
+ ]
+ ],
+ [
+ [
+ 42819,
+ 42819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42820,
+ 42820
+ ],
+ "mapped",
+ [
+ 42821
+ ]
+ ],
+ [
+ [
+ 42821,
+ 42821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42822,
+ 42822
+ ],
+ "mapped",
+ [
+ 42823
+ ]
+ ],
+ [
+ [
+ 42823,
+ 42823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42824,
+ 42824
+ ],
+ "mapped",
+ [
+ 42825
+ ]
+ ],
+ [
+ [
+ 42825,
+ 42825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42826,
+ 42826
+ ],
+ "mapped",
+ [
+ 42827
+ ]
+ ],
+ [
+ [
+ 42827,
+ 42827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42828,
+ 42828
+ ],
+ "mapped",
+ [
+ 42829
+ ]
+ ],
+ [
+ [
+ 42829,
+ 42829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42830,
+ 42830
+ ],
+ "mapped",
+ [
+ 42831
+ ]
+ ],
+ [
+ [
+ 42831,
+ 42831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42832,
+ 42832
+ ],
+ "mapped",
+ [
+ 42833
+ ]
+ ],
+ [
+ [
+ 42833,
+ 42833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42834,
+ 42834
+ ],
+ "mapped",
+ [
+ 42835
+ ]
+ ],
+ [
+ [
+ 42835,
+ 42835
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42836,
+ 42836
+ ],
+ "mapped",
+ [
+ 42837
+ ]
+ ],
+ [
+ [
+ 42837,
+ 42837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42838,
+ 42838
+ ],
+ "mapped",
+ [
+ 42839
+ ]
+ ],
+ [
+ [
+ 42839,
+ 42839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42840,
+ 42840
+ ],
+ "mapped",
+ [
+ 42841
+ ]
+ ],
+ [
+ [
+ 42841,
+ 42841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42842,
+ 42842
+ ],
+ "mapped",
+ [
+ 42843
+ ]
+ ],
+ [
+ [
+ 42843,
+ 42843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42844,
+ 42844
+ ],
+ "mapped",
+ [
+ 42845
+ ]
+ ],
+ [
+ [
+ 42845,
+ 42845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42846,
+ 42846
+ ],
+ "mapped",
+ [
+ 42847
+ ]
+ ],
+ [
+ [
+ 42847,
+ 42847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42848,
+ 42848
+ ],
+ "mapped",
+ [
+ 42849
+ ]
+ ],
+ [
+ [
+ 42849,
+ 42849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42850,
+ 42850
+ ],
+ "mapped",
+ [
+ 42851
+ ]
+ ],
+ [
+ [
+ 42851,
+ 42851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42852,
+ 42852
+ ],
+ "mapped",
+ [
+ 42853
+ ]
+ ],
+ [
+ [
+ 42853,
+ 42853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42854,
+ 42854
+ ],
+ "mapped",
+ [
+ 42855
+ ]
+ ],
+ [
+ [
+ 42855,
+ 42855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42856,
+ 42856
+ ],
+ "mapped",
+ [
+ 42857
+ ]
+ ],
+ [
+ [
+ 42857,
+ 42857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42858,
+ 42858
+ ],
+ "mapped",
+ [
+ 42859
+ ]
+ ],
+ [
+ [
+ 42859,
+ 42859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42860,
+ 42860
+ ],
+ "mapped",
+ [
+ 42861
+ ]
+ ],
+ [
+ [
+ 42861,
+ 42861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42862,
+ 42862
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42863,
+ 42863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42864,
+ 42864
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42865,
+ 42872
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42873,
+ 42873
+ ],
+ "mapped",
+ [
+ 42874
+ ]
+ ],
+ [
+ [
+ 42874,
+ 42874
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42875,
+ 42875
+ ],
+ "mapped",
+ [
+ 42876
+ ]
+ ],
+ [
+ [
+ 42876,
+ 42876
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42877,
+ 42877
+ ],
+ "mapped",
+ [
+ 7545
+ ]
+ ],
+ [
+ [
+ 42878,
+ 42878
+ ],
+ "mapped",
+ [
+ 42879
+ ]
+ ],
+ [
+ [
+ 42879,
+ 42879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42880,
+ 42880
+ ],
+ "mapped",
+ [
+ 42881
+ ]
+ ],
+ [
+ [
+ 42881,
+ 42881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42882,
+ 42882
+ ],
+ "mapped",
+ [
+ 42883
+ ]
+ ],
+ [
+ [
+ 42883,
+ 42883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42884,
+ 42884
+ ],
+ "mapped",
+ [
+ 42885
+ ]
+ ],
+ [
+ [
+ 42885,
+ 42885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42886,
+ 42886
+ ],
+ "mapped",
+ [
+ 42887
+ ]
+ ],
+ [
+ [
+ 42887,
+ 42888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42889,
+ 42890
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42891,
+ 42891
+ ],
+ "mapped",
+ [
+ 42892
+ ]
+ ],
+ [
+ [
+ 42892,
+ 42892
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42893,
+ 42893
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 42894,
+ 42894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42895,
+ 42895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42896,
+ 42896
+ ],
+ "mapped",
+ [
+ 42897
+ ]
+ ],
+ [
+ [
+ 42897,
+ 42897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42898,
+ 42898
+ ],
+ "mapped",
+ [
+ 42899
+ ]
+ ],
+ [
+ [
+ 42899,
+ 42899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42900,
+ 42901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42902,
+ 42902
+ ],
+ "mapped",
+ [
+ 42903
+ ]
+ ],
+ [
+ [
+ 42903,
+ 42903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42904,
+ 42904
+ ],
+ "mapped",
+ [
+ 42905
+ ]
+ ],
+ [
+ [
+ 42905,
+ 42905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42906,
+ 42906
+ ],
+ "mapped",
+ [
+ 42907
+ ]
+ ],
+ [
+ [
+ 42907,
+ 42907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42908,
+ 42908
+ ],
+ "mapped",
+ [
+ 42909
+ ]
+ ],
+ [
+ [
+ 42909,
+ 42909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42910,
+ 42910
+ ],
+ "mapped",
+ [
+ 42911
+ ]
+ ],
+ [
+ [
+ 42911,
+ 42911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42912,
+ 42912
+ ],
+ "mapped",
+ [
+ 42913
+ ]
+ ],
+ [
+ [
+ 42913,
+ 42913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42914,
+ 42914
+ ],
+ "mapped",
+ [
+ 42915
+ ]
+ ],
+ [
+ [
+ 42915,
+ 42915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42916,
+ 42916
+ ],
+ "mapped",
+ [
+ 42917
+ ]
+ ],
+ [
+ [
+ 42917,
+ 42917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42918,
+ 42918
+ ],
+ "mapped",
+ [
+ 42919
+ ]
+ ],
+ [
+ [
+ 42919,
+ 42919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42920,
+ 42920
+ ],
+ "mapped",
+ [
+ 42921
+ ]
+ ],
+ [
+ [
+ 42921,
+ 42921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42922,
+ 42922
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 42923,
+ 42923
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 42924,
+ 42924
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 42925,
+ 42925
+ ],
+ "mapped",
+ [
+ 620
+ ]
+ ],
+ [
+ [
+ 42926,
+ 42927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42928,
+ 42928
+ ],
+ "mapped",
+ [
+ 670
+ ]
+ ],
+ [
+ [
+ 42929,
+ 42929
+ ],
+ "mapped",
+ [
+ 647
+ ]
+ ],
+ [
+ [
+ 42930,
+ 42930
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 42931,
+ 42931
+ ],
+ "mapped",
+ [
+ 43859
+ ]
+ ],
+ [
+ [
+ 42932,
+ 42932
+ ],
+ "mapped",
+ [
+ 42933
+ ]
+ ],
+ [
+ [
+ 42933,
+ 42933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42934,
+ 42934
+ ],
+ "mapped",
+ [
+ 42935
+ ]
+ ],
+ [
+ [
+ 42935,
+ 42935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42936,
+ 42998
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42999,
+ 42999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43000,
+ 43000
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 43001,
+ 43001
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 43002,
+ 43002
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43003,
+ 43007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43008,
+ 43047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43048,
+ 43051
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43052,
+ 43055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43056,
+ 43065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43066,
+ 43071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43072,
+ 43123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43124,
+ 43127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43128,
+ 43135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43136,
+ 43204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43205,
+ 43213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43214,
+ 43215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43216,
+ 43225
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43226,
+ 43231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43232,
+ 43255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43256,
+ 43258
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43259,
+ 43259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43260,
+ 43260
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43261,
+ 43261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43262,
+ 43263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43264,
+ 43309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43310,
+ 43311
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43312,
+ 43347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43348,
+ 43358
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43359,
+ 43359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43360,
+ 43388
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43389,
+ 43391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43392,
+ 43456
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43457,
+ 43469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43470,
+ 43470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43471,
+ 43481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43482,
+ 43485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43486,
+ 43487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43488,
+ 43518
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43519,
+ 43519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43520,
+ 43574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43575,
+ 43583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43584,
+ 43597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43598,
+ 43599
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43600,
+ 43609
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43610,
+ 43611
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43612,
+ 43615
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43616,
+ 43638
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43639,
+ 43641
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43642,
+ 43643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43644,
+ 43647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43648,
+ 43714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43715,
+ 43738
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43739,
+ 43741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43742,
+ 43743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43744,
+ 43759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43760,
+ 43761
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43762,
+ 43766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43767,
+ 43776
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43777,
+ 43782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43783,
+ 43784
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43785,
+ 43790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43791,
+ 43792
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43793,
+ 43798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43799,
+ 43807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43808,
+ 43814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43815,
+ 43815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43816,
+ 43822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43823,
+ 43823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43824,
+ 43866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43867,
+ 43867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43868,
+ 43868
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 43869,
+ 43869
+ ],
+ "mapped",
+ [
+ 43831
+ ]
+ ],
+ [
+ [
+ 43870,
+ 43870
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 43871,
+ 43871
+ ],
+ "mapped",
+ [
+ 43858
+ ]
+ ],
+ [
+ [
+ 43872,
+ 43875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43876,
+ 43877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43878,
+ 43887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43888,
+ 43888
+ ],
+ "mapped",
+ [
+ 5024
+ ]
+ ],
+ [
+ [
+ 43889,
+ 43889
+ ],
+ "mapped",
+ [
+ 5025
+ ]
+ ],
+ [
+ [
+ 43890,
+ 43890
+ ],
+ "mapped",
+ [
+ 5026
+ ]
+ ],
+ [
+ [
+ 43891,
+ 43891
+ ],
+ "mapped",
+ [
+ 5027
+ ]
+ ],
+ [
+ [
+ 43892,
+ 43892
+ ],
+ "mapped",
+ [
+ 5028
+ ]
+ ],
+ [
+ [
+ 43893,
+ 43893
+ ],
+ "mapped",
+ [
+ 5029
+ ]
+ ],
+ [
+ [
+ 43894,
+ 43894
+ ],
+ "mapped",
+ [
+ 5030
+ ]
+ ],
+ [
+ [
+ 43895,
+ 43895
+ ],
+ "mapped",
+ [
+ 5031
+ ]
+ ],
+ [
+ [
+ 43896,
+ 43896
+ ],
+ "mapped",
+ [
+ 5032
+ ]
+ ],
+ [
+ [
+ 43897,
+ 43897
+ ],
+ "mapped",
+ [
+ 5033
+ ]
+ ],
+ [
+ [
+ 43898,
+ 43898
+ ],
+ "mapped",
+ [
+ 5034
+ ]
+ ],
+ [
+ [
+ 43899,
+ 43899
+ ],
+ "mapped",
+ [
+ 5035
+ ]
+ ],
+ [
+ [
+ 43900,
+ 43900
+ ],
+ "mapped",
+ [
+ 5036
+ ]
+ ],
+ [
+ [
+ 43901,
+ 43901
+ ],
+ "mapped",
+ [
+ 5037
+ ]
+ ],
+ [
+ [
+ 43902,
+ 43902
+ ],
+ "mapped",
+ [
+ 5038
+ ]
+ ],
+ [
+ [
+ 43903,
+ 43903
+ ],
+ "mapped",
+ [
+ 5039
+ ]
+ ],
+ [
+ [
+ 43904,
+ 43904
+ ],
+ "mapped",
+ [
+ 5040
+ ]
+ ],
+ [
+ [
+ 43905,
+ 43905
+ ],
+ "mapped",
+ [
+ 5041
+ ]
+ ],
+ [
+ [
+ 43906,
+ 43906
+ ],
+ "mapped",
+ [
+ 5042
+ ]
+ ],
+ [
+ [
+ 43907,
+ 43907
+ ],
+ "mapped",
+ [
+ 5043
+ ]
+ ],
+ [
+ [
+ 43908,
+ 43908
+ ],
+ "mapped",
+ [
+ 5044
+ ]
+ ],
+ [
+ [
+ 43909,
+ 43909
+ ],
+ "mapped",
+ [
+ 5045
+ ]
+ ],
+ [
+ [
+ 43910,
+ 43910
+ ],
+ "mapped",
+ [
+ 5046
+ ]
+ ],
+ [
+ [
+ 43911,
+ 43911
+ ],
+ "mapped",
+ [
+ 5047
+ ]
+ ],
+ [
+ [
+ 43912,
+ 43912
+ ],
+ "mapped",
+ [
+ 5048
+ ]
+ ],
+ [
+ [
+ 43913,
+ 43913
+ ],
+ "mapped",
+ [
+ 5049
+ ]
+ ],
+ [
+ [
+ 43914,
+ 43914
+ ],
+ "mapped",
+ [
+ 5050
+ ]
+ ],
+ [
+ [
+ 43915,
+ 43915
+ ],
+ "mapped",
+ [
+ 5051
+ ]
+ ],
+ [
+ [
+ 43916,
+ 43916
+ ],
+ "mapped",
+ [
+ 5052
+ ]
+ ],
+ [
+ [
+ 43917,
+ 43917
+ ],
+ "mapped",
+ [
+ 5053
+ ]
+ ],
+ [
+ [
+ 43918,
+ 43918
+ ],
+ "mapped",
+ [
+ 5054
+ ]
+ ],
+ [
+ [
+ 43919,
+ 43919
+ ],
+ "mapped",
+ [
+ 5055
+ ]
+ ],
+ [
+ [
+ 43920,
+ 43920
+ ],
+ "mapped",
+ [
+ 5056
+ ]
+ ],
+ [
+ [
+ 43921,
+ 43921
+ ],
+ "mapped",
+ [
+ 5057
+ ]
+ ],
+ [
+ [
+ 43922,
+ 43922
+ ],
+ "mapped",
+ [
+ 5058
+ ]
+ ],
+ [
+ [
+ 43923,
+ 43923
+ ],
+ "mapped",
+ [
+ 5059
+ ]
+ ],
+ [
+ [
+ 43924,
+ 43924
+ ],
+ "mapped",
+ [
+ 5060
+ ]
+ ],
+ [
+ [
+ 43925,
+ 43925
+ ],
+ "mapped",
+ [
+ 5061
+ ]
+ ],
+ [
+ [
+ 43926,
+ 43926
+ ],
+ "mapped",
+ [
+ 5062
+ ]
+ ],
+ [
+ [
+ 43927,
+ 43927
+ ],
+ "mapped",
+ [
+ 5063
+ ]
+ ],
+ [
+ [
+ 43928,
+ 43928
+ ],
+ "mapped",
+ [
+ 5064
+ ]
+ ],
+ [
+ [
+ 43929,
+ 43929
+ ],
+ "mapped",
+ [
+ 5065
+ ]
+ ],
+ [
+ [
+ 43930,
+ 43930
+ ],
+ "mapped",
+ [
+ 5066
+ ]
+ ],
+ [
+ [
+ 43931,
+ 43931
+ ],
+ "mapped",
+ [
+ 5067
+ ]
+ ],
+ [
+ [
+ 43932,
+ 43932
+ ],
+ "mapped",
+ [
+ 5068
+ ]
+ ],
+ [
+ [
+ 43933,
+ 43933
+ ],
+ "mapped",
+ [
+ 5069
+ ]
+ ],
+ [
+ [
+ 43934,
+ 43934
+ ],
+ "mapped",
+ [
+ 5070
+ ]
+ ],
+ [
+ [
+ 43935,
+ 43935
+ ],
+ "mapped",
+ [
+ 5071
+ ]
+ ],
+ [
+ [
+ 43936,
+ 43936
+ ],
+ "mapped",
+ [
+ 5072
+ ]
+ ],
+ [
+ [
+ 43937,
+ 43937
+ ],
+ "mapped",
+ [
+ 5073
+ ]
+ ],
+ [
+ [
+ 43938,
+ 43938
+ ],
+ "mapped",
+ [
+ 5074
+ ]
+ ],
+ [
+ [
+ 43939,
+ 43939
+ ],
+ "mapped",
+ [
+ 5075
+ ]
+ ],
+ [
+ [
+ 43940,
+ 43940
+ ],
+ "mapped",
+ [
+ 5076
+ ]
+ ],
+ [
+ [
+ 43941,
+ 43941
+ ],
+ "mapped",
+ [
+ 5077
+ ]
+ ],
+ [
+ [
+ 43942,
+ 43942
+ ],
+ "mapped",
+ [
+ 5078
+ ]
+ ],
+ [
+ [
+ 43943,
+ 43943
+ ],
+ "mapped",
+ [
+ 5079
+ ]
+ ],
+ [
+ [
+ 43944,
+ 43944
+ ],
+ "mapped",
+ [
+ 5080
+ ]
+ ],
+ [
+ [
+ 43945,
+ 43945
+ ],
+ "mapped",
+ [
+ 5081
+ ]
+ ],
+ [
+ [
+ 43946,
+ 43946
+ ],
+ "mapped",
+ [
+ 5082
+ ]
+ ],
+ [
+ [
+ 43947,
+ 43947
+ ],
+ "mapped",
+ [
+ 5083
+ ]
+ ],
+ [
+ [
+ 43948,
+ 43948
+ ],
+ "mapped",
+ [
+ 5084
+ ]
+ ],
+ [
+ [
+ 43949,
+ 43949
+ ],
+ "mapped",
+ [
+ 5085
+ ]
+ ],
+ [
+ [
+ 43950,
+ 43950
+ ],
+ "mapped",
+ [
+ 5086
+ ]
+ ],
+ [
+ [
+ 43951,
+ 43951
+ ],
+ "mapped",
+ [
+ 5087
+ ]
+ ],
+ [
+ [
+ 43952,
+ 43952
+ ],
+ "mapped",
+ [
+ 5088
+ ]
+ ],
+ [
+ [
+ 43953,
+ 43953
+ ],
+ "mapped",
+ [
+ 5089
+ ]
+ ],
+ [
+ [
+ 43954,
+ 43954
+ ],
+ "mapped",
+ [
+ 5090
+ ]
+ ],
+ [
+ [
+ 43955,
+ 43955
+ ],
+ "mapped",
+ [
+ 5091
+ ]
+ ],
+ [
+ [
+ 43956,
+ 43956
+ ],
+ "mapped",
+ [
+ 5092
+ ]
+ ],
+ [
+ [
+ 43957,
+ 43957
+ ],
+ "mapped",
+ [
+ 5093
+ ]
+ ],
+ [
+ [
+ 43958,
+ 43958
+ ],
+ "mapped",
+ [
+ 5094
+ ]
+ ],
+ [
+ [
+ 43959,
+ 43959
+ ],
+ "mapped",
+ [
+ 5095
+ ]
+ ],
+ [
+ [
+ 43960,
+ 43960
+ ],
+ "mapped",
+ [
+ 5096
+ ]
+ ],
+ [
+ [
+ 43961,
+ 43961
+ ],
+ "mapped",
+ [
+ 5097
+ ]
+ ],
+ [
+ [
+ 43962,
+ 43962
+ ],
+ "mapped",
+ [
+ 5098
+ ]
+ ],
+ [
+ [
+ 43963,
+ 43963
+ ],
+ "mapped",
+ [
+ 5099
+ ]
+ ],
+ [
+ [
+ 43964,
+ 43964
+ ],
+ "mapped",
+ [
+ 5100
+ ]
+ ],
+ [
+ [
+ 43965,
+ 43965
+ ],
+ "mapped",
+ [
+ 5101
+ ]
+ ],
+ [
+ [
+ 43966,
+ 43966
+ ],
+ "mapped",
+ [
+ 5102
+ ]
+ ],
+ [
+ [
+ 43967,
+ 43967
+ ],
+ "mapped",
+ [
+ 5103
+ ]
+ ],
+ [
+ [
+ 43968,
+ 44010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44011,
+ 44011
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 44012,
+ 44013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44014,
+ 44015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44016,
+ 44025
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44026,
+ 44031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44032,
+ 55203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 55204,
+ 55215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55216,
+ 55238
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55239,
+ 55242
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55243,
+ 55291
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55292,
+ 55295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55296,
+ 57343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 57344,
+ 63743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 63744,
+ 63744
+ ],
+ "mapped",
+ [
+ 35912
+ ]
+ ],
+ [
+ [
+ 63745,
+ 63745
+ ],
+ "mapped",
+ [
+ 26356
+ ]
+ ],
+ [
+ [
+ 63746,
+ 63746
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 63747,
+ 63747
+ ],
+ "mapped",
+ [
+ 36040
+ ]
+ ],
+ [
+ [
+ 63748,
+ 63748
+ ],
+ "mapped",
+ [
+ 28369
+ ]
+ ],
+ [
+ [
+ 63749,
+ 63749
+ ],
+ "mapped",
+ [
+ 20018
+ ]
+ ],
+ [
+ [
+ 63750,
+ 63750
+ ],
+ "mapped",
+ [
+ 21477
+ ]
+ ],
+ [
+ [
+ 63751,
+ 63752
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 63753,
+ 63753
+ ],
+ "mapped",
+ [
+ 22865
+ ]
+ ],
+ [
+ [
+ 63754,
+ 63754
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 63755,
+ 63755
+ ],
+ "mapped",
+ [
+ 21895
+ ]
+ ],
+ [
+ [
+ 63756,
+ 63756
+ ],
+ "mapped",
+ [
+ 22856
+ ]
+ ],
+ [
+ [
+ 63757,
+ 63757
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 63758,
+ 63758
+ ],
+ "mapped",
+ [
+ 30313
+ ]
+ ],
+ [
+ [
+ 63759,
+ 63759
+ ],
+ "mapped",
+ [
+ 32645
+ ]
+ ],
+ [
+ [
+ 63760,
+ 63760
+ ],
+ "mapped",
+ [
+ 34367
+ ]
+ ],
+ [
+ [
+ 63761,
+ 63761
+ ],
+ "mapped",
+ [
+ 34746
+ ]
+ ],
+ [
+ [
+ 63762,
+ 63762
+ ],
+ "mapped",
+ [
+ 35064
+ ]
+ ],
+ [
+ [
+ 63763,
+ 63763
+ ],
+ "mapped",
+ [
+ 37007
+ ]
+ ],
+ [
+ [
+ 63764,
+ 63764
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63765,
+ 63765
+ ],
+ "mapped",
+ [
+ 27931
+ ]
+ ],
+ [
+ [
+ 63766,
+ 63766
+ ],
+ "mapped",
+ [
+ 28889
+ ]
+ ],
+ [
+ [
+ 63767,
+ 63767
+ ],
+ "mapped",
+ [
+ 29662
+ ]
+ ],
+ [
+ [
+ 63768,
+ 63768
+ ],
+ "mapped",
+ [
+ 33853
+ ]
+ ],
+ [
+ [
+ 63769,
+ 63769
+ ],
+ "mapped",
+ [
+ 37226
+ ]
+ ],
+ [
+ [
+ 63770,
+ 63770
+ ],
+ "mapped",
+ [
+ 39409
+ ]
+ ],
+ [
+ [
+ 63771,
+ 63771
+ ],
+ "mapped",
+ [
+ 20098
+ ]
+ ],
+ [
+ [
+ 63772,
+ 63772
+ ],
+ "mapped",
+ [
+ 21365
+ ]
+ ],
+ [
+ [
+ 63773,
+ 63773
+ ],
+ "mapped",
+ [
+ 27396
+ ]
+ ],
+ [
+ [
+ 63774,
+ 63774
+ ],
+ "mapped",
+ [
+ 29211
+ ]
+ ],
+ [
+ [
+ 63775,
+ 63775
+ ],
+ "mapped",
+ [
+ 34349
+ ]
+ ],
+ [
+ [
+ 63776,
+ 63776
+ ],
+ "mapped",
+ [
+ 40478
+ ]
+ ],
+ [
+ [
+ 63777,
+ 63777
+ ],
+ "mapped",
+ [
+ 23888
+ ]
+ ],
+ [
+ [
+ 63778,
+ 63778
+ ],
+ "mapped",
+ [
+ 28651
+ ]
+ ],
+ [
+ [
+ 63779,
+ 63779
+ ],
+ "mapped",
+ [
+ 34253
+ ]
+ ],
+ [
+ [
+ 63780,
+ 63780
+ ],
+ "mapped",
+ [
+ 35172
+ ]
+ ],
+ [
+ [
+ 63781,
+ 63781
+ ],
+ "mapped",
+ [
+ 25289
+ ]
+ ],
+ [
+ [
+ 63782,
+ 63782
+ ],
+ "mapped",
+ [
+ 33240
+ ]
+ ],
+ [
+ [
+ 63783,
+ 63783
+ ],
+ "mapped",
+ [
+ 34847
+ ]
+ ],
+ [
+ [
+ 63784,
+ 63784
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 63785,
+ 63785
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 63786,
+ 63786
+ ],
+ "mapped",
+ [
+ 28010
+ ]
+ ],
+ [
+ [
+ 63787,
+ 63787
+ ],
+ "mapped",
+ [
+ 29436
+ ]
+ ],
+ [
+ [
+ 63788,
+ 63788
+ ],
+ "mapped",
+ [
+ 37070
+ ]
+ ],
+ [
+ [
+ 63789,
+ 63789
+ ],
+ "mapped",
+ [
+ 20358
+ ]
+ ],
+ [
+ [
+ 63790,
+ 63790
+ ],
+ "mapped",
+ [
+ 20919
+ ]
+ ],
+ [
+ [
+ 63791,
+ 63791
+ ],
+ "mapped",
+ [
+ 21214
+ ]
+ ],
+ [
+ [
+ 63792,
+ 63792
+ ],
+ "mapped",
+ [
+ 25796
+ ]
+ ],
+ [
+ [
+ 63793,
+ 63793
+ ],
+ "mapped",
+ [
+ 27347
+ ]
+ ],
+ [
+ [
+ 63794,
+ 63794
+ ],
+ "mapped",
+ [
+ 29200
+ ]
+ ],
+ [
+ [
+ 63795,
+ 63795
+ ],
+ "mapped",
+ [
+ 30439
+ ]
+ ],
+ [
+ [
+ 63796,
+ 63796
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 63797,
+ 63797
+ ],
+ "mapped",
+ [
+ 34310
+ ]
+ ],
+ [
+ [
+ 63798,
+ 63798
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 63799,
+ 63799
+ ],
+ "mapped",
+ [
+ 36335
+ ]
+ ],
+ [
+ [
+ 63800,
+ 63800
+ ],
+ "mapped",
+ [
+ 38706
+ ]
+ ],
+ [
+ [
+ 63801,
+ 63801
+ ],
+ "mapped",
+ [
+ 39791
+ ]
+ ],
+ [
+ [
+ 63802,
+ 63802
+ ],
+ "mapped",
+ [
+ 40442
+ ]
+ ],
+ [
+ [
+ 63803,
+ 63803
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 63804,
+ 63804
+ ],
+ "mapped",
+ [
+ 31103
+ ]
+ ],
+ [
+ [
+ 63805,
+ 63805
+ ],
+ "mapped",
+ [
+ 32160
+ ]
+ ],
+ [
+ [
+ 63806,
+ 63806
+ ],
+ "mapped",
+ [
+ 33737
+ ]
+ ],
+ [
+ [
+ 63807,
+ 63807
+ ],
+ "mapped",
+ [
+ 37636
+ ]
+ ],
+ [
+ [
+ 63808,
+ 63808
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 63809,
+ 63809
+ ],
+ "mapped",
+ [
+ 35542
+ ]
+ ],
+ [
+ [
+ 63810,
+ 63810
+ ],
+ "mapped",
+ [
+ 22751
+ ]
+ ],
+ [
+ [
+ 63811,
+ 63811
+ ],
+ "mapped",
+ [
+ 24324
+ ]
+ ],
+ [
+ [
+ 63812,
+ 63812
+ ],
+ "mapped",
+ [
+ 31840
+ ]
+ ],
+ [
+ [
+ 63813,
+ 63813
+ ],
+ "mapped",
+ [
+ 32894
+ ]
+ ],
+ [
+ [
+ 63814,
+ 63814
+ ],
+ "mapped",
+ [
+ 29282
+ ]
+ ],
+ [
+ [
+ 63815,
+ 63815
+ ],
+ "mapped",
+ [
+ 30922
+ ]
+ ],
+ [
+ [
+ 63816,
+ 63816
+ ],
+ "mapped",
+ [
+ 36034
+ ]
+ ],
+ [
+ [
+ 63817,
+ 63817
+ ],
+ "mapped",
+ [
+ 38647
+ ]
+ ],
+ [
+ [
+ 63818,
+ 63818
+ ],
+ "mapped",
+ [
+ 22744
+ ]
+ ],
+ [
+ [
+ 63819,
+ 63819
+ ],
+ "mapped",
+ [
+ 23650
+ ]
+ ],
+ [
+ [
+ 63820,
+ 63820
+ ],
+ "mapped",
+ [
+ 27155
+ ]
+ ],
+ [
+ [
+ 63821,
+ 63821
+ ],
+ "mapped",
+ [
+ 28122
+ ]
+ ],
+ [
+ [
+ 63822,
+ 63822
+ ],
+ "mapped",
+ [
+ 28431
+ ]
+ ],
+ [
+ [
+ 63823,
+ 63823
+ ],
+ "mapped",
+ [
+ 32047
+ ]
+ ],
+ [
+ [
+ 63824,
+ 63824
+ ],
+ "mapped",
+ [
+ 32311
+ ]
+ ],
+ [
+ [
+ 63825,
+ 63825
+ ],
+ "mapped",
+ [
+ 38475
+ ]
+ ],
+ [
+ [
+ 63826,
+ 63826
+ ],
+ "mapped",
+ [
+ 21202
+ ]
+ ],
+ [
+ [
+ 63827,
+ 63827
+ ],
+ "mapped",
+ [
+ 32907
+ ]
+ ],
+ [
+ [
+ 63828,
+ 63828
+ ],
+ "mapped",
+ [
+ 20956
+ ]
+ ],
+ [
+ [
+ 63829,
+ 63829
+ ],
+ "mapped",
+ [
+ 20940
+ ]
+ ],
+ [
+ [
+ 63830,
+ 63830
+ ],
+ "mapped",
+ [
+ 31260
+ ]
+ ],
+ [
+ [
+ 63831,
+ 63831
+ ],
+ "mapped",
+ [
+ 32190
+ ]
+ ],
+ [
+ [
+ 63832,
+ 63832
+ ],
+ "mapped",
+ [
+ 33777
+ ]
+ ],
+ [
+ [
+ 63833,
+ 63833
+ ],
+ "mapped",
+ [
+ 38517
+ ]
+ ],
+ [
+ [
+ 63834,
+ 63834
+ ],
+ "mapped",
+ [
+ 35712
+ ]
+ ],
+ [
+ [
+ 63835,
+ 63835
+ ],
+ "mapped",
+ [
+ 25295
+ ]
+ ],
+ [
+ [
+ 63836,
+ 63836
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63837,
+ 63837
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 63838,
+ 63838
+ ],
+ "mapped",
+ [
+ 20025
+ ]
+ ],
+ [
+ [
+ 63839,
+ 63839
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63840,
+ 63840
+ ],
+ "mapped",
+ [
+ 24594
+ ]
+ ],
+ [
+ [
+ 63841,
+ 63841
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63842,
+ 63842
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 63843,
+ 63843
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 63844,
+ 63844
+ ],
+ "mapped",
+ [
+ 30971
+ ]
+ ],
+ [
+ [
+ 63845,
+ 63845
+ ],
+ "mapped",
+ [
+ 20415
+ ]
+ ],
+ [
+ [
+ 63846,
+ 63846
+ ],
+ "mapped",
+ [
+ 24489
+ ]
+ ],
+ [
+ [
+ 63847,
+ 63847
+ ],
+ "mapped",
+ [
+ 19981
+ ]
+ ],
+ [
+ [
+ 63848,
+ 63848
+ ],
+ "mapped",
+ [
+ 27852
+ ]
+ ],
+ [
+ [
+ 63849,
+ 63849
+ ],
+ "mapped",
+ [
+ 25976
+ ]
+ ],
+ [
+ [
+ 63850,
+ 63850
+ ],
+ "mapped",
+ [
+ 32034
+ ]
+ ],
+ [
+ [
+ 63851,
+ 63851
+ ],
+ "mapped",
+ [
+ 21443
+ ]
+ ],
+ [
+ [
+ 63852,
+ 63852
+ ],
+ "mapped",
+ [
+ 22622
+ ]
+ ],
+ [
+ [
+ 63853,
+ 63853
+ ],
+ "mapped",
+ [
+ 30465
+ ]
+ ],
+ [
+ [
+ 63854,
+ 63854
+ ],
+ "mapped",
+ [
+ 33865
+ ]
+ ],
+ [
+ [
+ 63855,
+ 63855
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63856,
+ 63856
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 63857,
+ 63857
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 63858,
+ 63858
+ ],
+ "mapped",
+ [
+ 27784
+ ]
+ ],
+ [
+ [
+ 63859,
+ 63859
+ ],
+ "mapped",
+ [
+ 25342
+ ]
+ ],
+ [
+ [
+ 63860,
+ 63860
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 63861,
+ 63861
+ ],
+ "mapped",
+ [
+ 25504
+ ]
+ ],
+ [
+ [
+ 63862,
+ 63862
+ ],
+ "mapped",
+ [
+ 30053
+ ]
+ ],
+ [
+ [
+ 63863,
+ 63863
+ ],
+ "mapped",
+ [
+ 20142
+ ]
+ ],
+ [
+ [
+ 63864,
+ 63864
+ ],
+ "mapped",
+ [
+ 20841
+ ]
+ ],
+ [
+ [
+ 63865,
+ 63865
+ ],
+ "mapped",
+ [
+ 20937
+ ]
+ ],
+ [
+ [
+ 63866,
+ 63866
+ ],
+ "mapped",
+ [
+ 26753
+ ]
+ ],
+ [
+ [
+ 63867,
+ 63867
+ ],
+ "mapped",
+ [
+ 31975
+ ]
+ ],
+ [
+ [
+ 63868,
+ 63868
+ ],
+ "mapped",
+ [
+ 33391
+ ]
+ ],
+ [
+ [
+ 63869,
+ 63869
+ ],
+ "mapped",
+ [
+ 35538
+ ]
+ ],
+ [
+ [
+ 63870,
+ 63870
+ ],
+ "mapped",
+ [
+ 37327
+ ]
+ ],
+ [
+ [
+ 63871,
+ 63871
+ ],
+ "mapped",
+ [
+ 21237
+ ]
+ ],
+ [
+ [
+ 63872,
+ 63872
+ ],
+ "mapped",
+ [
+ 21570
+ ]
+ ],
+ [
+ [
+ 63873,
+ 63873
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 63874,
+ 63874
+ ],
+ "mapped",
+ [
+ 24300
+ ]
+ ],
+ [
+ [
+ 63875,
+ 63875
+ ],
+ "mapped",
+ [
+ 26053
+ ]
+ ],
+ [
+ [
+ 63876,
+ 63876
+ ],
+ "mapped",
+ [
+ 28670
+ ]
+ ],
+ [
+ [
+ 63877,
+ 63877
+ ],
+ "mapped",
+ [
+ 31018
+ ]
+ ],
+ [
+ [
+ 63878,
+ 63878
+ ],
+ "mapped",
+ [
+ 38317
+ ]
+ ],
+ [
+ [
+ 63879,
+ 63879
+ ],
+ "mapped",
+ [
+ 39530
+ ]
+ ],
+ [
+ [
+ 63880,
+ 63880
+ ],
+ "mapped",
+ [
+ 40599
+ ]
+ ],
+ [
+ [
+ 63881,
+ 63881
+ ],
+ "mapped",
+ [
+ 40654
+ ]
+ ],
+ [
+ [
+ 63882,
+ 63882
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 63883,
+ 63883
+ ],
+ "mapped",
+ [
+ 26310
+ ]
+ ],
+ [
+ [
+ 63884,
+ 63884
+ ],
+ "mapped",
+ [
+ 27511
+ ]
+ ],
+ [
+ [
+ 63885,
+ 63885
+ ],
+ "mapped",
+ [
+ 36706
+ ]
+ ],
+ [
+ [
+ 63886,
+ 63886
+ ],
+ "mapped",
+ [
+ 24180
+ ]
+ ],
+ [
+ [
+ 63887,
+ 63887
+ ],
+ "mapped",
+ [
+ 24976
+ ]
+ ],
+ [
+ [
+ 63888,
+ 63888
+ ],
+ "mapped",
+ [
+ 25088
+ ]
+ ],
+ [
+ [
+ 63889,
+ 63889
+ ],
+ "mapped",
+ [
+ 25754
+ ]
+ ],
+ [
+ [
+ 63890,
+ 63890
+ ],
+ "mapped",
+ [
+ 28451
+ ]
+ ],
+ [
+ [
+ 63891,
+ 63891
+ ],
+ "mapped",
+ [
+ 29001
+ ]
+ ],
+ [
+ [
+ 63892,
+ 63892
+ ],
+ "mapped",
+ [
+ 29833
+ ]
+ ],
+ [
+ [
+ 63893,
+ 63893
+ ],
+ "mapped",
+ [
+ 31178
+ ]
+ ],
+ [
+ [
+ 63894,
+ 63894
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 63895,
+ 63895
+ ],
+ "mapped",
+ [
+ 32879
+ ]
+ ],
+ [
+ [
+ 63896,
+ 63896
+ ],
+ "mapped",
+ [
+ 36646
+ ]
+ ],
+ [
+ [
+ 63897,
+ 63897
+ ],
+ "mapped",
+ [
+ 34030
+ ]
+ ],
+ [
+ [
+ 63898,
+ 63898
+ ],
+ "mapped",
+ [
+ 36899
+ ]
+ ],
+ [
+ [
+ 63899,
+ 63899
+ ],
+ "mapped",
+ [
+ 37706
+ ]
+ ],
+ [
+ [
+ 63900,
+ 63900
+ ],
+ "mapped",
+ [
+ 21015
+ ]
+ ],
+ [
+ [
+ 63901,
+ 63901
+ ],
+ "mapped",
+ [
+ 21155
+ ]
+ ],
+ [
+ [
+ 63902,
+ 63902
+ ],
+ "mapped",
+ [
+ 21693
+ ]
+ ],
+ [
+ [
+ 63903,
+ 63903
+ ],
+ "mapped",
+ [
+ 28872
+ ]
+ ],
+ [
+ [
+ 63904,
+ 63904
+ ],
+ "mapped",
+ [
+ 35010
+ ]
+ ],
+ [
+ [
+ 63905,
+ 63905
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63906,
+ 63906
+ ],
+ "mapped",
+ [
+ 24265
+ ]
+ ],
+ [
+ [
+ 63907,
+ 63907
+ ],
+ "mapped",
+ [
+ 24565
+ ]
+ ],
+ [
+ [
+ 63908,
+ 63908
+ ],
+ "mapped",
+ [
+ 25467
+ ]
+ ],
+ [
+ [
+ 63909,
+ 63909
+ ],
+ "mapped",
+ [
+ 27566
+ ]
+ ],
+ [
+ [
+ 63910,
+ 63910
+ ],
+ "mapped",
+ [
+ 31806
+ ]
+ ],
+ [
+ [
+ 63911,
+ 63911
+ ],
+ "mapped",
+ [
+ 29557
+ ]
+ ],
+ [
+ [
+ 63912,
+ 63912
+ ],
+ "mapped",
+ [
+ 20196
+ ]
+ ],
+ [
+ [
+ 63913,
+ 63913
+ ],
+ "mapped",
+ [
+ 22265
+ ]
+ ],
+ [
+ [
+ 63914,
+ 63914
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63915,
+ 63915
+ ],
+ "mapped",
+ [
+ 23994
+ ]
+ ],
+ [
+ [
+ 63916,
+ 63916
+ ],
+ "mapped",
+ [
+ 24604
+ ]
+ ],
+ [
+ [
+ 63917,
+ 63917
+ ],
+ "mapped",
+ [
+ 29618
+ ]
+ ],
+ [
+ [
+ 63918,
+ 63918
+ ],
+ "mapped",
+ [
+ 29801
+ ]
+ ],
+ [
+ [
+ 63919,
+ 63919
+ ],
+ "mapped",
+ [
+ 32666
+ ]
+ ],
+ [
+ [
+ 63920,
+ 63920
+ ],
+ "mapped",
+ [
+ 32838
+ ]
+ ],
+ [
+ [
+ 63921,
+ 63921
+ ],
+ "mapped",
+ [
+ 37428
+ ]
+ ],
+ [
+ [
+ 63922,
+ 63922
+ ],
+ "mapped",
+ [
+ 38646
+ ]
+ ],
+ [
+ [
+ 63923,
+ 63923
+ ],
+ "mapped",
+ [
+ 38728
+ ]
+ ],
+ [
+ [
+ 63924,
+ 63924
+ ],
+ "mapped",
+ [
+ 38936
+ ]
+ ],
+ [
+ [
+ 63925,
+ 63925
+ ],
+ "mapped",
+ [
+ 20363
+ ]
+ ],
+ [
+ [
+ 63926,
+ 63926
+ ],
+ "mapped",
+ [
+ 31150
+ ]
+ ],
+ [
+ [
+ 63927,
+ 63927
+ ],
+ "mapped",
+ [
+ 37300
+ ]
+ ],
+ [
+ [
+ 63928,
+ 63928
+ ],
+ "mapped",
+ [
+ 38584
+ ]
+ ],
+ [
+ [
+ 63929,
+ 63929
+ ],
+ "mapped",
+ [
+ 24801
+ ]
+ ],
+ [
+ [
+ 63930,
+ 63930
+ ],
+ "mapped",
+ [
+ 20102
+ ]
+ ],
+ [
+ [
+ 63931,
+ 63931
+ ],
+ "mapped",
+ [
+ 20698
+ ]
+ ],
+ [
+ [
+ 63932,
+ 63932
+ ],
+ "mapped",
+ [
+ 23534
+ ]
+ ],
+ [
+ [
+ 63933,
+ 63933
+ ],
+ "mapped",
+ [
+ 23615
+ ]
+ ],
+ [
+ [
+ 63934,
+ 63934
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 63935,
+ 63935
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63936,
+ 63936
+ ],
+ "mapped",
+ [
+ 29134
+ ]
+ ],
+ [
+ [
+ 63937,
+ 63937
+ ],
+ "mapped",
+ [
+ 30274
+ ]
+ ],
+ [
+ [
+ 63938,
+ 63938
+ ],
+ "mapped",
+ [
+ 34044
+ ]
+ ],
+ [
+ [
+ 63939,
+ 63939
+ ],
+ "mapped",
+ [
+ 36988
+ ]
+ ],
+ [
+ [
+ 63940,
+ 63940
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 63941,
+ 63941
+ ],
+ "mapped",
+ [
+ 26248
+ ]
+ ],
+ [
+ [
+ 63942,
+ 63942
+ ],
+ "mapped",
+ [
+ 38446
+ ]
+ ],
+ [
+ [
+ 63943,
+ 63943
+ ],
+ "mapped",
+ [
+ 21129
+ ]
+ ],
+ [
+ [
+ 63944,
+ 63944
+ ],
+ "mapped",
+ [
+ 26491
+ ]
+ ],
+ [
+ [
+ 63945,
+ 63945
+ ],
+ "mapped",
+ [
+ 26611
+ ]
+ ],
+ [
+ [
+ 63946,
+ 63946
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 63947,
+ 63947
+ ],
+ "mapped",
+ [
+ 28316
+ ]
+ ],
+ [
+ [
+ 63948,
+ 63948
+ ],
+ "mapped",
+ [
+ 29705
+ ]
+ ],
+ [
+ [
+ 63949,
+ 63949
+ ],
+ "mapped",
+ [
+ 30041
+ ]
+ ],
+ [
+ [
+ 63950,
+ 63950
+ ],
+ "mapped",
+ [
+ 30827
+ ]
+ ],
+ [
+ [
+ 63951,
+ 63951
+ ],
+ "mapped",
+ [
+ 32016
+ ]
+ ],
+ [
+ [
+ 63952,
+ 63952
+ ],
+ "mapped",
+ [
+ 39006
+ ]
+ ],
+ [
+ [
+ 63953,
+ 63953
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 63954,
+ 63954
+ ],
+ "mapped",
+ [
+ 25134
+ ]
+ ],
+ [
+ [
+ 63955,
+ 63955
+ ],
+ "mapped",
+ [
+ 38520
+ ]
+ ],
+ [
+ [
+ 63956,
+ 63956
+ ],
+ "mapped",
+ [
+ 20523
+ ]
+ ],
+ [
+ [
+ 63957,
+ 63957
+ ],
+ "mapped",
+ [
+ 23833
+ ]
+ ],
+ [
+ [
+ 63958,
+ 63958
+ ],
+ "mapped",
+ [
+ 28138
+ ]
+ ],
+ [
+ [
+ 63959,
+ 63959
+ ],
+ "mapped",
+ [
+ 36650
+ ]
+ ],
+ [
+ [
+ 63960,
+ 63960
+ ],
+ "mapped",
+ [
+ 24459
+ ]
+ ],
+ [
+ [
+ 63961,
+ 63961
+ ],
+ "mapped",
+ [
+ 24900
+ ]
+ ],
+ [
+ [
+ 63962,
+ 63962
+ ],
+ "mapped",
+ [
+ 26647
+ ]
+ ],
+ [
+ [
+ 63963,
+ 63963
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63964,
+ 63964
+ ],
+ "mapped",
+ [
+ 38534
+ ]
+ ],
+ [
+ [
+ 63965,
+ 63965
+ ],
+ "mapped",
+ [
+ 21033
+ ]
+ ],
+ [
+ [
+ 63966,
+ 63966
+ ],
+ "mapped",
+ [
+ 21519
+ ]
+ ],
+ [
+ [
+ 63967,
+ 63967
+ ],
+ "mapped",
+ [
+ 23653
+ ]
+ ],
+ [
+ [
+ 63968,
+ 63968
+ ],
+ "mapped",
+ [
+ 26131
+ ]
+ ],
+ [
+ [
+ 63969,
+ 63969
+ ],
+ "mapped",
+ [
+ 26446
+ ]
+ ],
+ [
+ [
+ 63970,
+ 63970
+ ],
+ "mapped",
+ [
+ 26792
+ ]
+ ],
+ [
+ [
+ 63971,
+ 63971
+ ],
+ "mapped",
+ [
+ 27877
+ ]
+ ],
+ [
+ [
+ 63972,
+ 63972
+ ],
+ "mapped",
+ [
+ 29702
+ ]
+ ],
+ [
+ [
+ 63973,
+ 63973
+ ],
+ "mapped",
+ [
+ 30178
+ ]
+ ],
+ [
+ [
+ 63974,
+ 63974
+ ],
+ "mapped",
+ [
+ 32633
+ ]
+ ],
+ [
+ [
+ 63975,
+ 63975
+ ],
+ "mapped",
+ [
+ 35023
+ ]
+ ],
+ [
+ [
+ 63976,
+ 63976
+ ],
+ "mapped",
+ [
+ 35041
+ ]
+ ],
+ [
+ [
+ 63977,
+ 63977
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 63978,
+ 63978
+ ],
+ "mapped",
+ [
+ 38626
+ ]
+ ],
+ [
+ [
+ 63979,
+ 63979
+ ],
+ "mapped",
+ [
+ 21311
+ ]
+ ],
+ [
+ [
+ 63980,
+ 63980
+ ],
+ "mapped",
+ [
+ 28346
+ ]
+ ],
+ [
+ [
+ 63981,
+ 63981
+ ],
+ "mapped",
+ [
+ 21533
+ ]
+ ],
+ [
+ [
+ 63982,
+ 63982
+ ],
+ "mapped",
+ [
+ 29136
+ ]
+ ],
+ [
+ [
+ 63983,
+ 63983
+ ],
+ "mapped",
+ [
+ 29848
+ ]
+ ],
+ [
+ [
+ 63984,
+ 63984
+ ],
+ "mapped",
+ [
+ 34298
+ ]
+ ],
+ [
+ [
+ 63985,
+ 63985
+ ],
+ "mapped",
+ [
+ 38563
+ ]
+ ],
+ [
+ [
+ 63986,
+ 63986
+ ],
+ "mapped",
+ [
+ 40023
+ ]
+ ],
+ [
+ [
+ 63987,
+ 63987
+ ],
+ "mapped",
+ [
+ 40607
+ ]
+ ],
+ [
+ [
+ 63988,
+ 63988
+ ],
+ "mapped",
+ [
+ 26519
+ ]
+ ],
+ [
+ [
+ 63989,
+ 63989
+ ],
+ "mapped",
+ [
+ 28107
+ ]
+ ],
+ [
+ [
+ 63990,
+ 63990
+ ],
+ "mapped",
+ [
+ 33256
+ ]
+ ],
+ [
+ [
+ 63991,
+ 63991
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 63992,
+ 63992
+ ],
+ "mapped",
+ [
+ 31520
+ ]
+ ],
+ [
+ [
+ 63993,
+ 63993
+ ],
+ "mapped",
+ [
+ 31890
+ ]
+ ],
+ [
+ [
+ 63994,
+ 63994
+ ],
+ "mapped",
+ [
+ 29376
+ ]
+ ],
+ [
+ [
+ 63995,
+ 63995
+ ],
+ "mapped",
+ [
+ 28825
+ ]
+ ],
+ [
+ [
+ 63996,
+ 63996
+ ],
+ "mapped",
+ [
+ 35672
+ ]
+ ],
+ [
+ [
+ 63997,
+ 63997
+ ],
+ "mapped",
+ [
+ 20160
+ ]
+ ],
+ [
+ [
+ 63998,
+ 63998
+ ],
+ "mapped",
+ [
+ 33590
+ ]
+ ],
+ [
+ [
+ 63999,
+ 63999
+ ],
+ "mapped",
+ [
+ 21050
+ ]
+ ],
+ [
+ [
+ 64000,
+ 64000
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 64001,
+ 64001
+ ],
+ "mapped",
+ [
+ 24230
+ ]
+ ],
+ [
+ [
+ 64002,
+ 64002
+ ],
+ "mapped",
+ [
+ 25299
+ ]
+ ],
+ [
+ [
+ 64003,
+ 64003
+ ],
+ "mapped",
+ [
+ 31958
+ ]
+ ],
+ [
+ [
+ 64004,
+ 64004
+ ],
+ "mapped",
+ [
+ 23429
+ ]
+ ],
+ [
+ [
+ 64005,
+ 64005
+ ],
+ "mapped",
+ [
+ 27934
+ ]
+ ],
+ [
+ [
+ 64006,
+ 64006
+ ],
+ "mapped",
+ [
+ 26292
+ ]
+ ],
+ [
+ [
+ 64007,
+ 64007
+ ],
+ "mapped",
+ [
+ 36667
+ ]
+ ],
+ [
+ [
+ 64008,
+ 64008
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 64009,
+ 64009
+ ],
+ "mapped",
+ [
+ 38477
+ ]
+ ],
+ [
+ [
+ 64010,
+ 64010
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 64011,
+ 64011
+ ],
+ "mapped",
+ [
+ 24275
+ ]
+ ],
+ [
+ [
+ 64012,
+ 64012
+ ],
+ "mapped",
+ [
+ 20800
+ ]
+ ],
+ [
+ [
+ 64013,
+ 64013
+ ],
+ "mapped",
+ [
+ 21952
+ ]
+ ],
+ [
+ [
+ 64014,
+ 64015
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64016,
+ 64016
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64017,
+ 64017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64018,
+ 64018
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64019,
+ 64020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64021,
+ 64021
+ ],
+ "mapped",
+ [
+ 20958
+ ]
+ ],
+ [
+ [
+ 64022,
+ 64022
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64023,
+ 64023
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64024,
+ 64024
+ ],
+ "mapped",
+ [
+ 31036
+ ]
+ ],
+ [
+ [
+ 64025,
+ 64025
+ ],
+ "mapped",
+ [
+ 31070
+ ]
+ ],
+ [
+ [
+ 64026,
+ 64026
+ ],
+ "mapped",
+ [
+ 31077
+ ]
+ ],
+ [
+ [
+ 64027,
+ 64027
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 64028,
+ 64028
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64029,
+ 64029
+ ],
+ "mapped",
+ [
+ 31934
+ ]
+ ],
+ [
+ [
+ 64030,
+ 64030
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 64031,
+ 64031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64032,
+ 64032
+ ],
+ "mapped",
+ [
+ 34322
+ ]
+ ],
+ [
+ [
+ 64033,
+ 64033
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64034,
+ 64034
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64035,
+ 64036
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64037,
+ 64037
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64038,
+ 64038
+ ],
+ "mapped",
+ [
+ 37117
+ ]
+ ],
+ [
+ [
+ 64039,
+ 64041
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64042,
+ 64042
+ ],
+ "mapped",
+ [
+ 39151
+ ]
+ ],
+ [
+ [
+ 64043,
+ 64043
+ ],
+ "mapped",
+ [
+ 39164
+ ]
+ ],
+ [
+ [
+ 64044,
+ 64044
+ ],
+ "mapped",
+ [
+ 39208
+ ]
+ ],
+ [
+ [
+ 64045,
+ 64045
+ ],
+ "mapped",
+ [
+ 40372
+ ]
+ ],
+ [
+ [
+ 64046,
+ 64046
+ ],
+ "mapped",
+ [
+ 37086
+ ]
+ ],
+ [
+ [
+ 64047,
+ 64047
+ ],
+ "mapped",
+ [
+ 38583
+ ]
+ ],
+ [
+ [
+ 64048,
+ 64048
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 64049,
+ 64049
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 64050,
+ 64050
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 64051,
+ 64051
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 64052,
+ 64052
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 64053,
+ 64053
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 64054,
+ 64054
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64055,
+ 64055
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 64056,
+ 64056
+ ],
+ "mapped",
+ [
+ 22120
+ ]
+ ],
+ [
+ [
+ 64057,
+ 64057
+ ],
+ "mapped",
+ [
+ 22592
+ ]
+ ],
+ [
+ [
+ 64058,
+ 64058
+ ],
+ "mapped",
+ [
+ 22696
+ ]
+ ],
+ [
+ [
+ 64059,
+ 64059
+ ],
+ "mapped",
+ [
+ 23652
+ ]
+ ],
+ [
+ [
+ 64060,
+ 64060
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 64061,
+ 64061
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 64062,
+ 64062
+ ],
+ "mapped",
+ [
+ 24936
+ ]
+ ],
+ [
+ [
+ 64063,
+ 64063
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64064,
+ 64064
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64065,
+ 64065
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 64066,
+ 64066
+ ],
+ "mapped",
+ [
+ 26082
+ ]
+ ],
+ [
+ [
+ 64067,
+ 64067
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 64068,
+ 64068
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 64069,
+ 64069
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 64070,
+ 64070
+ ],
+ "mapped",
+ [
+ 28186
+ ]
+ ],
+ [
+ [
+ 64071,
+ 64071
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64072,
+ 64072
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64073,
+ 64073
+ ],
+ "mapped",
+ [
+ 29227
+ ]
+ ],
+ [
+ [
+ 64074,
+ 64074
+ ],
+ "mapped",
+ [
+ 29730
+ ]
+ ],
+ [
+ [
+ 64075,
+ 64075
+ ],
+ "mapped",
+ [
+ 30865
+ ]
+ ],
+ [
+ [
+ 64076,
+ 64076
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 64077,
+ 64077
+ ],
+ "mapped",
+ [
+ 31049
+ ]
+ ],
+ [
+ [
+ 64078,
+ 64078
+ ],
+ "mapped",
+ [
+ 31048
+ ]
+ ],
+ [
+ [
+ 64079,
+ 64079
+ ],
+ "mapped",
+ [
+ 31056
+ ]
+ ],
+ [
+ [
+ 64080,
+ 64080
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 64081,
+ 64081
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 64082,
+ 64082
+ ],
+ "mapped",
+ [
+ 31117
+ ]
+ ],
+ [
+ [
+ 64083,
+ 64083
+ ],
+ "mapped",
+ [
+ 31118
+ ]
+ ],
+ [
+ [
+ 64084,
+ 64084
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 64085,
+ 64085
+ ],
+ "mapped",
+ [
+ 31361
+ ]
+ ],
+ [
+ [
+ 64086,
+ 64086
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64087,
+ 64087
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64088,
+ 64088
+ ],
+ "mapped",
+ [
+ 32265
+ ]
+ ],
+ [
+ [
+ 64089,
+ 64089
+ ],
+ "mapped",
+ [
+ 32321
+ ]
+ ],
+ [
+ [
+ 64090,
+ 64090
+ ],
+ "mapped",
+ [
+ 32626
+ ]
+ ],
+ [
+ [
+ 64091,
+ 64091
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64092,
+ 64092
+ ],
+ "mapped",
+ [
+ 33261
+ ]
+ ],
+ [
+ [
+ 64093,
+ 64094
+ ],
+ "mapped",
+ [
+ 33401
+ ]
+ ],
+ [
+ [
+ 64095,
+ 64095
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 64096,
+ 64096
+ ],
+ "mapped",
+ [
+ 35088
+ ]
+ ],
+ [
+ [
+ 64097,
+ 64097
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64098,
+ 64098
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64099,
+ 64099
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64100,
+ 64100
+ ],
+ "mapped",
+ [
+ 36051
+ ]
+ ],
+ [
+ [
+ 64101,
+ 64101
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64102,
+ 64102
+ ],
+ "mapped",
+ [
+ 36790
+ ]
+ ],
+ [
+ [
+ 64103,
+ 64103
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64104,
+ 64104
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64105,
+ 64105
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64106,
+ 64106
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64107,
+ 64107
+ ],
+ "mapped",
+ [
+ 24693
+ ]
+ ],
+ [
+ [
+ 64108,
+ 64108
+ ],
+ "mapped",
+ [
+ 148206
+ ]
+ ],
+ [
+ [
+ 64109,
+ 64109
+ ],
+ "mapped",
+ [
+ 33304
+ ]
+ ],
+ [
+ [
+ 64110,
+ 64111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64112,
+ 64112
+ ],
+ "mapped",
+ [
+ 20006
+ ]
+ ],
+ [
+ [
+ 64113,
+ 64113
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 64114,
+ 64114
+ ],
+ "mapped",
+ [
+ 20840
+ ]
+ ],
+ [
+ [
+ 64115,
+ 64115
+ ],
+ "mapped",
+ [
+ 20352
+ ]
+ ],
+ [
+ [
+ 64116,
+ 64116
+ ],
+ "mapped",
+ [
+ 20805
+ ]
+ ],
+ [
+ [
+ 64117,
+ 64117
+ ],
+ "mapped",
+ [
+ 20864
+ ]
+ ],
+ [
+ [
+ 64118,
+ 64118
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 64119,
+ 64119
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 64120,
+ 64120
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64121,
+ 64121
+ ],
+ "mapped",
+ [
+ 21845
+ ]
+ ],
+ [
+ [
+ 64122,
+ 64122
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 64123,
+ 64123
+ ],
+ "mapped",
+ [
+ 21986
+ ]
+ ],
+ [
+ [
+ 64124,
+ 64124
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64125,
+ 64125
+ ],
+ "mapped",
+ [
+ 22707
+ ]
+ ],
+ [
+ [
+ 64126,
+ 64126
+ ],
+ "mapped",
+ [
+ 22852
+ ]
+ ],
+ [
+ [
+ 64127,
+ 64127
+ ],
+ "mapped",
+ [
+ 22868
+ ]
+ ],
+ [
+ [
+ 64128,
+ 64128
+ ],
+ "mapped",
+ [
+ 23138
+ ]
+ ],
+ [
+ [
+ 64129,
+ 64129
+ ],
+ "mapped",
+ [
+ 23336
+ ]
+ ],
+ [
+ [
+ 64130,
+ 64130
+ ],
+ "mapped",
+ [
+ 24274
+ ]
+ ],
+ [
+ [
+ 64131,
+ 64131
+ ],
+ "mapped",
+ [
+ 24281
+ ]
+ ],
+ [
+ [
+ 64132,
+ 64132
+ ],
+ "mapped",
+ [
+ 24425
+ ]
+ ],
+ [
+ [
+ 64133,
+ 64133
+ ],
+ "mapped",
+ [
+ 24493
+ ]
+ ],
+ [
+ [
+ 64134,
+ 64134
+ ],
+ "mapped",
+ [
+ 24792
+ ]
+ ],
+ [
+ [
+ 64135,
+ 64135
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 64136,
+ 64136
+ ],
+ "mapped",
+ [
+ 24840
+ ]
+ ],
+ [
+ [
+ 64137,
+ 64137
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64138,
+ 64138
+ ],
+ "mapped",
+ [
+ 24928
+ ]
+ ],
+ [
+ [
+ 64139,
+ 64139
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64140,
+ 64140
+ ],
+ "mapped",
+ [
+ 25140
+ ]
+ ],
+ [
+ [
+ 64141,
+ 64141
+ ],
+ "mapped",
+ [
+ 25540
+ ]
+ ],
+ [
+ [
+ 64142,
+ 64142
+ ],
+ "mapped",
+ [
+ 25628
+ ]
+ ],
+ [
+ [
+ 64143,
+ 64143
+ ],
+ "mapped",
+ [
+ 25682
+ ]
+ ],
+ [
+ [
+ 64144,
+ 64144
+ ],
+ "mapped",
+ [
+ 25942
+ ]
+ ],
+ [
+ [
+ 64145,
+ 64145
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64146,
+ 64146
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 64147,
+ 64147
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 64148,
+ 64148
+ ],
+ "mapped",
+ [
+ 26454
+ ]
+ ],
+ [
+ [
+ 64149,
+ 64149
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 64150,
+ 64150
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 64151,
+ 64151
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 64152,
+ 64152
+ ],
+ "mapped",
+ [
+ 28379
+ ]
+ ],
+ [
+ [
+ 64153,
+ 64153
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 64154,
+ 64154
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64155,
+ 64155
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 64156,
+ 64156
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64157,
+ 64157
+ ],
+ "mapped",
+ [
+ 30631
+ ]
+ ],
+ [
+ [
+ 64158,
+ 64158
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 64159,
+ 64159
+ ],
+ "mapped",
+ [
+ 29359
+ ]
+ ],
+ [
+ [
+ 64160,
+ 64160
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64161,
+ 64161
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 64162,
+ 64162
+ ],
+ "mapped",
+ [
+ 29958
+ ]
+ ],
+ [
+ [
+ 64163,
+ 64163
+ ],
+ "mapped",
+ [
+ 30011
+ ]
+ ],
+ [
+ [
+ 64164,
+ 64164
+ ],
+ "mapped",
+ [
+ 30237
+ ]
+ ],
+ [
+ [
+ 64165,
+ 64165
+ ],
+ "mapped",
+ [
+ 30239
+ ]
+ ],
+ [
+ [
+ 64166,
+ 64166
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64167,
+ 64167
+ ],
+ "mapped",
+ [
+ 30427
+ ]
+ ],
+ [
+ [
+ 64168,
+ 64168
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 64169,
+ 64169
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 64170,
+ 64170
+ ],
+ "mapped",
+ [
+ 30528
+ ]
+ ],
+ [
+ [
+ 64171,
+ 64171
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 64172,
+ 64172
+ ],
+ "mapped",
+ [
+ 31409
+ ]
+ ],
+ [
+ [
+ 64173,
+ 64173
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64174,
+ 64174
+ ],
+ "mapped",
+ [
+ 31867
+ ]
+ ],
+ [
+ [
+ 64175,
+ 64175
+ ],
+ "mapped",
+ [
+ 32091
+ ]
+ ],
+ [
+ [
+ 64176,
+ 64176
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64177,
+ 64177
+ ],
+ "mapped",
+ [
+ 32574
+ ]
+ ],
+ [
+ [
+ 64178,
+ 64178
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64179,
+ 64179
+ ],
+ "mapped",
+ [
+ 33618
+ ]
+ ],
+ [
+ [
+ 64180,
+ 64180
+ ],
+ "mapped",
+ [
+ 33775
+ ]
+ ],
+ [
+ [
+ 64181,
+ 64181
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 64182,
+ 64182
+ ],
+ "mapped",
+ [
+ 35137
+ ]
+ ],
+ [
+ [
+ 64183,
+ 64183
+ ],
+ "mapped",
+ [
+ 35206
+ ]
+ ],
+ [
+ [
+ 64184,
+ 64184
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64185,
+ 64185
+ ],
+ "mapped",
+ [
+ 35519
+ ]
+ ],
+ [
+ [
+ 64186,
+ 64186
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64187,
+ 64187
+ ],
+ "mapped",
+ [
+ 35531
+ ]
+ ],
+ [
+ [
+ 64188,
+ 64188
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64189,
+ 64189
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 64190,
+ 64190
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 64191,
+ 64191
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64192,
+ 64192
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 64193,
+ 64193
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64194,
+ 64194
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 64195,
+ 64195
+ ],
+ "mapped",
+ [
+ 36978
+ ]
+ ],
+ [
+ [
+ 64196,
+ 64196
+ ],
+ "mapped",
+ [
+ 37273
+ ]
+ ],
+ [
+ [
+ 64197,
+ 64197
+ ],
+ "mapped",
+ [
+ 37494
+ ]
+ ],
+ [
+ [
+ 64198,
+ 64198
+ ],
+ "mapped",
+ [
+ 38524
+ ]
+ ],
+ [
+ [
+ 64199,
+ 64199
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64200,
+ 64200
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64201,
+ 64201
+ ],
+ "mapped",
+ [
+ 38875
+ ]
+ ],
+ [
+ [
+ 64202,
+ 64202
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64203,
+ 64203
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 64204,
+ 64204
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64205,
+ 64205
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 64206,
+ 64206
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 64207,
+ 64207
+ ],
+ "mapped",
+ [
+ 141386
+ ]
+ ],
+ [
+ [
+ 64208,
+ 64208
+ ],
+ "mapped",
+ [
+ 141380
+ ]
+ ],
+ [
+ [
+ 64209,
+ 64209
+ ],
+ "mapped",
+ [
+ 144341
+ ]
+ ],
+ [
+ [
+ 64210,
+ 64210
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 64211,
+ 64211
+ ],
+ "mapped",
+ [
+ 16408
+ ]
+ ],
+ [
+ [
+ 64212,
+ 64212
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 64213,
+ 64213
+ ],
+ "mapped",
+ [
+ 152137
+ ]
+ ],
+ [
+ [
+ 64214,
+ 64214
+ ],
+ "mapped",
+ [
+ 154832
+ ]
+ ],
+ [
+ [
+ 64215,
+ 64215
+ ],
+ "mapped",
+ [
+ 163539
+ ]
+ ],
+ [
+ [
+ 64216,
+ 64216
+ ],
+ "mapped",
+ [
+ 40771
+ ]
+ ],
+ [
+ [
+ 64217,
+ 64217
+ ],
+ "mapped",
+ [
+ 40846
+ ]
+ ],
+ [
+ [
+ 64218,
+ 64255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64256,
+ 64256
+ ],
+ "mapped",
+ [
+ 102,
+ 102
+ ]
+ ],
+ [
+ [
+ 64257,
+ 64257
+ ],
+ "mapped",
+ [
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64258,
+ 64258
+ ],
+ "mapped",
+ [
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64259,
+ 64259
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64260,
+ 64260
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64261,
+ 64262
+ ],
+ "mapped",
+ [
+ 115,
+ 116
+ ]
+ ],
+ [
+ [
+ 64263,
+ 64274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64275,
+ 64275
+ ],
+ "mapped",
+ [
+ 1396,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64276,
+ 64276
+ ],
+ "mapped",
+ [
+ 1396,
+ 1381
+ ]
+ ],
+ [
+ [
+ 64277,
+ 64277
+ ],
+ "mapped",
+ [
+ 1396,
+ 1387
+ ]
+ ],
+ [
+ [
+ 64278,
+ 64278
+ ],
+ "mapped",
+ [
+ 1406,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64279,
+ 64279
+ ],
+ "mapped",
+ [
+ 1396,
+ 1389
+ ]
+ ],
+ [
+ [
+ 64280,
+ 64284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64285,
+ 64285
+ ],
+ "mapped",
+ [
+ 1497,
+ 1460
+ ]
+ ],
+ [
+ [
+ 64286,
+ 64286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64287,
+ 64287
+ ],
+ "mapped",
+ [
+ 1522,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64288,
+ 64288
+ ],
+ "mapped",
+ [
+ 1506
+ ]
+ ],
+ [
+ [
+ 64289,
+ 64289
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 64290,
+ 64290
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 64291,
+ 64291
+ ],
+ "mapped",
+ [
+ 1492
+ ]
+ ],
+ [
+ [
+ 64292,
+ 64292
+ ],
+ "mapped",
+ [
+ 1499
+ ]
+ ],
+ [
+ [
+ 64293,
+ 64293
+ ],
+ "mapped",
+ [
+ 1500
+ ]
+ ],
+ [
+ [
+ 64294,
+ 64294
+ ],
+ "mapped",
+ [
+ 1501
+ ]
+ ],
+ [
+ [
+ 64295,
+ 64295
+ ],
+ "mapped",
+ [
+ 1512
+ ]
+ ],
+ [
+ [
+ 64296,
+ 64296
+ ],
+ "mapped",
+ [
+ 1514
+ ]
+ ],
+ [
+ [
+ 64297,
+ 64297
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 64298,
+ 64298
+ ],
+ "mapped",
+ [
+ 1513,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64299,
+ 64299
+ ],
+ "mapped",
+ [
+ 1513,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64300,
+ 64300
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64301,
+ 64301
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64302,
+ 64302
+ ],
+ "mapped",
+ [
+ 1488,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64303,
+ 64303
+ ],
+ "mapped",
+ [
+ 1488,
+ 1464
+ ]
+ ],
+ [
+ [
+ 64304,
+ 64304
+ ],
+ "mapped",
+ [
+ 1488,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64305,
+ 64305
+ ],
+ "mapped",
+ [
+ 1489,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64306,
+ 64306
+ ],
+ "mapped",
+ [
+ 1490,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64307,
+ 64307
+ ],
+ "mapped",
+ [
+ 1491,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64308,
+ 64308
+ ],
+ "mapped",
+ [
+ 1492,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64309,
+ 64309
+ ],
+ "mapped",
+ [
+ 1493,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64310,
+ 64310
+ ],
+ "mapped",
+ [
+ 1494,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64311,
+ 64311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64312,
+ 64312
+ ],
+ "mapped",
+ [
+ 1496,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64313,
+ 64313
+ ],
+ "mapped",
+ [
+ 1497,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64314,
+ 64314
+ ],
+ "mapped",
+ [
+ 1498,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64315,
+ 64315
+ ],
+ "mapped",
+ [
+ 1499,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64316,
+ 64316
+ ],
+ "mapped",
+ [
+ 1500,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64317,
+ 64317
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64318,
+ 64318
+ ],
+ "mapped",
+ [
+ 1502,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64319,
+ 64319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64320,
+ 64320
+ ],
+ "mapped",
+ [
+ 1504,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64321,
+ 64321
+ ],
+ "mapped",
+ [
+ 1505,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64322,
+ 64322
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64323,
+ 64323
+ ],
+ "mapped",
+ [
+ 1507,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64324,
+ 64324
+ ],
+ "mapped",
+ [
+ 1508,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64325,
+ 64325
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64326,
+ 64326
+ ],
+ "mapped",
+ [
+ 1510,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64327,
+ 64327
+ ],
+ "mapped",
+ [
+ 1511,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64328,
+ 64328
+ ],
+ "mapped",
+ [
+ 1512,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64329,
+ 64329
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64330,
+ 64330
+ ],
+ "mapped",
+ [
+ 1514,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64331,
+ 64331
+ ],
+ "mapped",
+ [
+ 1493,
+ 1465
+ ]
+ ],
+ [
+ [
+ 64332,
+ 64332
+ ],
+ "mapped",
+ [
+ 1489,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64333,
+ 64333
+ ],
+ "mapped",
+ [
+ 1499,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64334,
+ 64334
+ ],
+ "mapped",
+ [
+ 1508,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64335,
+ 64335
+ ],
+ "mapped",
+ [
+ 1488,
+ 1500
+ ]
+ ],
+ [
+ [
+ 64336,
+ 64337
+ ],
+ "mapped",
+ [
+ 1649
+ ]
+ ],
+ [
+ [
+ 64338,
+ 64341
+ ],
+ "mapped",
+ [
+ 1659
+ ]
+ ],
+ [
+ [
+ 64342,
+ 64345
+ ],
+ "mapped",
+ [
+ 1662
+ ]
+ ],
+ [
+ [
+ 64346,
+ 64349
+ ],
+ "mapped",
+ [
+ 1664
+ ]
+ ],
+ [
+ [
+ 64350,
+ 64353
+ ],
+ "mapped",
+ [
+ 1658
+ ]
+ ],
+ [
+ [
+ 64354,
+ 64357
+ ],
+ "mapped",
+ [
+ 1663
+ ]
+ ],
+ [
+ [
+ 64358,
+ 64361
+ ],
+ "mapped",
+ [
+ 1657
+ ]
+ ],
+ [
+ [
+ 64362,
+ 64365
+ ],
+ "mapped",
+ [
+ 1700
+ ]
+ ],
+ [
+ [
+ 64366,
+ 64369
+ ],
+ "mapped",
+ [
+ 1702
+ ]
+ ],
+ [
+ [
+ 64370,
+ 64373
+ ],
+ "mapped",
+ [
+ 1668
+ ]
+ ],
+ [
+ [
+ 64374,
+ 64377
+ ],
+ "mapped",
+ [
+ 1667
+ ]
+ ],
+ [
+ [
+ 64378,
+ 64381
+ ],
+ "mapped",
+ [
+ 1670
+ ]
+ ],
+ [
+ [
+ 64382,
+ 64385
+ ],
+ "mapped",
+ [
+ 1671
+ ]
+ ],
+ [
+ [
+ 64386,
+ 64387
+ ],
+ "mapped",
+ [
+ 1677
+ ]
+ ],
+ [
+ [
+ 64388,
+ 64389
+ ],
+ "mapped",
+ [
+ 1676
+ ]
+ ],
+ [
+ [
+ 64390,
+ 64391
+ ],
+ "mapped",
+ [
+ 1678
+ ]
+ ],
+ [
+ [
+ 64392,
+ 64393
+ ],
+ "mapped",
+ [
+ 1672
+ ]
+ ],
+ [
+ [
+ 64394,
+ 64395
+ ],
+ "mapped",
+ [
+ 1688
+ ]
+ ],
+ [
+ [
+ 64396,
+ 64397
+ ],
+ "mapped",
+ [
+ 1681
+ ]
+ ],
+ [
+ [
+ 64398,
+ 64401
+ ],
+ "mapped",
+ [
+ 1705
+ ]
+ ],
+ [
+ [
+ 64402,
+ 64405
+ ],
+ "mapped",
+ [
+ 1711
+ ]
+ ],
+ [
+ [
+ 64406,
+ 64409
+ ],
+ "mapped",
+ [
+ 1715
+ ]
+ ],
+ [
+ [
+ 64410,
+ 64413
+ ],
+ "mapped",
+ [
+ 1713
+ ]
+ ],
+ [
+ [
+ 64414,
+ 64415
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 64416,
+ 64419
+ ],
+ "mapped",
+ [
+ 1723
+ ]
+ ],
+ [
+ [
+ 64420,
+ 64421
+ ],
+ "mapped",
+ [
+ 1728
+ ]
+ ],
+ [
+ [
+ 64422,
+ 64425
+ ],
+ "mapped",
+ [
+ 1729
+ ]
+ ],
+ [
+ [
+ 64426,
+ 64429
+ ],
+ "mapped",
+ [
+ 1726
+ ]
+ ],
+ [
+ [
+ 64430,
+ 64431
+ ],
+ "mapped",
+ [
+ 1746
+ ]
+ ],
+ [
+ [
+ 64432,
+ 64433
+ ],
+ "mapped",
+ [
+ 1747
+ ]
+ ],
+ [
+ [
+ 64434,
+ 64449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64450,
+ 64466
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64467,
+ 64470
+ ],
+ "mapped",
+ [
+ 1709
+ ]
+ ],
+ [
+ [
+ 64471,
+ 64472
+ ],
+ "mapped",
+ [
+ 1735
+ ]
+ ],
+ [
+ [
+ 64473,
+ 64474
+ ],
+ "mapped",
+ [
+ 1734
+ ]
+ ],
+ [
+ [
+ 64475,
+ 64476
+ ],
+ "mapped",
+ [
+ 1736
+ ]
+ ],
+ [
+ [
+ 64477,
+ 64477
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 64478,
+ 64479
+ ],
+ "mapped",
+ [
+ 1739
+ ]
+ ],
+ [
+ [
+ 64480,
+ 64481
+ ],
+ "mapped",
+ [
+ 1733
+ ]
+ ],
+ [
+ [
+ 64482,
+ 64483
+ ],
+ "mapped",
+ [
+ 1737
+ ]
+ ],
+ [
+ [
+ 64484,
+ 64487
+ ],
+ "mapped",
+ [
+ 1744
+ ]
+ ],
+ [
+ [
+ 64488,
+ 64489
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 64490,
+ 64491
+ ],
+ "mapped",
+ [
+ 1574,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64492,
+ 64493
+ ],
+ "mapped",
+ [
+ 1574,
+ 1749
+ ]
+ ],
+ [
+ [
+ 64494,
+ 64495
+ ],
+ "mapped",
+ [
+ 1574,
+ 1608
+ ]
+ ],
+ [
+ [
+ 64496,
+ 64497
+ ],
+ "mapped",
+ [
+ 1574,
+ 1735
+ ]
+ ],
+ [
+ [
+ 64498,
+ 64499
+ ],
+ "mapped",
+ [
+ 1574,
+ 1734
+ ]
+ ],
+ [
+ [
+ 64500,
+ 64501
+ ],
+ "mapped",
+ [
+ 1574,
+ 1736
+ ]
+ ],
+ [
+ [
+ 64502,
+ 64504
+ ],
+ "mapped",
+ [
+ 1574,
+ 1744
+ ]
+ ],
+ [
+ [
+ 64505,
+ 64507
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64508,
+ 64511
+ ],
+ "mapped",
+ [
+ 1740
+ ]
+ ],
+ [
+ [
+ 64512,
+ 64512
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64513,
+ 64513
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64514,
+ 64514
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64515,
+ 64515
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64516,
+ 64516
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64517,
+ 64517
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64518,
+ 64518
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64519,
+ 64519
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64520,
+ 64520
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64521,
+ 64521
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64522,
+ 64522
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64523,
+ 64523
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64524,
+ 64524
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64525,
+ 64525
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64526,
+ 64526
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64527,
+ 64527
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64528,
+ 64528
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64529,
+ 64529
+ ],
+ "mapped",
+ [
+ 1579,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64530,
+ 64530
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64531,
+ 64531
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64532,
+ 64532
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64533,
+ 64533
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64534,
+ 64534
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64535,
+ 64535
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64536,
+ 64536
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64537,
+ 64537
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64538,
+ 64538
+ ],
+ "mapped",
+ [
+ 1582,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64539,
+ 64539
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64540,
+ 64540
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64541,
+ 64541
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64542,
+ 64542
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64543,
+ 64543
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64544,
+ 64544
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64545,
+ 64545
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64546,
+ 64546
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64547,
+ 64547
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64548,
+ 64548
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64549,
+ 64549
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64550,
+ 64550
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64551,
+ 64551
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64552,
+ 64552
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64553,
+ 64553
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64554,
+ 64554
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64555,
+ 64555
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64556,
+ 64556
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64557,
+ 64557
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64558,
+ 64558
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64559,
+ 64559
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64560,
+ 64560
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64561,
+ 64561
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64562,
+ 64562
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64563,
+ 64563
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64564,
+ 64564
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64565,
+ 64565
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64566,
+ 64566
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64567,
+ 64567
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64568,
+ 64568
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64569,
+ 64569
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64570,
+ 64570
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64571,
+ 64571
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64572,
+ 64572
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64573,
+ 64573
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64574,
+ 64574
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64575,
+ 64575
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64576,
+ 64576
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64577,
+ 64577
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64578,
+ 64578
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64579,
+ 64579
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64580,
+ 64580
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64581,
+ 64581
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64582,
+ 64582
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64583,
+ 64583
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64584,
+ 64584
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64585,
+ 64585
+ ],
+ "mapped",
+ [
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64586,
+ 64586
+ ],
+ "mapped",
+ [
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64587,
+ 64587
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64588,
+ 64588
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64589,
+ 64589
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64590,
+ 64590
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64591,
+ 64591
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64592,
+ 64592
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64593,
+ 64593
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64594,
+ 64594
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64595,
+ 64595
+ ],
+ "mapped",
+ [
+ 1607,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64596,
+ 64596
+ ],
+ "mapped",
+ [
+ 1607,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64597,
+ 64597
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64598,
+ 64598
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64599,
+ 64599
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64600,
+ 64600
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64601,
+ 64601
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64602,
+ 64602
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64603,
+ 64603
+ ],
+ "mapped",
+ [
+ 1584,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64604,
+ 64604
+ ],
+ "mapped",
+ [
+ 1585,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64605,
+ 64605
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64606,
+ 64606
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64607,
+ 64607
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64608,
+ 64608
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64609,
+ 64609
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64610,
+ 64610
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64611,
+ 64611
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64612,
+ 64612
+ ],
+ "mapped",
+ [
+ 1574,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64613,
+ 64613
+ ],
+ "mapped",
+ [
+ 1574,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64614,
+ 64614
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64615,
+ 64615
+ ],
+ "mapped",
+ [
+ 1574,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64616,
+ 64616
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64617,
+ 64617
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64618,
+ 64618
+ ],
+ "mapped",
+ [
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64619,
+ 64619
+ ],
+ "mapped",
+ [
+ 1576,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64620,
+ 64620
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64621,
+ 64621
+ ],
+ "mapped",
+ [
+ 1576,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64622,
+ 64622
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64623,
+ 64623
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64624,
+ 64624
+ ],
+ "mapped",
+ [
+ 1578,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64625,
+ 64625
+ ],
+ "mapped",
+ [
+ 1578,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64626,
+ 64626
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64627,
+ 64627
+ ],
+ "mapped",
+ [
+ 1578,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64628,
+ 64628
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64629,
+ 64629
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64630,
+ 64630
+ ],
+ "mapped",
+ [
+ 1579,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64631,
+ 64631
+ ],
+ "mapped",
+ [
+ 1579,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64632,
+ 64632
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64633,
+ 64633
+ ],
+ "mapped",
+ [
+ 1579,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64634,
+ 64634
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64635,
+ 64635
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64636,
+ 64636
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64637,
+ 64637
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64638,
+ 64638
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64639,
+ 64639
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64640,
+ 64640
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64641,
+ 64641
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64642,
+ 64642
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64643,
+ 64643
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64644,
+ 64644
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64645,
+ 64645
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64646,
+ 64646
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64647,
+ 64647
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64648,
+ 64648
+ ],
+ "mapped",
+ [
+ 1605,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64649,
+ 64649
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64650,
+ 64650
+ ],
+ "mapped",
+ [
+ 1606,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64651,
+ 64651
+ ],
+ "mapped",
+ [
+ 1606,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64652,
+ 64652
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64653,
+ 64653
+ ],
+ "mapped",
+ [
+ 1606,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64654,
+ 64654
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64655,
+ 64655
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64656,
+ 64656
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64657,
+ 64657
+ ],
+ "mapped",
+ [
+ 1610,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64658,
+ 64658
+ ],
+ "mapped",
+ [
+ 1610,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64659,
+ 64659
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64660,
+ 64660
+ ],
+ "mapped",
+ [
+ 1610,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64661,
+ 64661
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64662,
+ 64662
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64663,
+ 64663
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64664,
+ 64664
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64665,
+ 64665
+ ],
+ "mapped",
+ [
+ 1574,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64666,
+ 64666
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64667,
+ 64667
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64668,
+ 64668
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64669,
+ 64669
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64670,
+ 64670
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64671,
+ 64671
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64672,
+ 64672
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64673,
+ 64673
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64674,
+ 64674
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64675,
+ 64675
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64676,
+ 64676
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64677,
+ 64677
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64678,
+ 64678
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64679,
+ 64679
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64680,
+ 64680
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64681,
+ 64681
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64682,
+ 64682
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64683,
+ 64683
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64684,
+ 64684
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64685,
+ 64685
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64686,
+ 64686
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64687,
+ 64687
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64688,
+ 64688
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64689,
+ 64689
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64690,
+ 64690
+ ],
+ "mapped",
+ [
+ 1589,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64691,
+ 64691
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64692,
+ 64692
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64693,
+ 64693
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64694,
+ 64694
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64695,
+ 64695
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64696,
+ 64696
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64697,
+ 64697
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64698,
+ 64698
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64699,
+ 64699
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64700,
+ 64700
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64701,
+ 64701
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64702,
+ 64702
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64703,
+ 64703
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64704,
+ 64704
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64705,
+ 64705
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64706,
+ 64706
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64707,
+ 64707
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64708,
+ 64708
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64709,
+ 64709
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64710,
+ 64710
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64711,
+ 64711
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64712,
+ 64712
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64713,
+ 64713
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64714,
+ 64714
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64715,
+ 64715
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64716,
+ 64716
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64717,
+ 64717
+ ],
+ "mapped",
+ [
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64718,
+ 64718
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64719,
+ 64719
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64720,
+ 64720
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64721,
+ 64721
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64722,
+ 64722
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64723,
+ 64723
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64724,
+ 64724
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64725,
+ 64725
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64726,
+ 64726
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64727,
+ 64727
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64728,
+ 64728
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64729,
+ 64729
+ ],
+ "mapped",
+ [
+ 1607,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64730,
+ 64730
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64731,
+ 64731
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64732,
+ 64732
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64733,
+ 64733
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64734,
+ 64734
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64735,
+ 64735
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64736,
+ 64736
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64737,
+ 64737
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64738,
+ 64738
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64739,
+ 64739
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64740,
+ 64740
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64741,
+ 64741
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64742,
+ 64742
+ ],
+ "mapped",
+ [
+ 1579,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64743,
+ 64743
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64744,
+ 64744
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64745,
+ 64745
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64746,
+ 64746
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64747,
+ 64747
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64748,
+ 64748
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64749,
+ 64749
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64750,
+ 64750
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64751,
+ 64751
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64752,
+ 64752
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64753,
+ 64753
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64754,
+ 64754
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64755,
+ 64755
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64756,
+ 64756
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64757,
+ 64757
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64758,
+ 64758
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64759,
+ 64759
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64760,
+ 64760
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64761,
+ 64761
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64762,
+ 64762
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64763,
+ 64763
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64764,
+ 64764
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64765,
+ 64765
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64766,
+ 64766
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64767,
+ 64767
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64768,
+ 64768
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64769,
+ 64769
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64770,
+ 64770
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64771,
+ 64771
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64772,
+ 64772
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64773,
+ 64773
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64774,
+ 64774
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64775,
+ 64775
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64776,
+ 64776
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64777,
+ 64777
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64778,
+ 64778
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64779,
+ 64779
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64780,
+ 64780
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64781,
+ 64781
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64782,
+ 64782
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64783,
+ 64783
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64784,
+ 64784
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64785,
+ 64785
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64786,
+ 64786
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64787,
+ 64787
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64788,
+ 64788
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64789,
+ 64789
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64790,
+ 64790
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64791,
+ 64791
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64792,
+ 64792
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64793,
+ 64793
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64794,
+ 64794
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64795,
+ 64795
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64796,
+ 64796
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64797,
+ 64797
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64798,
+ 64798
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64799,
+ 64799
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64800,
+ 64800
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64801,
+ 64801
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64802,
+ 64802
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64803,
+ 64803
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64804,
+ 64804
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64805,
+ 64805
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64806,
+ 64806
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64807,
+ 64807
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64808,
+ 64808
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64809,
+ 64809
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64810,
+ 64810
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64811,
+ 64811
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64812,
+ 64812
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64813,
+ 64813
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64814,
+ 64814
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64815,
+ 64815
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64816,
+ 64816
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64817,
+ 64817
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64818,
+ 64818
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64819,
+ 64819
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64820,
+ 64820
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64821,
+ 64821
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64822,
+ 64822
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64823,
+ 64823
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64824,
+ 64824
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64825,
+ 64825
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64826,
+ 64826
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64827,
+ 64827
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64828,
+ 64829
+ ],
+ "mapped",
+ [
+ 1575,
+ 1611
+ ]
+ ],
+ [
+ [
+ 64830,
+ 64831
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64832,
+ 64847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64848,
+ 64848
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64849,
+ 64850
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64851,
+ 64851
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64852,
+ 64852
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64853,
+ 64853
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64854,
+ 64854
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64855,
+ 64855
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64856,
+ 64857
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64858,
+ 64858
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64859,
+ 64859
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64860,
+ 64860
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64861,
+ 64861
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64862,
+ 64862
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64863,
+ 64864
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64865,
+ 64865
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64866,
+ 64867
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64868,
+ 64869
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64870,
+ 64870
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64871,
+ 64872
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64873,
+ 64873
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64874,
+ 64875
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64876,
+ 64877
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64878,
+ 64878
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64879,
+ 64880
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64881,
+ 64882
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64883,
+ 64883
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64884,
+ 64884
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64885,
+ 64885
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64886,
+ 64887
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64888,
+ 64888
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64889,
+ 64889
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64890,
+ 64890
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64891,
+ 64891
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64892,
+ 64893
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64894,
+ 64894
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64895,
+ 64895
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64896,
+ 64896
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64897,
+ 64897
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64898,
+ 64898
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64899,
+ 64900
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64901,
+ 64902
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64903,
+ 64904
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64905,
+ 64905
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64906,
+ 64906
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64907,
+ 64907
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64908,
+ 64908
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64909,
+ 64909
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64910,
+ 64910
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64911,
+ 64911
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64912,
+ 64913
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64914,
+ 64914
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64915,
+ 64915
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64916,
+ 64916
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64917,
+ 64917
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64918,
+ 64918
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64919,
+ 64920
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64921,
+ 64921
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64922,
+ 64922
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64923,
+ 64923
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64924,
+ 64925
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64926,
+ 64926
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64927,
+ 64927
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64928,
+ 64928
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64929,
+ 64929
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64930,
+ 64930
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64931,
+ 64931
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64932,
+ 64932
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64933,
+ 64933
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64934,
+ 64934
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64935,
+ 64935
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64936,
+ 64936
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64937,
+ 64937
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64938,
+ 64938
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64939,
+ 64939
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64940,
+ 64940
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64941,
+ 64941
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64942,
+ 64942
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64943,
+ 64943
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64944,
+ 64944
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64945,
+ 64945
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64946,
+ 64946
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64947,
+ 64947
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64948,
+ 64948
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64949,
+ 64949
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64950,
+ 64950
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64951,
+ 64951
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64952,
+ 64952
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64953,
+ 64953
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64954,
+ 64954
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64955,
+ 64955
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64956,
+ 64956
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64957,
+ 64957
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64958,
+ 64958
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64959,
+ 64959
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64960,
+ 64960
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64961,
+ 64961
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64962,
+ 64962
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64963,
+ 64963
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64964,
+ 64964
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64965,
+ 64965
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64966,
+ 64966
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64967,
+ 64967
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64968,
+ 64975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64976,
+ 65007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65008,
+ 65008
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65009,
+ 65009
+ ],
+ "mapped",
+ [
+ 1602,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65010,
+ 65010
+ ],
+ "mapped",
+ [
+ 1575,
+ 1604,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65011,
+ 65011
+ ],
+ "mapped",
+ [
+ 1575,
+ 1603,
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 65012,
+ 65012
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605,
+ 1583
+ ]
+ ],
+ [
+ [
+ 65013,
+ 65013
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65014,
+ 65014
+ ],
+ "mapped",
+ [
+ 1585,
+ 1587,
+ 1608,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65015,
+ 65015
+ ],
+ "mapped",
+ [
+ 1593,
+ 1604,
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65016,
+ 65016
+ ],
+ "mapped",
+ [
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65017,
+ 65017
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 65018,
+ 65018
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1589,
+ 1604,
+ 1609,
+ 32,
+ 1575,
+ 1604,
+ 1604,
+ 1607,
+ 32,
+ 1593,
+ 1604,
+ 1610,
+ 1607,
+ 32,
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65019,
+ 65019
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1580,
+ 1604,
+ 32,
+ 1580,
+ 1604,
+ 1575,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65020,
+ 65020
+ ],
+ "mapped",
+ [
+ 1585,
+ 1740,
+ 1575,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65021,
+ 65021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65022,
+ 65023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65024,
+ 65039
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65040,
+ 65040
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65041,
+ 65041
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65042,
+ 65042
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65043,
+ 65043
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65044,
+ 65044
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65045,
+ 65045
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65046,
+ 65046
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65047,
+ 65047
+ ],
+ "mapped",
+ [
+ 12310
+ ]
+ ],
+ [
+ [
+ 65048,
+ 65048
+ ],
+ "mapped",
+ [
+ 12311
+ ]
+ ],
+ [
+ [
+ 65049,
+ 65049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65050,
+ 65055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65056,
+ 65059
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65060,
+ 65062
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65063,
+ 65069
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65070,
+ 65071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65072,
+ 65072
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65073,
+ 65073
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65074,
+ 65074
+ ],
+ "mapped",
+ [
+ 8211
+ ]
+ ],
+ [
+ [
+ 65075,
+ 65076
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65077,
+ 65077
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65078,
+ 65078
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65079,
+ 65079
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65080,
+ 65080
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65081,
+ 65081
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65082,
+ 65082
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65083,
+ 65083
+ ],
+ "mapped",
+ [
+ 12304
+ ]
+ ],
+ [
+ [
+ 65084,
+ 65084
+ ],
+ "mapped",
+ [
+ 12305
+ ]
+ ],
+ [
+ [
+ 65085,
+ 65085
+ ],
+ "mapped",
+ [
+ 12298
+ ]
+ ],
+ [
+ [
+ 65086,
+ 65086
+ ],
+ "mapped",
+ [
+ 12299
+ ]
+ ],
+ [
+ [
+ 65087,
+ 65087
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 65088,
+ 65088
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 65089,
+ 65089
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65090,
+ 65090
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65091,
+ 65091
+ ],
+ "mapped",
+ [
+ 12302
+ ]
+ ],
+ [
+ [
+ 65092,
+ 65092
+ ],
+ "mapped",
+ [
+ 12303
+ ]
+ ],
+ [
+ [
+ 65093,
+ 65094
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65095,
+ 65095
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65096,
+ 65096
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65097,
+ 65100
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 65101,
+ 65103
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65104,
+ 65104
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65105,
+ 65105
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65106,
+ 65106
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65107,
+ 65107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65108,
+ 65108
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65109,
+ 65109
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65110,
+ 65110
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65111,
+ 65111
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65112,
+ 65112
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65113,
+ 65113
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65114,
+ 65114
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65115,
+ 65115
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65116,
+ 65116
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65117,
+ 65117
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65118,
+ 65118
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65119,
+ 65119
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65120,
+ 65120
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65121,
+ 65121
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65122,
+ 65122
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65123,
+ 65123
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65124,
+ 65124
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65125,
+ 65125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65126,
+ 65126
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65127,
+ 65127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65128,
+ 65128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65129,
+ 65129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65130,
+ 65130
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65131,
+ 65131
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65132,
+ 65135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65136,
+ 65136
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65137,
+ 65137
+ ],
+ "mapped",
+ [
+ 1600,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65138,
+ 65138
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612
+ ]
+ ],
+ [
+ [
+ 65139,
+ 65139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65140,
+ 65140
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613
+ ]
+ ],
+ [
+ [
+ 65141,
+ 65141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65142,
+ 65142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65143,
+ 65143
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65144,
+ 65144
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65145,
+ 65145
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65146,
+ 65146
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65147,
+ 65147
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65148,
+ 65148
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65149,
+ 65149
+ ],
+ "mapped",
+ [
+ 1600,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65150,
+ 65150
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65151,
+ 65151
+ ],
+ "mapped",
+ [
+ 1600,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65152,
+ 65152
+ ],
+ "mapped",
+ [
+ 1569
+ ]
+ ],
+ [
+ [
+ 65153,
+ 65154
+ ],
+ "mapped",
+ [
+ 1570
+ ]
+ ],
+ [
+ [
+ 65155,
+ 65156
+ ],
+ "mapped",
+ [
+ 1571
+ ]
+ ],
+ [
+ [
+ 65157,
+ 65158
+ ],
+ "mapped",
+ [
+ 1572
+ ]
+ ],
+ [
+ [
+ 65159,
+ 65160
+ ],
+ "mapped",
+ [
+ 1573
+ ]
+ ],
+ [
+ [
+ 65161,
+ 65164
+ ],
+ "mapped",
+ [
+ 1574
+ ]
+ ],
+ [
+ [
+ 65165,
+ 65166
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 65167,
+ 65170
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 65171,
+ 65172
+ ],
+ "mapped",
+ [
+ 1577
+ ]
+ ],
+ [
+ [
+ 65173,
+ 65176
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 65177,
+ 65180
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 65181,
+ 65184
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 65185,
+ 65188
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 65189,
+ 65192
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 65193,
+ 65194
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 65195,
+ 65196
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 65197,
+ 65198
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 65199,
+ 65200
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 65201,
+ 65204
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 65205,
+ 65208
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 65209,
+ 65212
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 65213,
+ 65216
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 65217,
+ 65220
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 65221,
+ 65224
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 65225,
+ 65228
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 65229,
+ 65232
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 65233,
+ 65236
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 65237,
+ 65240
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 65241,
+ 65244
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 65245,
+ 65248
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 65249,
+ 65252
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 65253,
+ 65256
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 65257,
+ 65260
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 65261,
+ 65262
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 65263,
+ 65264
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 65265,
+ 65268
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 65269,
+ 65270
+ ],
+ "mapped",
+ [
+ 1604,
+ 1570
+ ]
+ ],
+ [
+ [
+ 65271,
+ 65272
+ ],
+ "mapped",
+ [
+ 1604,
+ 1571
+ ]
+ ],
+ [
+ [
+ 65273,
+ 65274
+ ],
+ "mapped",
+ [
+ 1604,
+ 1573
+ ]
+ ],
+ [
+ [
+ 65275,
+ 65276
+ ],
+ "mapped",
+ [
+ 1604,
+ 1575
+ ]
+ ],
+ [
+ [
+ 65277,
+ 65278
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65279,
+ 65279
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65280,
+ 65280
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65281,
+ 65281
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65282,
+ 65282
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 34
+ ]
+ ],
+ [
+ [
+ 65283,
+ 65283
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65284,
+ 65284
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65285,
+ 65285
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65286,
+ 65286
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65287,
+ 65287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 39
+ ]
+ ],
+ [
+ [
+ 65288,
+ 65288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65289,
+ 65289
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65290,
+ 65290
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65291,
+ 65291
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65292,
+ 65292
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65293,
+ 65293
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65294,
+ 65294
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65295,
+ 65295
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 47
+ ]
+ ],
+ [
+ [
+ 65296,
+ 65296
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 65297,
+ 65297
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 65298,
+ 65298
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 65299,
+ 65299
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 65300,
+ 65300
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 65301,
+ 65301
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 65302,
+ 65302
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 65303,
+ 65303
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 65304,
+ 65304
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 65305,
+ 65305
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 65306,
+ 65306
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65307,
+ 65307
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65308,
+ 65308
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65309,
+ 65309
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65310,
+ 65310
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65311,
+ 65311
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65312,
+ 65312
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65313,
+ 65313
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65314,
+ 65314
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65315,
+ 65315
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65316,
+ 65316
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65317,
+ 65317
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65318,
+ 65318
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65319,
+ 65319
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65320,
+ 65320
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65321,
+ 65321
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65322,
+ 65322
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65323,
+ 65323
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65324,
+ 65324
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65325,
+ 65325
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65326,
+ 65326
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65327,
+ 65327
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65328,
+ 65328
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65329,
+ 65329
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65330,
+ 65330
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65331,
+ 65331
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65332,
+ 65332
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65333,
+ 65333
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65334,
+ 65334
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65335,
+ 65335
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65336,
+ 65336
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65337,
+ 65337
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65338,
+ 65338
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65339,
+ 65339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65340,
+ 65340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65341,
+ 65341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65342,
+ 65342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 94
+ ]
+ ],
+ [
+ [
+ 65343,
+ 65343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65344,
+ 65344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 65345,
+ 65345
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65346,
+ 65346
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65347,
+ 65347
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65348,
+ 65348
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65349,
+ 65349
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65350,
+ 65350
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65351,
+ 65351
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65352,
+ 65352
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65353,
+ 65353
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65354,
+ 65354
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65355,
+ 65355
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65356,
+ 65356
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65357,
+ 65357
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65358,
+ 65358
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65359,
+ 65359
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65360,
+ 65360
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65361,
+ 65361
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65362,
+ 65362
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65363,
+ 65363
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65364,
+ 65364
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65365,
+ 65365
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65366,
+ 65366
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65367,
+ 65367
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65368,
+ 65368
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65369,
+ 65369
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65370,
+ 65370
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65371,
+ 65371
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65372,
+ 65372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 124
+ ]
+ ],
+ [
+ [
+ 65373,
+ 65373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65374,
+ 65374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 126
+ ]
+ ],
+ [
+ [
+ 65375,
+ 65375
+ ],
+ "mapped",
+ [
+ 10629
+ ]
+ ],
+ [
+ [
+ 65376,
+ 65376
+ ],
+ "mapped",
+ [
+ 10630
+ ]
+ ],
+ [
+ [
+ 65377,
+ 65377
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65378,
+ 65378
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65379,
+ 65379
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65380,
+ 65380
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65381,
+ 65381
+ ],
+ "mapped",
+ [
+ 12539
+ ]
+ ],
+ [
+ [
+ 65382,
+ 65382
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 65383,
+ 65383
+ ],
+ "mapped",
+ [
+ 12449
+ ]
+ ],
+ [
+ [
+ 65384,
+ 65384
+ ],
+ "mapped",
+ [
+ 12451
+ ]
+ ],
+ [
+ [
+ 65385,
+ 65385
+ ],
+ "mapped",
+ [
+ 12453
+ ]
+ ],
+ [
+ [
+ 65386,
+ 65386
+ ],
+ "mapped",
+ [
+ 12455
+ ]
+ ],
+ [
+ [
+ 65387,
+ 65387
+ ],
+ "mapped",
+ [
+ 12457
+ ]
+ ],
+ [
+ [
+ 65388,
+ 65388
+ ],
+ "mapped",
+ [
+ 12515
+ ]
+ ],
+ [
+ [
+ 65389,
+ 65389
+ ],
+ "mapped",
+ [
+ 12517
+ ]
+ ],
+ [
+ [
+ 65390,
+ 65390
+ ],
+ "mapped",
+ [
+ 12519
+ ]
+ ],
+ [
+ [
+ 65391,
+ 65391
+ ],
+ "mapped",
+ [
+ 12483
+ ]
+ ],
+ [
+ [
+ 65392,
+ 65392
+ ],
+ "mapped",
+ [
+ 12540
+ ]
+ ],
+ [
+ [
+ 65393,
+ 65393
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 65394,
+ 65394
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 65395,
+ 65395
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 65396,
+ 65396
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 65397,
+ 65397
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 65398,
+ 65398
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 65399,
+ 65399
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 65400,
+ 65400
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 65401,
+ 65401
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 65402,
+ 65402
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 65403,
+ 65403
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 65404,
+ 65404
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 65405,
+ 65405
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 65406,
+ 65406
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 65407,
+ 65407
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 65408,
+ 65408
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 65409,
+ 65409
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 65410,
+ 65410
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 65411,
+ 65411
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 65412,
+ 65412
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 65413,
+ 65413
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 65414,
+ 65414
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 65415,
+ 65415
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 65416,
+ 65416
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 65417,
+ 65417
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 65418,
+ 65418
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 65419,
+ 65419
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 65420,
+ 65420
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 65421,
+ 65421
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 65422,
+ 65422
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 65423,
+ 65423
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 65424,
+ 65424
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 65425,
+ 65425
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 65426,
+ 65426
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 65427,
+ 65427
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 65428,
+ 65428
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 65429,
+ 65429
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 65430,
+ 65430
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 65431,
+ 65431
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 65432,
+ 65432
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 65433,
+ 65433
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 65434,
+ 65434
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 65435,
+ 65435
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 65436,
+ 65436
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 65437,
+ 65437
+ ],
+ "mapped",
+ [
+ 12531
+ ]
+ ],
+ [
+ [
+ 65438,
+ 65438
+ ],
+ "mapped",
+ [
+ 12441
+ ]
+ ],
+ [
+ [
+ 65439,
+ 65439
+ ],
+ "mapped",
+ [
+ 12442
+ ]
+ ],
+ [
+ [
+ 65440,
+ 65440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65441,
+ 65441
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 65442,
+ 65442
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 65443,
+ 65443
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 65444,
+ 65444
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 65445,
+ 65445
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 65446,
+ 65446
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 65447,
+ 65447
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 65448,
+ 65448
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 65449,
+ 65449
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 65450,
+ 65450
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 65451,
+ 65451
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 65452,
+ 65452
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 65453,
+ 65453
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 65454,
+ 65454
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 65455,
+ 65455
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 65456,
+ 65456
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 65457,
+ 65457
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 65458,
+ 65458
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 65459,
+ 65459
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 65460,
+ 65460
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 65461,
+ 65461
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 65462,
+ 65462
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 65463,
+ 65463
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 65464,
+ 65464
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 65465,
+ 65465
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 65466,
+ 65466
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 65467,
+ 65467
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 65468,
+ 65468
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 65469,
+ 65469
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 65470,
+ 65470
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 65471,
+ 65473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65474,
+ 65474
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 65475,
+ 65475
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 65476,
+ 65476
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 65477,
+ 65477
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 65478,
+ 65478
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 65479,
+ 65479
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 65480,
+ 65481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65482,
+ 65482
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 65483,
+ 65483
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 65484,
+ 65484
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 65485,
+ 65485
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 65486,
+ 65486
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 65487,
+ 65487
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 65488,
+ 65489
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65490,
+ 65490
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 65491,
+ 65491
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 65492,
+ 65492
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 65493,
+ 65493
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 65494,
+ 65494
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 65495,
+ 65495
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 65496,
+ 65497
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65498,
+ 65498
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 65499,
+ 65499
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 65500,
+ 65500
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 65501,
+ 65503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65504,
+ 65504
+ ],
+ "mapped",
+ [
+ 162
+ ]
+ ],
+ [
+ [
+ 65505,
+ 65505
+ ],
+ "mapped",
+ [
+ 163
+ ]
+ ],
+ [
+ [
+ 65506,
+ 65506
+ ],
+ "mapped",
+ [
+ 172
+ ]
+ ],
+ [
+ [
+ 65507,
+ 65507
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 65508,
+ 65508
+ ],
+ "mapped",
+ [
+ 166
+ ]
+ ],
+ [
+ [
+ 65509,
+ 65509
+ ],
+ "mapped",
+ [
+ 165
+ ]
+ ],
+ [
+ [
+ 65510,
+ 65510
+ ],
+ "mapped",
+ [
+ 8361
+ ]
+ ],
+ [
+ [
+ 65511,
+ 65511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65512,
+ 65512
+ ],
+ "mapped",
+ [
+ 9474
+ ]
+ ],
+ [
+ [
+ 65513,
+ 65513
+ ],
+ "mapped",
+ [
+ 8592
+ ]
+ ],
+ [
+ [
+ 65514,
+ 65514
+ ],
+ "mapped",
+ [
+ 8593
+ ]
+ ],
+ [
+ [
+ 65515,
+ 65515
+ ],
+ "mapped",
+ [
+ 8594
+ ]
+ ],
+ [
+ [
+ 65516,
+ 65516
+ ],
+ "mapped",
+ [
+ 8595
+ ]
+ ],
+ [
+ [
+ 65517,
+ 65517
+ ],
+ "mapped",
+ [
+ 9632
+ ]
+ ],
+ [
+ [
+ 65518,
+ 65518
+ ],
+ "mapped",
+ [
+ 9675
+ ]
+ ],
+ [
+ [
+ 65519,
+ 65528
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65529,
+ 65531
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65532,
+ 65532
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65533,
+ 65533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65534,
+ 65535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65536,
+ 65547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65548,
+ 65548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65549,
+ 65574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65575,
+ 65575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65576,
+ 65594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65595,
+ 65595
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65596,
+ 65597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65598,
+ 65598
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65599,
+ 65613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65614,
+ 65615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65616,
+ 65629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65630,
+ 65663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65664,
+ 65786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65787,
+ 65791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65792,
+ 65794
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65795,
+ 65798
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65799,
+ 65843
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65844,
+ 65846
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65847,
+ 65855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65856,
+ 65930
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65931,
+ 65932
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65933,
+ 65935
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65936,
+ 65947
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65948,
+ 65951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65952,
+ 65952
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65953,
+ 65999
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66000,
+ 66044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66045,
+ 66045
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66046,
+ 66175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66176,
+ 66204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66205,
+ 66207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66208,
+ 66256
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66257,
+ 66271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66272,
+ 66272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66273,
+ 66299
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66300,
+ 66303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66304,
+ 66334
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66335,
+ 66335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66336,
+ 66339
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66340,
+ 66351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66352,
+ 66368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66369,
+ 66369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66370,
+ 66377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66378,
+ 66378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66379,
+ 66383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66384,
+ 66426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66427,
+ 66431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66432,
+ 66461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66462,
+ 66462
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66463,
+ 66463
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66464,
+ 66499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66500,
+ 66503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66504,
+ 66511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66512,
+ 66517
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66518,
+ 66559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66560,
+ 66560
+ ],
+ "mapped",
+ [
+ 66600
+ ]
+ ],
+ [
+ [
+ 66561,
+ 66561
+ ],
+ "mapped",
+ [
+ 66601
+ ]
+ ],
+ [
+ [
+ 66562,
+ 66562
+ ],
+ "mapped",
+ [
+ 66602
+ ]
+ ],
+ [
+ [
+ 66563,
+ 66563
+ ],
+ "mapped",
+ [
+ 66603
+ ]
+ ],
+ [
+ [
+ 66564,
+ 66564
+ ],
+ "mapped",
+ [
+ 66604
+ ]
+ ],
+ [
+ [
+ 66565,
+ 66565
+ ],
+ "mapped",
+ [
+ 66605
+ ]
+ ],
+ [
+ [
+ 66566,
+ 66566
+ ],
+ "mapped",
+ [
+ 66606
+ ]
+ ],
+ [
+ [
+ 66567,
+ 66567
+ ],
+ "mapped",
+ [
+ 66607
+ ]
+ ],
+ [
+ [
+ 66568,
+ 66568
+ ],
+ "mapped",
+ [
+ 66608
+ ]
+ ],
+ [
+ [
+ 66569,
+ 66569
+ ],
+ "mapped",
+ [
+ 66609
+ ]
+ ],
+ [
+ [
+ 66570,
+ 66570
+ ],
+ "mapped",
+ [
+ 66610
+ ]
+ ],
+ [
+ [
+ 66571,
+ 66571
+ ],
+ "mapped",
+ [
+ 66611
+ ]
+ ],
+ [
+ [
+ 66572,
+ 66572
+ ],
+ "mapped",
+ [
+ 66612
+ ]
+ ],
+ [
+ [
+ 66573,
+ 66573
+ ],
+ "mapped",
+ [
+ 66613
+ ]
+ ],
+ [
+ [
+ 66574,
+ 66574
+ ],
+ "mapped",
+ [
+ 66614
+ ]
+ ],
+ [
+ [
+ 66575,
+ 66575
+ ],
+ "mapped",
+ [
+ 66615
+ ]
+ ],
+ [
+ [
+ 66576,
+ 66576
+ ],
+ "mapped",
+ [
+ 66616
+ ]
+ ],
+ [
+ [
+ 66577,
+ 66577
+ ],
+ "mapped",
+ [
+ 66617
+ ]
+ ],
+ [
+ [
+ 66578,
+ 66578
+ ],
+ "mapped",
+ [
+ 66618
+ ]
+ ],
+ [
+ [
+ 66579,
+ 66579
+ ],
+ "mapped",
+ [
+ 66619
+ ]
+ ],
+ [
+ [
+ 66580,
+ 66580
+ ],
+ "mapped",
+ [
+ 66620
+ ]
+ ],
+ [
+ [
+ 66581,
+ 66581
+ ],
+ "mapped",
+ [
+ 66621
+ ]
+ ],
+ [
+ [
+ 66582,
+ 66582
+ ],
+ "mapped",
+ [
+ 66622
+ ]
+ ],
+ [
+ [
+ 66583,
+ 66583
+ ],
+ "mapped",
+ [
+ 66623
+ ]
+ ],
+ [
+ [
+ 66584,
+ 66584
+ ],
+ "mapped",
+ [
+ 66624
+ ]
+ ],
+ [
+ [
+ 66585,
+ 66585
+ ],
+ "mapped",
+ [
+ 66625
+ ]
+ ],
+ [
+ [
+ 66586,
+ 66586
+ ],
+ "mapped",
+ [
+ 66626
+ ]
+ ],
+ [
+ [
+ 66587,
+ 66587
+ ],
+ "mapped",
+ [
+ 66627
+ ]
+ ],
+ [
+ [
+ 66588,
+ 66588
+ ],
+ "mapped",
+ [
+ 66628
+ ]
+ ],
+ [
+ [
+ 66589,
+ 66589
+ ],
+ "mapped",
+ [
+ 66629
+ ]
+ ],
+ [
+ [
+ 66590,
+ 66590
+ ],
+ "mapped",
+ [
+ 66630
+ ]
+ ],
+ [
+ [
+ 66591,
+ 66591
+ ],
+ "mapped",
+ [
+ 66631
+ ]
+ ],
+ [
+ [
+ 66592,
+ 66592
+ ],
+ "mapped",
+ [
+ 66632
+ ]
+ ],
+ [
+ [
+ 66593,
+ 66593
+ ],
+ "mapped",
+ [
+ 66633
+ ]
+ ],
+ [
+ [
+ 66594,
+ 66594
+ ],
+ "mapped",
+ [
+ 66634
+ ]
+ ],
+ [
+ [
+ 66595,
+ 66595
+ ],
+ "mapped",
+ [
+ 66635
+ ]
+ ],
+ [
+ [
+ 66596,
+ 66596
+ ],
+ "mapped",
+ [
+ 66636
+ ]
+ ],
+ [
+ [
+ 66597,
+ 66597
+ ],
+ "mapped",
+ [
+ 66637
+ ]
+ ],
+ [
+ [
+ 66598,
+ 66598
+ ],
+ "mapped",
+ [
+ 66638
+ ]
+ ],
+ [
+ [
+ 66599,
+ 66599
+ ],
+ "mapped",
+ [
+ 66639
+ ]
+ ],
+ [
+ [
+ 66600,
+ 66637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66638,
+ 66717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66718,
+ 66719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66720,
+ 66729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66730,
+ 66815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66816,
+ 66855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66856,
+ 66863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66864,
+ 66915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66916,
+ 66926
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66927,
+ 66927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66928,
+ 67071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67072,
+ 67382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67383,
+ 67391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67392,
+ 67413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67414,
+ 67423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67424,
+ 67431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67432,
+ 67583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67584,
+ 67589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67590,
+ 67591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67592,
+ 67592
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67593,
+ 67593
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67594,
+ 67637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67638,
+ 67638
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67639,
+ 67640
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67641,
+ 67643
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67644,
+ 67644
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67645,
+ 67646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67647,
+ 67647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67648,
+ 67669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67670,
+ 67670
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67671,
+ 67679
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67680,
+ 67702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67703,
+ 67711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67712,
+ 67742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67743,
+ 67750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67751,
+ 67759
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67760,
+ 67807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67808,
+ 67826
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67827,
+ 67827
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67828,
+ 67829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67830,
+ 67834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67835,
+ 67839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67840,
+ 67861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67862,
+ 67865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67866,
+ 67867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67868,
+ 67870
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67871,
+ 67871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67872,
+ 67897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67898,
+ 67902
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67903,
+ 67903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67904,
+ 67967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67968,
+ 68023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68024,
+ 68027
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68028,
+ 68029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68030,
+ 68031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68032,
+ 68047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68048,
+ 68049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68050,
+ 68095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68096,
+ 68099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68100,
+ 68100
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68101,
+ 68102
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68103,
+ 68107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68108,
+ 68115
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68116,
+ 68116
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68117,
+ 68119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68120,
+ 68120
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68121,
+ 68147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68148,
+ 68151
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68152,
+ 68154
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68155,
+ 68158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68159,
+ 68159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68160,
+ 68167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68168,
+ 68175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68176,
+ 68184
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68185,
+ 68191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68192,
+ 68220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68221,
+ 68223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68224,
+ 68252
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68253,
+ 68255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68256,
+ 68287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68288,
+ 68295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68296,
+ 68296
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68297,
+ 68326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68327,
+ 68330
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68331,
+ 68342
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68343,
+ 68351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68352,
+ 68405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68406,
+ 68408
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68409,
+ 68415
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68416,
+ 68437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68438,
+ 68439
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68440,
+ 68447
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68448,
+ 68466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68467,
+ 68471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68472,
+ 68479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68480,
+ 68497
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68498,
+ 68504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68505,
+ 68508
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68509,
+ 68520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68521,
+ 68527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68528,
+ 68607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68608,
+ 68680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68681,
+ 68735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68736,
+ 68736
+ ],
+ "mapped",
+ [
+ 68800
+ ]
+ ],
+ [
+ [
+ 68737,
+ 68737
+ ],
+ "mapped",
+ [
+ 68801
+ ]
+ ],
+ [
+ [
+ 68738,
+ 68738
+ ],
+ "mapped",
+ [
+ 68802
+ ]
+ ],
+ [
+ [
+ 68739,
+ 68739
+ ],
+ "mapped",
+ [
+ 68803
+ ]
+ ],
+ [
+ [
+ 68740,
+ 68740
+ ],
+ "mapped",
+ [
+ 68804
+ ]
+ ],
+ [
+ [
+ 68741,
+ 68741
+ ],
+ "mapped",
+ [
+ 68805
+ ]
+ ],
+ [
+ [
+ 68742,
+ 68742
+ ],
+ "mapped",
+ [
+ 68806
+ ]
+ ],
+ [
+ [
+ 68743,
+ 68743
+ ],
+ "mapped",
+ [
+ 68807
+ ]
+ ],
+ [
+ [
+ 68744,
+ 68744
+ ],
+ "mapped",
+ [
+ 68808
+ ]
+ ],
+ [
+ [
+ 68745,
+ 68745
+ ],
+ "mapped",
+ [
+ 68809
+ ]
+ ],
+ [
+ [
+ 68746,
+ 68746
+ ],
+ "mapped",
+ [
+ 68810
+ ]
+ ],
+ [
+ [
+ 68747,
+ 68747
+ ],
+ "mapped",
+ [
+ 68811
+ ]
+ ],
+ [
+ [
+ 68748,
+ 68748
+ ],
+ "mapped",
+ [
+ 68812
+ ]
+ ],
+ [
+ [
+ 68749,
+ 68749
+ ],
+ "mapped",
+ [
+ 68813
+ ]
+ ],
+ [
+ [
+ 68750,
+ 68750
+ ],
+ "mapped",
+ [
+ 68814
+ ]
+ ],
+ [
+ [
+ 68751,
+ 68751
+ ],
+ "mapped",
+ [
+ 68815
+ ]
+ ],
+ [
+ [
+ 68752,
+ 68752
+ ],
+ "mapped",
+ [
+ 68816
+ ]
+ ],
+ [
+ [
+ 68753,
+ 68753
+ ],
+ "mapped",
+ [
+ 68817
+ ]
+ ],
+ [
+ [
+ 68754,
+ 68754
+ ],
+ "mapped",
+ [
+ 68818
+ ]
+ ],
+ [
+ [
+ 68755,
+ 68755
+ ],
+ "mapped",
+ [
+ 68819
+ ]
+ ],
+ [
+ [
+ 68756,
+ 68756
+ ],
+ "mapped",
+ [
+ 68820
+ ]
+ ],
+ [
+ [
+ 68757,
+ 68757
+ ],
+ "mapped",
+ [
+ 68821
+ ]
+ ],
+ [
+ [
+ 68758,
+ 68758
+ ],
+ "mapped",
+ [
+ 68822
+ ]
+ ],
+ [
+ [
+ 68759,
+ 68759
+ ],
+ "mapped",
+ [
+ 68823
+ ]
+ ],
+ [
+ [
+ 68760,
+ 68760
+ ],
+ "mapped",
+ [
+ 68824
+ ]
+ ],
+ [
+ [
+ 68761,
+ 68761
+ ],
+ "mapped",
+ [
+ 68825
+ ]
+ ],
+ [
+ [
+ 68762,
+ 68762
+ ],
+ "mapped",
+ [
+ 68826
+ ]
+ ],
+ [
+ [
+ 68763,
+ 68763
+ ],
+ "mapped",
+ [
+ 68827
+ ]
+ ],
+ [
+ [
+ 68764,
+ 68764
+ ],
+ "mapped",
+ [
+ 68828
+ ]
+ ],
+ [
+ [
+ 68765,
+ 68765
+ ],
+ "mapped",
+ [
+ 68829
+ ]
+ ],
+ [
+ [
+ 68766,
+ 68766
+ ],
+ "mapped",
+ [
+ 68830
+ ]
+ ],
+ [
+ [
+ 68767,
+ 68767
+ ],
+ "mapped",
+ [
+ 68831
+ ]
+ ],
+ [
+ [
+ 68768,
+ 68768
+ ],
+ "mapped",
+ [
+ 68832
+ ]
+ ],
+ [
+ [
+ 68769,
+ 68769
+ ],
+ "mapped",
+ [
+ 68833
+ ]
+ ],
+ [
+ [
+ 68770,
+ 68770
+ ],
+ "mapped",
+ [
+ 68834
+ ]
+ ],
+ [
+ [
+ 68771,
+ 68771
+ ],
+ "mapped",
+ [
+ 68835
+ ]
+ ],
+ [
+ [
+ 68772,
+ 68772
+ ],
+ "mapped",
+ [
+ 68836
+ ]
+ ],
+ [
+ [
+ 68773,
+ 68773
+ ],
+ "mapped",
+ [
+ 68837
+ ]
+ ],
+ [
+ [
+ 68774,
+ 68774
+ ],
+ "mapped",
+ [
+ 68838
+ ]
+ ],
+ [
+ [
+ 68775,
+ 68775
+ ],
+ "mapped",
+ [
+ 68839
+ ]
+ ],
+ [
+ [
+ 68776,
+ 68776
+ ],
+ "mapped",
+ [
+ 68840
+ ]
+ ],
+ [
+ [
+ 68777,
+ 68777
+ ],
+ "mapped",
+ [
+ 68841
+ ]
+ ],
+ [
+ [
+ 68778,
+ 68778
+ ],
+ "mapped",
+ [
+ 68842
+ ]
+ ],
+ [
+ [
+ 68779,
+ 68779
+ ],
+ "mapped",
+ [
+ 68843
+ ]
+ ],
+ [
+ [
+ 68780,
+ 68780
+ ],
+ "mapped",
+ [
+ 68844
+ ]
+ ],
+ [
+ [
+ 68781,
+ 68781
+ ],
+ "mapped",
+ [
+ 68845
+ ]
+ ],
+ [
+ [
+ 68782,
+ 68782
+ ],
+ "mapped",
+ [
+ 68846
+ ]
+ ],
+ [
+ [
+ 68783,
+ 68783
+ ],
+ "mapped",
+ [
+ 68847
+ ]
+ ],
+ [
+ [
+ 68784,
+ 68784
+ ],
+ "mapped",
+ [
+ 68848
+ ]
+ ],
+ [
+ [
+ 68785,
+ 68785
+ ],
+ "mapped",
+ [
+ 68849
+ ]
+ ],
+ [
+ [
+ 68786,
+ 68786
+ ],
+ "mapped",
+ [
+ 68850
+ ]
+ ],
+ [
+ [
+ 68787,
+ 68799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68800,
+ 68850
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68851,
+ 68857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68858,
+ 68863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68864,
+ 69215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69216,
+ 69246
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69247,
+ 69631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69632,
+ 69702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69703,
+ 69709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69710,
+ 69713
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69714,
+ 69733
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69734,
+ 69743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69744,
+ 69758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69759,
+ 69759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69760,
+ 69818
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69819,
+ 69820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69821,
+ 69821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69822,
+ 69825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69826,
+ 69839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69840,
+ 69864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69865,
+ 69871
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69872,
+ 69881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69882,
+ 69887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69888,
+ 69940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69941,
+ 69941
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69942,
+ 69951
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69952,
+ 69955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69956,
+ 69967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69968,
+ 70003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70004,
+ 70005
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70006,
+ 70006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70007,
+ 70015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70016,
+ 70084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70085,
+ 70088
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70089,
+ 70089
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70090,
+ 70092
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70093,
+ 70093
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70094,
+ 70095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70096,
+ 70105
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70106,
+ 70106
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70107,
+ 70107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70108,
+ 70108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70109,
+ 70111
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70112,
+ 70112
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70113,
+ 70132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70133,
+ 70143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70144,
+ 70161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70162,
+ 70162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70163,
+ 70199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70200,
+ 70205
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70206,
+ 70271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70272,
+ 70278
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70279,
+ 70279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70280,
+ 70280
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70281,
+ 70281
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70282,
+ 70285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70286,
+ 70286
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70287,
+ 70301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70302,
+ 70302
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70303,
+ 70312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70313,
+ 70313
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70314,
+ 70319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70320,
+ 70378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70379,
+ 70383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70384,
+ 70393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70394,
+ 70399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70400,
+ 70400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70401,
+ 70403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70404,
+ 70404
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70405,
+ 70412
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70413,
+ 70414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70415,
+ 70416
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70417,
+ 70418
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70419,
+ 70440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70441,
+ 70441
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70442,
+ 70448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70449,
+ 70449
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70450,
+ 70451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70452,
+ 70452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70453,
+ 70457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70458,
+ 70459
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70460,
+ 70468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70469,
+ 70470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70471,
+ 70472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70473,
+ 70474
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70475,
+ 70477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70478,
+ 70479
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70480,
+ 70480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70481,
+ 70486
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70487,
+ 70487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70488,
+ 70492
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70493,
+ 70499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70500,
+ 70501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70502,
+ 70508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70509,
+ 70511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70512,
+ 70516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70517,
+ 70783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70784,
+ 70853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70854,
+ 70854
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70855,
+ 70855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70856,
+ 70863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70864,
+ 70873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70874,
+ 71039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71040,
+ 71093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71094,
+ 71095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71096,
+ 71104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71105,
+ 71113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71114,
+ 71127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71128,
+ 71133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71134,
+ 71167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71168,
+ 71232
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71233,
+ 71235
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71236,
+ 71236
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71237,
+ 71247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71248,
+ 71257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71258,
+ 71295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71296,
+ 71351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71352,
+ 71359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71360,
+ 71369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71370,
+ 71423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71424,
+ 71449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71450,
+ 71452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71453,
+ 71467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71468,
+ 71471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71472,
+ 71481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71482,
+ 71487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71488,
+ 71839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71840,
+ 71840
+ ],
+ "mapped",
+ [
+ 71872
+ ]
+ ],
+ [
+ [
+ 71841,
+ 71841
+ ],
+ "mapped",
+ [
+ 71873
+ ]
+ ],
+ [
+ [
+ 71842,
+ 71842
+ ],
+ "mapped",
+ [
+ 71874
+ ]
+ ],
+ [
+ [
+ 71843,
+ 71843
+ ],
+ "mapped",
+ [
+ 71875
+ ]
+ ],
+ [
+ [
+ 71844,
+ 71844
+ ],
+ "mapped",
+ [
+ 71876
+ ]
+ ],
+ [
+ [
+ 71845,
+ 71845
+ ],
+ "mapped",
+ [
+ 71877
+ ]
+ ],
+ [
+ [
+ 71846,
+ 71846
+ ],
+ "mapped",
+ [
+ 71878
+ ]
+ ],
+ [
+ [
+ 71847,
+ 71847
+ ],
+ "mapped",
+ [
+ 71879
+ ]
+ ],
+ [
+ [
+ 71848,
+ 71848
+ ],
+ "mapped",
+ [
+ 71880
+ ]
+ ],
+ [
+ [
+ 71849,
+ 71849
+ ],
+ "mapped",
+ [
+ 71881
+ ]
+ ],
+ [
+ [
+ 71850,
+ 71850
+ ],
+ "mapped",
+ [
+ 71882
+ ]
+ ],
+ [
+ [
+ 71851,
+ 71851
+ ],
+ "mapped",
+ [
+ 71883
+ ]
+ ],
+ [
+ [
+ 71852,
+ 71852
+ ],
+ "mapped",
+ [
+ 71884
+ ]
+ ],
+ [
+ [
+ 71853,
+ 71853
+ ],
+ "mapped",
+ [
+ 71885
+ ]
+ ],
+ [
+ [
+ 71854,
+ 71854
+ ],
+ "mapped",
+ [
+ 71886
+ ]
+ ],
+ [
+ [
+ 71855,
+ 71855
+ ],
+ "mapped",
+ [
+ 71887
+ ]
+ ],
+ [
+ [
+ 71856,
+ 71856
+ ],
+ "mapped",
+ [
+ 71888
+ ]
+ ],
+ [
+ [
+ 71857,
+ 71857
+ ],
+ "mapped",
+ [
+ 71889
+ ]
+ ],
+ [
+ [
+ 71858,
+ 71858
+ ],
+ "mapped",
+ [
+ 71890
+ ]
+ ],
+ [
+ [
+ 71859,
+ 71859
+ ],
+ "mapped",
+ [
+ 71891
+ ]
+ ],
+ [
+ [
+ 71860,
+ 71860
+ ],
+ "mapped",
+ [
+ 71892
+ ]
+ ],
+ [
+ [
+ 71861,
+ 71861
+ ],
+ "mapped",
+ [
+ 71893
+ ]
+ ],
+ [
+ [
+ 71862,
+ 71862
+ ],
+ "mapped",
+ [
+ 71894
+ ]
+ ],
+ [
+ [
+ 71863,
+ 71863
+ ],
+ "mapped",
+ [
+ 71895
+ ]
+ ],
+ [
+ [
+ 71864,
+ 71864
+ ],
+ "mapped",
+ [
+ 71896
+ ]
+ ],
+ [
+ [
+ 71865,
+ 71865
+ ],
+ "mapped",
+ [
+ 71897
+ ]
+ ],
+ [
+ [
+ 71866,
+ 71866
+ ],
+ "mapped",
+ [
+ 71898
+ ]
+ ],
+ [
+ [
+ 71867,
+ 71867
+ ],
+ "mapped",
+ [
+ 71899
+ ]
+ ],
+ [
+ [
+ 71868,
+ 71868
+ ],
+ "mapped",
+ [
+ 71900
+ ]
+ ],
+ [
+ [
+ 71869,
+ 71869
+ ],
+ "mapped",
+ [
+ 71901
+ ]
+ ],
+ [
+ [
+ 71870,
+ 71870
+ ],
+ "mapped",
+ [
+ 71902
+ ]
+ ],
+ [
+ [
+ 71871,
+ 71871
+ ],
+ "mapped",
+ [
+ 71903
+ ]
+ ],
+ [
+ [
+ 71872,
+ 71913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71914,
+ 71922
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71923,
+ 71934
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71935,
+ 71935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71936,
+ 72383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 72384,
+ 72440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 72441,
+ 73727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 73728,
+ 74606
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74607,
+ 74648
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74649,
+ 74649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74650,
+ 74751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74752,
+ 74850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74851,
+ 74862
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74863,
+ 74863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74864,
+ 74867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74868,
+ 74868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74869,
+ 74879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74880,
+ 75075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 75076,
+ 77823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 77824,
+ 78894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 78895,
+ 82943
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 82944,
+ 83526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 83527,
+ 92159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92160,
+ 92728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92729,
+ 92735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92736,
+ 92766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92767,
+ 92767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92768,
+ 92777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92778,
+ 92781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92782,
+ 92783
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92784,
+ 92879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92880,
+ 92909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92910,
+ 92911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92912,
+ 92916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92917,
+ 92917
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92918,
+ 92927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92928,
+ 92982
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92983,
+ 92991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92992,
+ 92995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92996,
+ 92997
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92998,
+ 93007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93008,
+ 93017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93018,
+ 93018
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93019,
+ 93025
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 93026,
+ 93026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93027,
+ 93047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93048,
+ 93052
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93053,
+ 93071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93072,
+ 93951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93952,
+ 94020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94021,
+ 94031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94032,
+ 94078
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94079,
+ 94094
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94095,
+ 94111
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94112,
+ 110591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 110592,
+ 110593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 110594,
+ 113663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113664,
+ 113770
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113771,
+ 113775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113776,
+ 113788
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113789,
+ 113791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113792,
+ 113800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113801,
+ 113807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113808,
+ 113817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113818,
+ 113819
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113820,
+ 113820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113821,
+ 113822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113823,
+ 113823
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113824,
+ 113827
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 113828,
+ 118783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 118784,
+ 119029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119030,
+ 119039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119040,
+ 119078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119079,
+ 119080
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119081,
+ 119081
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119082,
+ 119133
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119134,
+ 119134
+ ],
+ "mapped",
+ [
+ 119127,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119135,
+ 119135
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119136,
+ 119136
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119137,
+ 119137
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119138,
+ 119138
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119152
+ ]
+ ],
+ [
+ [
+ 119139,
+ 119139
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119153
+ ]
+ ],
+ [
+ [
+ 119140,
+ 119140
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119154
+ ]
+ ],
+ [
+ [
+ 119141,
+ 119154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119155,
+ 119162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119163,
+ 119226
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119227,
+ 119227
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119228,
+ 119228
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119229,
+ 119229
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119230,
+ 119230
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119231,
+ 119231
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119232,
+ 119232
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119233,
+ 119261
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119262,
+ 119272
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119273,
+ 119295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119296,
+ 119365
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119366,
+ 119551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119552,
+ 119638
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119639,
+ 119647
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119648,
+ 119665
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119666,
+ 119807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119808,
+ 119808
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119809,
+ 119809
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119810,
+ 119810
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119811,
+ 119811
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119812,
+ 119812
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119813,
+ 119813
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119814,
+ 119814
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119815,
+ 119815
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119816,
+ 119816
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119817,
+ 119817
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119818,
+ 119818
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119819,
+ 119819
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119820,
+ 119820
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119821,
+ 119821
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119822,
+ 119822
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119823,
+ 119823
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119824,
+ 119824
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119825,
+ 119825
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119826,
+ 119826
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119827,
+ 119827
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119828,
+ 119828
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119829,
+ 119829
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119830,
+ 119830
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119831,
+ 119831
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119832,
+ 119832
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119833,
+ 119833
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119834,
+ 119834
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119835,
+ 119835
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119836,
+ 119836
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119837,
+ 119837
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119838,
+ 119838
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119839,
+ 119839
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119840,
+ 119840
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119841,
+ 119841
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119842,
+ 119842
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119843,
+ 119843
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119844,
+ 119844
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119845,
+ 119845
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119846,
+ 119846
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119847,
+ 119847
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119848,
+ 119848
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119849,
+ 119849
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119850,
+ 119850
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119851,
+ 119851
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119852,
+ 119852
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119853,
+ 119853
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119854,
+ 119854
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119855,
+ 119855
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119856,
+ 119856
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119857,
+ 119857
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119858,
+ 119858
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119859,
+ 119859
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119860,
+ 119860
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119861,
+ 119861
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119862,
+ 119862
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119863,
+ 119863
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119864,
+ 119864
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119865,
+ 119865
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119866,
+ 119866
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119867,
+ 119867
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119868,
+ 119868
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119869,
+ 119869
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119870,
+ 119870
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119871,
+ 119871
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119872,
+ 119872
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119873,
+ 119873
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119874,
+ 119874
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119875,
+ 119875
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119876,
+ 119876
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119877,
+ 119877
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119878,
+ 119878
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119879,
+ 119879
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119880,
+ 119880
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119881,
+ 119881
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119882,
+ 119882
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119883,
+ 119883
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119884,
+ 119884
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119885,
+ 119885
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119886,
+ 119886
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119887,
+ 119887
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119888,
+ 119888
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119889,
+ 119889
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119890,
+ 119890
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119891,
+ 119891
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119892,
+ 119892
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119893,
+ 119893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119894,
+ 119894
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119895,
+ 119895
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119896,
+ 119896
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119897,
+ 119897
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119898,
+ 119898
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119899,
+ 119899
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119900,
+ 119900
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119901,
+ 119901
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119902,
+ 119902
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119903,
+ 119903
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119904,
+ 119904
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119905,
+ 119905
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119906,
+ 119906
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119907,
+ 119907
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119908,
+ 119908
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119909,
+ 119909
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119910,
+ 119910
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119911,
+ 119911
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119912,
+ 119912
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119913,
+ 119913
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119914,
+ 119914
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119915,
+ 119915
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119916,
+ 119916
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119917,
+ 119917
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119918,
+ 119918
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119919,
+ 119919
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119920,
+ 119920
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119921,
+ 119921
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119922,
+ 119922
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119923,
+ 119923
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119924,
+ 119924
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119925,
+ 119925
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119926,
+ 119926
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119927,
+ 119927
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119928,
+ 119928
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119929,
+ 119929
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119930,
+ 119930
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119931,
+ 119931
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119932,
+ 119932
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119933,
+ 119933
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119934,
+ 119934
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119935,
+ 119935
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119936,
+ 119936
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119937,
+ 119937
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119938,
+ 119938
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119939,
+ 119939
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119940,
+ 119940
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119941,
+ 119941
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119942,
+ 119942
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119943,
+ 119943
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119944,
+ 119944
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119945,
+ 119945
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119946,
+ 119946
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119947,
+ 119947
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119948,
+ 119948
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119949,
+ 119949
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119950,
+ 119950
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119951,
+ 119951
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119952,
+ 119952
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119953,
+ 119953
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119954,
+ 119954
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119955,
+ 119955
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119956,
+ 119956
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119957,
+ 119957
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119958,
+ 119958
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119959,
+ 119959
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119960,
+ 119960
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119961,
+ 119961
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119962,
+ 119962
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119963,
+ 119963
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119964,
+ 119964
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119965,
+ 119965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119966,
+ 119966
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119967,
+ 119967
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119968,
+ 119969
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119970,
+ 119970
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119971,
+ 119972
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119973,
+ 119973
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119974,
+ 119974
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119975,
+ 119976
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119977,
+ 119977
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119978,
+ 119978
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119979,
+ 119979
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119980,
+ 119980
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119981,
+ 119981
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119982,
+ 119982
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119983,
+ 119983
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119984,
+ 119984
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119985,
+ 119985
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119986,
+ 119986
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119987,
+ 119987
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119988,
+ 119988
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119989,
+ 119989
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119990,
+ 119990
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119991,
+ 119991
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119992,
+ 119992
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119993,
+ 119993
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119994,
+ 119994
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119995,
+ 119995
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119996,
+ 119996
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119997,
+ 119997
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119998,
+ 119998
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119999,
+ 119999
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120000,
+ 120000
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120001,
+ 120001
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120002,
+ 120002
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120003,
+ 120003
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120004,
+ 120004
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120005,
+ 120005
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120006,
+ 120006
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120007,
+ 120007
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120008,
+ 120008
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120009,
+ 120009
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120010,
+ 120010
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120011,
+ 120011
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120012,
+ 120012
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120013,
+ 120013
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120014,
+ 120014
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120015,
+ 120015
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120016,
+ 120016
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120017,
+ 120017
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120018,
+ 120018
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120019,
+ 120019
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120020,
+ 120020
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120021,
+ 120021
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120022,
+ 120022
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120023,
+ 120023
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120024,
+ 120024
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120025,
+ 120025
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120026,
+ 120026
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120027,
+ 120027
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120028,
+ 120028
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120029,
+ 120029
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120030,
+ 120030
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120031,
+ 120031
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120032,
+ 120032
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120033,
+ 120033
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120034,
+ 120034
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120035,
+ 120035
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120036,
+ 120036
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120037,
+ 120037
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120038,
+ 120038
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120039,
+ 120039
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120040,
+ 120040
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120041,
+ 120041
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120042,
+ 120042
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120043,
+ 120043
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120044,
+ 120044
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120045,
+ 120045
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120046,
+ 120046
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120047,
+ 120047
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120048,
+ 120048
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120049,
+ 120049
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120050,
+ 120050
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120051,
+ 120051
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120052,
+ 120052
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120053,
+ 120053
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120054,
+ 120054
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120055,
+ 120055
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120056,
+ 120056
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120057,
+ 120057
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120058,
+ 120058
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120059,
+ 120059
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120060,
+ 120060
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120061,
+ 120061
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120062,
+ 120062
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120063,
+ 120063
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120064,
+ 120064
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120065,
+ 120065
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120066,
+ 120066
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120067,
+ 120067
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120068,
+ 120068
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120069,
+ 120069
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120070,
+ 120070
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120071,
+ 120071
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120072,
+ 120072
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120073,
+ 120073
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120074,
+ 120074
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120075,
+ 120076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120077,
+ 120077
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120078,
+ 120078
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120079,
+ 120079
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120080,
+ 120080
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120081,
+ 120081
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120082,
+ 120082
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120083,
+ 120083
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120084,
+ 120084
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120085,
+ 120085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120086,
+ 120086
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120087,
+ 120087
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120088,
+ 120088
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120089,
+ 120089
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120090,
+ 120090
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120091,
+ 120091
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120092,
+ 120092
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120093,
+ 120093
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120094,
+ 120094
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120095,
+ 120095
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120096,
+ 120096
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120097,
+ 120097
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120098,
+ 120098
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120099,
+ 120099
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120100,
+ 120100
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120101,
+ 120101
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120102,
+ 120102
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120103,
+ 120103
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120104,
+ 120104
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120105,
+ 120105
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120106,
+ 120106
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120107,
+ 120107
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120108,
+ 120108
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120109,
+ 120109
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120110,
+ 120110
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120111,
+ 120111
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120112,
+ 120112
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120113,
+ 120113
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120114,
+ 120114
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120115,
+ 120115
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120116,
+ 120116
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120117,
+ 120117
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120118,
+ 120118
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120119,
+ 120119
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120120,
+ 120120
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120121,
+ 120121
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120122,
+ 120122
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120123,
+ 120123
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120124,
+ 120124
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120125,
+ 120125
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120126,
+ 120126
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120127,
+ 120127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120128,
+ 120128
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120129,
+ 120129
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120130,
+ 120130
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120131,
+ 120131
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120132,
+ 120132
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120133,
+ 120133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120134,
+ 120134
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120135,
+ 120137
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120138,
+ 120138
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120139,
+ 120139
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120140,
+ 120140
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120141,
+ 120141
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120142,
+ 120142
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120143,
+ 120143
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120144,
+ 120144
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120145,
+ 120145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120146,
+ 120146
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120147,
+ 120147
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120148,
+ 120148
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120149,
+ 120149
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120150,
+ 120150
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120151,
+ 120151
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120152,
+ 120152
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120153,
+ 120153
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120154,
+ 120154
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120155,
+ 120155
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120156,
+ 120156
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120157,
+ 120157
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120158,
+ 120158
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120159,
+ 120159
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120160,
+ 120160
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120161,
+ 120161
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120162,
+ 120162
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120163,
+ 120163
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120164,
+ 120164
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120165,
+ 120165
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120166,
+ 120166
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120167,
+ 120167
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120168,
+ 120168
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120169,
+ 120169
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120170,
+ 120170
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120171,
+ 120171
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120172,
+ 120172
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120173,
+ 120173
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120174,
+ 120174
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120175,
+ 120175
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120176,
+ 120176
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120177,
+ 120177
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120178,
+ 120178
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120179,
+ 120179
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120180,
+ 120180
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120181,
+ 120181
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120182,
+ 120182
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120183,
+ 120183
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120184,
+ 120184
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120185,
+ 120185
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120186,
+ 120186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120187,
+ 120187
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120188,
+ 120188
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120189,
+ 120189
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120190,
+ 120190
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120191,
+ 120191
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120192,
+ 120192
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120193,
+ 120193
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120194,
+ 120194
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120195,
+ 120195
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120196,
+ 120196
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120197,
+ 120197
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120198,
+ 120198
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120199,
+ 120199
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120200,
+ 120200
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120201,
+ 120201
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120202,
+ 120202
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120203,
+ 120203
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120204,
+ 120204
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120205,
+ 120205
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120206,
+ 120206
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120207,
+ 120207
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120208,
+ 120208
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120209,
+ 120209
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120210,
+ 120210
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120211,
+ 120211
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120212,
+ 120212
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120213,
+ 120213
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120214,
+ 120214
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120215,
+ 120215
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120216,
+ 120216
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120217,
+ 120217
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120218,
+ 120218
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120219,
+ 120219
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120220,
+ 120220
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120221,
+ 120221
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120222,
+ 120222
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120223,
+ 120223
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120224,
+ 120224
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120225,
+ 120225
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120226,
+ 120226
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120227,
+ 120227
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120228,
+ 120228
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120229,
+ 120229
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120230,
+ 120230
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120231,
+ 120231
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120232,
+ 120232
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120233,
+ 120233
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120234,
+ 120234
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120235,
+ 120235
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120236,
+ 120236
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120237,
+ 120237
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120238,
+ 120238
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120239,
+ 120239
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120240,
+ 120240
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120241,
+ 120241
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120242,
+ 120242
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120243,
+ 120243
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120244,
+ 120244
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120245,
+ 120245
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120246,
+ 120246
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120247,
+ 120247
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120248,
+ 120248
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120249,
+ 120249
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120250,
+ 120250
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120251,
+ 120251
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120252,
+ 120252
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120253,
+ 120253
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120254,
+ 120254
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120255,
+ 120255
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120256,
+ 120256
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120257,
+ 120257
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120258,
+ 120258
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120259,
+ 120259
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120260,
+ 120260
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120261,
+ 120261
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120262,
+ 120262
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120263,
+ 120263
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120264,
+ 120264
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120265,
+ 120265
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120266,
+ 120266
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120267,
+ 120267
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120268,
+ 120268
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120269,
+ 120269
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120270,
+ 120270
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120271,
+ 120271
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120272,
+ 120272
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120273,
+ 120273
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120274,
+ 120274
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120275,
+ 120275
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120276,
+ 120276
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120277,
+ 120277
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120278,
+ 120278
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120279,
+ 120279
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120280,
+ 120280
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120281,
+ 120281
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120282,
+ 120282
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120283,
+ 120283
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120284,
+ 120284
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120285,
+ 120285
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120286,
+ 120286
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120287,
+ 120287
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120288,
+ 120288
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120289,
+ 120289
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120290,
+ 120290
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120291,
+ 120291
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120292,
+ 120292
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120293,
+ 120293
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120294,
+ 120294
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120295,
+ 120295
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120296,
+ 120296
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120297,
+ 120297
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120298,
+ 120298
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120299,
+ 120299
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120300,
+ 120300
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120301,
+ 120301
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120302,
+ 120302
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120303,
+ 120303
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120304,
+ 120304
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120305,
+ 120305
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120306,
+ 120306
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120307,
+ 120307
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120308,
+ 120308
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120309,
+ 120309
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120310,
+ 120310
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120311,
+ 120311
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120312,
+ 120312
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120313,
+ 120313
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120314,
+ 120314
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120315,
+ 120315
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120316,
+ 120316
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120317,
+ 120317
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120318,
+ 120318
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120319,
+ 120319
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120320,
+ 120320
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120321,
+ 120321
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120322,
+ 120322
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120323,
+ 120323
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120324,
+ 120324
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120325,
+ 120325
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120326,
+ 120326
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120327,
+ 120327
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120328,
+ 120328
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120329,
+ 120329
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120330,
+ 120330
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120331,
+ 120331
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120332,
+ 120332
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120333,
+ 120333
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120334,
+ 120334
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120335,
+ 120335
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120336,
+ 120336
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120337,
+ 120337
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120338,
+ 120338
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120339,
+ 120339
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120340,
+ 120340
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120341,
+ 120341
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120342,
+ 120342
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120343,
+ 120343
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120344,
+ 120344
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120345,
+ 120345
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120346,
+ 120346
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120347,
+ 120347
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120348,
+ 120348
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120349,
+ 120349
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120350,
+ 120350
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120351,
+ 120351
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120352,
+ 120352
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120353,
+ 120353
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120354,
+ 120354
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120355,
+ 120355
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120356,
+ 120356
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120357,
+ 120357
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120358,
+ 120358
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120359,
+ 120359
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120360,
+ 120360
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120361,
+ 120361
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120362,
+ 120362
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120363,
+ 120363
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120364,
+ 120364
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120365,
+ 120365
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120366,
+ 120366
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120367,
+ 120367
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120368,
+ 120368
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120369,
+ 120369
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120370,
+ 120370
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120371,
+ 120371
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120372,
+ 120372
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120373,
+ 120373
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120374,
+ 120374
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120375,
+ 120375
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120376,
+ 120376
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120377,
+ 120377
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120378,
+ 120378
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120379,
+ 120379
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120380,
+ 120380
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120381,
+ 120381
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120382,
+ 120382
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120383,
+ 120383
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120384,
+ 120384
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120385,
+ 120385
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120386,
+ 120386
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120387,
+ 120387
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120388,
+ 120388
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120389,
+ 120389
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120390,
+ 120390
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120391,
+ 120391
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120392,
+ 120392
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120393,
+ 120393
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120394,
+ 120394
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120395,
+ 120395
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120396,
+ 120396
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120397,
+ 120397
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120398,
+ 120398
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120399,
+ 120399
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120400,
+ 120400
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120401,
+ 120401
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120402,
+ 120402
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120403,
+ 120403
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120404,
+ 120404
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120405,
+ 120405
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120406,
+ 120406
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120407,
+ 120407
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120408,
+ 120408
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120409,
+ 120409
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120410,
+ 120410
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120411,
+ 120411
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120412,
+ 120412
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120413,
+ 120413
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120414,
+ 120414
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120415,
+ 120415
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120416,
+ 120416
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120417,
+ 120417
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120418,
+ 120418
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120419,
+ 120419
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120420,
+ 120420
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120421,
+ 120421
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120422,
+ 120422
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120423,
+ 120423
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120424,
+ 120424
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120425,
+ 120425
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120426,
+ 120426
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120427,
+ 120427
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120428,
+ 120428
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120429,
+ 120429
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120430,
+ 120430
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120431,
+ 120431
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120432,
+ 120432
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120433,
+ 120433
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120434,
+ 120434
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120435,
+ 120435
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120436,
+ 120436
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120437,
+ 120437
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120438,
+ 120438
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120439,
+ 120439
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120440,
+ 120440
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120441,
+ 120441
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120442,
+ 120442
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120443,
+ 120443
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120444,
+ 120444
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120445,
+ 120445
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120446,
+ 120446
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120447,
+ 120447
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120448,
+ 120448
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120449,
+ 120449
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120450,
+ 120450
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120451,
+ 120451
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120452,
+ 120452
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120453,
+ 120453
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120454,
+ 120454
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120455,
+ 120455
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120456,
+ 120456
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120457,
+ 120457
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120458,
+ 120458
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120459,
+ 120459
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120460,
+ 120460
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120461,
+ 120461
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120462,
+ 120462
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120463,
+ 120463
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120464,
+ 120464
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120465,
+ 120465
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120466,
+ 120466
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120467,
+ 120467
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120468,
+ 120468
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120469,
+ 120469
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120470,
+ 120470
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120471,
+ 120471
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120472,
+ 120472
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120473,
+ 120473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120474,
+ 120474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120475,
+ 120475
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120476,
+ 120476
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120477,
+ 120477
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120478,
+ 120478
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120479,
+ 120479
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120480,
+ 120480
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120481,
+ 120481
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120482,
+ 120482
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120483,
+ 120483
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120484,
+ 120484
+ ],
+ "mapped",
+ [
+ 305
+ ]
+ ],
+ [
+ [
+ 120485,
+ 120485
+ ],
+ "mapped",
+ [
+ 567
+ ]
+ ],
+ [
+ [
+ 120486,
+ 120487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120488,
+ 120488
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120489,
+ 120489
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120490,
+ 120490
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120491,
+ 120491
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120492,
+ 120492
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120493,
+ 120493
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120494,
+ 120494
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120495,
+ 120495
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120496,
+ 120496
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120497,
+ 120497
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120498,
+ 120498
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120499,
+ 120499
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120500,
+ 120500
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120501,
+ 120501
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120502,
+ 120502
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120503,
+ 120503
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120504,
+ 120504
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120505,
+ 120505
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120506,
+ 120506
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120507,
+ 120507
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120508,
+ 120508
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120509,
+ 120509
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120510,
+ 120510
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120511,
+ 120511
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120512,
+ 120512
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120513,
+ 120513
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120514,
+ 120514
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120515,
+ 120515
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120516,
+ 120516
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120517,
+ 120517
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120518,
+ 120518
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120519,
+ 120519
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120520,
+ 120520
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120521,
+ 120521
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120522,
+ 120522
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120523,
+ 120523
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120524,
+ 120524
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120525,
+ 120525
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120526,
+ 120526
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120527,
+ 120527
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120528,
+ 120528
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120529,
+ 120529
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120530,
+ 120530
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120531,
+ 120532
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120533,
+ 120533
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120534,
+ 120534
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120535,
+ 120535
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120536,
+ 120536
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120537,
+ 120537
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120538,
+ 120538
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120539,
+ 120539
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120540,
+ 120540
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120541,
+ 120541
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120542,
+ 120542
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120543,
+ 120543
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120544,
+ 120544
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120545,
+ 120545
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120546,
+ 120546
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120547,
+ 120547
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120548,
+ 120548
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120549,
+ 120549
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120550,
+ 120550
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120551,
+ 120551
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120552,
+ 120552
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120553,
+ 120553
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120554,
+ 120554
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120555,
+ 120555
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120556,
+ 120556
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120557,
+ 120557
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120558,
+ 120558
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120559,
+ 120559
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120560,
+ 120560
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120561,
+ 120561
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120562,
+ 120562
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120563,
+ 120563
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120564,
+ 120564
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120565,
+ 120565
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120566,
+ 120566
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120567,
+ 120567
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120568,
+ 120568
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120569,
+ 120569
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120570,
+ 120570
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120571,
+ 120571
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120572,
+ 120572
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120573,
+ 120573
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120574,
+ 120574
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120575,
+ 120575
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120576,
+ 120576
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120577,
+ 120577
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120578,
+ 120578
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120579,
+ 120579
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120580,
+ 120580
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120581,
+ 120581
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120582,
+ 120582
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120583,
+ 120583
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120584,
+ 120584
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120585,
+ 120585
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120586,
+ 120586
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120587,
+ 120587
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120588,
+ 120588
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120589,
+ 120590
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120591,
+ 120591
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120592,
+ 120592
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120593,
+ 120593
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120594,
+ 120594
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120595,
+ 120595
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120596,
+ 120596
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120597,
+ 120597
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120598,
+ 120598
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120599,
+ 120599
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120600,
+ 120600
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120601,
+ 120601
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120602,
+ 120602
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120603,
+ 120603
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120604,
+ 120604
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120605,
+ 120605
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120606,
+ 120606
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120607,
+ 120607
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120608,
+ 120608
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120609,
+ 120609
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120610,
+ 120610
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120611,
+ 120611
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120612,
+ 120612
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120613,
+ 120613
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120614,
+ 120614
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120615,
+ 120615
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120616,
+ 120616
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120617,
+ 120617
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120618,
+ 120618
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120619,
+ 120619
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120620,
+ 120620
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120621,
+ 120621
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120622,
+ 120622
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120623,
+ 120623
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120624,
+ 120624
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120625,
+ 120625
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120626,
+ 120626
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120627,
+ 120627
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120628,
+ 120628
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120629,
+ 120629
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120630,
+ 120630
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120631,
+ 120631
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120632,
+ 120632
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120633,
+ 120633
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120634,
+ 120634
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120635,
+ 120635
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120636,
+ 120636
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120637,
+ 120637
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120638,
+ 120638
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120639,
+ 120639
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120640,
+ 120640
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120641,
+ 120641
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120642,
+ 120642
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120643,
+ 120643
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120644,
+ 120644
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120645,
+ 120645
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120646,
+ 120646
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120647,
+ 120648
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120649,
+ 120649
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120650,
+ 120650
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120651,
+ 120651
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120652,
+ 120652
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120653,
+ 120653
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120654,
+ 120654
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120655,
+ 120655
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120656,
+ 120656
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120657,
+ 120657
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120658,
+ 120658
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120659,
+ 120659
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120660,
+ 120660
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120661,
+ 120661
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120662,
+ 120662
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120663,
+ 120663
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120664,
+ 120664
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120665,
+ 120665
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120666,
+ 120666
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120667,
+ 120667
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120668,
+ 120668
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120669,
+ 120669
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120670,
+ 120670
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120671,
+ 120671
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120672,
+ 120672
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120673,
+ 120673
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120674,
+ 120674
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120675,
+ 120675
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120676,
+ 120676
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120677,
+ 120677
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120678,
+ 120678
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120679,
+ 120679
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120680,
+ 120680
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120681,
+ 120681
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120682,
+ 120682
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120683,
+ 120683
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120684,
+ 120684
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120685,
+ 120685
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120686,
+ 120686
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120687,
+ 120687
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120688,
+ 120688
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120689,
+ 120689
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120690,
+ 120690
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120691,
+ 120691
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120692,
+ 120692
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120693,
+ 120693
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120694,
+ 120694
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120695,
+ 120695
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120696,
+ 120696
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120697,
+ 120697
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120698,
+ 120698
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120699,
+ 120699
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120700,
+ 120700
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120701,
+ 120701
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120702,
+ 120702
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120703,
+ 120703
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120704,
+ 120704
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120705,
+ 120706
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120707,
+ 120707
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120708,
+ 120708
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120709,
+ 120709
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120710,
+ 120710
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120711,
+ 120711
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120712,
+ 120712
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120713,
+ 120713
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120714,
+ 120714
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120715,
+ 120715
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120716,
+ 120716
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120717,
+ 120717
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120718,
+ 120718
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120719,
+ 120719
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120720,
+ 120720
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120721,
+ 120721
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120722,
+ 120722
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120723,
+ 120723
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120724,
+ 120724
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120725,
+ 120725
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120726,
+ 120726
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120727,
+ 120727
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120728,
+ 120728
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120729,
+ 120729
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120730,
+ 120730
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120731,
+ 120731
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120732,
+ 120732
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120733,
+ 120733
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120734,
+ 120734
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120735,
+ 120735
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120736,
+ 120736
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120737,
+ 120737
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120738,
+ 120738
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120739,
+ 120739
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120740,
+ 120740
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120741,
+ 120741
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120742,
+ 120742
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120743,
+ 120743
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120744,
+ 120744
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120745,
+ 120745
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120746,
+ 120746
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120747,
+ 120747
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120748,
+ 120748
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120749,
+ 120749
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120750,
+ 120750
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120751,
+ 120751
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120752,
+ 120752
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120753,
+ 120753
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120754,
+ 120754
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120755,
+ 120755
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120756,
+ 120756
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120757,
+ 120757
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120758,
+ 120758
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120759,
+ 120759
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120760,
+ 120760
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120761,
+ 120761
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120762,
+ 120762
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120763,
+ 120764
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120765,
+ 120765
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120766,
+ 120766
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120767,
+ 120767
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120768,
+ 120768
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120769,
+ 120769
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120770,
+ 120770
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120771,
+ 120771
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120772,
+ 120772
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120773,
+ 120773
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120774,
+ 120774
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120775,
+ 120775
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120776,
+ 120776
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120777,
+ 120777
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120778,
+ 120779
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 120780,
+ 120781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120782,
+ 120782
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120783,
+ 120783
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120784,
+ 120784
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120785,
+ 120785
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120786,
+ 120786
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120787,
+ 120787
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120788,
+ 120788
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120789,
+ 120789
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120790,
+ 120790
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120791,
+ 120791
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120792,
+ 120792
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120793,
+ 120793
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120794,
+ 120794
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120795,
+ 120795
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120796,
+ 120796
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120797,
+ 120797
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120798,
+ 120798
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120799,
+ 120799
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120800,
+ 120800
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120801,
+ 120801
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120802,
+ 120802
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120803,
+ 120803
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120804,
+ 120804
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120805,
+ 120805
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120806,
+ 120806
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120807,
+ 120807
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120808,
+ 120808
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120809,
+ 120809
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120810,
+ 120810
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120811,
+ 120811
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120812,
+ 120812
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120813,
+ 120813
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120814,
+ 120814
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120815,
+ 120815
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120816,
+ 120816
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120817,
+ 120817
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120818,
+ 120818
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120819,
+ 120819
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120820,
+ 120820
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120821,
+ 120821
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120822,
+ 120822
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120823,
+ 120823
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120824,
+ 120824
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120825,
+ 120825
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120826,
+ 120826
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120827,
+ 120827
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120828,
+ 120828
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120829,
+ 120829
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120830,
+ 120830
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120831,
+ 120831
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120832,
+ 121343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121344,
+ 121398
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121399,
+ 121402
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121403,
+ 121452
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121453,
+ 121460
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121461,
+ 121461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121462,
+ 121475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121476,
+ 121476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121477,
+ 121483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121484,
+ 121498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121499,
+ 121503
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121504,
+ 121504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121505,
+ 121519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121520,
+ 124927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 124928,
+ 125124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125125,
+ 125126
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 125127,
+ 125135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 125136,
+ 125142
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125143,
+ 126463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126464,
+ 126464
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126465,
+ 126465
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126466,
+ 126466
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126467,
+ 126467
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126468,
+ 126468
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126469,
+ 126469
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126470,
+ 126470
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126471,
+ 126471
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126472,
+ 126472
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126473,
+ 126473
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126474,
+ 126474
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126475,
+ 126475
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126476,
+ 126476
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126477,
+ 126477
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126478,
+ 126478
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126479,
+ 126479
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126480,
+ 126480
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126481,
+ 126481
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126482,
+ 126482
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126483,
+ 126483
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126484,
+ 126484
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126485,
+ 126485
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126486,
+ 126486
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126487,
+ 126487
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126488,
+ 126488
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126489,
+ 126489
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126490,
+ 126490
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126491,
+ 126491
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126492,
+ 126492
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126493,
+ 126493
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126494,
+ 126494
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126495,
+ 126495
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126496,
+ 126496
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126497,
+ 126497
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126498,
+ 126498
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126499,
+ 126499
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126500,
+ 126500
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126501,
+ 126502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126503,
+ 126503
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126504,
+ 126504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126505,
+ 126505
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126506,
+ 126506
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126507,
+ 126507
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126508,
+ 126508
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126509,
+ 126509
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126510,
+ 126510
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126511,
+ 126511
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126512,
+ 126512
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126513,
+ 126513
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126514,
+ 126514
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126515,
+ 126515
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126516,
+ 126516
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126517,
+ 126517
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126518,
+ 126518
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126519,
+ 126519
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126520,
+ 126520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126521,
+ 126521
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126522,
+ 126522
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126523,
+ 126523
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126524,
+ 126529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126530,
+ 126530
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126531,
+ 126534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126535,
+ 126535
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126536,
+ 126536
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126537,
+ 126537
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126538,
+ 126538
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126539,
+ 126539
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126540,
+ 126540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126541,
+ 126541
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126542,
+ 126542
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126543,
+ 126543
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126544,
+ 126544
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126545,
+ 126545
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126546,
+ 126546
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126547,
+ 126547
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126548,
+ 126548
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126549,
+ 126550
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126551,
+ 126551
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126552,
+ 126552
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126553,
+ 126553
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126554,
+ 126554
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126555,
+ 126555
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126556,
+ 126556
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126557,
+ 126557
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126558,
+ 126558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126559,
+ 126559
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126560,
+ 126560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126561,
+ 126561
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126562,
+ 126562
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126563,
+ 126563
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126564,
+ 126564
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126565,
+ 126566
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126567,
+ 126567
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126568,
+ 126568
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126569,
+ 126569
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126570,
+ 126570
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126571,
+ 126571
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126572,
+ 126572
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126573,
+ 126573
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126574,
+ 126574
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126575,
+ 126575
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126576,
+ 126576
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126577,
+ 126577
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126578,
+ 126578
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126579,
+ 126579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126580,
+ 126580
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126581,
+ 126581
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126582,
+ 126582
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126583,
+ 126583
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126584,
+ 126584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126585,
+ 126585
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126586,
+ 126586
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126587,
+ 126587
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126588,
+ 126588
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126589,
+ 126589
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126590,
+ 126590
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126591,
+ 126591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126592,
+ 126592
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126593,
+ 126593
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126594,
+ 126594
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126595,
+ 126595
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126596,
+ 126596
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126597,
+ 126597
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126598,
+ 126598
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126599,
+ 126599
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126600,
+ 126600
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126601,
+ 126601
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126602,
+ 126602
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126603,
+ 126603
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126604,
+ 126604
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126605,
+ 126605
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126606,
+ 126606
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126607,
+ 126607
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126608,
+ 126608
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126609,
+ 126609
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126610,
+ 126610
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126611,
+ 126611
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126612,
+ 126612
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126613,
+ 126613
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126614,
+ 126614
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126615,
+ 126615
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126616,
+ 126616
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126617,
+ 126617
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126618,
+ 126618
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126619,
+ 126619
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126620,
+ 126624
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126625,
+ 126625
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126626,
+ 126626
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126627,
+ 126627
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126628,
+ 126628
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126629,
+ 126629
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126630,
+ 126630
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126631,
+ 126631
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126632,
+ 126632
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126633,
+ 126633
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126634,
+ 126634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126635,
+ 126635
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126636,
+ 126636
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126637,
+ 126637
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126638,
+ 126638
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126639,
+ 126639
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126640,
+ 126640
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126641,
+ 126641
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126642,
+ 126642
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126643,
+ 126643
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126644,
+ 126644
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126645,
+ 126645
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126646,
+ 126646
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126647,
+ 126647
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126648,
+ 126648
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126649,
+ 126649
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126650,
+ 126650
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126651,
+ 126651
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126652,
+ 126703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126704,
+ 126705
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 126706,
+ 126975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126976,
+ 127019
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127020,
+ 127023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127024,
+ 127123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127124,
+ 127135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127136,
+ 127150
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127151,
+ 127152
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127153,
+ 127166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127167,
+ 127167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127168,
+ 127168
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127169,
+ 127183
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127184,
+ 127184
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127185,
+ 127199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127200,
+ 127221
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127222,
+ 127231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127232,
+ 127232
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127233,
+ 127233
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 48,
+ 44
+ ]
+ ],
+ [
+ [
+ 127234,
+ 127234
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 49,
+ 44
+ ]
+ ],
+ [
+ [
+ 127235,
+ 127235
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 50,
+ 44
+ ]
+ ],
+ [
+ [
+ 127236,
+ 127236
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 51,
+ 44
+ ]
+ ],
+ [
+ [
+ 127237,
+ 127237
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 52,
+ 44
+ ]
+ ],
+ [
+ [
+ 127238,
+ 127238
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 53,
+ 44
+ ]
+ ],
+ [
+ [
+ 127239,
+ 127239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 54,
+ 44
+ ]
+ ],
+ [
+ [
+ 127240,
+ 127240
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 55,
+ 44
+ ]
+ ],
+ [
+ [
+ 127241,
+ 127241
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 56,
+ 44
+ ]
+ ],
+ [
+ [
+ 127242,
+ 127242
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 57,
+ 44
+ ]
+ ],
+ [
+ [
+ 127243,
+ 127244
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127245,
+ 127247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127248,
+ 127248
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 127249,
+ 127249
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 127250,
+ 127250
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 127251,
+ 127251
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 127252,
+ 127252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 127253,
+ 127253
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 127254,
+ 127254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 127255,
+ 127255
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 127256,
+ 127256
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 127257,
+ 127257
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 127258,
+ 127258
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 127259,
+ 127259
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 127260,
+ 127260
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 127261,
+ 127261
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 127262,
+ 127262
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 127263,
+ 127263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 127264,
+ 127264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 127265,
+ 127265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 127266,
+ 127266
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 127267,
+ 127267
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 127268,
+ 127268
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 127269,
+ 127269
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 127270,
+ 127270
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 127271,
+ 127271
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 127272,
+ 127272
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 127273,
+ 127273
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 127274,
+ 127274
+ ],
+ "mapped",
+ [
+ 12308,
+ 115,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127275,
+ 127275
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127276,
+ 127276
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127277,
+ 127277
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 127278,
+ 127278
+ ],
+ "mapped",
+ [
+ 119,
+ 122
+ ]
+ ],
+ [
+ [
+ 127279,
+ 127279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127280,
+ 127280
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 127281,
+ 127281
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 127282,
+ 127282
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127283,
+ 127283
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 127284,
+ 127284
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 127285,
+ 127285
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 127286,
+ 127286
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 127287,
+ 127287
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 127288,
+ 127288
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 127289,
+ 127289
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 127290,
+ 127290
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 127291,
+ 127291
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 127292,
+ 127292
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 127293,
+ 127293
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 127294,
+ 127294
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 127295,
+ 127295
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 127296,
+ 127296
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 127297,
+ 127297
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127298,
+ 127298
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 127299,
+ 127299
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 127300,
+ 127300
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 127301,
+ 127301
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 127302,
+ 127302
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 127303,
+ 127303
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 127304,
+ 127304
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 127305,
+ 127305
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 127306,
+ 127306
+ ],
+ "mapped",
+ [
+ 104,
+ 118
+ ]
+ ],
+ [
+ [
+ 127307,
+ 127307
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 127308,
+ 127308
+ ],
+ "mapped",
+ [
+ 115,
+ 100
+ ]
+ ],
+ [
+ [
+ 127309,
+ 127309
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 127310,
+ 127310
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 127311,
+ 127311
+ ],
+ "mapped",
+ [
+ 119,
+ 99
+ ]
+ ],
+ [
+ [
+ 127312,
+ 127318
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127319,
+ 127319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127320,
+ 127326
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127327,
+ 127327
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127328,
+ 127337
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127338,
+ 127338
+ ],
+ "mapped",
+ [
+ 109,
+ 99
+ ]
+ ],
+ [
+ [
+ 127339,
+ 127339
+ ],
+ "mapped",
+ [
+ 109,
+ 100
+ ]
+ ],
+ [
+ [
+ 127340,
+ 127343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127344,
+ 127352
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127353,
+ 127353
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127354,
+ 127354
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127355,
+ 127356
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127357,
+ 127358
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127359,
+ 127359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127360,
+ 127369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127370,
+ 127373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127374,
+ 127375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127376,
+ 127376
+ ],
+ "mapped",
+ [
+ 100,
+ 106
+ ]
+ ],
+ [
+ [
+ 127377,
+ 127386
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127387,
+ 127461
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127462,
+ 127487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127488,
+ 127488
+ ],
+ "mapped",
+ [
+ 12411,
+ 12363
+ ]
+ ],
+ [
+ [
+ 127489,
+ 127489
+ ],
+ "mapped",
+ [
+ 12467,
+ 12467
+ ]
+ ],
+ [
+ [
+ 127490,
+ 127490
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 127491,
+ 127503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127504,
+ 127504
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 127505,
+ 127505
+ ],
+ "mapped",
+ [
+ 23383
+ ]
+ ],
+ [
+ [
+ 127506,
+ 127506
+ ],
+ "mapped",
+ [
+ 21452
+ ]
+ ],
+ [
+ [
+ 127507,
+ 127507
+ ],
+ "mapped",
+ [
+ 12487
+ ]
+ ],
+ [
+ [
+ 127508,
+ 127508
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 127509,
+ 127509
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 127510,
+ 127510
+ ],
+ "mapped",
+ [
+ 35299
+ ]
+ ],
+ [
+ [
+ 127511,
+ 127511
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 127512,
+ 127512
+ ],
+ "mapped",
+ [
+ 20132
+ ]
+ ],
+ [
+ [
+ 127513,
+ 127513
+ ],
+ "mapped",
+ [
+ 26144
+ ]
+ ],
+ [
+ [
+ 127514,
+ 127514
+ ],
+ "mapped",
+ [
+ 28961
+ ]
+ ],
+ [
+ [
+ 127515,
+ 127515
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 127516,
+ 127516
+ ],
+ "mapped",
+ [
+ 21069
+ ]
+ ],
+ [
+ [
+ 127517,
+ 127517
+ ],
+ "mapped",
+ [
+ 24460
+ ]
+ ],
+ [
+ [
+ 127518,
+ 127518
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 127519,
+ 127519
+ ],
+ "mapped",
+ [
+ 26032
+ ]
+ ],
+ [
+ [
+ 127520,
+ 127520
+ ],
+ "mapped",
+ [
+ 21021
+ ]
+ ],
+ [
+ [
+ 127521,
+ 127521
+ ],
+ "mapped",
+ [
+ 32066
+ ]
+ ],
+ [
+ [
+ 127522,
+ 127522
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 127523,
+ 127523
+ ],
+ "mapped",
+ [
+ 36009
+ ]
+ ],
+ [
+ [
+ 127524,
+ 127524
+ ],
+ "mapped",
+ [
+ 22768
+ ]
+ ],
+ [
+ [
+ 127525,
+ 127525
+ ],
+ "mapped",
+ [
+ 21561
+ ]
+ ],
+ [
+ [
+ 127526,
+ 127526
+ ],
+ "mapped",
+ [
+ 28436
+ ]
+ ],
+ [
+ [
+ 127527,
+ 127527
+ ],
+ "mapped",
+ [
+ 25237
+ ]
+ ],
+ [
+ [
+ 127528,
+ 127528
+ ],
+ "mapped",
+ [
+ 25429
+ ]
+ ],
+ [
+ [
+ 127529,
+ 127529
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 127530,
+ 127530
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 127531,
+ 127531
+ ],
+ "mapped",
+ [
+ 36938
+ ]
+ ],
+ [
+ [
+ 127532,
+ 127532
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 127533,
+ 127533
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 127534,
+ 127534
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 127535,
+ 127535
+ ],
+ "mapped",
+ [
+ 25351
+ ]
+ ],
+ [
+ [
+ 127536,
+ 127536
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 127537,
+ 127537
+ ],
+ "mapped",
+ [
+ 25171
+ ]
+ ],
+ [
+ [
+ 127538,
+ 127538
+ ],
+ "mapped",
+ [
+ 31105
+ ]
+ ],
+ [
+ [
+ 127539,
+ 127539
+ ],
+ "mapped",
+ [
+ 31354
+ ]
+ ],
+ [
+ [
+ 127540,
+ 127540
+ ],
+ "mapped",
+ [
+ 21512
+ ]
+ ],
+ [
+ [
+ 127541,
+ 127541
+ ],
+ "mapped",
+ [
+ 28288
+ ]
+ ],
+ [
+ [
+ 127542,
+ 127542
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 127543,
+ 127543
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 127544,
+ 127544
+ ],
+ "mapped",
+ [
+ 30003
+ ]
+ ],
+ [
+ [
+ 127545,
+ 127545
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 127546,
+ 127546
+ ],
+ "mapped",
+ [
+ 21942
+ ]
+ ],
+ [
+ [
+ 127547,
+ 127551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127552,
+ 127552
+ ],
+ "mapped",
+ [
+ 12308,
+ 26412,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127553,
+ 127553
+ ],
+ "mapped",
+ [
+ 12308,
+ 19977,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127554,
+ 127554
+ ],
+ "mapped",
+ [
+ 12308,
+ 20108,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127555,
+ 127555
+ ],
+ "mapped",
+ [
+ 12308,
+ 23433,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127556,
+ 127556
+ ],
+ "mapped",
+ [
+ 12308,
+ 28857,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127557,
+ 127557
+ ],
+ "mapped",
+ [
+ 12308,
+ 25171,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127558,
+ 127558
+ ],
+ "mapped",
+ [
+ 12308,
+ 30423,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127559,
+ 127559
+ ],
+ "mapped",
+ [
+ 12308,
+ 21213,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127560,
+ 127560
+ ],
+ "mapped",
+ [
+ 12308,
+ 25943,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127561,
+ 127567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127568,
+ 127568
+ ],
+ "mapped",
+ [
+ 24471
+ ]
+ ],
+ [
+ [
+ 127569,
+ 127569
+ ],
+ "mapped",
+ [
+ 21487
+ ]
+ ],
+ [
+ [
+ 127570,
+ 127743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127744,
+ 127776
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127777,
+ 127788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127789,
+ 127791
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127792,
+ 127797
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127798,
+ 127798
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127799,
+ 127868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127869,
+ 127869
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127870,
+ 127871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127872,
+ 127891
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127892,
+ 127903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127904,
+ 127940
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127941,
+ 127941
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127942,
+ 127946
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127947,
+ 127950
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127951,
+ 127955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127956,
+ 127967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127968,
+ 127984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127985,
+ 127991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127992,
+ 127999
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128000,
+ 128062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128063,
+ 128063
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128064,
+ 128064
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128065,
+ 128065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128066,
+ 128247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128248,
+ 128248
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128249,
+ 128252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128253,
+ 128254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128255,
+ 128255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128256,
+ 128317
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128318,
+ 128319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128320,
+ 128323
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128324,
+ 128330
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128331,
+ 128335
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128336,
+ 128359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128360,
+ 128377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128378,
+ 128378
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128379,
+ 128419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128420,
+ 128420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128421,
+ 128506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128507,
+ 128511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128512,
+ 128512
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128513,
+ 128528
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128529,
+ 128529
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128530,
+ 128532
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128533,
+ 128533
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128534,
+ 128534
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128535,
+ 128535
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128536,
+ 128536
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128537,
+ 128537
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128538,
+ 128538
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128539,
+ 128539
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128540,
+ 128542
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128543,
+ 128543
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128544,
+ 128549
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128550,
+ 128551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128552,
+ 128555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128556,
+ 128556
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128557,
+ 128557
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128558,
+ 128559
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128560,
+ 128563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128564,
+ 128564
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128565,
+ 128576
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128577,
+ 128578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128579,
+ 128580
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128581,
+ 128591
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128592,
+ 128639
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128640,
+ 128709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128710,
+ 128719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128720,
+ 128720
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128721,
+ 128735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128736,
+ 128748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128749,
+ 128751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128752,
+ 128755
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128756,
+ 128767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128768,
+ 128883
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128884,
+ 128895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128896,
+ 128980
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128981,
+ 129023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129024,
+ 129035
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129036,
+ 129039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129040,
+ 129095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129096,
+ 129103
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129104,
+ 129113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129114,
+ 129119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129120,
+ 129159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129160,
+ 129167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129168,
+ 129197
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129198,
+ 129295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129296,
+ 129304
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129305,
+ 129407
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129408,
+ 129412
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129413,
+ 129471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129472,
+ 129472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129473,
+ 131069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131070,
+ 131071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131072,
+ 173782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 173783,
+ 173823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 173824,
+ 177972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 177973,
+ 177983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 177984,
+ 178205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 178206,
+ 178207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 178208,
+ 183969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 183970,
+ 194559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194560,
+ 194560
+ ],
+ "mapped",
+ [
+ 20029
+ ]
+ ],
+ [
+ [
+ 194561,
+ 194561
+ ],
+ "mapped",
+ [
+ 20024
+ ]
+ ],
+ [
+ [
+ 194562,
+ 194562
+ ],
+ "mapped",
+ [
+ 20033
+ ]
+ ],
+ [
+ [
+ 194563,
+ 194563
+ ],
+ "mapped",
+ [
+ 131362
+ ]
+ ],
+ [
+ [
+ 194564,
+ 194564
+ ],
+ "mapped",
+ [
+ 20320
+ ]
+ ],
+ [
+ [
+ 194565,
+ 194565
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 194566,
+ 194566
+ ],
+ "mapped",
+ [
+ 20411
+ ]
+ ],
+ [
+ [
+ 194567,
+ 194567
+ ],
+ "mapped",
+ [
+ 20482
+ ]
+ ],
+ [
+ [
+ 194568,
+ 194568
+ ],
+ "mapped",
+ [
+ 20602
+ ]
+ ],
+ [
+ [
+ 194569,
+ 194569
+ ],
+ "mapped",
+ [
+ 20633
+ ]
+ ],
+ [
+ [
+ 194570,
+ 194570
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 194571,
+ 194571
+ ],
+ "mapped",
+ [
+ 20687
+ ]
+ ],
+ [
+ [
+ 194572,
+ 194572
+ ],
+ "mapped",
+ [
+ 13470
+ ]
+ ],
+ [
+ [
+ 194573,
+ 194573
+ ],
+ "mapped",
+ [
+ 132666
+ ]
+ ],
+ [
+ [
+ 194574,
+ 194574
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 194575,
+ 194575
+ ],
+ "mapped",
+ [
+ 20820
+ ]
+ ],
+ [
+ [
+ 194576,
+ 194576
+ ],
+ "mapped",
+ [
+ 20836
+ ]
+ ],
+ [
+ [
+ 194577,
+ 194577
+ ],
+ "mapped",
+ [
+ 20855
+ ]
+ ],
+ [
+ [
+ 194578,
+ 194578
+ ],
+ "mapped",
+ [
+ 132380
+ ]
+ ],
+ [
+ [
+ 194579,
+ 194579
+ ],
+ "mapped",
+ [
+ 13497
+ ]
+ ],
+ [
+ [
+ 194580,
+ 194580
+ ],
+ "mapped",
+ [
+ 20839
+ ]
+ ],
+ [
+ [
+ 194581,
+ 194581
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 194582,
+ 194582
+ ],
+ "mapped",
+ [
+ 132427
+ ]
+ ],
+ [
+ [
+ 194583,
+ 194583
+ ],
+ "mapped",
+ [
+ 20887
+ ]
+ ],
+ [
+ [
+ 194584,
+ 194584
+ ],
+ "mapped",
+ [
+ 20900
+ ]
+ ],
+ [
+ [
+ 194585,
+ 194585
+ ],
+ "mapped",
+ [
+ 20172
+ ]
+ ],
+ [
+ [
+ 194586,
+ 194586
+ ],
+ "mapped",
+ [
+ 20908
+ ]
+ ],
+ [
+ [
+ 194587,
+ 194587
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 194588,
+ 194588
+ ],
+ "mapped",
+ [
+ 168415
+ ]
+ ],
+ [
+ [
+ 194589,
+ 194589
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 194590,
+ 194590
+ ],
+ "mapped",
+ [
+ 20995
+ ]
+ ],
+ [
+ [
+ 194591,
+ 194591
+ ],
+ "mapped",
+ [
+ 13535
+ ]
+ ],
+ [
+ [
+ 194592,
+ 194592
+ ],
+ "mapped",
+ [
+ 21051
+ ]
+ ],
+ [
+ [
+ 194593,
+ 194593
+ ],
+ "mapped",
+ [
+ 21062
+ ]
+ ],
+ [
+ [
+ 194594,
+ 194594
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 194595,
+ 194595
+ ],
+ "mapped",
+ [
+ 21111
+ ]
+ ],
+ [
+ [
+ 194596,
+ 194596
+ ],
+ "mapped",
+ [
+ 13589
+ ]
+ ],
+ [
+ [
+ 194597,
+ 194597
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 194598,
+ 194598
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 194599,
+ 194599
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 194600,
+ 194600
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 194601,
+ 194601
+ ],
+ "mapped",
+ [
+ 21253
+ ]
+ ],
+ [
+ [
+ 194602,
+ 194602
+ ],
+ "mapped",
+ [
+ 21254
+ ]
+ ],
+ [
+ [
+ 194603,
+ 194603
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 194604,
+ 194604
+ ],
+ "mapped",
+ [
+ 21321
+ ]
+ ],
+ [
+ [
+ 194605,
+ 194605
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 194606,
+ 194606
+ ],
+ "mapped",
+ [
+ 21338
+ ]
+ ],
+ [
+ [
+ 194607,
+ 194607
+ ],
+ "mapped",
+ [
+ 21363
+ ]
+ ],
+ [
+ [
+ 194608,
+ 194608
+ ],
+ "mapped",
+ [
+ 21373
+ ]
+ ],
+ [
+ [
+ 194609,
+ 194611
+ ],
+ "mapped",
+ [
+ 21375
+ ]
+ ],
+ [
+ [
+ 194612,
+ 194612
+ ],
+ "mapped",
+ [
+ 133676
+ ]
+ ],
+ [
+ [
+ 194613,
+ 194613
+ ],
+ "mapped",
+ [
+ 28784
+ ]
+ ],
+ [
+ [
+ 194614,
+ 194614
+ ],
+ "mapped",
+ [
+ 21450
+ ]
+ ],
+ [
+ [
+ 194615,
+ 194615
+ ],
+ "mapped",
+ [
+ 21471
+ ]
+ ],
+ [
+ [
+ 194616,
+ 194616
+ ],
+ "mapped",
+ [
+ 133987
+ ]
+ ],
+ [
+ [
+ 194617,
+ 194617
+ ],
+ "mapped",
+ [
+ 21483
+ ]
+ ],
+ [
+ [
+ 194618,
+ 194618
+ ],
+ "mapped",
+ [
+ 21489
+ ]
+ ],
+ [
+ [
+ 194619,
+ 194619
+ ],
+ "mapped",
+ [
+ 21510
+ ]
+ ],
+ [
+ [
+ 194620,
+ 194620
+ ],
+ "mapped",
+ [
+ 21662
+ ]
+ ],
+ [
+ [
+ 194621,
+ 194621
+ ],
+ "mapped",
+ [
+ 21560
+ ]
+ ],
+ [
+ [
+ 194622,
+ 194622
+ ],
+ "mapped",
+ [
+ 21576
+ ]
+ ],
+ [
+ [
+ 194623,
+ 194623
+ ],
+ "mapped",
+ [
+ 21608
+ ]
+ ],
+ [
+ [
+ 194624,
+ 194624
+ ],
+ "mapped",
+ [
+ 21666
+ ]
+ ],
+ [
+ [
+ 194625,
+ 194625
+ ],
+ "mapped",
+ [
+ 21750
+ ]
+ ],
+ [
+ [
+ 194626,
+ 194626
+ ],
+ "mapped",
+ [
+ 21776
+ ]
+ ],
+ [
+ [
+ 194627,
+ 194627
+ ],
+ "mapped",
+ [
+ 21843
+ ]
+ ],
+ [
+ [
+ 194628,
+ 194628
+ ],
+ "mapped",
+ [
+ 21859
+ ]
+ ],
+ [
+ [
+ 194629,
+ 194630
+ ],
+ "mapped",
+ [
+ 21892
+ ]
+ ],
+ [
+ [
+ 194631,
+ 194631
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 194632,
+ 194632
+ ],
+ "mapped",
+ [
+ 21931
+ ]
+ ],
+ [
+ [
+ 194633,
+ 194633
+ ],
+ "mapped",
+ [
+ 21939
+ ]
+ ],
+ [
+ [
+ 194634,
+ 194634
+ ],
+ "mapped",
+ [
+ 21954
+ ]
+ ],
+ [
+ [
+ 194635,
+ 194635
+ ],
+ "mapped",
+ [
+ 22294
+ ]
+ ],
+ [
+ [
+ 194636,
+ 194636
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 194637,
+ 194637
+ ],
+ "mapped",
+ [
+ 22295
+ ]
+ ],
+ [
+ [
+ 194638,
+ 194638
+ ],
+ "mapped",
+ [
+ 22097
+ ]
+ ],
+ [
+ [
+ 194639,
+ 194639
+ ],
+ "mapped",
+ [
+ 22132
+ ]
+ ],
+ [
+ [
+ 194640,
+ 194640
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 194641,
+ 194641
+ ],
+ "mapped",
+ [
+ 22766
+ ]
+ ],
+ [
+ [
+ 194642,
+ 194642
+ ],
+ "mapped",
+ [
+ 22478
+ ]
+ ],
+ [
+ [
+ 194643,
+ 194643
+ ],
+ "mapped",
+ [
+ 22516
+ ]
+ ],
+ [
+ [
+ 194644,
+ 194644
+ ],
+ "mapped",
+ [
+ 22541
+ ]
+ ],
+ [
+ [
+ 194645,
+ 194645
+ ],
+ "mapped",
+ [
+ 22411
+ ]
+ ],
+ [
+ [
+ 194646,
+ 194646
+ ],
+ "mapped",
+ [
+ 22578
+ ]
+ ],
+ [
+ [
+ 194647,
+ 194647
+ ],
+ "mapped",
+ [
+ 22577
+ ]
+ ],
+ [
+ [
+ 194648,
+ 194648
+ ],
+ "mapped",
+ [
+ 22700
+ ]
+ ],
+ [
+ [
+ 194649,
+ 194649
+ ],
+ "mapped",
+ [
+ 136420
+ ]
+ ],
+ [
+ [
+ 194650,
+ 194650
+ ],
+ "mapped",
+ [
+ 22770
+ ]
+ ],
+ [
+ [
+ 194651,
+ 194651
+ ],
+ "mapped",
+ [
+ 22775
+ ]
+ ],
+ [
+ [
+ 194652,
+ 194652
+ ],
+ "mapped",
+ [
+ 22790
+ ]
+ ],
+ [
+ [
+ 194653,
+ 194653
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 194654,
+ 194654
+ ],
+ "mapped",
+ [
+ 22818
+ ]
+ ],
+ [
+ [
+ 194655,
+ 194655
+ ],
+ "mapped",
+ [
+ 22882
+ ]
+ ],
+ [
+ [
+ 194656,
+ 194656
+ ],
+ "mapped",
+ [
+ 136872
+ ]
+ ],
+ [
+ [
+ 194657,
+ 194657
+ ],
+ "mapped",
+ [
+ 136938
+ ]
+ ],
+ [
+ [
+ 194658,
+ 194658
+ ],
+ "mapped",
+ [
+ 23020
+ ]
+ ],
+ [
+ [
+ 194659,
+ 194659
+ ],
+ "mapped",
+ [
+ 23067
+ ]
+ ],
+ [
+ [
+ 194660,
+ 194660
+ ],
+ "mapped",
+ [
+ 23079
+ ]
+ ],
+ [
+ [
+ 194661,
+ 194661
+ ],
+ "mapped",
+ [
+ 23000
+ ]
+ ],
+ [
+ [
+ 194662,
+ 194662
+ ],
+ "mapped",
+ [
+ 23142
+ ]
+ ],
+ [
+ [
+ 194663,
+ 194663
+ ],
+ "mapped",
+ [
+ 14062
+ ]
+ ],
+ [
+ [
+ 194664,
+ 194664
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194665,
+ 194665
+ ],
+ "mapped",
+ [
+ 23304
+ ]
+ ],
+ [
+ [
+ 194666,
+ 194667
+ ],
+ "mapped",
+ [
+ 23358
+ ]
+ ],
+ [
+ [
+ 194668,
+ 194668
+ ],
+ "mapped",
+ [
+ 137672
+ ]
+ ],
+ [
+ [
+ 194669,
+ 194669
+ ],
+ "mapped",
+ [
+ 23491
+ ]
+ ],
+ [
+ [
+ 194670,
+ 194670
+ ],
+ "mapped",
+ [
+ 23512
+ ]
+ ],
+ [
+ [
+ 194671,
+ 194671
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 194672,
+ 194672
+ ],
+ "mapped",
+ [
+ 23539
+ ]
+ ],
+ [
+ [
+ 194673,
+ 194673
+ ],
+ "mapped",
+ [
+ 138008
+ ]
+ ],
+ [
+ [
+ 194674,
+ 194674
+ ],
+ "mapped",
+ [
+ 23551
+ ]
+ ],
+ [
+ [
+ 194675,
+ 194675
+ ],
+ "mapped",
+ [
+ 23558
+ ]
+ ],
+ [
+ [
+ 194676,
+ 194676
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194677,
+ 194677
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 194678,
+ 194678
+ ],
+ "mapped",
+ [
+ 14209
+ ]
+ ],
+ [
+ [
+ 194679,
+ 194679
+ ],
+ "mapped",
+ [
+ 23648
+ ]
+ ],
+ [
+ [
+ 194680,
+ 194680
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 194681,
+ 194681
+ ],
+ "mapped",
+ [
+ 23744
+ ]
+ ],
+ [
+ [
+ 194682,
+ 194682
+ ],
+ "mapped",
+ [
+ 23693
+ ]
+ ],
+ [
+ [
+ 194683,
+ 194683
+ ],
+ "mapped",
+ [
+ 138724
+ ]
+ ],
+ [
+ [
+ 194684,
+ 194684
+ ],
+ "mapped",
+ [
+ 23875
+ ]
+ ],
+ [
+ [
+ 194685,
+ 194685
+ ],
+ "mapped",
+ [
+ 138726
+ ]
+ ],
+ [
+ [
+ 194686,
+ 194686
+ ],
+ "mapped",
+ [
+ 23918
+ ]
+ ],
+ [
+ [
+ 194687,
+ 194687
+ ],
+ "mapped",
+ [
+ 23915
+ ]
+ ],
+ [
+ [
+ 194688,
+ 194688
+ ],
+ "mapped",
+ [
+ 23932
+ ]
+ ],
+ [
+ [
+ 194689,
+ 194689
+ ],
+ "mapped",
+ [
+ 24033
+ ]
+ ],
+ [
+ [
+ 194690,
+ 194690
+ ],
+ "mapped",
+ [
+ 24034
+ ]
+ ],
+ [
+ [
+ 194691,
+ 194691
+ ],
+ "mapped",
+ [
+ 14383
+ ]
+ ],
+ [
+ [
+ 194692,
+ 194692
+ ],
+ "mapped",
+ [
+ 24061
+ ]
+ ],
+ [
+ [
+ 194693,
+ 194693
+ ],
+ "mapped",
+ [
+ 24104
+ ]
+ ],
+ [
+ [
+ 194694,
+ 194694
+ ],
+ "mapped",
+ [
+ 24125
+ ]
+ ],
+ [
+ [
+ 194695,
+ 194695
+ ],
+ "mapped",
+ [
+ 24169
+ ]
+ ],
+ [
+ [
+ 194696,
+ 194696
+ ],
+ "mapped",
+ [
+ 14434
+ ]
+ ],
+ [
+ [
+ 194697,
+ 194697
+ ],
+ "mapped",
+ [
+ 139651
+ ]
+ ],
+ [
+ [
+ 194698,
+ 194698
+ ],
+ "mapped",
+ [
+ 14460
+ ]
+ ],
+ [
+ [
+ 194699,
+ 194699
+ ],
+ "mapped",
+ [
+ 24240
+ ]
+ ],
+ [
+ [
+ 194700,
+ 194700
+ ],
+ "mapped",
+ [
+ 24243
+ ]
+ ],
+ [
+ [
+ 194701,
+ 194701
+ ],
+ "mapped",
+ [
+ 24246
+ ]
+ ],
+ [
+ [
+ 194702,
+ 194702
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 194703,
+ 194703
+ ],
+ "mapped",
+ [
+ 172946
+ ]
+ ],
+ [
+ [
+ 194704,
+ 194704
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 194705,
+ 194706
+ ],
+ "mapped",
+ [
+ 140081
+ ]
+ ],
+ [
+ [
+ 194707,
+ 194707
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194708,
+ 194709
+ ],
+ "mapped",
+ [
+ 24354
+ ]
+ ],
+ [
+ [
+ 194710,
+ 194710
+ ],
+ "mapped",
+ [
+ 14535
+ ]
+ ],
+ [
+ [
+ 194711,
+ 194711
+ ],
+ "mapped",
+ [
+ 144056
+ ]
+ ],
+ [
+ [
+ 194712,
+ 194712
+ ],
+ "mapped",
+ [
+ 156122
+ ]
+ ],
+ [
+ [
+ 194713,
+ 194713
+ ],
+ "mapped",
+ [
+ 24418
+ ]
+ ],
+ [
+ [
+ 194714,
+ 194714
+ ],
+ "mapped",
+ [
+ 24427
+ ]
+ ],
+ [
+ [
+ 194715,
+ 194715
+ ],
+ "mapped",
+ [
+ 14563
+ ]
+ ],
+ [
+ [
+ 194716,
+ 194716
+ ],
+ "mapped",
+ [
+ 24474
+ ]
+ ],
+ [
+ [
+ 194717,
+ 194717
+ ],
+ "mapped",
+ [
+ 24525
+ ]
+ ],
+ [
+ [
+ 194718,
+ 194718
+ ],
+ "mapped",
+ [
+ 24535
+ ]
+ ],
+ [
+ [
+ 194719,
+ 194719
+ ],
+ "mapped",
+ [
+ 24569
+ ]
+ ],
+ [
+ [
+ 194720,
+ 194720
+ ],
+ "mapped",
+ [
+ 24705
+ ]
+ ],
+ [
+ [
+ 194721,
+ 194721
+ ],
+ "mapped",
+ [
+ 14650
+ ]
+ ],
+ [
+ [
+ 194722,
+ 194722
+ ],
+ "mapped",
+ [
+ 14620
+ ]
+ ],
+ [
+ [
+ 194723,
+ 194723
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 194724,
+ 194724
+ ],
+ "mapped",
+ [
+ 141012
+ ]
+ ],
+ [
+ [
+ 194725,
+ 194725
+ ],
+ "mapped",
+ [
+ 24775
+ ]
+ ],
+ [
+ [
+ 194726,
+ 194726
+ ],
+ "mapped",
+ [
+ 24904
+ ]
+ ],
+ [
+ [
+ 194727,
+ 194727
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194728,
+ 194728
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 194729,
+ 194729
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194730,
+ 194730
+ ],
+ "mapped",
+ [
+ 24954
+ ]
+ ],
+ [
+ [
+ 194731,
+ 194731
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 194732,
+ 194732
+ ],
+ "mapped",
+ [
+ 25010
+ ]
+ ],
+ [
+ [
+ 194733,
+ 194733
+ ],
+ "mapped",
+ [
+ 24996
+ ]
+ ],
+ [
+ [
+ 194734,
+ 194734
+ ],
+ "mapped",
+ [
+ 25007
+ ]
+ ],
+ [
+ [
+ 194735,
+ 194735
+ ],
+ "mapped",
+ [
+ 25054
+ ]
+ ],
+ [
+ [
+ 194736,
+ 194736
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 194737,
+ 194737
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 194738,
+ 194738
+ ],
+ "mapped",
+ [
+ 25104
+ ]
+ ],
+ [
+ [
+ 194739,
+ 194739
+ ],
+ "mapped",
+ [
+ 25115
+ ]
+ ],
+ [
+ [
+ 194740,
+ 194740
+ ],
+ "mapped",
+ [
+ 25181
+ ]
+ ],
+ [
+ [
+ 194741,
+ 194741
+ ],
+ "mapped",
+ [
+ 25265
+ ]
+ ],
+ [
+ [
+ 194742,
+ 194742
+ ],
+ "mapped",
+ [
+ 25300
+ ]
+ ],
+ [
+ [
+ 194743,
+ 194743
+ ],
+ "mapped",
+ [
+ 25424
+ ]
+ ],
+ [
+ [
+ 194744,
+ 194744
+ ],
+ "mapped",
+ [
+ 142092
+ ]
+ ],
+ [
+ [
+ 194745,
+ 194745
+ ],
+ "mapped",
+ [
+ 25405
+ ]
+ ],
+ [
+ [
+ 194746,
+ 194746
+ ],
+ "mapped",
+ [
+ 25340
+ ]
+ ],
+ [
+ [
+ 194747,
+ 194747
+ ],
+ "mapped",
+ [
+ 25448
+ ]
+ ],
+ [
+ [
+ 194748,
+ 194748
+ ],
+ "mapped",
+ [
+ 25475
+ ]
+ ],
+ [
+ [
+ 194749,
+ 194749
+ ],
+ "mapped",
+ [
+ 25572
+ ]
+ ],
+ [
+ [
+ 194750,
+ 194750
+ ],
+ "mapped",
+ [
+ 142321
+ ]
+ ],
+ [
+ [
+ 194751,
+ 194751
+ ],
+ "mapped",
+ [
+ 25634
+ ]
+ ],
+ [
+ [
+ 194752,
+ 194752
+ ],
+ "mapped",
+ [
+ 25541
+ ]
+ ],
+ [
+ [
+ 194753,
+ 194753
+ ],
+ "mapped",
+ [
+ 25513
+ ]
+ ],
+ [
+ [
+ 194754,
+ 194754
+ ],
+ "mapped",
+ [
+ 14894
+ ]
+ ],
+ [
+ [
+ 194755,
+ 194755
+ ],
+ "mapped",
+ [
+ 25705
+ ]
+ ],
+ [
+ [
+ 194756,
+ 194756
+ ],
+ "mapped",
+ [
+ 25726
+ ]
+ ],
+ [
+ [
+ 194757,
+ 194757
+ ],
+ "mapped",
+ [
+ 25757
+ ]
+ ],
+ [
+ [
+ 194758,
+ 194758
+ ],
+ "mapped",
+ [
+ 25719
+ ]
+ ],
+ [
+ [
+ 194759,
+ 194759
+ ],
+ "mapped",
+ [
+ 14956
+ ]
+ ],
+ [
+ [
+ 194760,
+ 194760
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 194761,
+ 194761
+ ],
+ "mapped",
+ [
+ 25964
+ ]
+ ],
+ [
+ [
+ 194762,
+ 194762
+ ],
+ "mapped",
+ [
+ 143370
+ ]
+ ],
+ [
+ [
+ 194763,
+ 194763
+ ],
+ "mapped",
+ [
+ 26083
+ ]
+ ],
+ [
+ [
+ 194764,
+ 194764
+ ],
+ "mapped",
+ [
+ 26360
+ ]
+ ],
+ [
+ [
+ 194765,
+ 194765
+ ],
+ "mapped",
+ [
+ 26185
+ ]
+ ],
+ [
+ [
+ 194766,
+ 194766
+ ],
+ "mapped",
+ [
+ 15129
+ ]
+ ],
+ [
+ [
+ 194767,
+ 194767
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 194768,
+ 194768
+ ],
+ "mapped",
+ [
+ 15112
+ ]
+ ],
+ [
+ [
+ 194769,
+ 194769
+ ],
+ "mapped",
+ [
+ 15076
+ ]
+ ],
+ [
+ [
+ 194770,
+ 194770
+ ],
+ "mapped",
+ [
+ 20882
+ ]
+ ],
+ [
+ [
+ 194771,
+ 194771
+ ],
+ "mapped",
+ [
+ 20885
+ ]
+ ],
+ [
+ [
+ 194772,
+ 194772
+ ],
+ "mapped",
+ [
+ 26368
+ ]
+ ],
+ [
+ [
+ 194773,
+ 194773
+ ],
+ "mapped",
+ [
+ 26268
+ ]
+ ],
+ [
+ [
+ 194774,
+ 194774
+ ],
+ "mapped",
+ [
+ 32941
+ ]
+ ],
+ [
+ [
+ 194775,
+ 194775
+ ],
+ "mapped",
+ [
+ 17369
+ ]
+ ],
+ [
+ [
+ 194776,
+ 194776
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 194777,
+ 194777
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 194778,
+ 194778
+ ],
+ "mapped",
+ [
+ 26401
+ ]
+ ],
+ [
+ [
+ 194779,
+ 194779
+ ],
+ "mapped",
+ [
+ 26462
+ ]
+ ],
+ [
+ [
+ 194780,
+ 194780
+ ],
+ "mapped",
+ [
+ 26451
+ ]
+ ],
+ [
+ [
+ 194781,
+ 194781
+ ],
+ "mapped",
+ [
+ 144323
+ ]
+ ],
+ [
+ [
+ 194782,
+ 194782
+ ],
+ "mapped",
+ [
+ 15177
+ ]
+ ],
+ [
+ [
+ 194783,
+ 194783
+ ],
+ "mapped",
+ [
+ 26618
+ ]
+ ],
+ [
+ [
+ 194784,
+ 194784
+ ],
+ "mapped",
+ [
+ 26501
+ ]
+ ],
+ [
+ [
+ 194785,
+ 194785
+ ],
+ "mapped",
+ [
+ 26706
+ ]
+ ],
+ [
+ [
+ 194786,
+ 194786
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 194787,
+ 194787
+ ],
+ "mapped",
+ [
+ 144493
+ ]
+ ],
+ [
+ [
+ 194788,
+ 194788
+ ],
+ "mapped",
+ [
+ 26766
+ ]
+ ],
+ [
+ [
+ 194789,
+ 194789
+ ],
+ "mapped",
+ [
+ 26655
+ ]
+ ],
+ [
+ [
+ 194790,
+ 194790
+ ],
+ "mapped",
+ [
+ 26900
+ ]
+ ],
+ [
+ [
+ 194791,
+ 194791
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 194792,
+ 194792
+ ],
+ "mapped",
+ [
+ 26946
+ ]
+ ],
+ [
+ [
+ 194793,
+ 194793
+ ],
+ "mapped",
+ [
+ 27043
+ ]
+ ],
+ [
+ [
+ 194794,
+ 194794
+ ],
+ "mapped",
+ [
+ 27114
+ ]
+ ],
+ [
+ [
+ 194795,
+ 194795
+ ],
+ "mapped",
+ [
+ 27304
+ ]
+ ],
+ [
+ [
+ 194796,
+ 194796
+ ],
+ "mapped",
+ [
+ 145059
+ ]
+ ],
+ [
+ [
+ 194797,
+ 194797
+ ],
+ "mapped",
+ [
+ 27355
+ ]
+ ],
+ [
+ [
+ 194798,
+ 194798
+ ],
+ "mapped",
+ [
+ 15384
+ ]
+ ],
+ [
+ [
+ 194799,
+ 194799
+ ],
+ "mapped",
+ [
+ 27425
+ ]
+ ],
+ [
+ [
+ 194800,
+ 194800
+ ],
+ "mapped",
+ [
+ 145575
+ ]
+ ],
+ [
+ [
+ 194801,
+ 194801
+ ],
+ "mapped",
+ [
+ 27476
+ ]
+ ],
+ [
+ [
+ 194802,
+ 194802
+ ],
+ "mapped",
+ [
+ 15438
+ ]
+ ],
+ [
+ [
+ 194803,
+ 194803
+ ],
+ "mapped",
+ [
+ 27506
+ ]
+ ],
+ [
+ [
+ 194804,
+ 194804
+ ],
+ "mapped",
+ [
+ 27551
+ ]
+ ],
+ [
+ [
+ 194805,
+ 194805
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 194806,
+ 194806
+ ],
+ "mapped",
+ [
+ 27579
+ ]
+ ],
+ [
+ [
+ 194807,
+ 194807
+ ],
+ "mapped",
+ [
+ 146061
+ ]
+ ],
+ [
+ [
+ 194808,
+ 194808
+ ],
+ "mapped",
+ [
+ 138507
+ ]
+ ],
+ [
+ [
+ 194809,
+ 194809
+ ],
+ "mapped",
+ [
+ 146170
+ ]
+ ],
+ [
+ [
+ 194810,
+ 194810
+ ],
+ "mapped",
+ [
+ 27726
+ ]
+ ],
+ [
+ [
+ 194811,
+ 194811
+ ],
+ "mapped",
+ [
+ 146620
+ ]
+ ],
+ [
+ [
+ 194812,
+ 194812
+ ],
+ "mapped",
+ [
+ 27839
+ ]
+ ],
+ [
+ [
+ 194813,
+ 194813
+ ],
+ "mapped",
+ [
+ 27853
+ ]
+ ],
+ [
+ [
+ 194814,
+ 194814
+ ],
+ "mapped",
+ [
+ 27751
+ ]
+ ],
+ [
+ [
+ 194815,
+ 194815
+ ],
+ "mapped",
+ [
+ 27926
+ ]
+ ],
+ [
+ [
+ 194816,
+ 194816
+ ],
+ "mapped",
+ [
+ 27966
+ ]
+ ],
+ [
+ [
+ 194817,
+ 194817
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 194818,
+ 194818
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 194819,
+ 194819
+ ],
+ "mapped",
+ [
+ 28009
+ ]
+ ],
+ [
+ [
+ 194820,
+ 194820
+ ],
+ "mapped",
+ [
+ 28024
+ ]
+ ],
+ [
+ [
+ 194821,
+ 194821
+ ],
+ "mapped",
+ [
+ 28037
+ ]
+ ],
+ [
+ [
+ 194822,
+ 194822
+ ],
+ "mapped",
+ [
+ 146718
+ ]
+ ],
+ [
+ [
+ 194823,
+ 194823
+ ],
+ "mapped",
+ [
+ 27956
+ ]
+ ],
+ [
+ [
+ 194824,
+ 194824
+ ],
+ "mapped",
+ [
+ 28207
+ ]
+ ],
+ [
+ [
+ 194825,
+ 194825
+ ],
+ "mapped",
+ [
+ 28270
+ ]
+ ],
+ [
+ [
+ 194826,
+ 194826
+ ],
+ "mapped",
+ [
+ 15667
+ ]
+ ],
+ [
+ [
+ 194827,
+ 194827
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 194828,
+ 194828
+ ],
+ "mapped",
+ [
+ 28359
+ ]
+ ],
+ [
+ [
+ 194829,
+ 194829
+ ],
+ "mapped",
+ [
+ 147153
+ ]
+ ],
+ [
+ [
+ 194830,
+ 194830
+ ],
+ "mapped",
+ [
+ 28153
+ ]
+ ],
+ [
+ [
+ 194831,
+ 194831
+ ],
+ "mapped",
+ [
+ 28526
+ ]
+ ],
+ [
+ [
+ 194832,
+ 194832
+ ],
+ "mapped",
+ [
+ 147294
+ ]
+ ],
+ [
+ [
+ 194833,
+ 194833
+ ],
+ "mapped",
+ [
+ 147342
+ ]
+ ],
+ [
+ [
+ 194834,
+ 194834
+ ],
+ "mapped",
+ [
+ 28614
+ ]
+ ],
+ [
+ [
+ 194835,
+ 194835
+ ],
+ "mapped",
+ [
+ 28729
+ ]
+ ],
+ [
+ [
+ 194836,
+ 194836
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 194837,
+ 194837
+ ],
+ "mapped",
+ [
+ 28699
+ ]
+ ],
+ [
+ [
+ 194838,
+ 194838
+ ],
+ "mapped",
+ [
+ 15766
+ ]
+ ],
+ [
+ [
+ 194839,
+ 194839
+ ],
+ "mapped",
+ [
+ 28746
+ ]
+ ],
+ [
+ [
+ 194840,
+ 194840
+ ],
+ "mapped",
+ [
+ 28797
+ ]
+ ],
+ [
+ [
+ 194841,
+ 194841
+ ],
+ "mapped",
+ [
+ 28791
+ ]
+ ],
+ [
+ [
+ 194842,
+ 194842
+ ],
+ "mapped",
+ [
+ 28845
+ ]
+ ],
+ [
+ [
+ 194843,
+ 194843
+ ],
+ "mapped",
+ [
+ 132389
+ ]
+ ],
+ [
+ [
+ 194844,
+ 194844
+ ],
+ "mapped",
+ [
+ 28997
+ ]
+ ],
+ [
+ [
+ 194845,
+ 194845
+ ],
+ "mapped",
+ [
+ 148067
+ ]
+ ],
+ [
+ [
+ 194846,
+ 194846
+ ],
+ "mapped",
+ [
+ 29084
+ ]
+ ],
+ [
+ [
+ 194847,
+ 194847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194848,
+ 194848
+ ],
+ "mapped",
+ [
+ 29224
+ ]
+ ],
+ [
+ [
+ 194849,
+ 194849
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 194850,
+ 194850
+ ],
+ "mapped",
+ [
+ 29264
+ ]
+ ],
+ [
+ [
+ 194851,
+ 194851
+ ],
+ "mapped",
+ [
+ 149000
+ ]
+ ],
+ [
+ [
+ 194852,
+ 194852
+ ],
+ "mapped",
+ [
+ 29312
+ ]
+ ],
+ [
+ [
+ 194853,
+ 194853
+ ],
+ "mapped",
+ [
+ 29333
+ ]
+ ],
+ [
+ [
+ 194854,
+ 194854
+ ],
+ "mapped",
+ [
+ 149301
+ ]
+ ],
+ [
+ [
+ 194855,
+ 194855
+ ],
+ "mapped",
+ [
+ 149524
+ ]
+ ],
+ [
+ [
+ 194856,
+ 194856
+ ],
+ "mapped",
+ [
+ 29562
+ ]
+ ],
+ [
+ [
+ 194857,
+ 194857
+ ],
+ "mapped",
+ [
+ 29579
+ ]
+ ],
+ [
+ [
+ 194858,
+ 194858
+ ],
+ "mapped",
+ [
+ 16044
+ ]
+ ],
+ [
+ [
+ 194859,
+ 194859
+ ],
+ "mapped",
+ [
+ 29605
+ ]
+ ],
+ [
+ [
+ 194860,
+ 194861
+ ],
+ "mapped",
+ [
+ 16056
+ ]
+ ],
+ [
+ [
+ 194862,
+ 194862
+ ],
+ "mapped",
+ [
+ 29767
+ ]
+ ],
+ [
+ [
+ 194863,
+ 194863
+ ],
+ "mapped",
+ [
+ 29788
+ ]
+ ],
+ [
+ [
+ 194864,
+ 194864
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 194865,
+ 194865
+ ],
+ "mapped",
+ [
+ 29829
+ ]
+ ],
+ [
+ [
+ 194866,
+ 194866
+ ],
+ "mapped",
+ [
+ 29898
+ ]
+ ],
+ [
+ [
+ 194867,
+ 194867
+ ],
+ "mapped",
+ [
+ 16155
+ ]
+ ],
+ [
+ [
+ 194868,
+ 194868
+ ],
+ "mapped",
+ [
+ 29988
+ ]
+ ],
+ [
+ [
+ 194869,
+ 194869
+ ],
+ "mapped",
+ [
+ 150582
+ ]
+ ],
+ [
+ [
+ 194870,
+ 194870
+ ],
+ "mapped",
+ [
+ 30014
+ ]
+ ],
+ [
+ [
+ 194871,
+ 194871
+ ],
+ "mapped",
+ [
+ 150674
+ ]
+ ],
+ [
+ [
+ 194872,
+ 194872
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 194873,
+ 194873
+ ],
+ "mapped",
+ [
+ 139679
+ ]
+ ],
+ [
+ [
+ 194874,
+ 194874
+ ],
+ "mapped",
+ [
+ 30224
+ ]
+ ],
+ [
+ [
+ 194875,
+ 194875
+ ],
+ "mapped",
+ [
+ 151457
+ ]
+ ],
+ [
+ [
+ 194876,
+ 194876
+ ],
+ "mapped",
+ [
+ 151480
+ ]
+ ],
+ [
+ [
+ 194877,
+ 194877
+ ],
+ "mapped",
+ [
+ 151620
+ ]
+ ],
+ [
+ [
+ 194878,
+ 194878
+ ],
+ "mapped",
+ [
+ 16380
+ ]
+ ],
+ [
+ [
+ 194879,
+ 194879
+ ],
+ "mapped",
+ [
+ 16392
+ ]
+ ],
+ [
+ [
+ 194880,
+ 194880
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 194881,
+ 194881
+ ],
+ "mapped",
+ [
+ 151795
+ ]
+ ],
+ [
+ [
+ 194882,
+ 194882
+ ],
+ "mapped",
+ [
+ 151794
+ ]
+ ],
+ [
+ [
+ 194883,
+ 194883
+ ],
+ "mapped",
+ [
+ 151833
+ ]
+ ],
+ [
+ [
+ 194884,
+ 194884
+ ],
+ "mapped",
+ [
+ 151859
+ ]
+ ],
+ [
+ [
+ 194885,
+ 194885
+ ],
+ "mapped",
+ [
+ 30494
+ ]
+ ],
+ [
+ [
+ 194886,
+ 194887
+ ],
+ "mapped",
+ [
+ 30495
+ ]
+ ],
+ [
+ [
+ 194888,
+ 194888
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 194889,
+ 194889
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 194890,
+ 194890
+ ],
+ "mapped",
+ [
+ 30603
+ ]
+ ],
+ [
+ [
+ 194891,
+ 194891
+ ],
+ "mapped",
+ [
+ 16454
+ ]
+ ],
+ [
+ [
+ 194892,
+ 194892
+ ],
+ "mapped",
+ [
+ 16534
+ ]
+ ],
+ [
+ [
+ 194893,
+ 194893
+ ],
+ "mapped",
+ [
+ 152605
+ ]
+ ],
+ [
+ [
+ 194894,
+ 194894
+ ],
+ "mapped",
+ [
+ 30798
+ ]
+ ],
+ [
+ [
+ 194895,
+ 194895
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 194896,
+ 194896
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 194897,
+ 194897
+ ],
+ "mapped",
+ [
+ 16611
+ ]
+ ],
+ [
+ [
+ 194898,
+ 194898
+ ],
+ "mapped",
+ [
+ 153126
+ ]
+ ],
+ [
+ [
+ 194899,
+ 194899
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 194900,
+ 194900
+ ],
+ "mapped",
+ [
+ 153242
+ ]
+ ],
+ [
+ [
+ 194901,
+ 194901
+ ],
+ "mapped",
+ [
+ 153285
+ ]
+ ],
+ [
+ [
+ 194902,
+ 194902
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 194903,
+ 194903
+ ],
+ "mapped",
+ [
+ 31211
+ ]
+ ],
+ [
+ [
+ 194904,
+ 194904
+ ],
+ "mapped",
+ [
+ 16687
+ ]
+ ],
+ [
+ [
+ 194905,
+ 194905
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 194906,
+ 194906
+ ],
+ "mapped",
+ [
+ 31306
+ ]
+ ],
+ [
+ [
+ 194907,
+ 194907
+ ],
+ "mapped",
+ [
+ 31311
+ ]
+ ],
+ [
+ [
+ 194908,
+ 194908
+ ],
+ "mapped",
+ [
+ 153980
+ ]
+ ],
+ [
+ [
+ 194909,
+ 194910
+ ],
+ "mapped",
+ [
+ 154279
+ ]
+ ],
+ [
+ [
+ 194911,
+ 194911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194912,
+ 194912
+ ],
+ "mapped",
+ [
+ 16898
+ ]
+ ],
+ [
+ [
+ 194913,
+ 194913
+ ],
+ "mapped",
+ [
+ 154539
+ ]
+ ],
+ [
+ [
+ 194914,
+ 194914
+ ],
+ "mapped",
+ [
+ 31686
+ ]
+ ],
+ [
+ [
+ 194915,
+ 194915
+ ],
+ "mapped",
+ [
+ 31689
+ ]
+ ],
+ [
+ [
+ 194916,
+ 194916
+ ],
+ "mapped",
+ [
+ 16935
+ ]
+ ],
+ [
+ [
+ 194917,
+ 194917
+ ],
+ "mapped",
+ [
+ 154752
+ ]
+ ],
+ [
+ [
+ 194918,
+ 194918
+ ],
+ "mapped",
+ [
+ 31954
+ ]
+ ],
+ [
+ [
+ 194919,
+ 194919
+ ],
+ "mapped",
+ [
+ 17056
+ ]
+ ],
+ [
+ [
+ 194920,
+ 194920
+ ],
+ "mapped",
+ [
+ 31976
+ ]
+ ],
+ [
+ [
+ 194921,
+ 194921
+ ],
+ "mapped",
+ [
+ 31971
+ ]
+ ],
+ [
+ [
+ 194922,
+ 194922
+ ],
+ "mapped",
+ [
+ 32000
+ ]
+ ],
+ [
+ [
+ 194923,
+ 194923
+ ],
+ "mapped",
+ [
+ 155526
+ ]
+ ],
+ [
+ [
+ 194924,
+ 194924
+ ],
+ "mapped",
+ [
+ 32099
+ ]
+ ],
+ [
+ [
+ 194925,
+ 194925
+ ],
+ "mapped",
+ [
+ 17153
+ ]
+ ],
+ [
+ [
+ 194926,
+ 194926
+ ],
+ "mapped",
+ [
+ 32199
+ ]
+ ],
+ [
+ [
+ 194927,
+ 194927
+ ],
+ "mapped",
+ [
+ 32258
+ ]
+ ],
+ [
+ [
+ 194928,
+ 194928
+ ],
+ "mapped",
+ [
+ 32325
+ ]
+ ],
+ [
+ [
+ 194929,
+ 194929
+ ],
+ "mapped",
+ [
+ 17204
+ ]
+ ],
+ [
+ [
+ 194930,
+ 194930
+ ],
+ "mapped",
+ [
+ 156200
+ ]
+ ],
+ [
+ [
+ 194931,
+ 194931
+ ],
+ "mapped",
+ [
+ 156231
+ ]
+ ],
+ [
+ [
+ 194932,
+ 194932
+ ],
+ "mapped",
+ [
+ 17241
+ ]
+ ],
+ [
+ [
+ 194933,
+ 194933
+ ],
+ "mapped",
+ [
+ 156377
+ ]
+ ],
+ [
+ [
+ 194934,
+ 194934
+ ],
+ "mapped",
+ [
+ 32634
+ ]
+ ],
+ [
+ [
+ 194935,
+ 194935
+ ],
+ "mapped",
+ [
+ 156478
+ ]
+ ],
+ [
+ [
+ 194936,
+ 194936
+ ],
+ "mapped",
+ [
+ 32661
+ ]
+ ],
+ [
+ [
+ 194937,
+ 194937
+ ],
+ "mapped",
+ [
+ 32762
+ ]
+ ],
+ [
+ [
+ 194938,
+ 194938
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 194939,
+ 194939
+ ],
+ "mapped",
+ [
+ 156890
+ ]
+ ],
+ [
+ [
+ 194940,
+ 194940
+ ],
+ "mapped",
+ [
+ 156963
+ ]
+ ],
+ [
+ [
+ 194941,
+ 194941
+ ],
+ "mapped",
+ [
+ 32864
+ ]
+ ],
+ [
+ [
+ 194942,
+ 194942
+ ],
+ "mapped",
+ [
+ 157096
+ ]
+ ],
+ [
+ [
+ 194943,
+ 194943
+ ],
+ "mapped",
+ [
+ 32880
+ ]
+ ],
+ [
+ [
+ 194944,
+ 194944
+ ],
+ "mapped",
+ [
+ 144223
+ ]
+ ],
+ [
+ [
+ 194945,
+ 194945
+ ],
+ "mapped",
+ [
+ 17365
+ ]
+ ],
+ [
+ [
+ 194946,
+ 194946
+ ],
+ "mapped",
+ [
+ 32946
+ ]
+ ],
+ [
+ [
+ 194947,
+ 194947
+ ],
+ "mapped",
+ [
+ 33027
+ ]
+ ],
+ [
+ [
+ 194948,
+ 194948
+ ],
+ "mapped",
+ [
+ 17419
+ ]
+ ],
+ [
+ [
+ 194949,
+ 194949
+ ],
+ "mapped",
+ [
+ 33086
+ ]
+ ],
+ [
+ [
+ 194950,
+ 194950
+ ],
+ "mapped",
+ [
+ 23221
+ ]
+ ],
+ [
+ [
+ 194951,
+ 194951
+ ],
+ "mapped",
+ [
+ 157607
+ ]
+ ],
+ [
+ [
+ 194952,
+ 194952
+ ],
+ "mapped",
+ [
+ 157621
+ ]
+ ],
+ [
+ [
+ 194953,
+ 194953
+ ],
+ "mapped",
+ [
+ 144275
+ ]
+ ],
+ [
+ [
+ 194954,
+ 194954
+ ],
+ "mapped",
+ [
+ 144284
+ ]
+ ],
+ [
+ [
+ 194955,
+ 194955
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194956,
+ 194956
+ ],
+ "mapped",
+ [
+ 33284
+ ]
+ ],
+ [
+ [
+ 194957,
+ 194957
+ ],
+ "mapped",
+ [
+ 36766
+ ]
+ ],
+ [
+ [
+ 194958,
+ 194958
+ ],
+ "mapped",
+ [
+ 17515
+ ]
+ ],
+ [
+ [
+ 194959,
+ 194959
+ ],
+ "mapped",
+ [
+ 33425
+ ]
+ ],
+ [
+ [
+ 194960,
+ 194960
+ ],
+ "mapped",
+ [
+ 33419
+ ]
+ ],
+ [
+ [
+ 194961,
+ 194961
+ ],
+ "mapped",
+ [
+ 33437
+ ]
+ ],
+ [
+ [
+ 194962,
+ 194962
+ ],
+ "mapped",
+ [
+ 21171
+ ]
+ ],
+ [
+ [
+ 194963,
+ 194963
+ ],
+ "mapped",
+ [
+ 33457
+ ]
+ ],
+ [
+ [
+ 194964,
+ 194964
+ ],
+ "mapped",
+ [
+ 33459
+ ]
+ ],
+ [
+ [
+ 194965,
+ 194965
+ ],
+ "mapped",
+ [
+ 33469
+ ]
+ ],
+ [
+ [
+ 194966,
+ 194966
+ ],
+ "mapped",
+ [
+ 33510
+ ]
+ ],
+ [
+ [
+ 194967,
+ 194967
+ ],
+ "mapped",
+ [
+ 158524
+ ]
+ ],
+ [
+ [
+ 194968,
+ 194968
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 194969,
+ 194969
+ ],
+ "mapped",
+ [
+ 33565
+ ]
+ ],
+ [
+ [
+ 194970,
+ 194970
+ ],
+ "mapped",
+ [
+ 33635
+ ]
+ ],
+ [
+ [
+ 194971,
+ 194971
+ ],
+ "mapped",
+ [
+ 33709
+ ]
+ ],
+ [
+ [
+ 194972,
+ 194972
+ ],
+ "mapped",
+ [
+ 33571
+ ]
+ ],
+ [
+ [
+ 194973,
+ 194973
+ ],
+ "mapped",
+ [
+ 33725
+ ]
+ ],
+ [
+ [
+ 194974,
+ 194974
+ ],
+ "mapped",
+ [
+ 33767
+ ]
+ ],
+ [
+ [
+ 194975,
+ 194975
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 194976,
+ 194976
+ ],
+ "mapped",
+ [
+ 33619
+ ]
+ ],
+ [
+ [
+ 194977,
+ 194977
+ ],
+ "mapped",
+ [
+ 33738
+ ]
+ ],
+ [
+ [
+ 194978,
+ 194978
+ ],
+ "mapped",
+ [
+ 33740
+ ]
+ ],
+ [
+ [
+ 194979,
+ 194979
+ ],
+ "mapped",
+ [
+ 33756
+ ]
+ ],
+ [
+ [
+ 194980,
+ 194980
+ ],
+ "mapped",
+ [
+ 158774
+ ]
+ ],
+ [
+ [
+ 194981,
+ 194981
+ ],
+ "mapped",
+ [
+ 159083
+ ]
+ ],
+ [
+ [
+ 194982,
+ 194982
+ ],
+ "mapped",
+ [
+ 158933
+ ]
+ ],
+ [
+ [
+ 194983,
+ 194983
+ ],
+ "mapped",
+ [
+ 17707
+ ]
+ ],
+ [
+ [
+ 194984,
+ 194984
+ ],
+ "mapped",
+ [
+ 34033
+ ]
+ ],
+ [
+ [
+ 194985,
+ 194985
+ ],
+ "mapped",
+ [
+ 34035
+ ]
+ ],
+ [
+ [
+ 194986,
+ 194986
+ ],
+ "mapped",
+ [
+ 34070
+ ]
+ ],
+ [
+ [
+ 194987,
+ 194987
+ ],
+ "mapped",
+ [
+ 160714
+ ]
+ ],
+ [
+ [
+ 194988,
+ 194988
+ ],
+ "mapped",
+ [
+ 34148
+ ]
+ ],
+ [
+ [
+ 194989,
+ 194989
+ ],
+ "mapped",
+ [
+ 159532
+ ]
+ ],
+ [
+ [
+ 194990,
+ 194990
+ ],
+ "mapped",
+ [
+ 17757
+ ]
+ ],
+ [
+ [
+ 194991,
+ 194991
+ ],
+ "mapped",
+ [
+ 17761
+ ]
+ ],
+ [
+ [
+ 194992,
+ 194992
+ ],
+ "mapped",
+ [
+ 159665
+ ]
+ ],
+ [
+ [
+ 194993,
+ 194993
+ ],
+ "mapped",
+ [
+ 159954
+ ]
+ ],
+ [
+ [
+ 194994,
+ 194994
+ ],
+ "mapped",
+ [
+ 17771
+ ]
+ ],
+ [
+ [
+ 194995,
+ 194995
+ ],
+ "mapped",
+ [
+ 34384
+ ]
+ ],
+ [
+ [
+ 194996,
+ 194996
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 194997,
+ 194997
+ ],
+ "mapped",
+ [
+ 34407
+ ]
+ ],
+ [
+ [
+ 194998,
+ 194998
+ ],
+ "mapped",
+ [
+ 34409
+ ]
+ ],
+ [
+ [
+ 194999,
+ 194999
+ ],
+ "mapped",
+ [
+ 34473
+ ]
+ ],
+ [
+ [
+ 195000,
+ 195000
+ ],
+ "mapped",
+ [
+ 34440
+ ]
+ ],
+ [
+ [
+ 195001,
+ 195001
+ ],
+ "mapped",
+ [
+ 34574
+ ]
+ ],
+ [
+ [
+ 195002,
+ 195002
+ ],
+ "mapped",
+ [
+ 34530
+ ]
+ ],
+ [
+ [
+ 195003,
+ 195003
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 195004,
+ 195004
+ ],
+ "mapped",
+ [
+ 34600
+ ]
+ ],
+ [
+ [
+ 195005,
+ 195005
+ ],
+ "mapped",
+ [
+ 34667
+ ]
+ ],
+ [
+ [
+ 195006,
+ 195006
+ ],
+ "mapped",
+ [
+ 34694
+ ]
+ ],
+ [
+ [
+ 195007,
+ 195007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 195008,
+ 195008
+ ],
+ "mapped",
+ [
+ 34785
+ ]
+ ],
+ [
+ [
+ 195009,
+ 195009
+ ],
+ "mapped",
+ [
+ 34817
+ ]
+ ],
+ [
+ [
+ 195010,
+ 195010
+ ],
+ "mapped",
+ [
+ 17913
+ ]
+ ],
+ [
+ [
+ 195011,
+ 195011
+ ],
+ "mapped",
+ [
+ 34912
+ ]
+ ],
+ [
+ [
+ 195012,
+ 195012
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 195013,
+ 195013
+ ],
+ "mapped",
+ [
+ 161383
+ ]
+ ],
+ [
+ [
+ 195014,
+ 195014
+ ],
+ "mapped",
+ [
+ 35031
+ ]
+ ],
+ [
+ [
+ 195015,
+ 195015
+ ],
+ "mapped",
+ [
+ 35038
+ ]
+ ],
+ [
+ [
+ 195016,
+ 195016
+ ],
+ "mapped",
+ [
+ 17973
+ ]
+ ],
+ [
+ [
+ 195017,
+ 195017
+ ],
+ "mapped",
+ [
+ 35066
+ ]
+ ],
+ [
+ [
+ 195018,
+ 195018
+ ],
+ "mapped",
+ [
+ 13499
+ ]
+ ],
+ [
+ [
+ 195019,
+ 195019
+ ],
+ "mapped",
+ [
+ 161966
+ ]
+ ],
+ [
+ [
+ 195020,
+ 195020
+ ],
+ "mapped",
+ [
+ 162150
+ ]
+ ],
+ [
+ [
+ 195021,
+ 195021
+ ],
+ "mapped",
+ [
+ 18110
+ ]
+ ],
+ [
+ [
+ 195022,
+ 195022
+ ],
+ "mapped",
+ [
+ 18119
+ ]
+ ],
+ [
+ [
+ 195023,
+ 195023
+ ],
+ "mapped",
+ [
+ 35488
+ ]
+ ],
+ [
+ [
+ 195024,
+ 195024
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 195025,
+ 195025
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 195026,
+ 195026
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 195027,
+ 195027
+ ],
+ "mapped",
+ [
+ 162984
+ ]
+ ],
+ [
+ [
+ 195028,
+ 195028
+ ],
+ "mapped",
+ [
+ 36011
+ ]
+ ],
+ [
+ [
+ 195029,
+ 195029
+ ],
+ "mapped",
+ [
+ 36033
+ ]
+ ],
+ [
+ [
+ 195030,
+ 195030
+ ],
+ "mapped",
+ [
+ 36123
+ ]
+ ],
+ [
+ [
+ 195031,
+ 195031
+ ],
+ "mapped",
+ [
+ 36215
+ ]
+ ],
+ [
+ [
+ 195032,
+ 195032
+ ],
+ "mapped",
+ [
+ 163631
+ ]
+ ],
+ [
+ [
+ 195033,
+ 195033
+ ],
+ "mapped",
+ [
+ 133124
+ ]
+ ],
+ [
+ [
+ 195034,
+ 195034
+ ],
+ "mapped",
+ [
+ 36299
+ ]
+ ],
+ [
+ [
+ 195035,
+ 195035
+ ],
+ "mapped",
+ [
+ 36284
+ ]
+ ],
+ [
+ [
+ 195036,
+ 195036
+ ],
+ "mapped",
+ [
+ 36336
+ ]
+ ],
+ [
+ [
+ 195037,
+ 195037
+ ],
+ "mapped",
+ [
+ 133342
+ ]
+ ],
+ [
+ [
+ 195038,
+ 195038
+ ],
+ "mapped",
+ [
+ 36564
+ ]
+ ],
+ [
+ [
+ 195039,
+ 195039
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 195040,
+ 195040
+ ],
+ "mapped",
+ [
+ 165330
+ ]
+ ],
+ [
+ [
+ 195041,
+ 195041
+ ],
+ "mapped",
+ [
+ 165357
+ ]
+ ],
+ [
+ [
+ 195042,
+ 195042
+ ],
+ "mapped",
+ [
+ 37012
+ ]
+ ],
+ [
+ [
+ 195043,
+ 195043
+ ],
+ "mapped",
+ [
+ 37105
+ ]
+ ],
+ [
+ [
+ 195044,
+ 195044
+ ],
+ "mapped",
+ [
+ 37137
+ ]
+ ],
+ [
+ [
+ 195045,
+ 195045
+ ],
+ "mapped",
+ [
+ 165678
+ ]
+ ],
+ [
+ [
+ 195046,
+ 195046
+ ],
+ "mapped",
+ [
+ 37147
+ ]
+ ],
+ [
+ [
+ 195047,
+ 195047
+ ],
+ "mapped",
+ [
+ 37432
+ ]
+ ],
+ [
+ [
+ 195048,
+ 195048
+ ],
+ "mapped",
+ [
+ 37591
+ ]
+ ],
+ [
+ [
+ 195049,
+ 195049
+ ],
+ "mapped",
+ [
+ 37592
+ ]
+ ],
+ [
+ [
+ 195050,
+ 195050
+ ],
+ "mapped",
+ [
+ 37500
+ ]
+ ],
+ [
+ [
+ 195051,
+ 195051
+ ],
+ "mapped",
+ [
+ 37881
+ ]
+ ],
+ [
+ [
+ 195052,
+ 195052
+ ],
+ "mapped",
+ [
+ 37909
+ ]
+ ],
+ [
+ [
+ 195053,
+ 195053
+ ],
+ "mapped",
+ [
+ 166906
+ ]
+ ],
+ [
+ [
+ 195054,
+ 195054
+ ],
+ "mapped",
+ [
+ 38283
+ ]
+ ],
+ [
+ [
+ 195055,
+ 195055
+ ],
+ "mapped",
+ [
+ 18837
+ ]
+ ],
+ [
+ [
+ 195056,
+ 195056
+ ],
+ "mapped",
+ [
+ 38327
+ ]
+ ],
+ [
+ [
+ 195057,
+ 195057
+ ],
+ "mapped",
+ [
+ 167287
+ ]
+ ],
+ [
+ [
+ 195058,
+ 195058
+ ],
+ "mapped",
+ [
+ 18918
+ ]
+ ],
+ [
+ [
+ 195059,
+ 195059
+ ],
+ "mapped",
+ [
+ 38595
+ ]
+ ],
+ [
+ [
+ 195060,
+ 195060
+ ],
+ "mapped",
+ [
+ 23986
+ ]
+ ],
+ [
+ [
+ 195061,
+ 195061
+ ],
+ "mapped",
+ [
+ 38691
+ ]
+ ],
+ [
+ [
+ 195062,
+ 195062
+ ],
+ "mapped",
+ [
+ 168261
+ ]
+ ],
+ [
+ [
+ 195063,
+ 195063
+ ],
+ "mapped",
+ [
+ 168474
+ ]
+ ],
+ [
+ [
+ 195064,
+ 195064
+ ],
+ "mapped",
+ [
+ 19054
+ ]
+ ],
+ [
+ [
+ 195065,
+ 195065
+ ],
+ "mapped",
+ [
+ 19062
+ ]
+ ],
+ [
+ [
+ 195066,
+ 195066
+ ],
+ "mapped",
+ [
+ 38880
+ ]
+ ],
+ [
+ [
+ 195067,
+ 195067
+ ],
+ "mapped",
+ [
+ 168970
+ ]
+ ],
+ [
+ [
+ 195068,
+ 195068
+ ],
+ "mapped",
+ [
+ 19122
+ ]
+ ],
+ [
+ [
+ 195069,
+ 195069
+ ],
+ "mapped",
+ [
+ 169110
+ ]
+ ],
+ [
+ [
+ 195070,
+ 195071
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 195072,
+ 195072
+ ],
+ "mapped",
+ [
+ 38953
+ ]
+ ],
+ [
+ [
+ 195073,
+ 195073
+ ],
+ "mapped",
+ [
+ 169398
+ ]
+ ],
+ [
+ [
+ 195074,
+ 195074
+ ],
+ "mapped",
+ [
+ 39138
+ ]
+ ],
+ [
+ [
+ 195075,
+ 195075
+ ],
+ "mapped",
+ [
+ 19251
+ ]
+ ],
+ [
+ [
+ 195076,
+ 195076
+ ],
+ "mapped",
+ [
+ 39209
+ ]
+ ],
+ [
+ [
+ 195077,
+ 195077
+ ],
+ "mapped",
+ [
+ 39335
+ ]
+ ],
+ [
+ [
+ 195078,
+ 195078
+ ],
+ "mapped",
+ [
+ 39362
+ ]
+ ],
+ [
+ [
+ 195079,
+ 195079
+ ],
+ "mapped",
+ [
+ 39422
+ ]
+ ],
+ [
+ [
+ 195080,
+ 195080
+ ],
+ "mapped",
+ [
+ 19406
+ ]
+ ],
+ [
+ [
+ 195081,
+ 195081
+ ],
+ "mapped",
+ [
+ 170800
+ ]
+ ],
+ [
+ [
+ 195082,
+ 195082
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 195083,
+ 195083
+ ],
+ "mapped",
+ [
+ 40000
+ ]
+ ],
+ [
+ [
+ 195084,
+ 195084
+ ],
+ "mapped",
+ [
+ 40189
+ ]
+ ],
+ [
+ [
+ 195085,
+ 195085
+ ],
+ "mapped",
+ [
+ 19662
+ ]
+ ],
+ [
+ [
+ 195086,
+ 195086
+ ],
+ "mapped",
+ [
+ 19693
+ ]
+ ],
+ [
+ [
+ 195087,
+ 195087
+ ],
+ "mapped",
+ [
+ 40295
+ ]
+ ],
+ [
+ [
+ 195088,
+ 195088
+ ],
+ "mapped",
+ [
+ 172238
+ ]
+ ],
+ [
+ [
+ 195089,
+ 195089
+ ],
+ "mapped",
+ [
+ 19704
+ ]
+ ],
+ [
+ [
+ 195090,
+ 195090
+ ],
+ "mapped",
+ [
+ 172293
+ ]
+ ],
+ [
+ [
+ 195091,
+ 195091
+ ],
+ "mapped",
+ [
+ 172558
+ ]
+ ],
+ [
+ [
+ 195092,
+ 195092
+ ],
+ "mapped",
+ [
+ 172689
+ ]
+ ],
+ [
+ [
+ 195093,
+ 195093
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 195094,
+ 195094
+ ],
+ "mapped",
+ [
+ 19798
+ ]
+ ],
+ [
+ [
+ 195095,
+ 195095
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 195096,
+ 195096
+ ],
+ "mapped",
+ [
+ 40702
+ ]
+ ],
+ [
+ [
+ 195097,
+ 195097
+ ],
+ "mapped",
+ [
+ 40709
+ ]
+ ],
+ [
+ [
+ 195098,
+ 195098
+ ],
+ "mapped",
+ [
+ 40719
+ ]
+ ],
+ [
+ [
+ 195099,
+ 195099
+ ],
+ "mapped",
+ [
+ 40726
+ ]
+ ],
+ [
+ [
+ 195100,
+ 195100
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 195101,
+ 195101
+ ],
+ "mapped",
+ [
+ 173568
+ ]
+ ],
+ [
+ [
+ 195102,
+ 196605
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196606,
+ 196607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196608,
+ 262141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262142,
+ 262143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262144,
+ 327677
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327678,
+ 327679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327680,
+ 393213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393214,
+ 393215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393216,
+ 458749
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458750,
+ 458751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458752,
+ 524285
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524286,
+ 524287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524288,
+ 589821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589822,
+ 589823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589824,
+ 655357
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655358,
+ 655359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655360,
+ 720893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720894,
+ 720895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720896,
+ 786429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786430,
+ 786431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786432,
+ 851965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851966,
+ 851967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851968,
+ 917501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917502,
+ 917503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917504,
+ 917504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917505,
+ 917505
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917506,
+ 917535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917536,
+ 917631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917632,
+ 917759
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917760,
+ 917999
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 918000,
+ 983037
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983038,
+ 983039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983040,
+ 1048573
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048574,
+ 1048575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048576,
+ 1114109
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1114110,
+ 1114111
+ ],
+ "disallowed"
+ ]
+];
+
+var punycode$2 = require$$0$1;
+var mappingTable = require$$1$1;
+
+var PROCESSING_OPTIONS = {
+ TRANSITIONAL: 0,
+ NONTRANSITIONAL: 1
+};
+
+function normalize(str) { // fix bug in v8
+ return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
+}
+
+function findStatus(val) {
+ var start = 0;
+ var end = mappingTable.length - 1;
+
+ while (start <= end) {
+ var mid = Math.floor((start + end) / 2);
+
+ var target = mappingTable[mid];
+ if (target[0][0] <= val && target[0][1] >= val) {
+ return target;
+ } else if (target[0][0] > val) {
+ end = mid - 1;
+ } else {
+ start = mid + 1;
+ }
+ }
+
+ return null;
+}
+
+var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+
+function countSymbols(string) {
+ return string
+ // replace every surrogate pair with a BMP symbol
+ .replace(regexAstralSymbols, '_')
+ // then get the length
+ .length;
+}
+
+function mapChars(domain_name, useSTD3, processing_option) {
+ var hasError = false;
+ var processed = "";
+
+ var len = countSymbols(domain_name);
+ for (var i = 0; i < len; ++i) {
+ var codePoint = domain_name.codePointAt(i);
+ var status = findStatus(codePoint);
+
+ switch (status[1]) {
+ case "disallowed":
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "ignored":
+ break;
+ case "mapped":
+ processed += String.fromCodePoint.apply(String, status[2]);
+ break;
+ case "deviation":
+ if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ } else {
+ processed += String.fromCodePoint(codePoint);
+ }
+ break;
+ case "valid":
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "disallowed_STD3_mapped":
+ if (useSTD3) {
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ } else {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ }
+ break;
+ case "disallowed_STD3_valid":
+ if (useSTD3) {
+ hasError = true;
+ }
+
+ processed += String.fromCodePoint(codePoint);
+ break;
+ }
+ }
+
+ return {
+ string: processed,
+ error: hasError
+ };
+}
+
+var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
+
+function validateLabel(label, processing_option) {
+ if (label.substr(0, 4) === "xn--") {
+ label = punycode$2.toUnicode(label);
+ PROCESSING_OPTIONS.NONTRANSITIONAL;
+ }
+
+ var error = false;
+
+ if (normalize(label) !== label ||
+ (label[3] === "-" && label[4] === "-") ||
+ label[0] === "-" || label[label.length - 1] === "-" ||
+ label.indexOf(".") !== -1 ||
+ label.search(combiningMarksRegex) === 0) {
+ error = true;
+ }
+
+ var len = countSymbols(label);
+ for (var i = 0; i < len; ++i) {
+ var status = findStatus(label.codePointAt(i));
+ if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") ||
+ (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&
+ status[1] !== "valid" && status[1] !== "deviation")) {
+ error = true;
+ break;
+ }
+ }
+
+ return {
+ label: label,
+ error: error
+ };
+}
+
+function processing(domain_name, useSTD3, processing_option) {
+ var result = mapChars(domain_name, useSTD3, processing_option);
+ result.string = normalize(result.string);
+
+ var labels = result.string.split(".");
+ for (var i = 0; i < labels.length; ++i) {
+ try {
+ var validation = validateLabel(labels[i]);
+ labels[i] = validation.label;
+ result.error = result.error || validation.error;
+ } catch(e) {
+ result.error = true;
+ }
+ }
+
+ return {
+ string: labels.join("."),
+ error: result.error
+ };
+}
+
+tr46.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {
+ var result = processing(domain_name, useSTD3, processing_option);
+ var labels = result.string.split(".");
+ labels = labels.map(function(l) {
+ try {
+ return punycode$2.toASCII(l);
+ } catch(e) {
+ result.error = true;
+ return l;
+ }
+ });
+
+ if (verifyDnsLength) {
+ var total = labels.slice(0, labels.length - 1).join(".").length;
+ if (total.length > 253 || total.length === 0) {
+ result.error = true;
+ }
+
+ for (var i=0; i < labels.length; ++i) {
+ if (labels.length > 63 || labels.length === 0) {
+ result.error = true;
+ break;
+ }
+ }
+ }
+
+ if (result.error) return null;
+ return labels.join(".");
+};
+
+tr46.toUnicode = function(domain_name, useSTD3) {
+ var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
+
+ return {
+ domain: result.string,
+ error: result.error
+ };
+};
+
+tr46.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
+
+urlStateMachine.exports;
+
+(function (module) {
+ const punycode = require$$0$1;
+ const tr46$1 = tr46;
+
+ const specialSchemes = {
+ ftp: 21,
+ file: null,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443
+ };
+
+ const failure = Symbol("failure");
+
+ function countSymbols(str) {
+ return punycode.ucs2.decode(str).length;
+ }
+
+ function at(input, idx) {
+ const c = input[idx];
+ return isNaN(c) ? undefined : String.fromCodePoint(c);
+ }
+
+ function isASCIIDigit(c) {
+ return c >= 0x30 && c <= 0x39;
+ }
+
+ function isASCIIAlpha(c) {
+ return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
+ }
+
+ function isASCIIAlphanumeric(c) {
+ return isASCIIAlpha(c) || isASCIIDigit(c);
+ }
+
+ function isASCIIHex(c) {
+ return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
+ }
+
+ function isSingleDot(buffer) {
+ return buffer === "." || buffer.toLowerCase() === "%2e";
+ }
+
+ function isDoubleDot(buffer) {
+ buffer = buffer.toLowerCase();
+ return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
+ }
+
+ function isWindowsDriveLetterCodePoints(cp1, cp2) {
+ return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
+ }
+
+ function isWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
+ }
+
+ function isNormalizedWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
+ }
+
+ function containsForbiddenHostCodePoint(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function containsForbiddenHostCodePointExcludingPercent(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function isSpecialScheme(scheme) {
+ return specialSchemes[scheme] !== undefined;
+ }
+
+ function isSpecial(url) {
+ return isSpecialScheme(url.scheme);
+ }
+
+ function defaultPort(scheme) {
+ return specialSchemes[scheme];
+ }
+
+ function percentEncode(c) {
+ let hex = c.toString(16).toUpperCase();
+ if (hex.length === 1) {
+ hex = "0" + hex;
+ }
+
+ return "%" + hex;
+ }
+
+ function utf8PercentEncode(c) {
+ const buf = new Buffer(c);
+
+ let str = "";
+
+ for (let i = 0; i < buf.length; ++i) {
+ str += percentEncode(buf[i]);
+ }
+
+ return str;
+ }
+
+ function utf8PercentDecode(str) {
+ const input = new Buffer(str);
+ const output = [];
+ for (let i = 0; i < input.length; ++i) {
+ if (input[i] !== 37) {
+ output.push(input[i]);
+ } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
+ output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
+ i += 2;
+ } else {
+ output.push(input[i]);
+ }
+ }
+ return new Buffer(output).toString();
+ }
+
+ function isC0ControlPercentEncode(c) {
+ return c <= 0x1F || c > 0x7E;
+ }
+
+ const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
+ function isPathPercentEncode(c) {
+ return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
+ }
+
+ const extraUserinfoPercentEncodeSet =
+ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
+ function isUserinfoPercentEncode(c) {
+ return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
+ }
+
+ function percentEncodeChar(c, encodeSetPredicate) {
+ const cStr = String.fromCodePoint(c);
+
+ if (encodeSetPredicate(c)) {
+ return utf8PercentEncode(cStr);
+ }
+
+ return cStr;
+ }
+
+ function parseIPv4Number(input) {
+ let R = 10;
+
+ if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
+ input = input.substring(2);
+ R = 16;
+ } else if (input.length >= 2 && input.charAt(0) === "0") {
+ input = input.substring(1);
+ R = 8;
+ }
+
+ if (input === "") {
+ return 0;
+ }
+
+ const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);
+ if (regex.test(input)) {
+ return failure;
+ }
+
+ return parseInt(input, R);
+ }
+
+ function parseIPv4(input) {
+ const parts = input.split(".");
+ if (parts[parts.length - 1] === "") {
+ if (parts.length > 1) {
+ parts.pop();
+ }
+ }
+
+ if (parts.length > 4) {
+ return input;
+ }
+
+ const numbers = [];
+ for (const part of parts) {
+ if (part === "") {
+ return input;
+ }
+ const n = parseIPv4Number(part);
+ if (n === failure) {
+ return input;
+ }
+
+ numbers.push(n);
+ }
+
+ for (let i = 0; i < numbers.length - 1; ++i) {
+ if (numbers[i] > 255) {
+ return failure;
+ }
+ }
+ if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
+ return failure;
+ }
+
+ let ipv4 = numbers.pop();
+ let counter = 0;
+
+ for (const n of numbers) {
+ ipv4 += n * Math.pow(256, 3 - counter);
+ ++counter;
+ }
+
+ return ipv4;
+ }
+
+ function serializeIPv4(address) {
+ let output = "";
+ let n = address;
+
+ for (let i = 1; i <= 4; ++i) {
+ output = String(n % 256) + output;
+ if (i !== 4) {
+ output = "." + output;
+ }
+ n = Math.floor(n / 256);
+ }
+
+ return output;
+ }
+
+ function parseIPv6(input) {
+ const address = [0, 0, 0, 0, 0, 0, 0, 0];
+ let pieceIndex = 0;
+ let compress = null;
+ let pointer = 0;
+
+ input = punycode.ucs2.decode(input);
+
+ if (input[pointer] === 58) {
+ if (input[pointer + 1] !== 58) {
+ return failure;
+ }
+
+ pointer += 2;
+ ++pieceIndex;
+ compress = pieceIndex;
+ }
+
+ while (pointer < input.length) {
+ if (pieceIndex === 8) {
+ return failure;
+ }
+
+ if (input[pointer] === 58) {
+ if (compress !== null) {
+ return failure;
+ }
+ ++pointer;
+ ++pieceIndex;
+ compress = pieceIndex;
+ continue;
+ }
+
+ let value = 0;
+ let length = 0;
+
+ while (length < 4 && isASCIIHex(input[pointer])) {
+ value = value * 0x10 + parseInt(at(input, pointer), 16);
+ ++pointer;
+ ++length;
+ }
+
+ if (input[pointer] === 46) {
+ if (length === 0) {
+ return failure;
+ }
+
+ pointer -= length;
+
+ if (pieceIndex > 6) {
+ return failure;
+ }
+
+ let numbersSeen = 0;
+
+ while (input[pointer] !== undefined) {
+ let ipv4Piece = null;
+
+ if (numbersSeen > 0) {
+ if (input[pointer] === 46 && numbersSeen < 4) {
+ ++pointer;
+ } else {
+ return failure;
+ }
+ }
+
+ if (!isASCIIDigit(input[pointer])) {
+ return failure;
+ }
+
+ while (isASCIIDigit(input[pointer])) {
+ const number = parseInt(at(input, pointer));
+ if (ipv4Piece === null) {
+ ipv4Piece = number;
+ } else if (ipv4Piece === 0) {
+ return failure;
+ } else {
+ ipv4Piece = ipv4Piece * 10 + number;
+ }
+ if (ipv4Piece > 255) {
+ return failure;
+ }
+ ++pointer;
+ }
+
+ address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
+
+ ++numbersSeen;
+
+ if (numbersSeen === 2 || numbersSeen === 4) {
+ ++pieceIndex;
+ }
+ }
+
+ if (numbersSeen !== 4) {
+ return failure;
+ }
+
+ break;
+ } else if (input[pointer] === 58) {
+ ++pointer;
+ if (input[pointer] === undefined) {
+ return failure;
+ }
+ } else if (input[pointer] !== undefined) {
+ return failure;
+ }
+
+ address[pieceIndex] = value;
+ ++pieceIndex;
+ }
+
+ if (compress !== null) {
+ let swaps = pieceIndex - compress;
+ pieceIndex = 7;
+ while (pieceIndex !== 0 && swaps > 0) {
+ const temp = address[compress + swaps - 1];
+ address[compress + swaps - 1] = address[pieceIndex];
+ address[pieceIndex] = temp;
+ --pieceIndex;
+ --swaps;
+ }
+ } else if (compress === null && pieceIndex !== 8) {
+ return failure;
+ }
+
+ return address;
+ }
+
+ function serializeIPv6(address) {
+ let output = "";
+ const seqResult = findLongestZeroSequence(address);
+ const compress = seqResult.idx;
+ let ignore0 = false;
+
+ for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
+ if (ignore0 && address[pieceIndex] === 0) {
+ continue;
+ } else if (ignore0) {
+ ignore0 = false;
+ }
+
+ if (compress === pieceIndex) {
+ const separator = pieceIndex === 0 ? "::" : ":";
+ output += separator;
+ ignore0 = true;
+ continue;
+ }
+
+ output += address[pieceIndex].toString(16);
+
+ if (pieceIndex !== 7) {
+ output += ":";
+ }
+ }
+
+ return output;
+ }
+
+ function parseHost(input, isSpecialArg) {
+ if (input[0] === "[") {
+ if (input[input.length - 1] !== "]") {
+ return failure;
+ }
+
+ return parseIPv6(input.substring(1, input.length - 1));
+ }
+
+ if (!isSpecialArg) {
+ return parseOpaqueHost(input);
+ }
+
+ const domain = utf8PercentDecode(input);
+ const asciiDomain = tr46$1.toASCII(domain, false, tr46$1.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
+ if (asciiDomain === null) {
+ return failure;
+ }
+
+ if (containsForbiddenHostCodePoint(asciiDomain)) {
+ return failure;
+ }
+
+ const ipv4Host = parseIPv4(asciiDomain);
+ if (typeof ipv4Host === "number" || ipv4Host === failure) {
+ return ipv4Host;
+ }
+
+ return asciiDomain;
+ }
+
+ function parseOpaqueHost(input) {
+ if (containsForbiddenHostCodePointExcludingPercent(input)) {
+ return failure;
+ }
+
+ let output = "";
+ const decoded = punycode.ucs2.decode(input);
+ for (let i = 0; i < decoded.length; ++i) {
+ output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
+ }
+ return output;
+ }
+
+ function findLongestZeroSequence(arr) {
+ let maxIdx = null;
+ let maxLen = 1; // only find elements > 1
+ let currStart = null;
+ let currLen = 0;
+
+ for (let i = 0; i < arr.length; ++i) {
+ if (arr[i] !== 0) {
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ currStart = null;
+ currLen = 0;
+ } else {
+ if (currStart === null) {
+ currStart = i;
+ }
+ ++currLen;
+ }
+ }
+
+ // if trailing zeros
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ return {
+ idx: maxIdx,
+ len: maxLen
+ };
+ }
+
+ function serializeHost(host) {
+ if (typeof host === "number") {
+ return serializeIPv4(host);
+ }
+
+ // IPv6 serializer
+ if (host instanceof Array) {
+ return "[" + serializeIPv6(host) + "]";
+ }
+
+ return host;
+ }
+
+ function trimControlChars(url) {
+ return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
+ }
+
+ function trimTabAndNewline(url) {
+ return url.replace(/\u0009|\u000A|\u000D/g, "");
+ }
+
+ function shortenPath(url) {
+ const path = url.path;
+ if (path.length === 0) {
+ return;
+ }
+ if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
+ return;
+ }
+
+ path.pop();
+ }
+
+ function includesCredentials(url) {
+ return url.username !== "" || url.password !== "";
+ }
+
+ function cannotHaveAUsernamePasswordPort(url) {
+ return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
+ }
+
+ function isNormalizedWindowsDriveLetter(string) {
+ return /^[A-Za-z]:$/.test(string);
+ }
+
+ function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
+ this.pointer = 0;
+ this.input = input;
+ this.base = base || null;
+ this.encodingOverride = encodingOverride || "utf-8";
+ this.stateOverride = stateOverride;
+ this.url = url;
+ this.failure = false;
+ this.parseError = false;
+
+ if (!this.url) {
+ this.url = {
+ scheme: "",
+ username: "",
+ password: "",
+ host: null,
+ port: null,
+ path: [],
+ query: null,
+ fragment: null,
+
+ cannotBeABaseURL: false
+ };
+
+ const res = trimControlChars(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+ }
+
+ const res = trimTabAndNewline(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+
+ this.state = stateOverride || "scheme start";
+
+ this.buffer = "";
+ this.atFlag = false;
+ this.arrFlag = false;
+ this.passwordTokenSeenFlag = false;
+
+ this.input = punycode.ucs2.decode(this.input);
+
+ for (; this.pointer <= this.input.length; ++this.pointer) {
+ const c = this.input[this.pointer];
+ const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
+
+ // exec state machine
+ const ret = this["parse " + this.state](c, cStr);
+ if (!ret) {
+ break; // terminate algorithm
+ } else if (ret === failure) {
+ this.failure = true;
+ break;
+ }
+ }
+ }
+
+ URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
+ if (isASCIIAlpha(c)) {
+ this.buffer += cStr.toLowerCase();
+ this.state = "scheme";
+ } else if (!this.stateOverride) {
+ this.state = "no scheme";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
+ if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
+ this.buffer += cStr.toLowerCase();
+ } else if (c === 58) {
+ if (this.stateOverride) {
+ if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
+ return false;
+ }
+
+ if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
+ return false;
+ }
+ }
+ this.url.scheme = this.buffer;
+ this.buffer = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ if (this.url.scheme === "file") {
+ if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
+ this.parseError = true;
+ }
+ this.state = "file";
+ } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
+ this.state = "special relative or authority";
+ } else if (isSpecial(this.url)) {
+ this.state = "special authority slashes";
+ } else if (this.input[this.pointer + 1] === 47) {
+ this.state = "path or authority";
+ ++this.pointer;
+ } else {
+ this.url.cannotBeABaseURL = true;
+ this.url.path.push("");
+ this.state = "cannot-be-a-base-URL path";
+ }
+ } else if (!this.stateOverride) {
+ this.buffer = "";
+ this.state = "no scheme";
+ this.pointer = -1;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
+ if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
+ return failure;
+ } else if (this.base.cannotBeABaseURL && c === 35) {
+ this.url.scheme = this.base.scheme;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.url.cannotBeABaseURL = true;
+ this.state = "fragment";
+ } else if (this.base.scheme === "file") {
+ this.state = "file";
+ --this.pointer;
+ } else {
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
+ if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
+ this.url.scheme = this.base.scheme;
+ if (isNaN(c)) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 47) {
+ this.state = "relative slash";
+ } else if (c === 63) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ this.state = "relative slash";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice(0, this.base.path.length - 1);
+
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
+ if (isSpecial(this.url) && (c === 47 || c === 92)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "special authority ignore slashes";
+ } else if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "special authority ignore slashes";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
+ if (c !== 47 && c !== 92) {
+ this.state = "authority";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
+ if (c === 64) {
+ this.parseError = true;
+ if (this.atFlag) {
+ this.buffer = "%40" + this.buffer;
+ }
+ this.atFlag = true;
+
+ // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
+ const len = countSymbols(this.buffer);
+ for (let pointer = 0; pointer < len; ++pointer) {
+ const codePoint = this.buffer.codePointAt(pointer);
+
+ if (codePoint === 58 && !this.passwordTokenSeenFlag) {
+ this.passwordTokenSeenFlag = true;
+ continue;
+ }
+ const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
+ if (this.passwordTokenSeenFlag) {
+ this.url.password += encodedCodePoints;
+ } else {
+ this.url.username += encodedCodePoints;
+ }
+ }
+ this.buffer = "";
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ if (this.atFlag && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+ this.pointer -= countSymbols(this.buffer) + 1;
+ this.buffer = "";
+ this.state = "host";
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse hostname"] =
+ URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
+ if (this.stateOverride && this.url.scheme === "file") {
+ --this.pointer;
+ this.state = "file host";
+ } else if (c === 58 && !this.arrFlag) {
+ if (this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "port";
+ if (this.stateOverride === "hostname") {
+ return false;
+ }
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ --this.pointer;
+ if (isSpecial(this.url) && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ } else if (this.stateOverride && this.buffer === "" &&
+ (includesCredentials(this.url) || this.url.port !== null)) {
+ this.parseError = true;
+ return false;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "path start";
+ if (this.stateOverride) {
+ return false;
+ }
+ } else {
+ if (c === 91) {
+ this.arrFlag = true;
+ } else if (c === 93) {
+ this.arrFlag = false;
+ }
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
+ if (isASCIIDigit(c)) {
+ this.buffer += cStr;
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92) ||
+ this.stateOverride) {
+ if (this.buffer !== "") {
+ const port = parseInt(this.buffer);
+ if (port > Math.pow(2, 16) - 1) {
+ this.parseError = true;
+ return failure;
+ }
+ this.url.port = port === defaultPort(this.url.scheme) ? null : port;
+ this.buffer = "";
+ }
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
+
+ URLStateMachine.prototype["parse file"] = function parseFile(c) {
+ this.url.scheme = "file";
+
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file slash";
+ } else if (this.base !== null && this.base.scheme === "file") {
+ if (isNaN(c)) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 63) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points
+ !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||
+ (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points
+ !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ shortenPath(this.url);
+ } else {
+ this.parseError = true;
+ }
+
+ this.state = "path";
+ --this.pointer;
+ }
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file host";
+ } else {
+ if (this.base !== null && this.base.scheme === "file") {
+ if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
+ this.url.path.push(this.base.path[0]);
+ } else {
+ this.url.host = this.base.host;
+ }
+ }
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
+ if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
+ --this.pointer;
+ if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
+ this.parseError = true;
+ this.state = "path";
+ } else if (this.buffer === "") {
+ this.url.host = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ } else {
+ let host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+ if (host === "localhost") {
+ host = "";
+ }
+ this.url.host = host;
+
+ if (this.stateOverride) {
+ return false;
+ }
+
+ this.buffer = "";
+ this.state = "path start";
+ }
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
+ if (isSpecial(this.url)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "path";
+
+ if (c !== 47 && c !== 92) {
+ --this.pointer;
+ }
+ } else if (!this.stateOverride && c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (!this.stateOverride && c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (c !== undefined) {
+ this.state = "path";
+ if (c !== 47) {
+ --this.pointer;
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path"] = function parsePath(c) {
+ if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
+ (!this.stateOverride && (c === 63 || c === 35))) {
+ if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ }
+
+ if (isDoubleDot(this.buffer)) {
+ shortenPath(this.url);
+ if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ }
+ } else if (isSingleDot(this.buffer) && c !== 47 &&
+ !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ } else if (!isSingleDot(this.buffer)) {
+ if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
+ if (this.url.host !== "" && this.url.host !== null) {
+ this.parseError = true;
+ this.url.host = "";
+ }
+ this.buffer = this.buffer[0] + ":";
+ }
+ this.url.path.push(this.buffer);
+ }
+ this.buffer = "";
+ if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
+ while (this.url.path.length > 1 && this.url.path[0] === "") {
+ this.parseError = true;
+ this.url.path.shift();
+ }
+ }
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ }
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += percentEncodeChar(c, isPathPercentEncode);
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ // TODO: Add: not a URL code point
+ if (!isNaN(c) && c !== 37) {
+ this.parseError = true;
+ }
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ if (!isNaN(c)) {
+ this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
+ if (isNaN(c) || (!this.stateOverride && c === 35)) {
+ if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
+ this.encodingOverride = "utf-8";
+ }
+
+ const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
+ for (let i = 0; i < buffer.length; ++i) {
+ if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||
+ buffer[i] === 0x3C || buffer[i] === 0x3E) {
+ this.url.query += percentEncode(buffer[i]);
+ } else {
+ this.url.query += String.fromCodePoint(buffer[i]);
+ }
+ }
+
+ this.buffer = "";
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
+ if (isNaN(c)) ; else if (c === 0x0) {
+ this.parseError = true;
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+
+ return true;
+ };
+
+ function serializeURL(url, excludeFragment) {
+ let output = url.scheme + ":";
+ if (url.host !== null) {
+ output += "//";
+
+ if (url.username !== "" || url.password !== "") {
+ output += url.username;
+ if (url.password !== "") {
+ output += ":" + url.password;
+ }
+ output += "@";
+ }
+
+ output += serializeHost(url.host);
+
+ if (url.port !== null) {
+ output += ":" + url.port;
+ }
+ } else if (url.host === null && url.scheme === "file") {
+ output += "//";
+ }
+
+ if (url.cannotBeABaseURL) {
+ output += url.path[0];
+ } else {
+ for (const string of url.path) {
+ output += "/" + string;
+ }
+ }
+
+ if (url.query !== null) {
+ output += "?" + url.query;
+ }
+
+ if (!excludeFragment && url.fragment !== null) {
+ output += "#" + url.fragment;
+ }
+
+ return output;
+ }
+
+ function serializeOrigin(tuple) {
+ let result = tuple.scheme + "://";
+ result += serializeHost(tuple.host);
+
+ if (tuple.port !== null) {
+ result += ":" + tuple.port;
+ }
+
+ return result;
+ }
+
+ module.exports.serializeURL = serializeURL;
+
+ module.exports.serializeURLOrigin = function (url) {
+ // https://url.spec.whatwg.org/#concept-url-origin
+ switch (url.scheme) {
+ case "blob":
+ try {
+ return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
+ } catch (e) {
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ case "ftp":
+ case "gopher":
+ case "http":
+ case "https":
+ case "ws":
+ case "wss":
+ return serializeOrigin({
+ scheme: url.scheme,
+ host: url.host,
+ port: url.port
+ });
+ case "file":
+ // spec says "exercise to the reader", chrome says "file://"
+ return "file://";
+ default:
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ };
+
+ module.exports.basicURLParse = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
+ if (usm.failure) {
+ return "failure";
+ }
+
+ return usm.url;
+ };
+
+ module.exports.setTheUsername = function (url, username) {
+ url.username = "";
+ const decoded = punycode.ucs2.decode(username);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.setThePassword = function (url, password) {
+ url.password = "";
+ const decoded = punycode.ucs2.decode(password);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.serializeHost = serializeHost;
+
+ module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
+
+ module.exports.serializeInteger = function (integer) {
+ return String(integer);
+ };
+
+ module.exports.parseURL = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ // We don't handle blobs, so this just delegates:
+ return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
+ };
+} (urlStateMachine));
+
+var urlStateMachineExports = urlStateMachine.exports;
+
+const usm = urlStateMachineExports;
+
+URLImpl.implementation = class URLImpl {
+ constructor(constructorArgs) {
+ const url = constructorArgs[0];
+ const base = constructorArgs[1];
+
+ let parsedBase = null;
+ if (base !== undefined) {
+ parsedBase = usm.basicURLParse(base);
+ if (parsedBase === "failure") {
+ throw new TypeError("Invalid base URL");
+ }
+ }
+
+ const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+
+ // TODO: query stuff
+ }
+
+ get href() {
+ return usm.serializeURL(this._url);
+ }
+
+ set href(v) {
+ const parsedURL = usm.basicURLParse(v);
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+ }
+
+ get origin() {
+ return usm.serializeURLOrigin(this._url);
+ }
+
+ get protocol() {
+ return this._url.scheme + ":";
+ }
+
+ set protocol(v) {
+ usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
+ }
+
+ get username() {
+ return this._url.username;
+ }
+
+ set username(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setTheUsername(this._url, v);
+ }
+
+ get password() {
+ return this._url.password;
+ }
+
+ set password(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setThePassword(this._url, v);
+ }
+
+ get host() {
+ const url = this._url;
+
+ if (url.host === null) {
+ return "";
+ }
+
+ if (url.port === null) {
+ return usm.serializeHost(url.host);
+ }
+
+ return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
+ }
+
+ set host(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
+ }
+
+ get hostname() {
+ if (this._url.host === null) {
+ return "";
+ }
+
+ return usm.serializeHost(this._url.host);
+ }
+
+ set hostname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
+ }
+
+ get port() {
+ if (this._url.port === null) {
+ return "";
+ }
+
+ return usm.serializeInteger(this._url.port);
+ }
+
+ set port(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ if (v === "") {
+ this._url.port = null;
+ } else {
+ usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
+ }
+ }
+
+ get pathname() {
+ if (this._url.cannotBeABaseURL) {
+ return this._url.path[0];
+ }
+
+ if (this._url.path.length === 0) {
+ return "";
+ }
+
+ return "/" + this._url.path.join("/");
+ }
+
+ set pathname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ this._url.path = [];
+ usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
+ }
+
+ get search() {
+ if (this._url.query === null || this._url.query === "") {
+ return "";
+ }
+
+ return "?" + this._url.query;
+ }
+
+ set search(v) {
+ // TODO: query stuff
+
+ const url = this._url;
+
+ if (v === "") {
+ url.query = null;
+ return;
+ }
+
+ const input = v[0] === "?" ? v.substring(1) : v;
+ url.query = "";
+ usm.basicURLParse(input, { url, stateOverride: "query" });
+ }
+
+ get hash() {
+ if (this._url.fragment === null || this._url.fragment === "") {
+ return "";
+ }
+
+ return "#" + this._url.fragment;
+ }
+
+ set hash(v) {
+ if (v === "") {
+ this._url.fragment = null;
+ return;
+ }
+
+ const input = v[0] === "#" ? v.substring(1) : v;
+ this._url.fragment = "";
+ usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
+ }
+
+ toJSON() {
+ return this.href;
+ }
+};
+
+URL$2.exports;
+
+(function (module) {
+
+ const conversions = lib;
+ const utils = utilsExports;
+ const Impl = URLImpl;
+
+ const impl = utils.implSymbol;
+
+ function URL(url) {
+ if (!this || this[impl] || !(this instanceof URL)) {
+ throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
+ }
+ if (arguments.length < 1) {
+ throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 2; ++i) {
+ args[i] = arguments[i];
+ }
+ args[0] = conversions["USVString"](args[0]);
+ if (args[1] !== undefined) {
+ args[1] = conversions["USVString"](args[1]);
+ }
+
+ module.exports.setup(this, args);
+ }
+
+ URL.prototype.toJSON = function toJSON() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 0; ++i) {
+ args[i] = arguments[i];
+ }
+ return this[impl].toJSON.apply(this[impl], args);
+ };
+ Object.defineProperty(URL.prototype, "href", {
+ get() {
+ return this[impl].href;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].href = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ URL.prototype.toString = function () {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return this.href;
+ };
+
+ Object.defineProperty(URL.prototype, "origin", {
+ get() {
+ return this[impl].origin;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "protocol", {
+ get() {
+ return this[impl].protocol;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].protocol = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "username", {
+ get() {
+ return this[impl].username;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].username = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "password", {
+ get() {
+ return this[impl].password;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].password = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "host", {
+ get() {
+ return this[impl].host;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].host = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hostname", {
+ get() {
+ return this[impl].hostname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hostname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "port", {
+ get() {
+ return this[impl].port;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].port = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "pathname", {
+ get() {
+ return this[impl].pathname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].pathname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "search", {
+ get() {
+ return this[impl].search;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].search = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hash", {
+ get() {
+ return this[impl].hash;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hash = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+
+ module.exports = {
+ is(obj) {
+ return !!obj && obj[impl] instanceof Impl.implementation;
+ },
+ create(constructorArgs, privateData) {
+ let obj = Object.create(URL.prototype);
+ this.setup(obj, constructorArgs, privateData);
+ return obj;
+ },
+ setup(obj, constructorArgs, privateData) {
+ if (!privateData) privateData = {};
+ privateData.wrapper = obj;
+
+ obj[impl] = new Impl.implementation(constructorArgs, privateData);
+ obj[impl][utils.wrapperSymbol] = obj;
+ },
+ interface: URL,
+ expose: {
+ Window: { URL: URL },
+ Worker: { URL: URL }
+ }
+ };
+} (URL$2));
+
+var URLExports = URL$2.exports;
+
+publicApi.URL = URLExports.interface;
+publicApi.serializeURL = urlStateMachineExports.serializeURL;
+publicApi.serializeURLOrigin = urlStateMachineExports.serializeURLOrigin;
+publicApi.basicURLParse = urlStateMachineExports.basicURLParse;
+publicApi.setTheUsername = urlStateMachineExports.setTheUsername;
+publicApi.setThePassword = urlStateMachineExports.setThePassword;
+publicApi.serializeHost = urlStateMachineExports.serializeHost;
+publicApi.serializeInteger = urlStateMachineExports.serializeInteger;
+publicApi.parseURL = urlStateMachineExports.parseURL;
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+ constructor() {
+ this[TYPE] = '';
+
+ const blobParts = arguments[0];
+ const options = arguments[1];
+
+ const buffers = [];
+ let size = 0;
+
+ if (blobParts) {
+ const a = blobParts;
+ const length = Number(a.length);
+ for (let i = 0; i < length; i++) {
+ const element = a[i];
+ let buffer;
+ if (element instanceof Buffer) {
+ buffer = element;
+ } else if (ArrayBuffer.isView(element)) {
+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+ } else if (element instanceof ArrayBuffer) {
+ buffer = Buffer.from(element);
+ } else if (element instanceof Blob) {
+ buffer = element[BUFFER];
+ } else {
+ buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+ }
+ size += buffer.length;
+ buffers.push(buffer);
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers);
+
+ let type = options && options.type !== undefined && String(options.type).toLowerCase();
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type;
+ }
+ }
+ get size() {
+ return this[BUFFER].length;
+ }
+ get type() {
+ return this[TYPE];
+ }
+ text() {
+ return Promise.resolve(this[BUFFER].toString());
+ }
+ arrayBuffer() {
+ const buf = this[BUFFER];
+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ return Promise.resolve(ab);
+ }
+ stream() {
+ const readable = new Readable();
+ readable._read = function () {};
+ readable.push(this[BUFFER]);
+ readable.push(null);
+ return readable;
+ }
+ toString() {
+ return '[object Blob]';
+ }
+ slice() {
+ const size = this.size;
+
+ const start = arguments[0];
+ const end = arguments[1];
+ let relativeStart, relativeEnd;
+ if (start === undefined) {
+ relativeStart = 0;
+ } else if (start < 0) {
+ relativeStart = Math.max(size + start, 0);
+ } else {
+ relativeStart = Math.min(start, size);
+ }
+ if (end === undefined) {
+ relativeEnd = size;
+ } else if (end < 0) {
+ relativeEnd = Math.max(size + end, 0);
+ } else {
+ relativeEnd = Math.min(end, size);
+ }
+ const span = Math.max(relativeEnd - relativeStart, 0);
+
+ const buffer = this[BUFFER];
+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+ const blob = new Blob([], { type: arguments[2] });
+ blob[BUFFER] = slicedBuffer;
+ return blob;
+ }
+}
+
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+ slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+ value: 'Blob',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param String message Error message for human
+ * @param String type Error type for machine
+ * @param String systemError For Node.js system error
+ * @return FetchError
+ */
+function FetchError(message, type, systemError) {
+ Error.call(this, message);
+
+ this.message = message;
+ this.type = type;
+
+ // when err.type is `system`, err.code contains system error code
+ if (systemError) {
+ this.code = this.errno = systemError.code;
+ }
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+ convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+function Body(body) {
+ var _this = this;
+
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$size = _ref.size;
+
+ let size = _ref$size === undefined ? 0 : _ref$size;
+ var _ref$timeout = _ref.timeout;
+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+ if (body == null) {
+ // body is undefined or null
+ body = null;
+ } else if (isURLSearchParams(body)) {
+ // body is a URLSearchParams
+ body = Buffer.from(body.toString());
+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+ // body is ArrayBuffer
+ body = Buffer.from(body);
+ } else if (ArrayBuffer.isView(body)) {
+ // body is ArrayBufferView
+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+ } else if (body instanceof Stream) ; else {
+ // none of the above
+ // coerce to string then buffer
+ body = Buffer.from(String(body));
+ }
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null
+ };
+ this.size = size;
+ this.timeout = timeout;
+
+ if (body instanceof Stream) {
+ body.on('error', function (err) {
+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+ _this[INTERNALS].error = error;
+ });
+ }
+}
+
+Body.prototype = {
+ get body() {
+ return this[INTERNALS].body;
+ },
+
+ get bodyUsed() {
+ return this[INTERNALS].disturbed;
+ },
+
+ /**
+ * Decode response as ArrayBuffer
+ *
+ * @return Promise
+ */
+ arrayBuffer() {
+ return consumeBody.call(this).then(function (buf) {
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ });
+ },
+
+ /**
+ * Return raw response as Blob
+ *
+ * @return Promise
+ */
+ blob() {
+ let ct = this.headers && this.headers.get('content-type') || '';
+ return consumeBody.call(this).then(function (buf) {
+ return Object.assign(
+ // Prevent copying
+ new Blob([], {
+ type: ct.toLowerCase()
+ }), {
+ [BUFFER]: buf
+ });
+ });
+ },
+
+ /**
+ * Decode response as json
+ *
+ * @return Promise
+ */
+ json() {
+ var _this2 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ try {
+ return JSON.parse(buffer.toString());
+ } catch (err) {
+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+ }
+ });
+ },
+
+ /**
+ * Decode response as text
+ *
+ * @return Promise
+ */
+ text() {
+ return consumeBody.call(this).then(function (buffer) {
+ return buffer.toString();
+ });
+ },
+
+ /**
+ * Decode response as buffer (non-spec api)
+ *
+ * @return Promise
+ */
+ buffer() {
+ return consumeBody.call(this);
+ },
+
+ /**
+ * Decode response as text, while automatically detecting the encoding and
+ * trying to decode to UTF-8 (non-spec api)
+ *
+ * @return Promise
+ */
+ textConverted() {
+ var _this3 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ return convertBody(buffer, _this3.headers);
+ });
+ }
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+ for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+ // istanbul ignore else: future proof
+ if (!(name in proto)) {
+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+ Object.defineProperty(proto, name, desc);
+ }
+ }
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return Promise
+ */
+function consumeBody() {
+ var _this4 = this;
+
+ if (this[INTERNALS].disturbed) {
+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+ }
+
+ this[INTERNALS].disturbed = true;
+
+ if (this[INTERNALS].error) {
+ return Body.Promise.reject(this[INTERNALS].error);
+ }
+
+ let body = this.body;
+
+ // body is null
+ if (body === null) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is blob
+ if (isBlob(body)) {
+ body = body.stream();
+ }
+
+ // body is buffer
+ if (Buffer.isBuffer(body)) {
+ return Body.Promise.resolve(body);
+ }
+
+ // istanbul ignore if: should never happen
+ if (!(body instanceof Stream)) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is stream
+ // get ready to actually consume the body
+ let accum = [];
+ let accumBytes = 0;
+ let abort = false;
+
+ return new Body.Promise(function (resolve, reject) {
+ let resTimeout;
+
+ // allow timeout on slow response body
+ if (_this4.timeout) {
+ resTimeout = setTimeout(function () {
+ abort = true;
+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+ }, _this4.timeout);
+ }
+
+ // handle stream errors
+ body.on('error', function (err) {
+ if (err.name === 'AbortError') {
+ // if the request was aborted, reject with this Error
+ abort = true;
+ reject(err);
+ } else {
+ // other errors, such as incorrect content-encoding
+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+
+ body.on('data', function (chunk) {
+ if (abort || chunk === null) {
+ return;
+ }
+
+ if (_this4.size && accumBytes + chunk.length > _this4.size) {
+ abort = true;
+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+ return;
+ }
+
+ accumBytes += chunk.length;
+ accum.push(chunk);
+ });
+
+ body.on('end', function () {
+ if (abort) {
+ return;
+ }
+
+ clearTimeout(resTimeout);
+
+ try {
+ resolve(Buffer.concat(accum, accumBytes));
+ } catch (err) {
+ // handle streams that have accumulated too much data (issue #414)
+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+ });
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param Buffer buffer Incoming buffer
+ * @param String encoding Target encoding
+ * @return String
+ */
+function convertBody(buffer, headers) {
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function');
+ }
+
+ const ct = headers.get('content-type');
+ let charset = 'utf-8';
+ let res, str;
+
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct);
+ }
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ str = buffer.slice(0, 1024).toString();
+
+ // html5
+ if (!res && str) {
+ res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+ this[MAP] = Object.create(null);
+
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw();
+ const headerNames = Object.keys(rawHeaders);
+
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value);
+ }
+ }
+
+ return;
+ }
+
+ // We don't worry about converting prop to ByteString here as append()
+ // will handle it.
+ if (init == null) ; else if (typeof init === 'object') {
+ const method = init[Symbol.iterator];
+ if (method != null) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable');
+ }
+
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = [];
+ for (const pair of init) {
+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable');
+ }
+ pairs.push(Array.from(pair));
+ }
+
+ for (const pair of pairs) {
+ if (pair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple');
+ }
+ this.append(pair[0], pair[1]);
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ const value = init[key];
+ this.append(key, value);
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object');
+ }
+ }
+
+ /**
+ * Return combined header value given name
+ *
+ * @param String name Header name
+ * @return Mixed
+ */
+ get(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key === undefined) {
+ return null;
+ }
+
+ return this[MAP][key].join(', ');
+ }
+
+ /**
+ * Iterate over all headers
+ *
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
+ * @param Boolean thisArg `this` context for callback function
+ * @return Void
+ */
+ forEach(callback) {
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+ let pairs = getHeaders(this);
+ let i = 0;
+ while (i < pairs.length) {
+ var _pairs$i = pairs[i];
+ const name = _pairs$i[0],
+ value = _pairs$i[1];
+
+ callback.call(thisArg, value, name, this);
+ pairs = getHeaders(this);
+ i++;
+ }
+ }
+
+ /**
+ * Overwrite header values given name
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ set(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ this[MAP][key !== undefined ? key : name] = [value];
+ }
+
+ /**
+ * Append a value onto existing header
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ append(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ this[MAP][key].push(value);
+ } else {
+ this[MAP][name] = [value];
+ }
+ }
+
+ /**
+ * Check for header name existence
+ *
+ * @param String name Header name
+ * @return Boolean
+ */
+ has(name) {
+ name = `${name}`;
+ validateName(name);
+ return find(this[MAP], name) !== undefined;
+ }
+
+ /**
+ * Delete all header values given name
+ *
+ * @param String name Header name
+ * @return Void
+ */
+ delete(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ delete this[MAP][key];
+ }
+ }
+
+ /**
+ * Return raw headers (non-spec api)
+ *
+ * @return Object
+ */
+ raw() {
+ return this[MAP];
+ }
+
+ /**
+ * Get an iterator on keys.
+ *
+ * @return Iterator
+ */
+ keys() {
+ return createHeadersIterator(this, 'key');
+ }
+
+ /**
+ * Get an iterator on values.
+ *
+ * @return Iterator
+ */
+ values() {
+ return createHeadersIterator(this, 'value');
+ }
+
+ /**
+ * Get an iterator on entries.
+ *
+ * This is the default iterator of the Headers object.
+ *
+ * @return Iterator
+ */
+ [Symbol.iterator]() {
+ return createHeadersIterator(this, 'key+value');
+ }
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+ value: 'Headers',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+ const keys = Object.keys(headers[MAP]).sort();
+ return keys.map(kind === 'key' ? function (k) {
+ return k.toLowerCase();
+ } : kind === 'value' ? function (k) {
+ return headers[MAP][k].join(', ');
+ } : function (k) {
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
+ });
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+ const iterator = Object.create(HeadersIteratorPrototype);
+ iterator[INTERNAL] = {
+ target,
+ kind,
+ index: 0
+ };
+ return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+ next() {
+ // istanbul ignore if
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator');
+ }
+
+ var _INTERNAL = this[INTERNAL];
+ const target = _INTERNAL.target,
+ kind = _INTERNAL.kind,
+ index = _INTERNAL.index;
+
+ const values = getHeaders(target, kind);
+ const len = values.length;
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ this[INTERNAL].index = index + 1;
+
+ return {
+ value: values[index],
+ done: false
+ };
+ }
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+ value: 'HeadersIterator',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param Headers headers
+ * @return Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host');
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
+ }
+
+ return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param Object obj Object of headers
+ * @return Headers
+ */
+function createHeadersLenient(obj) {
+ const headers = new Headers();
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue;
+ }
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue;
+ }
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val];
+ } else {
+ headers[MAP][name].push(val);
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]];
+ }
+ }
+ return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+class Response {
+ constructor() {
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ Body.call(this, body, opts);
+
+ const status = opts.status || 200;
+ const headers = new Headers(opts.headers);
+
+ if (body != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ this[INTERNALS$1] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter
+ };
+ }
+
+ get url() {
+ return this[INTERNALS$1].url || '';
+ }
+
+ get status() {
+ return this[INTERNALS$1].status;
+ }
+
+ /**
+ * Convenience property representing if the request ended normally
+ */
+ get ok() {
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+ }
+
+ get redirected() {
+ return this[INTERNALS$1].counter > 0;
+ }
+
+ get statusText() {
+ return this[INTERNALS$1].statusText;
+ }
+
+ get headers() {
+ return this[INTERNALS$1].headers;
+ }
+
+ /**
+ * Clone this response
+ *
+ * @return Response
+ */
+ clone() {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected
+ });
+ }
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+ value: 'Response',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+const URL = Url$1.URL || publicApi.URL;
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url$1.parse;
+const format_url = Url$1.format;
+
+/**
+ * Wrapper around `new URL` to handle arbitrary URLs
+ *
+ * @param {string} urlStr
+ * @return {void}
+ */
+function parseURL(urlStr) {
+ /*
+ Check whether the URL is absolute or not
+ Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
+ Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
+ */
+ if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
+ urlStr = new URL(urlStr).toString();
+ }
+
+ // Fallback to old implementation for arbitrary URLs
+ return parse_url(urlStr);
+}
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param Mixed input
+ * @return Boolean
+ */
+function isRequest(input) {
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+ return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param Mixed input Url or Request instance
+ * @param Object init Custom options
+ * @return Void
+ */
+class Request {
+ constructor(input) {
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ let parsedURL;
+
+ // normalize input
+ if (!isRequest(input)) {
+ if (input && input.href) {
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
+ // will fall into this branch also (since their `toString()` will return
+ // `href` property anyway)
+ parsedURL = parseURL(input.href);
+ } else {
+ // coerce input to a string before attempting to parse
+ parsedURL = parseURL(`${input}`);
+ }
+ input = {};
+ } else {
+ parsedURL = parseURL(input.url);
+ }
+
+ let method = init.method || input.method || 'GET';
+ method = method.toUpperCase();
+
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+ throw new TypeError('Request with GET/HEAD method cannot have body');
+ }
+
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+ Body.call(this, inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0
+ });
+
+ const headers = new Headers(init.headers || input.headers || {});
+
+ if (inputBody != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ let signal = isRequest(input) ? input.signal : null;
+ if ('signal' in init) signal = init.signal;
+
+ if (signal != null && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
+ }
+
+ this[INTERNALS$2] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal
+ };
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+ this.counter = init.counter || input.counter || 0;
+ this.agent = init.agent || input.agent;
+ }
+
+ get method() {
+ return this[INTERNALS$2].method;
+ }
+
+ get url() {
+ return format_url(this[INTERNALS$2].parsedURL);
+ }
+
+ get headers() {
+ return this[INTERNALS$2].headers;
+ }
+
+ get redirect() {
+ return this[INTERNALS$2].redirect;
+ }
+
+ get signal() {
+ return this[INTERNALS$2].signal;
+ }
+
+ /**
+ * Clone this request
+ *
+ * @return Request
+ */
+ clone() {
+ return new Request(this);
+ }
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+ value: 'Request',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param Request A Request instance
+ * @return Object The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+ const parsedURL = request[INTERNALS$2].parsedURL;
+ const headers = new Headers(request[INTERNALS$2].headers);
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*');
+ }
+
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname) {
+ throw new TypeError('Only absolute URLs are supported');
+ }
+
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported');
+ }
+
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ let contentLengthValue = null;
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+ contentLengthValue = '0';
+ }
+ if (request.body != null) {
+ const totalBytes = getTotalBytes(request);
+ if (typeof totalBytes === 'number') {
+ contentLengthValue = String(totalBytes);
+ }
+ }
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue);
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate');
+ }
+
+ let agent = request.agent;
+ if (typeof agent === 'function') {
+ agent = agent(parsedURL);
+ }
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close');
+ }
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ return Object.assign({}, parsedURL, {
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent
+ });
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param String message Error message for human
+ * @return AbortError
+ */
+function AbortError(message) {
+ Error.call(this, message);
+
+ this.type = 'aborted';
+ this.message = message;
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+const URL$1 = Url$1.URL || publicApi.URL;
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+
+const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
+ const orig = new URL$1(original).hostname;
+ const dest = new URL$1(destination).hostname;
+
+ return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
+};
+
+/**
+ * isSameProtocol reports whether the two provided URLs use the same protocol.
+ *
+ * Both domains must already be in canonical form.
+ * @param {string|URL} original
+ * @param {string|URL} destination
+ */
+const isSameProtocol = function isSameProtocol(destination, original) {
+ const orig = new URL$1(original).protocol;
+ const dest = new URL$1(destination).protocol;
+
+ return orig === dest;
+};
+
+/**
+ * Fetch function
+ *
+ * @param Mixed url Absolute url or Request instance
+ * @param Object opts Fetch options
+ * @return Promise
+ */
+function fetch$1(url, opts) {
+
+ // allow custom promise
+ if (!fetch$1.Promise) {
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+ }
+
+ Body.Promise = fetch$1.Promise;
+
+ // wrap http.request into fetch
+ return new fetch$1.Promise(function (resolve, reject) {
+ // build request object
+ const request = new Request(url, opts);
+ const options = getNodeRequestOptions(request);
+
+ const send = (options.protocol === 'https:' ? https : http).request;
+ const signal = request.signal;
+
+ let response = null;
+
+ const abort = function abort() {
+ let error = new AbortError('The user aborted a request.');
+ reject(error);
+ if (request.body && request.body instanceof Stream.Readable) {
+ destroyStream(request.body, error);
+ }
+ if (!response || !response.body) return;
+ response.body.emit('error', error);
+ };
+
+ if (signal && signal.aborted) {
+ abort();
+ return;
+ }
+
+ const abortAndFinalize = function abortAndFinalize() {
+ abort();
+ finalize();
+ };
+
+ // send request
+ const req = send(options);
+ let reqTimeout;
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize);
+ }
+
+ function finalize() {
+ req.abort();
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ clearTimeout(reqTimeout);
+ }
+
+ if (request.timeout) {
+ req.once('socket', function (socket) {
+ reqTimeout = setTimeout(function () {
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+ finalize();
+ }, request.timeout);
+ });
+ }
+
+ req.on('error', function (err) {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+
+ if (response && response.body) {
+ destroyStream(response.body, err);
+ }
+
+ finalize();
+ });
+
+ fixResponseChunkedTransferBadEnding(req, function (err) {
+ if (signal && signal.aborted) {
+ return;
+ }
+
+ if (response && response.body) {
+ destroyStream(response.body, err);
+ }
+ });
+
+ /* c8 ignore next 18 */
+ if (parseInt(process.version.substring(1)) < 14) {
+ // Before Node.js 14, pipeline() does not fully support async iterators and does not always
+ // properly handle when the socket close/end events are out of order.
+ req.on('socket', function (s) {
+ s.addListener('close', function (hadError) {
+ // if a data listener is still present we didn't end cleanly
+ const hasDataListener = s.listenerCount('data') > 0;
+
+ // if end happened before close but the socket didn't emit an error, do it now
+ if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
+ const err = new Error('Premature close');
+ err.code = 'ERR_STREAM_PREMATURE_CLOSE';
+ response.body.emit('error', err);
+ }
+ });
+ });
+ }
+
+ req.on('response', function (res) {
+ clearTimeout(reqTimeout);
+
+ const headers = createHeadersLenient(res.headers);
+
+ // HTTP fetch step 5
+ if (fetch$1.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location');
+
+ // HTTP fetch step 5.3
+ let locationURL = null;
+ try {
+ locationURL = location === null ? null : new URL$1(location, request.url).toString();
+ } catch (err) {
+ // error here can only be invalid URL in Location: header
+ // do not throw when options.redirect == manual
+ // let the user extract the errorneous redirect URL
+ if (request.redirect !== 'manual') {
+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
+ finalize();
+ return;
+ }
+ }
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
+ finalize();
+ return;
+ case 'manual':
+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL);
+ } catch (err) {
+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+ reject(err);
+ }
+ }
+ break;
+ case 'follow':
+ // HTTP-redirect fetch step 2
+ if (locationURL === null) {
+ break;
+ }
+
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ size: request.size
+ };
+
+ if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {
+ for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
+ requestOpts.headers.delete(name);
+ }
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+ requestOpts.method = 'GET';
+ requestOpts.body = undefined;
+ requestOpts.headers.delete('content-length');
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch$1(new Request(locationURL, requestOpts)));
+ finalize();
+ return;
+ }
+ }
+
+ // prepare response
+ res.once('end', function () {
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ });
+ let body = res.pipe(new PassThrough$1());
+
+ const response_options = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter
+ };
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding');
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // For Node v6+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.Z_SYNC_FLUSH,
+ finishFlush: zlib.Z_SYNC_FLUSH
+ };
+
+ // for gzip
+ if (codings == 'gzip' || codings == 'x-gzip') {
+ body = body.pipe(zlib.createGunzip(zlibOptions));
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // for deflate
+ if (codings == 'deflate' || codings == 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new PassThrough$1());
+ raw.once('data', function (chunk) {
+ // see http://stackoverflow.com/questions/37519828
+ if ((chunk[0] & 0x0F) === 0x08) {
+ body = body.pipe(zlib.createInflate());
+ } else {
+ body = body.pipe(zlib.createInflateRaw());
+ }
+ response = new Response(body, response_options);
+ resolve(response);
+ });
+ raw.on('end', function () {
+ // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
+ if (!response) {
+ response = new Response(body, response_options);
+ resolve(response);
+ }
+ });
+ return;
+ }
+
+ // for br
+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+ body = body.pipe(zlib.createBrotliDecompress());
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // otherwise, use response as-is
+ response = new Response(body, response_options);
+ resolve(response);
+ });
+
+ writeToStream(req, request);
+ });
+}
+function fixResponseChunkedTransferBadEnding(request, errorCallback) {
+ let socket;
+
+ request.on('socket', function (s) {
+ socket = s;
+ });
+
+ request.on('response', function (response) {
+ const headers = response.headers;
+
+ if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
+ response.once('close', function (hadError) {
+ // if a data listener is still present we didn't end cleanly
+ const hasDataListener = socket.listenerCount('data') > 0;
+
+ if (hasDataListener && !hadError) {
+ const err = new Error('Premature close');
+ err.code = 'ERR_STREAM_PREMATURE_CLOSE';
+ errorCallback(err);
+ }
+ });
+ }
+ });
+}
+
+function destroyStream(stream, err) {
+ if (stream.destroy) {
+ stream.destroy(err);
+ } else {
+ // node < 8
+ stream.emit('error', err);
+ stream.end();
+ }
+}
+
+/**
+ * Redirect code matching
+ *
+ * @param Number code Status code
+ * @return Boolean
+ */
+fetch$1.isRedirect = function (code) {
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch$1.Promise = global.Promise;
+
+var cookie = {};
+
+/** Highest positive signed 32-bit float value */
+const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
+
+/** Bootstring parameters */
+const base = 36;
+const tMin = 1;
+const tMax = 26;
+const skew = 38;
+const damp = 700;
+const initialBias = 72;
+const initialN = 128; // 0x80
+const delimiter = '-'; // '\x2D'
+
+/** Regular expressions */
+const regexPunycode = /^xn--/;
+const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too.
+const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
+
+/** Error messages */
+const errors = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+};
+
+/** Convenience shortcuts */
+const baseMinusTMin = base - tMin;
+const floor = Math.floor;
+const stringFromCharCode = String.fromCharCode;
+
+/*--------------------------------------------------------------------------*/
+
+/**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+function error(type) {
+ throw new RangeError(errors[type]);
+}
+
+/**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+function map(array, callback) {
+ const result = [];
+ let length = array.length;
+ while (length--) {
+ result[length] = callback(array[length]);
+ }
+ return result;
+}
+
+/**
+ * A simple `Array#map`-like wrapper to work with domain name strings or email
+ * addresses.
+ * @private
+ * @param {String} domain The domain name or email address.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {String} A new string of characters returned by the callback
+ * function.
+ */
+function mapDomain(domain, callback) {
+ const parts = domain.split('@');
+ let result = '';
+ if (parts.length > 1) {
+ // In email addresses, only the domain name should be punycoded. Leave
+ // the local part (i.e. everything up to `@`) intact.
+ result = parts[0] + '@';
+ domain = parts[1];
+ }
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ domain = domain.replace(regexSeparators, '\x2E');
+ const labels = domain.split('.');
+ const encoded = map(labels, callback).join('.');
+ return result + encoded;
+}
+
+/**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+function ucs2decode(string) {
+ const output = [];
+ let counter = 0;
+ const length = string.length;
+ while (counter < length) {
+ const value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // It's a high surrogate, and there is a next character.
+ const extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // It's an unmatched surrogate; only append this code unit, in case the
+ // next code unit is the high surrogate of a surrogate pair.
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+}
+
+/**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+const ucs2encode = codePoints => String.fromCodePoint(...codePoints);
+
+/**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+const basicToDigit = function(codePoint) {
+ if (codePoint >= 0x30 && codePoint < 0x3A) {
+ return 26 + (codePoint - 0x30);
+ }
+ if (codePoint >= 0x41 && codePoint < 0x5B) {
+ return codePoint - 0x41;
+ }
+ if (codePoint >= 0x61 && codePoint < 0x7B) {
+ return codePoint - 0x61;
+ }
+ return base;
+};
+
+/**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+const digitToBasic = function(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+};
+
+/**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * https://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+const adapt = function(delta, numPoints, firstTime) {
+ let k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+};
+
+/**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+const decode$1 = function(input) {
+ // Don't use UCS-2.
+ const output = [];
+ const inputLength = input.length;
+ let i = 0;
+ let n = initialN;
+ let bias = initialBias;
+
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
+
+ let basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
+
+ for (let j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
+
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
+
+ for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ const oldi = i;
+ for (let w = 1, k = base; /* no condition */; k += base) {
+
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
+
+ const digit = basicToDigit(input.charCodeAt(index++));
+
+ if (digit >= base) {
+ error('invalid-input');
+ }
+ if (digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
+
+ i += digit * w;
+ const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+
+ if (digit < t) {
+ break;
+ }
+
+ const baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
+
+ w *= baseMinusT;
+
+ }
+
+ const out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
+
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
+
+ n += floor(i / out);
+ i %= out;
+
+ // Insert `n` at position `i` of the output.
+ output.splice(i++, 0, n);
+
+ }
+
+ return String.fromCodePoint(...output);
+};
+
+/**
+ * Converts a string of Unicode symbols (e.g. a domain name label) to a
+ * Punycode string of ASCII-only symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+const encode$1 = function(input) {
+ const output = [];
+
+ // Convert the input in UCS-2 to an array of Unicode code points.
+ input = ucs2decode(input);
+
+ // Cache the length.
+ const inputLength = input.length;
+
+ // Initialize the state.
+ let n = initialN;
+ let delta = 0;
+ let bias = initialBias;
+
+ // Handle the basic code points.
+ for (const currentValue of input) {
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
+
+ const basicLength = output.length;
+ let handledCPCount = basicLength;
+
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
+
+ // Finish the basic string with a delimiter unless it's empty.
+ if (basicLength) {
+ output.push(delimiter);
+ }
+
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
+
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ let m = maxInt;
+ for (const currentValue of input) {
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
+
+ // Increase `delta` enough to advance the decoder's state to ,
+ // but guard against overflow.
+ const handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
+
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
+
+ for (const currentValue of input) {
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
+ if (currentValue === n) {
+ // Represent delta as a generalized variable-length integer.
+ let q = delta;
+ for (let k = base; /* no condition */; k += base) {
+ const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ const qMinusT = q - t;
+ const baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
+
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
+
+ ++delta;
+ ++n;
+
+ }
+ return output.join('');
+};
+
+/**
+ * Converts a Punycode string representing a domain name or an email address
+ * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+ * it doesn't matter if you call it on a string that has already been
+ * converted to Unicode.
+ * @memberOf punycode
+ * @param {String} input The Punycoded domain name or email address to
+ * convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+const toUnicode = function(input) {
+ return mapDomain(input, function(string) {
+ return regexPunycode.test(string)
+ ? decode$1(string.slice(4).toLowerCase())
+ : string;
+ });
+};
+
+/**
+ * Converts a Unicode string representing a domain name or an email address to
+ * Punycode. Only the non-ASCII parts of the domain name will be converted,
+ * i.e. it doesn't matter if you call it with a domain that's already in
+ * ASCII.
+ * @memberOf punycode
+ * @param {String} input The domain name or email address to convert, as a
+ * Unicode string.
+ * @returns {String} The Punycode representation of the given domain name or
+ * email address.
+ */
+const toASCII = function(input) {
+ return mapDomain(input, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode$1(string)
+ : string;
+ });
+};
+
+/*--------------------------------------------------------------------------*/
+
+/** Define the public API */
+const punycode$1 = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '2.1.0',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode$1,
+ 'encode': encode$1,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+};
+
+var punycode_es6 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ ucs2decode: ucs2decode,
+ ucs2encode: ucs2encode,
+ decode: decode$1,
+ encode: encode$1,
+ toASCII: toASCII,
+ toUnicode: toUnicode,
+ default: punycode$1
+});
+
+var require$$0 = /*@__PURE__*/getAugmentedNamespace(punycode_es6);
+
+/**
+ * Check if we're required to add a port number.
+ *
+ * @see https://url.spec.whatwg.org/#default-port
+ * @param {Number|String} port Port number we need to check
+ * @param {String} protocol Protocol we need to check against.
+ * @returns {Boolean} Is it a default port for the given protocol
+ * @api private
+ */
+var requiresPort = function required(port, protocol) {
+ protocol = protocol.split(':')[0];
+ port = +port;
+
+ if (!port) return false;
+
+ switch (protocol) {
+ case 'http':
+ case 'ws':
+ return port !== 80;
+
+ case 'https':
+ case 'wss':
+ return port !== 443;
+
+ case 'ftp':
+ return port !== 21;
+
+ case 'gopher':
+ return port !== 70;
+
+ case 'file':
+ return false;
+ }
+
+ return port !== 0;
+};
+
+var querystringify$1 = {};
+
+var has = Object.prototype.hasOwnProperty
+ , undef;
+
+/**
+ * Decode a URI encoded string.
+ *
+ * @param {String} input The URI encoded string.
+ * @returns {String|Null} The decoded string.
+ * @api private
+ */
+function decode(input) {
+ try {
+ return decodeURIComponent(input.replace(/\+/g, ' '));
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Attempts to encode a given input.
+ *
+ * @param {String} input The string that needs to be encoded.
+ * @returns {String|Null} The encoded string.
+ * @api private
+ */
+function encode(input) {
+ try {
+ return encodeURIComponent(input);
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Simple query string parser.
+ *
+ * @param {String} query The query string that needs to be parsed.
+ * @returns {Object}
+ * @api public
+ */
+function querystring(query) {
+ var parser = /([^=?#&]+)=?([^&]*)/g
+ , result = {}
+ , part;
+
+ while (part = parser.exec(query)) {
+ var key = decode(part[1])
+ , value = decode(part[2]);
+
+ //
+ // Prevent overriding of existing properties. This ensures that build-in
+ // methods like `toString` or __proto__ are not overriden by malicious
+ // querystrings.
+ //
+ // In the case if failed decoding, we want to omit the key/value pairs
+ // from the result.
+ //
+ if (key === null || value === null || key in result) continue;
+ result[key] = value;
+ }
+
+ return result;
+}
+
+/**
+ * Transform a query string to an object.
+ *
+ * @param {Object} obj Object that should be transformed.
+ * @param {String} prefix Optional prefix.
+ * @returns {String}
+ * @api public
+ */
+function querystringify(obj, prefix) {
+ prefix = prefix || '';
+
+ var pairs = []
+ , value
+ , key;
+
+ //
+ // Optionally prefix with a '?' if needed
+ //
+ if ('string' !== typeof prefix) prefix = '?';
+
+ for (key in obj) {
+ if (has.call(obj, key)) {
+ value = obj[key];
+
+ //
+ // Edge cases where we actually want to encode the value to an empty
+ // string instead of the stringified value.
+ //
+ if (!value && (value === null || value === undef || isNaN(value))) {
+ value = '';
+ }
+
+ key = encode(key);
+ value = encode(value);
+
+ //
+ // If we failed to encode the strings, we should bail out as we don't
+ // want to add invalid strings to the query.
+ //
+ if (key === null || value === null) continue;
+ pairs.push(key +'='+ value);
+ }
+ }
+
+ return pairs.length ? prefix + pairs.join('&') : '';
+}
+
+//
+// Expose the module.
+//
+querystringify$1.stringify = querystringify;
+querystringify$1.parse = querystring;
+
+var required = requiresPort
+ , qs = querystringify$1
+ , controlOrWhitespace = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/
+ , CRHTLF = /[\n\r\t]/g
+ , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//
+ , port = /:\d+$/
+ , protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i
+ , windowsDriveLetter = /^[a-zA-Z]:/;
+
+/**
+ * Remove control characters and whitespace from the beginning of a string.
+ *
+ * @param {Object|String} str String to trim.
+ * @returns {String} A new string representing `str` stripped of control
+ * characters and whitespace from its beginning.
+ * @public
+ */
+function trimLeft(str) {
+ return (str ? str : '').toString().replace(controlOrWhitespace, '');
+}
+
+/**
+ * These are the parse rules for the URL parser, it informs the parser
+ * about:
+ *
+ * 0. The char it Needs to parse, if it's a string it should be done using
+ * indexOf, RegExp using exec and NaN means set as current value.
+ * 1. The property we should set when parsing this value.
+ * 2. Indication if it's backwards or forward parsing, when set as number it's
+ * the value of extra chars that should be split off.
+ * 3. Inherit from location if non existing in the parser.
+ * 4. `toLowerCase` the resulting value.
+ */
+var rules = [
+ ['#', 'hash'], // Extract from the back.
+ ['?', 'query'], // Extract from the back.
+ function sanitize(address, url) { // Sanitize what is left of the address
+ return isSpecial(url.protocol) ? address.replace(/\\/g, '/') : address;
+ },
+ ['/', 'pathname'], // Extract from the back.
+ ['@', 'auth', 1], // Extract from the front.
+ [NaN, 'host', undefined, 1, 1], // Set left over value.
+ [/:(\d*)$/, 'port', undefined, 1], // RegExp the back.
+ [NaN, 'hostname', undefined, 1, 1] // Set left over.
+];
+
+/**
+ * These properties should not be copied or inherited from. This is only needed
+ * for all non blob URL's as a blob URL does not include a hash, only the
+ * origin.
+ *
+ * @type {Object}
+ * @private
+ */
+var ignore = { hash: 1, query: 1 };
+
+/**
+ * The location object differs when your code is loaded through a normal page,
+ * Worker or through a worker using a blob. And with the blobble begins the
+ * trouble as the location object will contain the URL of the blob, not the
+ * location of the page where our code is loaded in. The actual origin is
+ * encoded in the `pathname` so we can thankfully generate a good "default"
+ * location from it so we can generate proper relative URL's again.
+ *
+ * @param {Object|String} loc Optional default location object.
+ * @returns {Object} lolcation object.
+ * @public
+ */
+function lolcation(loc) {
+ var globalVar;
+
+ if (typeof window !== 'undefined') globalVar = window;
+ else if (typeof commonjsGlobal !== 'undefined') globalVar = commonjsGlobal;
+ else if (typeof self !== 'undefined') globalVar = self;
+ else globalVar = {};
+
+ var location = globalVar.location || {};
+ loc = loc || location;
+
+ var finaldestination = {}
+ , type = typeof loc
+ , key;
+
+ if ('blob:' === loc.protocol) {
+ finaldestination = new Url(unescape(loc.pathname), {});
+ } else if ('string' === type) {
+ finaldestination = new Url(loc, {});
+ for (key in ignore) delete finaldestination[key];
+ } else if ('object' === type) {
+ for (key in loc) {
+ if (key in ignore) continue;
+ finaldestination[key] = loc[key];
+ }
+
+ if (finaldestination.slashes === undefined) {
+ finaldestination.slashes = slashes.test(loc.href);
+ }
+ }
+
+ return finaldestination;
+}
+
+/**
+ * Check whether a protocol scheme is special.
+ *
+ * @param {String} The protocol scheme of the URL
+ * @return {Boolean} `true` if the protocol scheme is special, else `false`
+ * @private
+ */
+function isSpecial(scheme) {
+ return (
+ scheme === 'file:' ||
+ scheme === 'ftp:' ||
+ scheme === 'http:' ||
+ scheme === 'https:' ||
+ scheme === 'ws:' ||
+ scheme === 'wss:'
+ );
+}
+
+/**
+ * @typedef ProtocolExtract
+ * @type Object
+ * @property {String} protocol Protocol matched in the URL, in lowercase.
+ * @property {Boolean} slashes `true` if protocol is followed by "//", else `false`.
+ * @property {String} rest Rest of the URL that is not part of the protocol.
+ */
+
+/**
+ * Extract protocol information from a URL with/without double slash ("//").
+ *
+ * @param {String} address URL we want to extract from.
+ * @param {Object} location
+ * @return {ProtocolExtract} Extracted information.
+ * @private
+ */
+function extractProtocol(address, location) {
+ address = trimLeft(address);
+ address = address.replace(CRHTLF, '');
+ location = location || {};
+
+ var match = protocolre.exec(address);
+ var protocol = match[1] ? match[1].toLowerCase() : '';
+ var forwardSlashes = !!match[2];
+ var otherSlashes = !!match[3];
+ var slashesCount = 0;
+ var rest;
+
+ if (forwardSlashes) {
+ if (otherSlashes) {
+ rest = match[2] + match[3] + match[4];
+ slashesCount = match[2].length + match[3].length;
+ } else {
+ rest = match[2] + match[4];
+ slashesCount = match[2].length;
+ }
+ } else {
+ if (otherSlashes) {
+ rest = match[3] + match[4];
+ slashesCount = match[3].length;
+ } else {
+ rest = match[4];
+ }
+ }
+
+ if (protocol === 'file:') {
+ if (slashesCount >= 2) {
+ rest = rest.slice(2);
+ }
+ } else if (isSpecial(protocol)) {
+ rest = match[4];
+ } else if (protocol) {
+ if (forwardSlashes) {
+ rest = rest.slice(2);
+ }
+ } else if (slashesCount >= 2 && isSpecial(location.protocol)) {
+ rest = match[4];
+ }
+
+ return {
+ protocol: protocol,
+ slashes: forwardSlashes || isSpecial(protocol),
+ slashesCount: slashesCount,
+ rest: rest
+ };
+}
+
+/**
+ * Resolve a relative URL pathname against a base URL pathname.
+ *
+ * @param {String} relative Pathname of the relative URL.
+ * @param {String} base Pathname of the base URL.
+ * @return {String} Resolved pathname.
+ * @private
+ */
+function resolve(relative, base) {
+ if (relative === '') return base;
+
+ var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))
+ , i = path.length
+ , last = path[i - 1]
+ , unshift = false
+ , up = 0;
+
+ while (i--) {
+ if (path[i] === '.') {
+ path.splice(i, 1);
+ } else if (path[i] === '..') {
+ path.splice(i, 1);
+ up++;
+ } else if (up) {
+ if (i === 0) unshift = true;
+ path.splice(i, 1);
+ up--;
+ }
+ }
+
+ if (unshift) path.unshift('');
+ if (last === '.' || last === '..') path.push('');
+
+ return path.join('/');
+}
+
+/**
+ * The actual URL instance. Instead of returning an object we've opted-in to
+ * create an actual constructor as it's much more memory efficient and
+ * faster and it pleases my OCD.
+ *
+ * It is worth noting that we should not use `URL` as class name to prevent
+ * clashes with the global URL instance that got introduced in browsers.
+ *
+ * @constructor
+ * @param {String} address URL we want to parse.
+ * @param {Object|String} [location] Location defaults for relative paths.
+ * @param {Boolean|Function} [parser] Parser for the query string.
+ * @private
+ */
+function Url(address, location, parser) {
+ address = trimLeft(address);
+ address = address.replace(CRHTLF, '');
+
+ if (!(this instanceof Url)) {
+ return new Url(address, location, parser);
+ }
+
+ var relative, extracted, parse, instruction, index, key
+ , instructions = rules.slice()
+ , type = typeof location
+ , url = this
+ , i = 0;
+
+ //
+ // The following if statements allows this module two have compatibility with
+ // 2 different API:
+ //
+ // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments
+ // where the boolean indicates that the query string should also be parsed.
+ //
+ // 2. The `URL` interface of the browser which accepts a URL, object as
+ // arguments. The supplied object will be used as default values / fall-back
+ // for relative paths.
+ //
+ if ('object' !== type && 'string' !== type) {
+ parser = location;
+ location = null;
+ }
+
+ if (parser && 'function' !== typeof parser) parser = qs.parse;
+
+ location = lolcation(location);
+
+ //
+ // Extract protocol information before running the instructions.
+ //
+ extracted = extractProtocol(address || '', location);
+ relative = !extracted.protocol && !extracted.slashes;
+ url.slashes = extracted.slashes || relative && location.slashes;
+ url.protocol = extracted.protocol || location.protocol || '';
+ address = extracted.rest;
+
+ //
+ // When the authority component is absent the URL starts with a path
+ // component.
+ //
+ if (
+ extracted.protocol === 'file:' && (
+ extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||
+ (!extracted.slashes &&
+ (extracted.protocol ||
+ extracted.slashesCount < 2 ||
+ !isSpecial(url.protocol)))
+ ) {
+ instructions[3] = [/(.*)/, 'pathname'];
+ }
+
+ for (; i < instructions.length; i++) {
+ instruction = instructions[i];
+
+ if (typeof instruction === 'function') {
+ address = instruction(address, url);
+ continue;
+ }
+
+ parse = instruction[0];
+ key = instruction[1];
+
+ if (parse !== parse) {
+ url[key] = address;
+ } else if ('string' === typeof parse) {
+ index = parse === '@'
+ ? address.lastIndexOf(parse)
+ : address.indexOf(parse);
+
+ if (~index) {
+ if ('number' === typeof instruction[2]) {
+ url[key] = address.slice(0, index);
+ address = address.slice(index + instruction[2]);
+ } else {
+ url[key] = address.slice(index);
+ address = address.slice(0, index);
+ }
+ }
+ } else if ((index = parse.exec(address))) {
+ url[key] = index[1];
+ address = address.slice(0, index.index);
+ }
+
+ url[key] = url[key] || (
+ relative && instruction[3] ? location[key] || '' : ''
+ );
+
+ //
+ // Hostname, host and protocol should be lowercased so they can be used to
+ // create a proper `origin`.
+ //
+ if (instruction[4]) url[key] = url[key].toLowerCase();
+ }
+
+ //
+ // Also parse the supplied query string in to an object. If we're supplied
+ // with a custom parser as function use that instead of the default build-in
+ // parser.
+ //
+ if (parser) url.query = parser(url.query);
+
+ //
+ // If the URL is relative, resolve the pathname against the base URL.
+ //
+ if (
+ relative
+ && location.slashes
+ && url.pathname.charAt(0) !== '/'
+ && (url.pathname !== '' || location.pathname !== '')
+ ) {
+ url.pathname = resolve(url.pathname, location.pathname);
+ }
+
+ //
+ // Default to a / for pathname if none exists. This normalizes the URL
+ // to always have a /
+ //
+ if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {
+ url.pathname = '/' + url.pathname;
+ }
+
+ //
+ // We should not add port numbers if they are already the default port number
+ // for a given protocol. As the host also contains the port number we're going
+ // override it with the hostname which contains no port number.
+ //
+ if (!required(url.port, url.protocol)) {
+ url.host = url.hostname;
+ url.port = '';
+ }
+
+ //
+ // Parse down the `auth` for the username and password.
+ //
+ url.username = url.password = '';
+
+ if (url.auth) {
+ index = url.auth.indexOf(':');
+
+ if (~index) {
+ url.username = url.auth.slice(0, index);
+ url.username = encodeURIComponent(decodeURIComponent(url.username));
+
+ url.password = url.auth.slice(index + 1);
+ url.password = encodeURIComponent(decodeURIComponent(url.password));
+ } else {
+ url.username = encodeURIComponent(decodeURIComponent(url.auth));
+ }
+
+ url.auth = url.password ? url.username +':'+ url.password : url.username;
+ }
+
+ url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host
+ ? url.protocol +'//'+ url.host
+ : 'null';
+
+ //
+ // The href is just the compiled result.
+ //
+ url.href = url.toString();
+}
+
+/**
+ * This is convenience method for changing properties in the URL instance to
+ * insure that they all propagate correctly.
+ *
+ * @param {String} part Property we need to adjust.
+ * @param {Mixed} value The newly assigned value.
+ * @param {Boolean|Function} fn When setting the query, it will be the function
+ * used to parse the query.
+ * When setting the protocol, double slash will be
+ * removed from the final url if it is true.
+ * @returns {URL} URL instance for chaining.
+ * @public
+ */
+function set(part, value, fn) {
+ var url = this;
+
+ switch (part) {
+ case 'query':
+ if ('string' === typeof value && value.length) {
+ value = (fn || qs.parse)(value);
+ }
+
+ url[part] = value;
+ break;
+
+ case 'port':
+ url[part] = value;
+
+ if (!required(value, url.protocol)) {
+ url.host = url.hostname;
+ url[part] = '';
+ } else if (value) {
+ url.host = url.hostname +':'+ value;
+ }
+
+ break;
+
+ case 'hostname':
+ url[part] = value;
+
+ if (url.port) value += ':'+ url.port;
+ url.host = value;
+ break;
+
+ case 'host':
+ url[part] = value;
+
+ if (port.test(value)) {
+ value = value.split(':');
+ url.port = value.pop();
+ url.hostname = value.join(':');
+ } else {
+ url.hostname = value;
+ url.port = '';
+ }
+
+ break;
+
+ case 'protocol':
+ url.protocol = value.toLowerCase();
+ url.slashes = !fn;
+ break;
+
+ case 'pathname':
+ case 'hash':
+ if (value) {
+ var char = part === 'pathname' ? '/' : '#';
+ url[part] = value.charAt(0) !== char ? char + value : value;
+ } else {
+ url[part] = value;
+ }
+ break;
+
+ case 'username':
+ case 'password':
+ url[part] = encodeURIComponent(value);
+ break;
+
+ case 'auth':
+ var index = value.indexOf(':');
+
+ if (~index) {
+ url.username = value.slice(0, index);
+ url.username = encodeURIComponent(decodeURIComponent(url.username));
+
+ url.password = value.slice(index + 1);
+ url.password = encodeURIComponent(decodeURIComponent(url.password));
+ } else {
+ url.username = encodeURIComponent(decodeURIComponent(value));
+ }
+ }
+
+ for (var i = 0; i < rules.length; i++) {
+ var ins = rules[i];
+
+ if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();
+ }
+
+ url.auth = url.password ? url.username +':'+ url.password : url.username;
+
+ url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host
+ ? url.protocol +'//'+ url.host
+ : 'null';
+
+ url.href = url.toString();
+
+ return url;
+}
+
+/**
+ * Transform the properties back in to a valid and full URL string.
+ *
+ * @param {Function} stringify Optional query stringify function.
+ * @returns {String} Compiled version of the URL.
+ * @public
+ */
+function toString$1(stringify) {
+ if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;
+
+ var query
+ , url = this
+ , host = url.host
+ , protocol = url.protocol;
+
+ if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';
+
+ var result =
+ protocol +
+ ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');
+
+ if (url.username) {
+ result += url.username;
+ if (url.password) result += ':'+ url.password;
+ result += '@';
+ } else if (url.password) {
+ result += ':'+ url.password;
+ result += '@';
+ } else if (
+ url.protocol !== 'file:' &&
+ isSpecial(url.protocol) &&
+ !host &&
+ url.pathname !== '/'
+ ) {
+ //
+ // Add back the empty userinfo, otherwise the original invalid URL
+ // might be transformed into a valid one with `url.pathname` as host.
+ //
+ result += '@';
+ }
+
+ //
+ // Trailing colon is removed from `url.host` when it is parsed. If it still
+ // ends with a colon, then add back the trailing colon that was removed. This
+ // prevents an invalid URL from being transformed into a valid one.
+ //
+ if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {
+ host += ':';
+ }
+
+ result += host + url.pathname;
+
+ query = 'object' === typeof url.query ? stringify(url.query) : url.query;
+ if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;
+
+ if (url.hash) result += url.hash;
+
+ return result;
+}
+
+Url.prototype = { set: set, toString: toString$1 };
+
+//
+// Expose the URL parser and some additional properties that might be useful for
+// others or testing.
+//
+Url.extractProtocol = extractProtocol;
+Url.location = lolcation;
+Url.trimLeft = trimLeft;
+Url.qs = qs;
+
+var urlParse$1 = Url;
+
+var pubsuffixPsl = {};
+
+var psl$1 = {};
+
+var require$$1 = [
+ "ac",
+ "com.ac",
+ "edu.ac",
+ "gov.ac",
+ "net.ac",
+ "mil.ac",
+ "org.ac",
+ "ad",
+ "nom.ad",
+ "ae",
+ "co.ae",
+ "net.ae",
+ "org.ae",
+ "sch.ae",
+ "ac.ae",
+ "gov.ae",
+ "mil.ae",
+ "aero",
+ "accident-investigation.aero",
+ "accident-prevention.aero",
+ "aerobatic.aero",
+ "aeroclub.aero",
+ "aerodrome.aero",
+ "agents.aero",
+ "aircraft.aero",
+ "airline.aero",
+ "airport.aero",
+ "air-surveillance.aero",
+ "airtraffic.aero",
+ "air-traffic-control.aero",
+ "ambulance.aero",
+ "amusement.aero",
+ "association.aero",
+ "author.aero",
+ "ballooning.aero",
+ "broker.aero",
+ "caa.aero",
+ "cargo.aero",
+ "catering.aero",
+ "certification.aero",
+ "championship.aero",
+ "charter.aero",
+ "civilaviation.aero",
+ "club.aero",
+ "conference.aero",
+ "consultant.aero",
+ "consulting.aero",
+ "control.aero",
+ "council.aero",
+ "crew.aero",
+ "design.aero",
+ "dgca.aero",
+ "educator.aero",
+ "emergency.aero",
+ "engine.aero",
+ "engineer.aero",
+ "entertainment.aero",
+ "equipment.aero",
+ "exchange.aero",
+ "express.aero",
+ "federation.aero",
+ "flight.aero",
+ "fuel.aero",
+ "gliding.aero",
+ "government.aero",
+ "groundhandling.aero",
+ "group.aero",
+ "hanggliding.aero",
+ "homebuilt.aero",
+ "insurance.aero",
+ "journal.aero",
+ "journalist.aero",
+ "leasing.aero",
+ "logistics.aero",
+ "magazine.aero",
+ "maintenance.aero",
+ "media.aero",
+ "microlight.aero",
+ "modelling.aero",
+ "navigation.aero",
+ "parachuting.aero",
+ "paragliding.aero",
+ "passenger-association.aero",
+ "pilot.aero",
+ "press.aero",
+ "production.aero",
+ "recreation.aero",
+ "repbody.aero",
+ "res.aero",
+ "research.aero",
+ "rotorcraft.aero",
+ "safety.aero",
+ "scientist.aero",
+ "services.aero",
+ "show.aero",
+ "skydiving.aero",
+ "software.aero",
+ "student.aero",
+ "trader.aero",
+ "trading.aero",
+ "trainer.aero",
+ "union.aero",
+ "workinggroup.aero",
+ "works.aero",
+ "af",
+ "gov.af",
+ "com.af",
+ "org.af",
+ "net.af",
+ "edu.af",
+ "ag",
+ "com.ag",
+ "org.ag",
+ "net.ag",
+ "co.ag",
+ "nom.ag",
+ "ai",
+ "off.ai",
+ "com.ai",
+ "net.ai",
+ "org.ai",
+ "al",
+ "com.al",
+ "edu.al",
+ "gov.al",
+ "mil.al",
+ "net.al",
+ "org.al",
+ "am",
+ "co.am",
+ "com.am",
+ "commune.am",
+ "net.am",
+ "org.am",
+ "ao",
+ "ed.ao",
+ "gv.ao",
+ "og.ao",
+ "co.ao",
+ "pb.ao",
+ "it.ao",
+ "aq",
+ "ar",
+ "bet.ar",
+ "com.ar",
+ "coop.ar",
+ "edu.ar",
+ "gob.ar",
+ "gov.ar",
+ "int.ar",
+ "mil.ar",
+ "musica.ar",
+ "mutual.ar",
+ "net.ar",
+ "org.ar",
+ "senasa.ar",
+ "tur.ar",
+ "arpa",
+ "e164.arpa",
+ "in-addr.arpa",
+ "ip6.arpa",
+ "iris.arpa",
+ "uri.arpa",
+ "urn.arpa",
+ "as",
+ "gov.as",
+ "asia",
+ "at",
+ "ac.at",
+ "co.at",
+ "gv.at",
+ "or.at",
+ "sth.ac.at",
+ "au",
+ "com.au",
+ "net.au",
+ "org.au",
+ "edu.au",
+ "gov.au",
+ "asn.au",
+ "id.au",
+ "info.au",
+ "conf.au",
+ "oz.au",
+ "act.au",
+ "nsw.au",
+ "nt.au",
+ "qld.au",
+ "sa.au",
+ "tas.au",
+ "vic.au",
+ "wa.au",
+ "act.edu.au",
+ "catholic.edu.au",
+ "nsw.edu.au",
+ "nt.edu.au",
+ "qld.edu.au",
+ "sa.edu.au",
+ "tas.edu.au",
+ "vic.edu.au",
+ "wa.edu.au",
+ "qld.gov.au",
+ "sa.gov.au",
+ "tas.gov.au",
+ "vic.gov.au",
+ "wa.gov.au",
+ "schools.nsw.edu.au",
+ "aw",
+ "com.aw",
+ "ax",
+ "az",
+ "com.az",
+ "net.az",
+ "int.az",
+ "gov.az",
+ "org.az",
+ "edu.az",
+ "info.az",
+ "pp.az",
+ "mil.az",
+ "name.az",
+ "pro.az",
+ "biz.az",
+ "ba",
+ "com.ba",
+ "edu.ba",
+ "gov.ba",
+ "mil.ba",
+ "net.ba",
+ "org.ba",
+ "bb",
+ "biz.bb",
+ "co.bb",
+ "com.bb",
+ "edu.bb",
+ "gov.bb",
+ "info.bb",
+ "net.bb",
+ "org.bb",
+ "store.bb",
+ "tv.bb",
+ "*.bd",
+ "be",
+ "ac.be",
+ "bf",
+ "gov.bf",
+ "bg",
+ "a.bg",
+ "b.bg",
+ "c.bg",
+ "d.bg",
+ "e.bg",
+ "f.bg",
+ "g.bg",
+ "h.bg",
+ "i.bg",
+ "j.bg",
+ "k.bg",
+ "l.bg",
+ "m.bg",
+ "n.bg",
+ "o.bg",
+ "p.bg",
+ "q.bg",
+ "r.bg",
+ "s.bg",
+ "t.bg",
+ "u.bg",
+ "v.bg",
+ "w.bg",
+ "x.bg",
+ "y.bg",
+ "z.bg",
+ "0.bg",
+ "1.bg",
+ "2.bg",
+ "3.bg",
+ "4.bg",
+ "5.bg",
+ "6.bg",
+ "7.bg",
+ "8.bg",
+ "9.bg",
+ "bh",
+ "com.bh",
+ "edu.bh",
+ "net.bh",
+ "org.bh",
+ "gov.bh",
+ "bi",
+ "co.bi",
+ "com.bi",
+ "edu.bi",
+ "or.bi",
+ "org.bi",
+ "biz",
+ "bj",
+ "asso.bj",
+ "barreau.bj",
+ "gouv.bj",
+ "bm",
+ "com.bm",
+ "edu.bm",
+ "gov.bm",
+ "net.bm",
+ "org.bm",
+ "bn",
+ "com.bn",
+ "edu.bn",
+ "gov.bn",
+ "net.bn",
+ "org.bn",
+ "bo",
+ "com.bo",
+ "edu.bo",
+ "gob.bo",
+ "int.bo",
+ "org.bo",
+ "net.bo",
+ "mil.bo",
+ "tv.bo",
+ "web.bo",
+ "academia.bo",
+ "agro.bo",
+ "arte.bo",
+ "blog.bo",
+ "bolivia.bo",
+ "ciencia.bo",
+ "cooperativa.bo",
+ "democracia.bo",
+ "deporte.bo",
+ "ecologia.bo",
+ "economia.bo",
+ "empresa.bo",
+ "indigena.bo",
+ "industria.bo",
+ "info.bo",
+ "medicina.bo",
+ "movimiento.bo",
+ "musica.bo",
+ "natural.bo",
+ "nombre.bo",
+ "noticias.bo",
+ "patria.bo",
+ "politica.bo",
+ "profesional.bo",
+ "plurinacional.bo",
+ "pueblo.bo",
+ "revista.bo",
+ "salud.bo",
+ "tecnologia.bo",
+ "tksat.bo",
+ "transporte.bo",
+ "wiki.bo",
+ "br",
+ "9guacu.br",
+ "abc.br",
+ "adm.br",
+ "adv.br",
+ "agr.br",
+ "aju.br",
+ "am.br",
+ "anani.br",
+ "aparecida.br",
+ "app.br",
+ "arq.br",
+ "art.br",
+ "ato.br",
+ "b.br",
+ "barueri.br",
+ "belem.br",
+ "bhz.br",
+ "bib.br",
+ "bio.br",
+ "blog.br",
+ "bmd.br",
+ "boavista.br",
+ "bsb.br",
+ "campinagrande.br",
+ "campinas.br",
+ "caxias.br",
+ "cim.br",
+ "cng.br",
+ "cnt.br",
+ "com.br",
+ "contagem.br",
+ "coop.br",
+ "coz.br",
+ "cri.br",
+ "cuiaba.br",
+ "curitiba.br",
+ "def.br",
+ "des.br",
+ "det.br",
+ "dev.br",
+ "ecn.br",
+ "eco.br",
+ "edu.br",
+ "emp.br",
+ "enf.br",
+ "eng.br",
+ "esp.br",
+ "etc.br",
+ "eti.br",
+ "far.br",
+ "feira.br",
+ "flog.br",
+ "floripa.br",
+ "fm.br",
+ "fnd.br",
+ "fortal.br",
+ "fot.br",
+ "foz.br",
+ "fst.br",
+ "g12.br",
+ "geo.br",
+ "ggf.br",
+ "goiania.br",
+ "gov.br",
+ "ac.gov.br",
+ "al.gov.br",
+ "am.gov.br",
+ "ap.gov.br",
+ "ba.gov.br",
+ "ce.gov.br",
+ "df.gov.br",
+ "es.gov.br",
+ "go.gov.br",
+ "ma.gov.br",
+ "mg.gov.br",
+ "ms.gov.br",
+ "mt.gov.br",
+ "pa.gov.br",
+ "pb.gov.br",
+ "pe.gov.br",
+ "pi.gov.br",
+ "pr.gov.br",
+ "rj.gov.br",
+ "rn.gov.br",
+ "ro.gov.br",
+ "rr.gov.br",
+ "rs.gov.br",
+ "sc.gov.br",
+ "se.gov.br",
+ "sp.gov.br",
+ "to.gov.br",
+ "gru.br",
+ "imb.br",
+ "ind.br",
+ "inf.br",
+ "jab.br",
+ "jampa.br",
+ "jdf.br",
+ "joinville.br",
+ "jor.br",
+ "jus.br",
+ "leg.br",
+ "lel.br",
+ "log.br",
+ "londrina.br",
+ "macapa.br",
+ "maceio.br",
+ "manaus.br",
+ "maringa.br",
+ "mat.br",
+ "med.br",
+ "mil.br",
+ "morena.br",
+ "mp.br",
+ "mus.br",
+ "natal.br",
+ "net.br",
+ "niteroi.br",
+ "*.nom.br",
+ "not.br",
+ "ntr.br",
+ "odo.br",
+ "ong.br",
+ "org.br",
+ "osasco.br",
+ "palmas.br",
+ "poa.br",
+ "ppg.br",
+ "pro.br",
+ "psc.br",
+ "psi.br",
+ "pvh.br",
+ "qsl.br",
+ "radio.br",
+ "rec.br",
+ "recife.br",
+ "rep.br",
+ "ribeirao.br",
+ "rio.br",
+ "riobranco.br",
+ "riopreto.br",
+ "salvador.br",
+ "sampa.br",
+ "santamaria.br",
+ "santoandre.br",
+ "saobernardo.br",
+ "saogonca.br",
+ "seg.br",
+ "sjc.br",
+ "slg.br",
+ "slz.br",
+ "sorocaba.br",
+ "srv.br",
+ "taxi.br",
+ "tc.br",
+ "tec.br",
+ "teo.br",
+ "the.br",
+ "tmp.br",
+ "trd.br",
+ "tur.br",
+ "tv.br",
+ "udi.br",
+ "vet.br",
+ "vix.br",
+ "vlog.br",
+ "wiki.br",
+ "zlg.br",
+ "bs",
+ "com.bs",
+ "net.bs",
+ "org.bs",
+ "edu.bs",
+ "gov.bs",
+ "bt",
+ "com.bt",
+ "edu.bt",
+ "gov.bt",
+ "net.bt",
+ "org.bt",
+ "bv",
+ "bw",
+ "co.bw",
+ "org.bw",
+ "by",
+ "gov.by",
+ "mil.by",
+ "com.by",
+ "of.by",
+ "bz",
+ "com.bz",
+ "net.bz",
+ "org.bz",
+ "edu.bz",
+ "gov.bz",
+ "ca",
+ "ab.ca",
+ "bc.ca",
+ "mb.ca",
+ "nb.ca",
+ "nf.ca",
+ "nl.ca",
+ "ns.ca",
+ "nt.ca",
+ "nu.ca",
+ "on.ca",
+ "pe.ca",
+ "qc.ca",
+ "sk.ca",
+ "yk.ca",
+ "gc.ca",
+ "cat",
+ "cc",
+ "cd",
+ "gov.cd",
+ "cf",
+ "cg",
+ "ch",
+ "ci",
+ "org.ci",
+ "or.ci",
+ "com.ci",
+ "co.ci",
+ "edu.ci",
+ "ed.ci",
+ "ac.ci",
+ "net.ci",
+ "go.ci",
+ "asso.ci",
+ "aéroport.ci",
+ "int.ci",
+ "presse.ci",
+ "md.ci",
+ "gouv.ci",
+ "*.ck",
+ "!www.ck",
+ "cl",
+ "co.cl",
+ "gob.cl",
+ "gov.cl",
+ "mil.cl",
+ "cm",
+ "co.cm",
+ "com.cm",
+ "gov.cm",
+ "net.cm",
+ "cn",
+ "ac.cn",
+ "com.cn",
+ "edu.cn",
+ "gov.cn",
+ "net.cn",
+ "org.cn",
+ "mil.cn",
+ "公司.cn",
+ "网络.cn",
+ "網絡.cn",
+ "ah.cn",
+ "bj.cn",
+ "cq.cn",
+ "fj.cn",
+ "gd.cn",
+ "gs.cn",
+ "gz.cn",
+ "gx.cn",
+ "ha.cn",
+ "hb.cn",
+ "he.cn",
+ "hi.cn",
+ "hl.cn",
+ "hn.cn",
+ "jl.cn",
+ "js.cn",
+ "jx.cn",
+ "ln.cn",
+ "nm.cn",
+ "nx.cn",
+ "qh.cn",
+ "sc.cn",
+ "sd.cn",
+ "sh.cn",
+ "sn.cn",
+ "sx.cn",
+ "tj.cn",
+ "xj.cn",
+ "xz.cn",
+ "yn.cn",
+ "zj.cn",
+ "hk.cn",
+ "mo.cn",
+ "tw.cn",
+ "co",
+ "arts.co",
+ "com.co",
+ "edu.co",
+ "firm.co",
+ "gov.co",
+ "info.co",
+ "int.co",
+ "mil.co",
+ "net.co",
+ "nom.co",
+ "org.co",
+ "rec.co",
+ "web.co",
+ "com",
+ "coop",
+ "cr",
+ "ac.cr",
+ "co.cr",
+ "ed.cr",
+ "fi.cr",
+ "go.cr",
+ "or.cr",
+ "sa.cr",
+ "cu",
+ "com.cu",
+ "edu.cu",
+ "org.cu",
+ "net.cu",
+ "gov.cu",
+ "inf.cu",
+ "cv",
+ "com.cv",
+ "edu.cv",
+ "int.cv",
+ "nome.cv",
+ "org.cv",
+ "cw",
+ "com.cw",
+ "edu.cw",
+ "net.cw",
+ "org.cw",
+ "cx",
+ "gov.cx",
+ "cy",
+ "ac.cy",
+ "biz.cy",
+ "com.cy",
+ "ekloges.cy",
+ "gov.cy",
+ "ltd.cy",
+ "mil.cy",
+ "net.cy",
+ "org.cy",
+ "press.cy",
+ "pro.cy",
+ "tm.cy",
+ "cz",
+ "de",
+ "dj",
+ "dk",
+ "dm",
+ "com.dm",
+ "net.dm",
+ "org.dm",
+ "edu.dm",
+ "gov.dm",
+ "do",
+ "art.do",
+ "com.do",
+ "edu.do",
+ "gob.do",
+ "gov.do",
+ "mil.do",
+ "net.do",
+ "org.do",
+ "sld.do",
+ "web.do",
+ "dz",
+ "art.dz",
+ "asso.dz",
+ "com.dz",
+ "edu.dz",
+ "gov.dz",
+ "org.dz",
+ "net.dz",
+ "pol.dz",
+ "soc.dz",
+ "tm.dz",
+ "ec",
+ "com.ec",
+ "info.ec",
+ "net.ec",
+ "fin.ec",
+ "k12.ec",
+ "med.ec",
+ "pro.ec",
+ "org.ec",
+ "edu.ec",
+ "gov.ec",
+ "gob.ec",
+ "mil.ec",
+ "edu",
+ "ee",
+ "edu.ee",
+ "gov.ee",
+ "riik.ee",
+ "lib.ee",
+ "med.ee",
+ "com.ee",
+ "pri.ee",
+ "aip.ee",
+ "org.ee",
+ "fie.ee",
+ "eg",
+ "com.eg",
+ "edu.eg",
+ "eun.eg",
+ "gov.eg",
+ "mil.eg",
+ "name.eg",
+ "net.eg",
+ "org.eg",
+ "sci.eg",
+ "*.er",
+ "es",
+ "com.es",
+ "nom.es",
+ "org.es",
+ "gob.es",
+ "edu.es",
+ "et",
+ "com.et",
+ "gov.et",
+ "org.et",
+ "edu.et",
+ "biz.et",
+ "name.et",
+ "info.et",
+ "net.et",
+ "eu",
+ "fi",
+ "aland.fi",
+ "fj",
+ "ac.fj",
+ "biz.fj",
+ "com.fj",
+ "gov.fj",
+ "info.fj",
+ "mil.fj",
+ "name.fj",
+ "net.fj",
+ "org.fj",
+ "pro.fj",
+ "*.fk",
+ "com.fm",
+ "edu.fm",
+ "net.fm",
+ "org.fm",
+ "fm",
+ "fo",
+ "fr",
+ "asso.fr",
+ "com.fr",
+ "gouv.fr",
+ "nom.fr",
+ "prd.fr",
+ "tm.fr",
+ "aeroport.fr",
+ "avocat.fr",
+ "avoues.fr",
+ "cci.fr",
+ "chambagri.fr",
+ "chirurgiens-dentistes.fr",
+ "experts-comptables.fr",
+ "geometre-expert.fr",
+ "greta.fr",
+ "huissier-justice.fr",
+ "medecin.fr",
+ "notaires.fr",
+ "pharmacien.fr",
+ "port.fr",
+ "veterinaire.fr",
+ "ga",
+ "gb",
+ "edu.gd",
+ "gov.gd",
+ "gd",
+ "ge",
+ "com.ge",
+ "edu.ge",
+ "gov.ge",
+ "org.ge",
+ "mil.ge",
+ "net.ge",
+ "pvt.ge",
+ "gf",
+ "gg",
+ "co.gg",
+ "net.gg",
+ "org.gg",
+ "gh",
+ "com.gh",
+ "edu.gh",
+ "gov.gh",
+ "org.gh",
+ "mil.gh",
+ "gi",
+ "com.gi",
+ "ltd.gi",
+ "gov.gi",
+ "mod.gi",
+ "edu.gi",
+ "org.gi",
+ "gl",
+ "co.gl",
+ "com.gl",
+ "edu.gl",
+ "net.gl",
+ "org.gl",
+ "gm",
+ "gn",
+ "ac.gn",
+ "com.gn",
+ "edu.gn",
+ "gov.gn",
+ "org.gn",
+ "net.gn",
+ "gov",
+ "gp",
+ "com.gp",
+ "net.gp",
+ "mobi.gp",
+ "edu.gp",
+ "org.gp",
+ "asso.gp",
+ "gq",
+ "gr",
+ "com.gr",
+ "edu.gr",
+ "net.gr",
+ "org.gr",
+ "gov.gr",
+ "gs",
+ "gt",
+ "com.gt",
+ "edu.gt",
+ "gob.gt",
+ "ind.gt",
+ "mil.gt",
+ "net.gt",
+ "org.gt",
+ "gu",
+ "com.gu",
+ "edu.gu",
+ "gov.gu",
+ "guam.gu",
+ "info.gu",
+ "net.gu",
+ "org.gu",
+ "web.gu",
+ "gw",
+ "gy",
+ "co.gy",
+ "com.gy",
+ "edu.gy",
+ "gov.gy",
+ "net.gy",
+ "org.gy",
+ "hk",
+ "com.hk",
+ "edu.hk",
+ "gov.hk",
+ "idv.hk",
+ "net.hk",
+ "org.hk",
+ "公司.hk",
+ "教育.hk",
+ "敎育.hk",
+ "政府.hk",
+ "個人.hk",
+ "个��.hk",
+ "箇人.hk",
+ "網络.hk",
+ "网络.hk",
+ "组織.hk",
+ "網絡.hk",
+ "网絡.hk",
+ "组织.hk",
+ "組織.hk",
+ "組织.hk",
+ "hm",
+ "hn",
+ "com.hn",
+ "edu.hn",
+ "org.hn",
+ "net.hn",
+ "mil.hn",
+ "gob.hn",
+ "hr",
+ "iz.hr",
+ "from.hr",
+ "name.hr",
+ "com.hr",
+ "ht",
+ "com.ht",
+ "shop.ht",
+ "firm.ht",
+ "info.ht",
+ "adult.ht",
+ "net.ht",
+ "pro.ht",
+ "org.ht",
+ "med.ht",
+ "art.ht",
+ "coop.ht",
+ "pol.ht",
+ "asso.ht",
+ "edu.ht",
+ "rel.ht",
+ "gouv.ht",
+ "perso.ht",
+ "hu",
+ "co.hu",
+ "info.hu",
+ "org.hu",
+ "priv.hu",
+ "sport.hu",
+ "tm.hu",
+ "2000.hu",
+ "agrar.hu",
+ "bolt.hu",
+ "casino.hu",
+ "city.hu",
+ "erotica.hu",
+ "erotika.hu",
+ "film.hu",
+ "forum.hu",
+ "games.hu",
+ "hotel.hu",
+ "ingatlan.hu",
+ "jogasz.hu",
+ "konyvelo.hu",
+ "lakas.hu",
+ "media.hu",
+ "news.hu",
+ "reklam.hu",
+ "sex.hu",
+ "shop.hu",
+ "suli.hu",
+ "szex.hu",
+ "tozsde.hu",
+ "utazas.hu",
+ "video.hu",
+ "id",
+ "ac.id",
+ "biz.id",
+ "co.id",
+ "desa.id",
+ "go.id",
+ "mil.id",
+ "my.id",
+ "net.id",
+ "or.id",
+ "ponpes.id",
+ "sch.id",
+ "web.id",
+ "ie",
+ "gov.ie",
+ "il",
+ "ac.il",
+ "co.il",
+ "gov.il",
+ "idf.il",
+ "k12.il",
+ "muni.il",
+ "net.il",
+ "org.il",
+ "im",
+ "ac.im",
+ "co.im",
+ "com.im",
+ "ltd.co.im",
+ "net.im",
+ "org.im",
+ "plc.co.im",
+ "tt.im",
+ "tv.im",
+ "in",
+ "co.in",
+ "firm.in",
+ "net.in",
+ "org.in",
+ "gen.in",
+ "ind.in",
+ "nic.in",
+ "ac.in",
+ "edu.in",
+ "res.in",
+ "gov.in",
+ "mil.in",
+ "info",
+ "int",
+ "eu.int",
+ "io",
+ "com.io",
+ "iq",
+ "gov.iq",
+ "edu.iq",
+ "mil.iq",
+ "com.iq",
+ "org.iq",
+ "net.iq",
+ "ir",
+ "ac.ir",
+ "co.ir",
+ "gov.ir",
+ "id.ir",
+ "net.ir",
+ "org.ir",
+ "sch.ir",
+ "ایران.ir",
+ "ايران.ir",
+ "is",
+ "net.is",
+ "com.is",
+ "edu.is",
+ "gov.is",
+ "org.is",
+ "int.is",
+ "it",
+ "gov.it",
+ "edu.it",
+ "abr.it",
+ "abruzzo.it",
+ "aosta-valley.it",
+ "aostavalley.it",
+ "bas.it",
+ "basilicata.it",
+ "cal.it",
+ "calabria.it",
+ "cam.it",
+ "campania.it",
+ "emilia-romagna.it",
+ "emiliaromagna.it",
+ "emr.it",
+ "friuli-v-giulia.it",
+ "friuli-ve-giulia.it",
+ "friuli-vegiulia.it",
+ "friuli-venezia-giulia.it",
+ "friuli-veneziagiulia.it",
+ "friuli-vgiulia.it",
+ "friuliv-giulia.it",
+ "friulive-giulia.it",
+ "friulivegiulia.it",
+ "friulivenezia-giulia.it",
+ "friuliveneziagiulia.it",
+ "friulivgiulia.it",
+ "fvg.it",
+ "laz.it",
+ "lazio.it",
+ "lig.it",
+ "liguria.it",
+ "lom.it",
+ "lombardia.it",
+ "lombardy.it",
+ "lucania.it",
+ "mar.it",
+ "marche.it",
+ "mol.it",
+ "molise.it",
+ "piedmont.it",
+ "piemonte.it",
+ "pmn.it",
+ "pug.it",
+ "puglia.it",
+ "sar.it",
+ "sardegna.it",
+ "sardinia.it",
+ "sic.it",
+ "sicilia.it",
+ "sicily.it",
+ "taa.it",
+ "tos.it",
+ "toscana.it",
+ "trentin-sud-tirol.it",
+ "trentin-süd-tirol.it",
+ "trentin-sudtirol.it",
+ "trentin-südtirol.it",
+ "trentin-sued-tirol.it",
+ "trentin-suedtirol.it",
+ "trentino-a-adige.it",
+ "trentino-aadige.it",
+ "trentino-alto-adige.it",
+ "trentino-altoadige.it",
+ "trentino-s-tirol.it",
+ "trentino-stirol.it",
+ "trentino-sud-tirol.it",
+ "trentino-süd-tirol.it",
+ "trentino-sudtirol.it",
+ "trentino-südtirol.it",
+ "trentino-sued-tirol.it",
+ "trentino-suedtirol.it",
+ "trentino.it",
+ "trentinoa-adige.it",
+ "trentinoaadige.it",
+ "trentinoalto-adige.it",
+ "trentinoaltoadige.it",
+ "trentinos-tirol.it",
+ "trentinostirol.it",
+ "trentinosud-tirol.it",
+ "trentinosüd-tirol.it",
+ "trentinosudtirol.it",
+ "trentinosüdtirol.it",
+ "trentinosued-tirol.it",
+ "trentinosuedtirol.it",
+ "trentinsud-tirol.it",
+ "trentinsüd-tirol.it",
+ "trentinsudtirol.it",
+ "trentinsüdtirol.it",
+ "trentinsued-tirol.it",
+ "trentinsuedtirol.it",
+ "tuscany.it",
+ "umb.it",
+ "umbria.it",
+ "val-d-aosta.it",
+ "val-daosta.it",
+ "vald-aosta.it",
+ "valdaosta.it",
+ "valle-aosta.it",
+ "valle-d-aosta.it",
+ "valle-daosta.it",
+ "valleaosta.it",
+ "valled-aosta.it",
+ "valledaosta.it",
+ "vallee-aoste.it",
+ "vallée-aoste.it",
+ "vallee-d-aoste.it",
+ "vallée-d-aoste.it",
+ "valleeaoste.it",
+ "valléeaoste.it",
+ "valleedaoste.it",
+ "valléedaoste.it",
+ "vao.it",
+ "vda.it",
+ "ven.it",
+ "veneto.it",
+ "ag.it",
+ "agrigento.it",
+ "al.it",
+ "alessandria.it",
+ "alto-adige.it",
+ "altoadige.it",
+ "an.it",
+ "ancona.it",
+ "andria-barletta-trani.it",
+ "andria-trani-barletta.it",
+ "andriabarlettatrani.it",
+ "andriatranibarletta.it",
+ "ao.it",
+ "aosta.it",
+ "aoste.it",
+ "ap.it",
+ "aq.it",
+ "aquila.it",
+ "ar.it",
+ "arezzo.it",
+ "ascoli-piceno.it",
+ "ascolipiceno.it",
+ "asti.it",
+ "at.it",
+ "av.it",
+ "avellino.it",
+ "ba.it",
+ "balsan-sudtirol.it",
+ "balsan-südtirol.it",
+ "balsan-suedtirol.it",
+ "balsan.it",
+ "bari.it",
+ "barletta-trani-andria.it",
+ "barlettatraniandria.it",
+ "belluno.it",
+ "benevento.it",
+ "bergamo.it",
+ "bg.it",
+ "bi.it",
+ "biella.it",
+ "bl.it",
+ "bn.it",
+ "bo.it",
+ "bologna.it",
+ "bolzano-altoadige.it",
+ "bolzano.it",
+ "bozen-sudtirol.it",
+ "bozen-südtirol.it",
+ "bozen-suedtirol.it",
+ "bozen.it",
+ "br.it",
+ "brescia.it",
+ "brindisi.it",
+ "bs.it",
+ "bt.it",
+ "bulsan-sudtirol.it",
+ "bulsan-südtirol.it",
+ "bulsan-suedtirol.it",
+ "bulsan.it",
+ "bz.it",
+ "ca.it",
+ "cagliari.it",
+ "caltanissetta.it",
+ "campidano-medio.it",
+ "campidanomedio.it",
+ "campobasso.it",
+ "carbonia-iglesias.it",
+ "carboniaiglesias.it",
+ "carrara-massa.it",
+ "carraramassa.it",
+ "caserta.it",
+ "catania.it",
+ "catanzaro.it",
+ "cb.it",
+ "ce.it",
+ "cesena-forli.it",
+ "cesena-forlì.it",
+ "cesenaforli.it",
+ "cesenaforlì.it",
+ "ch.it",
+ "chieti.it",
+ "ci.it",
+ "cl.it",
+ "cn.it",
+ "co.it",
+ "como.it",
+ "cosenza.it",
+ "cr.it",
+ "cremona.it",
+ "crotone.it",
+ "cs.it",
+ "ct.it",
+ "cuneo.it",
+ "cz.it",
+ "dell-ogliastra.it",
+ "dellogliastra.it",
+ "en.it",
+ "enna.it",
+ "fc.it",
+ "fe.it",
+ "fermo.it",
+ "ferrara.it",
+ "fg.it",
+ "fi.it",
+ "firenze.it",
+ "florence.it",
+ "fm.it",
+ "foggia.it",
+ "forli-cesena.it",
+ "forlì-cesena.it",
+ "forlicesena.it",
+ "forlìcesena.it",
+ "fr.it",
+ "frosinone.it",
+ "ge.it",
+ "genoa.it",
+ "genova.it",
+ "go.it",
+ "gorizia.it",
+ "gr.it",
+ "grosseto.it",
+ "iglesias-carbonia.it",
+ "iglesiascarbonia.it",
+ "im.it",
+ "imperia.it",
+ "is.it",
+ "isernia.it",
+ "kr.it",
+ "la-spezia.it",
+ "laquila.it",
+ "laspezia.it",
+ "latina.it",
+ "lc.it",
+ "le.it",
+ "lecce.it",
+ "lecco.it",
+ "li.it",
+ "livorno.it",
+ "lo.it",
+ "lodi.it",
+ "lt.it",
+ "lu.it",
+ "lucca.it",
+ "macerata.it",
+ "mantova.it",
+ "massa-carrara.it",
+ "massacarrara.it",
+ "matera.it",
+ "mb.it",
+ "mc.it",
+ "me.it",
+ "medio-campidano.it",
+ "mediocampidano.it",
+ "messina.it",
+ "mi.it",
+ "milan.it",
+ "milano.it",
+ "mn.it",
+ "mo.it",
+ "modena.it",
+ "monza-brianza.it",
+ "monza-e-della-brianza.it",
+ "monza.it",
+ "monzabrianza.it",
+ "monzaebrianza.it",
+ "monzaedellabrianza.it",
+ "ms.it",
+ "mt.it",
+ "na.it",
+ "naples.it",
+ "napoli.it",
+ "no.it",
+ "novara.it",
+ "nu.it",
+ "nuoro.it",
+ "og.it",
+ "ogliastra.it",
+ "olbia-tempio.it",
+ "olbiatempio.it",
+ "or.it",
+ "oristano.it",
+ "ot.it",
+ "pa.it",
+ "padova.it",
+ "padua.it",
+ "palermo.it",
+ "parma.it",
+ "pavia.it",
+ "pc.it",
+ "pd.it",
+ "pe.it",
+ "perugia.it",
+ "pesaro-urbino.it",
+ "pesarourbino.it",
+ "pescara.it",
+ "pg.it",
+ "pi.it",
+ "piacenza.it",
+ "pisa.it",
+ "pistoia.it",
+ "pn.it",
+ "po.it",
+ "pordenone.it",
+ "potenza.it",
+ "pr.it",
+ "prato.it",
+ "pt.it",
+ "pu.it",
+ "pv.it",
+ "pz.it",
+ "ra.it",
+ "ragusa.it",
+ "ravenna.it",
+ "rc.it",
+ "re.it",
+ "reggio-calabria.it",
+ "reggio-emilia.it",
+ "reggiocalabria.it",
+ "reggioemilia.it",
+ "rg.it",
+ "ri.it",
+ "rieti.it",
+ "rimini.it",
+ "rm.it",
+ "rn.it",
+ "ro.it",
+ "roma.it",
+ "rome.it",
+ "rovigo.it",
+ "sa.it",
+ "salerno.it",
+ "sassari.it",
+ "savona.it",
+ "si.it",
+ "siena.it",
+ "siracusa.it",
+ "so.it",
+ "sondrio.it",
+ "sp.it",
+ "sr.it",
+ "ss.it",
+ "suedtirol.it",
+ "südtirol.it",
+ "sv.it",
+ "ta.it",
+ "taranto.it",
+ "te.it",
+ "tempio-olbia.it",
+ "tempioolbia.it",
+ "teramo.it",
+ "terni.it",
+ "tn.it",
+ "to.it",
+ "torino.it",
+ "tp.it",
+ "tr.it",
+ "trani-andria-barletta.it",
+ "trani-barletta-andria.it",
+ "traniandriabarletta.it",
+ "tranibarlettaandria.it",
+ "trapani.it",
+ "trento.it",
+ "treviso.it",
+ "trieste.it",
+ "ts.it",
+ "turin.it",
+ "tv.it",
+ "ud.it",
+ "udine.it",
+ "urbino-pesaro.it",
+ "urbinopesaro.it",
+ "va.it",
+ "varese.it",
+ "vb.it",
+ "vc.it",
+ "ve.it",
+ "venezia.it",
+ "venice.it",
+ "verbania.it",
+ "vercelli.it",
+ "verona.it",
+ "vi.it",
+ "vibo-valentia.it",
+ "vibovalentia.it",
+ "vicenza.it",
+ "viterbo.it",
+ "vr.it",
+ "vs.it",
+ "vt.it",
+ "vv.it",
+ "je",
+ "co.je",
+ "net.je",
+ "org.je",
+ "*.jm",
+ "jo",
+ "com.jo",
+ "org.jo",
+ "net.jo",
+ "edu.jo",
+ "sch.jo",
+ "gov.jo",
+ "mil.jo",
+ "name.jo",
+ "jobs",
+ "jp",
+ "ac.jp",
+ "ad.jp",
+ "co.jp",
+ "ed.jp",
+ "go.jp",
+ "gr.jp",
+ "lg.jp",
+ "ne.jp",
+ "or.jp",
+ "aichi.jp",
+ "akita.jp",
+ "aomori.jp",
+ "chiba.jp",
+ "ehime.jp",
+ "fukui.jp",
+ "fukuoka.jp",
+ "fukushima.jp",
+ "gifu.jp",
+ "gunma.jp",
+ "hiroshima.jp",
+ "hokkaido.jp",
+ "hyogo.jp",
+ "ibaraki.jp",
+ "ishikawa.jp",
+ "iwate.jp",
+ "kagawa.jp",
+ "kagoshima.jp",
+ "kanagawa.jp",
+ "kochi.jp",
+ "kumamoto.jp",
+ "kyoto.jp",
+ "mie.jp",
+ "miyagi.jp",
+ "miyazaki.jp",
+ "nagano.jp",
+ "nagasaki.jp",
+ "nara.jp",
+ "niigata.jp",
+ "oita.jp",
+ "okayama.jp",
+ "okinawa.jp",
+ "osaka.jp",
+ "saga.jp",
+ "saitama.jp",
+ "shiga.jp",
+ "shimane.jp",
+ "shizuoka.jp",
+ "tochigi.jp",
+ "tokushima.jp",
+ "tokyo.jp",
+ "tottori.jp",
+ "toyama.jp",
+ "wakayama.jp",
+ "yamagata.jp",
+ "yamaguchi.jp",
+ "yamanashi.jp",
+ "栃木.jp",
+ "愛知.jp",
+ "愛媛.jp",
+ "兵庫.jp",
+ "熊本.jp",
+ "茨城.jp",
+ "北海道.jp",
+ "千葉.jp",
+ "和歌山.jp",
+ "長崎.jp",
+ "長野.jp",
+ "新潟.jp",
+ "青森.jp",
+ "静岡.jp",
+ "東京.jp",
+ "石川.jp",
+ "埼玉.jp",
+ "三重.jp",
+ "京都.jp",
+ "佐賀.jp",
+ "大分.jp",
+ "大阪.jp",
+ "奈良.jp",
+ "宮城.jp",
+ "宮崎.jp",
+ "富山.jp",
+ "山口.jp",
+ "山形.jp",
+ "山梨.jp",
+ "岩手.jp",
+ "岐阜.jp",
+ "岡山.jp",
+ "島根.jp",
+ "広島.jp",
+ "徳島.jp",
+ "沖縄.jp",
+ "滋賀.jp",
+ "神奈川.jp",
+ "福井.jp",
+ "福岡.jp",
+ "福島.jp",
+ "秋田.jp",
+ "群馬.jp",
+ "香川.jp",
+ "高知.jp",
+ "鳥取.jp",
+ "鹿児島.jp",
+ "*.kawasaki.jp",
+ "*.kitakyushu.jp",
+ "*.kobe.jp",
+ "*.nagoya.jp",
+ "*.sapporo.jp",
+ "*.sendai.jp",
+ "*.yokohama.jp",
+ "!city.kawasaki.jp",
+ "!city.kitakyushu.jp",
+ "!city.kobe.jp",
+ "!city.nagoya.jp",
+ "!city.sapporo.jp",
+ "!city.sendai.jp",
+ "!city.yokohama.jp",
+ "aisai.aichi.jp",
+ "ama.aichi.jp",
+ "anjo.aichi.jp",
+ "asuke.aichi.jp",
+ "chiryu.aichi.jp",
+ "chita.aichi.jp",
+ "fuso.aichi.jp",
+ "gamagori.aichi.jp",
+ "handa.aichi.jp",
+ "hazu.aichi.jp",
+ "hekinan.aichi.jp",
+ "higashiura.aichi.jp",
+ "ichinomiya.aichi.jp",
+ "inazawa.aichi.jp",
+ "inuyama.aichi.jp",
+ "isshiki.aichi.jp",
+ "iwakura.aichi.jp",
+ "kanie.aichi.jp",
+ "kariya.aichi.jp",
+ "kasugai.aichi.jp",
+ "kira.aichi.jp",
+ "kiyosu.aichi.jp",
+ "komaki.aichi.jp",
+ "konan.aichi.jp",
+ "kota.aichi.jp",
+ "mihama.aichi.jp",
+ "miyoshi.aichi.jp",
+ "nishio.aichi.jp",
+ "nisshin.aichi.jp",
+ "obu.aichi.jp",
+ "oguchi.aichi.jp",
+ "oharu.aichi.jp",
+ "okazaki.aichi.jp",
+ "owariasahi.aichi.jp",
+ "seto.aichi.jp",
+ "shikatsu.aichi.jp",
+ "shinshiro.aichi.jp",
+ "shitara.aichi.jp",
+ "tahara.aichi.jp",
+ "takahama.aichi.jp",
+ "tobishima.aichi.jp",
+ "toei.aichi.jp",
+ "togo.aichi.jp",
+ "tokai.aichi.jp",
+ "tokoname.aichi.jp",
+ "toyoake.aichi.jp",
+ "toyohashi.aichi.jp",
+ "toyokawa.aichi.jp",
+ "toyone.aichi.jp",
+ "toyota.aichi.jp",
+ "tsushima.aichi.jp",
+ "yatomi.aichi.jp",
+ "akita.akita.jp",
+ "daisen.akita.jp",
+ "fujisato.akita.jp",
+ "gojome.akita.jp",
+ "hachirogata.akita.jp",
+ "happou.akita.jp",
+ "higashinaruse.akita.jp",
+ "honjo.akita.jp",
+ "honjyo.akita.jp",
+ "ikawa.akita.jp",
+ "kamikoani.akita.jp",
+ "kamioka.akita.jp",
+ "katagami.akita.jp",
+ "kazuno.akita.jp",
+ "kitaakita.akita.jp",
+ "kosaka.akita.jp",
+ "kyowa.akita.jp",
+ "misato.akita.jp",
+ "mitane.akita.jp",
+ "moriyoshi.akita.jp",
+ "nikaho.akita.jp",
+ "noshiro.akita.jp",
+ "odate.akita.jp",
+ "oga.akita.jp",
+ "ogata.akita.jp",
+ "semboku.akita.jp",
+ "yokote.akita.jp",
+ "yurihonjo.akita.jp",
+ "aomori.aomori.jp",
+ "gonohe.aomori.jp",
+ "hachinohe.aomori.jp",
+ "hashikami.aomori.jp",
+ "hiranai.aomori.jp",
+ "hirosaki.aomori.jp",
+ "itayanagi.aomori.jp",
+ "kuroishi.aomori.jp",
+ "misawa.aomori.jp",
+ "mutsu.aomori.jp",
+ "nakadomari.aomori.jp",
+ "noheji.aomori.jp",
+ "oirase.aomori.jp",
+ "owani.aomori.jp",
+ "rokunohe.aomori.jp",
+ "sannohe.aomori.jp",
+ "shichinohe.aomori.jp",
+ "shingo.aomori.jp",
+ "takko.aomori.jp",
+ "towada.aomori.jp",
+ "tsugaru.aomori.jp",
+ "tsuruta.aomori.jp",
+ "abiko.chiba.jp",
+ "asahi.chiba.jp",
+ "chonan.chiba.jp",
+ "chosei.chiba.jp",
+ "choshi.chiba.jp",
+ "chuo.chiba.jp",
+ "funabashi.chiba.jp",
+ "futtsu.chiba.jp",
+ "hanamigawa.chiba.jp",
+ "ichihara.chiba.jp",
+ "ichikawa.chiba.jp",
+ "ichinomiya.chiba.jp",
+ "inzai.chiba.jp",
+ "isumi.chiba.jp",
+ "kamagaya.chiba.jp",
+ "kamogawa.chiba.jp",
+ "kashiwa.chiba.jp",
+ "katori.chiba.jp",
+ "katsuura.chiba.jp",
+ "kimitsu.chiba.jp",
+ "kisarazu.chiba.jp",
+ "kozaki.chiba.jp",
+ "kujukuri.chiba.jp",
+ "kyonan.chiba.jp",
+ "matsudo.chiba.jp",
+ "midori.chiba.jp",
+ "mihama.chiba.jp",
+ "minamiboso.chiba.jp",
+ "mobara.chiba.jp",
+ "mutsuzawa.chiba.jp",
+ "nagara.chiba.jp",
+ "nagareyama.chiba.jp",
+ "narashino.chiba.jp",
+ "narita.chiba.jp",
+ "noda.chiba.jp",
+ "oamishirasato.chiba.jp",
+ "omigawa.chiba.jp",
+ "onjuku.chiba.jp",
+ "otaki.chiba.jp",
+ "sakae.chiba.jp",
+ "sakura.chiba.jp",
+ "shimofusa.chiba.jp",
+ "shirako.chiba.jp",
+ "shiroi.chiba.jp",
+ "shisui.chiba.jp",
+ "sodegaura.chiba.jp",
+ "sosa.chiba.jp",
+ "tako.chiba.jp",
+ "tateyama.chiba.jp",
+ "togane.chiba.jp",
+ "tohnosho.chiba.jp",
+ "tomisato.chiba.jp",
+ "urayasu.chiba.jp",
+ "yachimata.chiba.jp",
+ "yachiyo.chiba.jp",
+ "yokaichiba.chiba.jp",
+ "yokoshibahikari.chiba.jp",
+ "yotsukaido.chiba.jp",
+ "ainan.ehime.jp",
+ "honai.ehime.jp",
+ "ikata.ehime.jp",
+ "imabari.ehime.jp",
+ "iyo.ehime.jp",
+ "kamijima.ehime.jp",
+ "kihoku.ehime.jp",
+ "kumakogen.ehime.jp",
+ "masaki.ehime.jp",
+ "matsuno.ehime.jp",
+ "matsuyama.ehime.jp",
+ "namikata.ehime.jp",
+ "niihama.ehime.jp",
+ "ozu.ehime.jp",
+ "saijo.ehime.jp",
+ "seiyo.ehime.jp",
+ "shikokuchuo.ehime.jp",
+ "tobe.ehime.jp",
+ "toon.ehime.jp",
+ "uchiko.ehime.jp",
+ "uwajima.ehime.jp",
+ "yawatahama.ehime.jp",
+ "echizen.fukui.jp",
+ "eiheiji.fukui.jp",
+ "fukui.fukui.jp",
+ "ikeda.fukui.jp",
+ "katsuyama.fukui.jp",
+ "mihama.fukui.jp",
+ "minamiechizen.fukui.jp",
+ "obama.fukui.jp",
+ "ohi.fukui.jp",
+ "ono.fukui.jp",
+ "sabae.fukui.jp",
+ "sakai.fukui.jp",
+ "takahama.fukui.jp",
+ "tsuruga.fukui.jp",
+ "wakasa.fukui.jp",
+ "ashiya.fukuoka.jp",
+ "buzen.fukuoka.jp",
+ "chikugo.fukuoka.jp",
+ "chikuho.fukuoka.jp",
+ "chikujo.fukuoka.jp",
+ "chikushino.fukuoka.jp",
+ "chikuzen.fukuoka.jp",
+ "chuo.fukuoka.jp",
+ "dazaifu.fukuoka.jp",
+ "fukuchi.fukuoka.jp",
+ "hakata.fukuoka.jp",
+ "higashi.fukuoka.jp",
+ "hirokawa.fukuoka.jp",
+ "hisayama.fukuoka.jp",
+ "iizuka.fukuoka.jp",
+ "inatsuki.fukuoka.jp",
+ "kaho.fukuoka.jp",
+ "kasuga.fukuoka.jp",
+ "kasuya.fukuoka.jp",
+ "kawara.fukuoka.jp",
+ "keisen.fukuoka.jp",
+ "koga.fukuoka.jp",
+ "kurate.fukuoka.jp",
+ "kurogi.fukuoka.jp",
+ "kurume.fukuoka.jp",
+ "minami.fukuoka.jp",
+ "miyako.fukuoka.jp",
+ "miyama.fukuoka.jp",
+ "miyawaka.fukuoka.jp",
+ "mizumaki.fukuoka.jp",
+ "munakata.fukuoka.jp",
+ "nakagawa.fukuoka.jp",
+ "nakama.fukuoka.jp",
+ "nishi.fukuoka.jp",
+ "nogata.fukuoka.jp",
+ "ogori.fukuoka.jp",
+ "okagaki.fukuoka.jp",
+ "okawa.fukuoka.jp",
+ "oki.fukuoka.jp",
+ "omuta.fukuoka.jp",
+ "onga.fukuoka.jp",
+ "onojo.fukuoka.jp",
+ "oto.fukuoka.jp",
+ "saigawa.fukuoka.jp",
+ "sasaguri.fukuoka.jp",
+ "shingu.fukuoka.jp",
+ "shinyoshitomi.fukuoka.jp",
+ "shonai.fukuoka.jp",
+ "soeda.fukuoka.jp",
+ "sue.fukuoka.jp",
+ "tachiarai.fukuoka.jp",
+ "tagawa.fukuoka.jp",
+ "takata.fukuoka.jp",
+ "toho.fukuoka.jp",
+ "toyotsu.fukuoka.jp",
+ "tsuiki.fukuoka.jp",
+ "ukiha.fukuoka.jp",
+ "umi.fukuoka.jp",
+ "usui.fukuoka.jp",
+ "yamada.fukuoka.jp",
+ "yame.fukuoka.jp",
+ "yanagawa.fukuoka.jp",
+ "yukuhashi.fukuoka.jp",
+ "aizubange.fukushima.jp",
+ "aizumisato.fukushima.jp",
+ "aizuwakamatsu.fukushima.jp",
+ "asakawa.fukushima.jp",
+ "bandai.fukushima.jp",
+ "date.fukushima.jp",
+ "fukushima.fukushima.jp",
+ "furudono.fukushima.jp",
+ "futaba.fukushima.jp",
+ "hanawa.fukushima.jp",
+ "higashi.fukushima.jp",
+ "hirata.fukushima.jp",
+ "hirono.fukushima.jp",
+ "iitate.fukushima.jp",
+ "inawashiro.fukushima.jp",
+ "ishikawa.fukushima.jp",
+ "iwaki.fukushima.jp",
+ "izumizaki.fukushima.jp",
+ "kagamiishi.fukushima.jp",
+ "kaneyama.fukushima.jp",
+ "kawamata.fukushima.jp",
+ "kitakata.fukushima.jp",
+ "kitashiobara.fukushima.jp",
+ "koori.fukushima.jp",
+ "koriyama.fukushima.jp",
+ "kunimi.fukushima.jp",
+ "miharu.fukushima.jp",
+ "mishima.fukushima.jp",
+ "namie.fukushima.jp",
+ "nango.fukushima.jp",
+ "nishiaizu.fukushima.jp",
+ "nishigo.fukushima.jp",
+ "okuma.fukushima.jp",
+ "omotego.fukushima.jp",
+ "ono.fukushima.jp",
+ "otama.fukushima.jp",
+ "samegawa.fukushima.jp",
+ "shimogo.fukushima.jp",
+ "shirakawa.fukushima.jp",
+ "showa.fukushima.jp",
+ "soma.fukushima.jp",
+ "sukagawa.fukushima.jp",
+ "taishin.fukushima.jp",
+ "tamakawa.fukushima.jp",
+ "tanagura.fukushima.jp",
+ "tenei.fukushima.jp",
+ "yabuki.fukushima.jp",
+ "yamato.fukushima.jp",
+ "yamatsuri.fukushima.jp",
+ "yanaizu.fukushima.jp",
+ "yugawa.fukushima.jp",
+ "anpachi.gifu.jp",
+ "ena.gifu.jp",
+ "gifu.gifu.jp",
+ "ginan.gifu.jp",
+ "godo.gifu.jp",
+ "gujo.gifu.jp",
+ "hashima.gifu.jp",
+ "hichiso.gifu.jp",
+ "hida.gifu.jp",
+ "higashishirakawa.gifu.jp",
+ "ibigawa.gifu.jp",
+ "ikeda.gifu.jp",
+ "kakamigahara.gifu.jp",
+ "kani.gifu.jp",
+ "kasahara.gifu.jp",
+ "kasamatsu.gifu.jp",
+ "kawaue.gifu.jp",
+ "kitagata.gifu.jp",
+ "mino.gifu.jp",
+ "minokamo.gifu.jp",
+ "mitake.gifu.jp",
+ "mizunami.gifu.jp",
+ "motosu.gifu.jp",
+ "nakatsugawa.gifu.jp",
+ "ogaki.gifu.jp",
+ "sakahogi.gifu.jp",
+ "seki.gifu.jp",
+ "sekigahara.gifu.jp",
+ "shirakawa.gifu.jp",
+ "tajimi.gifu.jp",
+ "takayama.gifu.jp",
+ "tarui.gifu.jp",
+ "toki.gifu.jp",
+ "tomika.gifu.jp",
+ "wanouchi.gifu.jp",
+ "yamagata.gifu.jp",
+ "yaotsu.gifu.jp",
+ "yoro.gifu.jp",
+ "annaka.gunma.jp",
+ "chiyoda.gunma.jp",
+ "fujioka.gunma.jp",
+ "higashiagatsuma.gunma.jp",
+ "isesaki.gunma.jp",
+ "itakura.gunma.jp",
+ "kanna.gunma.jp",
+ "kanra.gunma.jp",
+ "katashina.gunma.jp",
+ "kawaba.gunma.jp",
+ "kiryu.gunma.jp",
+ "kusatsu.gunma.jp",
+ "maebashi.gunma.jp",
+ "meiwa.gunma.jp",
+ "midori.gunma.jp",
+ "minakami.gunma.jp",
+ "naganohara.gunma.jp",
+ "nakanojo.gunma.jp",
+ "nanmoku.gunma.jp",
+ "numata.gunma.jp",
+ "oizumi.gunma.jp",
+ "ora.gunma.jp",
+ "ota.gunma.jp",
+ "shibukawa.gunma.jp",
+ "shimonita.gunma.jp",
+ "shinto.gunma.jp",
+ "showa.gunma.jp",
+ "takasaki.gunma.jp",
+ "takayama.gunma.jp",
+ "tamamura.gunma.jp",
+ "tatebayashi.gunma.jp",
+ "tomioka.gunma.jp",
+ "tsukiyono.gunma.jp",
+ "tsumagoi.gunma.jp",
+ "ueno.gunma.jp",
+ "yoshioka.gunma.jp",
+ "asaminami.hiroshima.jp",
+ "daiwa.hiroshima.jp",
+ "etajima.hiroshima.jp",
+ "fuchu.hiroshima.jp",
+ "fukuyama.hiroshima.jp",
+ "hatsukaichi.hiroshima.jp",
+ "higashihiroshima.hiroshima.jp",
+ "hongo.hiroshima.jp",
+ "jinsekikogen.hiroshima.jp",
+ "kaita.hiroshima.jp",
+ "kui.hiroshima.jp",
+ "kumano.hiroshima.jp",
+ "kure.hiroshima.jp",
+ "mihara.hiroshima.jp",
+ "miyoshi.hiroshima.jp",
+ "naka.hiroshima.jp",
+ "onomichi.hiroshima.jp",
+ "osakikamijima.hiroshima.jp",
+ "otake.hiroshima.jp",
+ "saka.hiroshima.jp",
+ "sera.hiroshima.jp",
+ "seranishi.hiroshima.jp",
+ "shinichi.hiroshima.jp",
+ "shobara.hiroshima.jp",
+ "takehara.hiroshima.jp",
+ "abashiri.hokkaido.jp",
+ "abira.hokkaido.jp",
+ "aibetsu.hokkaido.jp",
+ "akabira.hokkaido.jp",
+ "akkeshi.hokkaido.jp",
+ "asahikawa.hokkaido.jp",
+ "ashibetsu.hokkaido.jp",
+ "ashoro.hokkaido.jp",
+ "assabu.hokkaido.jp",
+ "atsuma.hokkaido.jp",
+ "bibai.hokkaido.jp",
+ "biei.hokkaido.jp",
+ "bifuka.hokkaido.jp",
+ "bihoro.hokkaido.jp",
+ "biratori.hokkaido.jp",
+ "chippubetsu.hokkaido.jp",
+ "chitose.hokkaido.jp",
+ "date.hokkaido.jp",
+ "ebetsu.hokkaido.jp",
+ "embetsu.hokkaido.jp",
+ "eniwa.hokkaido.jp",
+ "erimo.hokkaido.jp",
+ "esan.hokkaido.jp",
+ "esashi.hokkaido.jp",
+ "fukagawa.hokkaido.jp",
+ "fukushima.hokkaido.jp",
+ "furano.hokkaido.jp",
+ "furubira.hokkaido.jp",
+ "haboro.hokkaido.jp",
+ "hakodate.hokkaido.jp",
+ "hamatonbetsu.hokkaido.jp",
+ "hidaka.hokkaido.jp",
+ "higashikagura.hokkaido.jp",
+ "higashikawa.hokkaido.jp",
+ "hiroo.hokkaido.jp",
+ "hokuryu.hokkaido.jp",
+ "hokuto.hokkaido.jp",
+ "honbetsu.hokkaido.jp",
+ "horokanai.hokkaido.jp",
+ "horonobe.hokkaido.jp",
+ "ikeda.hokkaido.jp",
+ "imakane.hokkaido.jp",
+ "ishikari.hokkaido.jp",
+ "iwamizawa.hokkaido.jp",
+ "iwanai.hokkaido.jp",
+ "kamifurano.hokkaido.jp",
+ "kamikawa.hokkaido.jp",
+ "kamishihoro.hokkaido.jp",
+ "kamisunagawa.hokkaido.jp",
+ "kamoenai.hokkaido.jp",
+ "kayabe.hokkaido.jp",
+ "kembuchi.hokkaido.jp",
+ "kikonai.hokkaido.jp",
+ "kimobetsu.hokkaido.jp",
+ "kitahiroshima.hokkaido.jp",
+ "kitami.hokkaido.jp",
+ "kiyosato.hokkaido.jp",
+ "koshimizu.hokkaido.jp",
+ "kunneppu.hokkaido.jp",
+ "kuriyama.hokkaido.jp",
+ "kuromatsunai.hokkaido.jp",
+ "kushiro.hokkaido.jp",
+ "kutchan.hokkaido.jp",
+ "kyowa.hokkaido.jp",
+ "mashike.hokkaido.jp",
+ "matsumae.hokkaido.jp",
+ "mikasa.hokkaido.jp",
+ "minamifurano.hokkaido.jp",
+ "mombetsu.hokkaido.jp",
+ "moseushi.hokkaido.jp",
+ "mukawa.hokkaido.jp",
+ "muroran.hokkaido.jp",
+ "naie.hokkaido.jp",
+ "nakagawa.hokkaido.jp",
+ "nakasatsunai.hokkaido.jp",
+ "nakatombetsu.hokkaido.jp",
+ "nanae.hokkaido.jp",
+ "nanporo.hokkaido.jp",
+ "nayoro.hokkaido.jp",
+ "nemuro.hokkaido.jp",
+ "niikappu.hokkaido.jp",
+ "niki.hokkaido.jp",
+ "nishiokoppe.hokkaido.jp",
+ "noboribetsu.hokkaido.jp",
+ "numata.hokkaido.jp",
+ "obihiro.hokkaido.jp",
+ "obira.hokkaido.jp",
+ "oketo.hokkaido.jp",
+ "okoppe.hokkaido.jp",
+ "otaru.hokkaido.jp",
+ "otobe.hokkaido.jp",
+ "otofuke.hokkaido.jp",
+ "otoineppu.hokkaido.jp",
+ "oumu.hokkaido.jp",
+ "ozora.hokkaido.jp",
+ "pippu.hokkaido.jp",
+ "rankoshi.hokkaido.jp",
+ "rebun.hokkaido.jp",
+ "rikubetsu.hokkaido.jp",
+ "rishiri.hokkaido.jp",
+ "rishirifuji.hokkaido.jp",
+ "saroma.hokkaido.jp",
+ "sarufutsu.hokkaido.jp",
+ "shakotan.hokkaido.jp",
+ "shari.hokkaido.jp",
+ "shibecha.hokkaido.jp",
+ "shibetsu.hokkaido.jp",
+ "shikabe.hokkaido.jp",
+ "shikaoi.hokkaido.jp",
+ "shimamaki.hokkaido.jp",
+ "shimizu.hokkaido.jp",
+ "shimokawa.hokkaido.jp",
+ "shinshinotsu.hokkaido.jp",
+ "shintoku.hokkaido.jp",
+ "shiranuka.hokkaido.jp",
+ "shiraoi.hokkaido.jp",
+ "shiriuchi.hokkaido.jp",
+ "sobetsu.hokkaido.jp",
+ "sunagawa.hokkaido.jp",
+ "taiki.hokkaido.jp",
+ "takasu.hokkaido.jp",
+ "takikawa.hokkaido.jp",
+ "takinoue.hokkaido.jp",
+ "teshikaga.hokkaido.jp",
+ "tobetsu.hokkaido.jp",
+ "tohma.hokkaido.jp",
+ "tomakomai.hokkaido.jp",
+ "tomari.hokkaido.jp",
+ "toya.hokkaido.jp",
+ "toyako.hokkaido.jp",
+ "toyotomi.hokkaido.jp",
+ "toyoura.hokkaido.jp",
+ "tsubetsu.hokkaido.jp",
+ "tsukigata.hokkaido.jp",
+ "urakawa.hokkaido.jp",
+ "urausu.hokkaido.jp",
+ "uryu.hokkaido.jp",
+ "utashinai.hokkaido.jp",
+ "wakkanai.hokkaido.jp",
+ "wassamu.hokkaido.jp",
+ "yakumo.hokkaido.jp",
+ "yoichi.hokkaido.jp",
+ "aioi.hyogo.jp",
+ "akashi.hyogo.jp",
+ "ako.hyogo.jp",
+ "amagasaki.hyogo.jp",
+ "aogaki.hyogo.jp",
+ "asago.hyogo.jp",
+ "ashiya.hyogo.jp",
+ "awaji.hyogo.jp",
+ "fukusaki.hyogo.jp",
+ "goshiki.hyogo.jp",
+ "harima.hyogo.jp",
+ "himeji.hyogo.jp",
+ "ichikawa.hyogo.jp",
+ "inagawa.hyogo.jp",
+ "itami.hyogo.jp",
+ "kakogawa.hyogo.jp",
+ "kamigori.hyogo.jp",
+ "kamikawa.hyogo.jp",
+ "kasai.hyogo.jp",
+ "kasuga.hyogo.jp",
+ "kawanishi.hyogo.jp",
+ "miki.hyogo.jp",
+ "minamiawaji.hyogo.jp",
+ "nishinomiya.hyogo.jp",
+ "nishiwaki.hyogo.jp",
+ "ono.hyogo.jp",
+ "sanda.hyogo.jp",
+ "sannan.hyogo.jp",
+ "sasayama.hyogo.jp",
+ "sayo.hyogo.jp",
+ "shingu.hyogo.jp",
+ "shinonsen.hyogo.jp",
+ "shiso.hyogo.jp",
+ "sumoto.hyogo.jp",
+ "taishi.hyogo.jp",
+ "taka.hyogo.jp",
+ "takarazuka.hyogo.jp",
+ "takasago.hyogo.jp",
+ "takino.hyogo.jp",
+ "tamba.hyogo.jp",
+ "tatsuno.hyogo.jp",
+ "toyooka.hyogo.jp",
+ "yabu.hyogo.jp",
+ "yashiro.hyogo.jp",
+ "yoka.hyogo.jp",
+ "yokawa.hyogo.jp",
+ "ami.ibaraki.jp",
+ "asahi.ibaraki.jp",
+ "bando.ibaraki.jp",
+ "chikusei.ibaraki.jp",
+ "daigo.ibaraki.jp",
+ "fujishiro.ibaraki.jp",
+ "hitachi.ibaraki.jp",
+ "hitachinaka.ibaraki.jp",
+ "hitachiomiya.ibaraki.jp",
+ "hitachiota.ibaraki.jp",
+ "ibaraki.ibaraki.jp",
+ "ina.ibaraki.jp",
+ "inashiki.ibaraki.jp",
+ "itako.ibaraki.jp",
+ "iwama.ibaraki.jp",
+ "joso.ibaraki.jp",
+ "kamisu.ibaraki.jp",
+ "kasama.ibaraki.jp",
+ "kashima.ibaraki.jp",
+ "kasumigaura.ibaraki.jp",
+ "koga.ibaraki.jp",
+ "miho.ibaraki.jp",
+ "mito.ibaraki.jp",
+ "moriya.ibaraki.jp",
+ "naka.ibaraki.jp",
+ "namegata.ibaraki.jp",
+ "oarai.ibaraki.jp",
+ "ogawa.ibaraki.jp",
+ "omitama.ibaraki.jp",
+ "ryugasaki.ibaraki.jp",
+ "sakai.ibaraki.jp",
+ "sakuragawa.ibaraki.jp",
+ "shimodate.ibaraki.jp",
+ "shimotsuma.ibaraki.jp",
+ "shirosato.ibaraki.jp",
+ "sowa.ibaraki.jp",
+ "suifu.ibaraki.jp",
+ "takahagi.ibaraki.jp",
+ "tamatsukuri.ibaraki.jp",
+ "tokai.ibaraki.jp",
+ "tomobe.ibaraki.jp",
+ "tone.ibaraki.jp",
+ "toride.ibaraki.jp",
+ "tsuchiura.ibaraki.jp",
+ "tsukuba.ibaraki.jp",
+ "uchihara.ibaraki.jp",
+ "ushiku.ibaraki.jp",
+ "yachiyo.ibaraki.jp",
+ "yamagata.ibaraki.jp",
+ "yawara.ibaraki.jp",
+ "yuki.ibaraki.jp",
+ "anamizu.ishikawa.jp",
+ "hakui.ishikawa.jp",
+ "hakusan.ishikawa.jp",
+ "kaga.ishikawa.jp",
+ "kahoku.ishikawa.jp",
+ "kanazawa.ishikawa.jp",
+ "kawakita.ishikawa.jp",
+ "komatsu.ishikawa.jp",
+ "nakanoto.ishikawa.jp",
+ "nanao.ishikawa.jp",
+ "nomi.ishikawa.jp",
+ "nonoichi.ishikawa.jp",
+ "noto.ishikawa.jp",
+ "shika.ishikawa.jp",
+ "suzu.ishikawa.jp",
+ "tsubata.ishikawa.jp",
+ "tsurugi.ishikawa.jp",
+ "uchinada.ishikawa.jp",
+ "wajima.ishikawa.jp",
+ "fudai.iwate.jp",
+ "fujisawa.iwate.jp",
+ "hanamaki.iwate.jp",
+ "hiraizumi.iwate.jp",
+ "hirono.iwate.jp",
+ "ichinohe.iwate.jp",
+ "ichinoseki.iwate.jp",
+ "iwaizumi.iwate.jp",
+ "iwate.iwate.jp",
+ "joboji.iwate.jp",
+ "kamaishi.iwate.jp",
+ "kanegasaki.iwate.jp",
+ "karumai.iwate.jp",
+ "kawai.iwate.jp",
+ "kitakami.iwate.jp",
+ "kuji.iwate.jp",
+ "kunohe.iwate.jp",
+ "kuzumaki.iwate.jp",
+ "miyako.iwate.jp",
+ "mizusawa.iwate.jp",
+ "morioka.iwate.jp",
+ "ninohe.iwate.jp",
+ "noda.iwate.jp",
+ "ofunato.iwate.jp",
+ "oshu.iwate.jp",
+ "otsuchi.iwate.jp",
+ "rikuzentakata.iwate.jp",
+ "shiwa.iwate.jp",
+ "shizukuishi.iwate.jp",
+ "sumita.iwate.jp",
+ "tanohata.iwate.jp",
+ "tono.iwate.jp",
+ "yahaba.iwate.jp",
+ "yamada.iwate.jp",
+ "ayagawa.kagawa.jp",
+ "higashikagawa.kagawa.jp",
+ "kanonji.kagawa.jp",
+ "kotohira.kagawa.jp",
+ "manno.kagawa.jp",
+ "marugame.kagawa.jp",
+ "mitoyo.kagawa.jp",
+ "naoshima.kagawa.jp",
+ "sanuki.kagawa.jp",
+ "tadotsu.kagawa.jp",
+ "takamatsu.kagawa.jp",
+ "tonosho.kagawa.jp",
+ "uchinomi.kagawa.jp",
+ "utazu.kagawa.jp",
+ "zentsuji.kagawa.jp",
+ "akune.kagoshima.jp",
+ "amami.kagoshima.jp",
+ "hioki.kagoshima.jp",
+ "isa.kagoshima.jp",
+ "isen.kagoshima.jp",
+ "izumi.kagoshima.jp",
+ "kagoshima.kagoshima.jp",
+ "kanoya.kagoshima.jp",
+ "kawanabe.kagoshima.jp",
+ "kinko.kagoshima.jp",
+ "kouyama.kagoshima.jp",
+ "makurazaki.kagoshima.jp",
+ "matsumoto.kagoshima.jp",
+ "minamitane.kagoshima.jp",
+ "nakatane.kagoshima.jp",
+ "nishinoomote.kagoshima.jp",
+ "satsumasendai.kagoshima.jp",
+ "soo.kagoshima.jp",
+ "tarumizu.kagoshima.jp",
+ "yusui.kagoshima.jp",
+ "aikawa.kanagawa.jp",
+ "atsugi.kanagawa.jp",
+ "ayase.kanagawa.jp",
+ "chigasaki.kanagawa.jp",
+ "ebina.kanagawa.jp",
+ "fujisawa.kanagawa.jp",
+ "hadano.kanagawa.jp",
+ "hakone.kanagawa.jp",
+ "hiratsuka.kanagawa.jp",
+ "isehara.kanagawa.jp",
+ "kaisei.kanagawa.jp",
+ "kamakura.kanagawa.jp",
+ "kiyokawa.kanagawa.jp",
+ "matsuda.kanagawa.jp",
+ "minamiashigara.kanagawa.jp",
+ "miura.kanagawa.jp",
+ "nakai.kanagawa.jp",
+ "ninomiya.kanagawa.jp",
+ "odawara.kanagawa.jp",
+ "oi.kanagawa.jp",
+ "oiso.kanagawa.jp",
+ "sagamihara.kanagawa.jp",
+ "samukawa.kanagawa.jp",
+ "tsukui.kanagawa.jp",
+ "yamakita.kanagawa.jp",
+ "yamato.kanagawa.jp",
+ "yokosuka.kanagawa.jp",
+ "yugawara.kanagawa.jp",
+ "zama.kanagawa.jp",
+ "zushi.kanagawa.jp",
+ "aki.kochi.jp",
+ "geisei.kochi.jp",
+ "hidaka.kochi.jp",
+ "higashitsuno.kochi.jp",
+ "ino.kochi.jp",
+ "kagami.kochi.jp",
+ "kami.kochi.jp",
+ "kitagawa.kochi.jp",
+ "kochi.kochi.jp",
+ "mihara.kochi.jp",
+ "motoyama.kochi.jp",
+ "muroto.kochi.jp",
+ "nahari.kochi.jp",
+ "nakamura.kochi.jp",
+ "nankoku.kochi.jp",
+ "nishitosa.kochi.jp",
+ "niyodogawa.kochi.jp",
+ "ochi.kochi.jp",
+ "okawa.kochi.jp",
+ "otoyo.kochi.jp",
+ "otsuki.kochi.jp",
+ "sakawa.kochi.jp",
+ "sukumo.kochi.jp",
+ "susaki.kochi.jp",
+ "tosa.kochi.jp",
+ "tosashimizu.kochi.jp",
+ "toyo.kochi.jp",
+ "tsuno.kochi.jp",
+ "umaji.kochi.jp",
+ "yasuda.kochi.jp",
+ "yusuhara.kochi.jp",
+ "amakusa.kumamoto.jp",
+ "arao.kumamoto.jp",
+ "aso.kumamoto.jp",
+ "choyo.kumamoto.jp",
+ "gyokuto.kumamoto.jp",
+ "kamiamakusa.kumamoto.jp",
+ "kikuchi.kumamoto.jp",
+ "kumamoto.kumamoto.jp",
+ "mashiki.kumamoto.jp",
+ "mifune.kumamoto.jp",
+ "minamata.kumamoto.jp",
+ "minamioguni.kumamoto.jp",
+ "nagasu.kumamoto.jp",
+ "nishihara.kumamoto.jp",
+ "oguni.kumamoto.jp",
+ "ozu.kumamoto.jp",
+ "sumoto.kumamoto.jp",
+ "takamori.kumamoto.jp",
+ "uki.kumamoto.jp",
+ "uto.kumamoto.jp",
+ "yamaga.kumamoto.jp",
+ "yamato.kumamoto.jp",
+ "yatsushiro.kumamoto.jp",
+ "ayabe.kyoto.jp",
+ "fukuchiyama.kyoto.jp",
+ "higashiyama.kyoto.jp",
+ "ide.kyoto.jp",
+ "ine.kyoto.jp",
+ "joyo.kyoto.jp",
+ "kameoka.kyoto.jp",
+ "kamo.kyoto.jp",
+ "kita.kyoto.jp",
+ "kizu.kyoto.jp",
+ "kumiyama.kyoto.jp",
+ "kyotamba.kyoto.jp",
+ "kyotanabe.kyoto.jp",
+ "kyotango.kyoto.jp",
+ "maizuru.kyoto.jp",
+ "minami.kyoto.jp",
+ "minamiyamashiro.kyoto.jp",
+ "miyazu.kyoto.jp",
+ "muko.kyoto.jp",
+ "nagaokakyo.kyoto.jp",
+ "nakagyo.kyoto.jp",
+ "nantan.kyoto.jp",
+ "oyamazaki.kyoto.jp",
+ "sakyo.kyoto.jp",
+ "seika.kyoto.jp",
+ "tanabe.kyoto.jp",
+ "uji.kyoto.jp",
+ "ujitawara.kyoto.jp",
+ "wazuka.kyoto.jp",
+ "yamashina.kyoto.jp",
+ "yawata.kyoto.jp",
+ "asahi.mie.jp",
+ "inabe.mie.jp",
+ "ise.mie.jp",
+ "kameyama.mie.jp",
+ "kawagoe.mie.jp",
+ "kiho.mie.jp",
+ "kisosaki.mie.jp",
+ "kiwa.mie.jp",
+ "komono.mie.jp",
+ "kumano.mie.jp",
+ "kuwana.mie.jp",
+ "matsusaka.mie.jp",
+ "meiwa.mie.jp",
+ "mihama.mie.jp",
+ "minamiise.mie.jp",
+ "misugi.mie.jp",
+ "miyama.mie.jp",
+ "nabari.mie.jp",
+ "shima.mie.jp",
+ "suzuka.mie.jp",
+ "tado.mie.jp",
+ "taiki.mie.jp",
+ "taki.mie.jp",
+ "tamaki.mie.jp",
+ "toba.mie.jp",
+ "tsu.mie.jp",
+ "udono.mie.jp",
+ "ureshino.mie.jp",
+ "watarai.mie.jp",
+ "yokkaichi.mie.jp",
+ "furukawa.miyagi.jp",
+ "higashimatsushima.miyagi.jp",
+ "ishinomaki.miyagi.jp",
+ "iwanuma.miyagi.jp",
+ "kakuda.miyagi.jp",
+ "kami.miyagi.jp",
+ "kawasaki.miyagi.jp",
+ "marumori.miyagi.jp",
+ "matsushima.miyagi.jp",
+ "minamisanriku.miyagi.jp",
+ "misato.miyagi.jp",
+ "murata.miyagi.jp",
+ "natori.miyagi.jp",
+ "ogawara.miyagi.jp",
+ "ohira.miyagi.jp",
+ "onagawa.miyagi.jp",
+ "osaki.miyagi.jp",
+ "rifu.miyagi.jp",
+ "semine.miyagi.jp",
+ "shibata.miyagi.jp",
+ "shichikashuku.miyagi.jp",
+ "shikama.miyagi.jp",
+ "shiogama.miyagi.jp",
+ "shiroishi.miyagi.jp",
+ "tagajo.miyagi.jp",
+ "taiwa.miyagi.jp",
+ "tome.miyagi.jp",
+ "tomiya.miyagi.jp",
+ "wakuya.miyagi.jp",
+ "watari.miyagi.jp",
+ "yamamoto.miyagi.jp",
+ "zao.miyagi.jp",
+ "aya.miyazaki.jp",
+ "ebino.miyazaki.jp",
+ "gokase.miyazaki.jp",
+ "hyuga.miyazaki.jp",
+ "kadogawa.miyazaki.jp",
+ "kawaminami.miyazaki.jp",
+ "kijo.miyazaki.jp",
+ "kitagawa.miyazaki.jp",
+ "kitakata.miyazaki.jp",
+ "kitaura.miyazaki.jp",
+ "kobayashi.miyazaki.jp",
+ "kunitomi.miyazaki.jp",
+ "kushima.miyazaki.jp",
+ "mimata.miyazaki.jp",
+ "miyakonojo.miyazaki.jp",
+ "miyazaki.miyazaki.jp",
+ "morotsuka.miyazaki.jp",
+ "nichinan.miyazaki.jp",
+ "nishimera.miyazaki.jp",
+ "nobeoka.miyazaki.jp",
+ "saito.miyazaki.jp",
+ "shiiba.miyazaki.jp",
+ "shintomi.miyazaki.jp",
+ "takaharu.miyazaki.jp",
+ "takanabe.miyazaki.jp",
+ "takazaki.miyazaki.jp",
+ "tsuno.miyazaki.jp",
+ "achi.nagano.jp",
+ "agematsu.nagano.jp",
+ "anan.nagano.jp",
+ "aoki.nagano.jp",
+ "asahi.nagano.jp",
+ "azumino.nagano.jp",
+ "chikuhoku.nagano.jp",
+ "chikuma.nagano.jp",
+ "chino.nagano.jp",
+ "fujimi.nagano.jp",
+ "hakuba.nagano.jp",
+ "hara.nagano.jp",
+ "hiraya.nagano.jp",
+ "iida.nagano.jp",
+ "iijima.nagano.jp",
+ "iiyama.nagano.jp",
+ "iizuna.nagano.jp",
+ "ikeda.nagano.jp",
+ "ikusaka.nagano.jp",
+ "ina.nagano.jp",
+ "karuizawa.nagano.jp",
+ "kawakami.nagano.jp",
+ "kiso.nagano.jp",
+ "kisofukushima.nagano.jp",
+ "kitaaiki.nagano.jp",
+ "komagane.nagano.jp",
+ "komoro.nagano.jp",
+ "matsukawa.nagano.jp",
+ "matsumoto.nagano.jp",
+ "miasa.nagano.jp",
+ "minamiaiki.nagano.jp",
+ "minamimaki.nagano.jp",
+ "minamiminowa.nagano.jp",
+ "minowa.nagano.jp",
+ "miyada.nagano.jp",
+ "miyota.nagano.jp",
+ "mochizuki.nagano.jp",
+ "nagano.nagano.jp",
+ "nagawa.nagano.jp",
+ "nagiso.nagano.jp",
+ "nakagawa.nagano.jp",
+ "nakano.nagano.jp",
+ "nozawaonsen.nagano.jp",
+ "obuse.nagano.jp",
+ "ogawa.nagano.jp",
+ "okaya.nagano.jp",
+ "omachi.nagano.jp",
+ "omi.nagano.jp",
+ "ookuwa.nagano.jp",
+ "ooshika.nagano.jp",
+ "otaki.nagano.jp",
+ "otari.nagano.jp",
+ "sakae.nagano.jp",
+ "sakaki.nagano.jp",
+ "saku.nagano.jp",
+ "sakuho.nagano.jp",
+ "shimosuwa.nagano.jp",
+ "shinanomachi.nagano.jp",
+ "shiojiri.nagano.jp",
+ "suwa.nagano.jp",
+ "suzaka.nagano.jp",
+ "takagi.nagano.jp",
+ "takamori.nagano.jp",
+ "takayama.nagano.jp",
+ "tateshina.nagano.jp",
+ "tatsuno.nagano.jp",
+ "togakushi.nagano.jp",
+ "togura.nagano.jp",
+ "tomi.nagano.jp",
+ "ueda.nagano.jp",
+ "wada.nagano.jp",
+ "yamagata.nagano.jp",
+ "yamanouchi.nagano.jp",
+ "yasaka.nagano.jp",
+ "yasuoka.nagano.jp",
+ "chijiwa.nagasaki.jp",
+ "futsu.nagasaki.jp",
+ "goto.nagasaki.jp",
+ "hasami.nagasaki.jp",
+ "hirado.nagasaki.jp",
+ "iki.nagasaki.jp",
+ "isahaya.nagasaki.jp",
+ "kawatana.nagasaki.jp",
+ "kuchinotsu.nagasaki.jp",
+ "matsuura.nagasaki.jp",
+ "nagasaki.nagasaki.jp",
+ "obama.nagasaki.jp",
+ "omura.nagasaki.jp",
+ "oseto.nagasaki.jp",
+ "saikai.nagasaki.jp",
+ "sasebo.nagasaki.jp",
+ "seihi.nagasaki.jp",
+ "shimabara.nagasaki.jp",
+ "shinkamigoto.nagasaki.jp",
+ "togitsu.nagasaki.jp",
+ "tsushima.nagasaki.jp",
+ "unzen.nagasaki.jp",
+ "ando.nara.jp",
+ "gose.nara.jp",
+ "heguri.nara.jp",
+ "higashiyoshino.nara.jp",
+ "ikaruga.nara.jp",
+ "ikoma.nara.jp",
+ "kamikitayama.nara.jp",
+ "kanmaki.nara.jp",
+ "kashiba.nara.jp",
+ "kashihara.nara.jp",
+ "katsuragi.nara.jp",
+ "kawai.nara.jp",
+ "kawakami.nara.jp",
+ "kawanishi.nara.jp",
+ "koryo.nara.jp",
+ "kurotaki.nara.jp",
+ "mitsue.nara.jp",
+ "miyake.nara.jp",
+ "nara.nara.jp",
+ "nosegawa.nara.jp",
+ "oji.nara.jp",
+ "ouda.nara.jp",
+ "oyodo.nara.jp",
+ "sakurai.nara.jp",
+ "sango.nara.jp",
+ "shimoichi.nara.jp",
+ "shimokitayama.nara.jp",
+ "shinjo.nara.jp",
+ "soni.nara.jp",
+ "takatori.nara.jp",
+ "tawaramoto.nara.jp",
+ "tenkawa.nara.jp",
+ "tenri.nara.jp",
+ "uda.nara.jp",
+ "yamatokoriyama.nara.jp",
+ "yamatotakada.nara.jp",
+ "yamazoe.nara.jp",
+ "yoshino.nara.jp",
+ "aga.niigata.jp",
+ "agano.niigata.jp",
+ "gosen.niigata.jp",
+ "itoigawa.niigata.jp",
+ "izumozaki.niigata.jp",
+ "joetsu.niigata.jp",
+ "kamo.niigata.jp",
+ "kariwa.niigata.jp",
+ "kashiwazaki.niigata.jp",
+ "minamiuonuma.niigata.jp",
+ "mitsuke.niigata.jp",
+ "muika.niigata.jp",
+ "murakami.niigata.jp",
+ "myoko.niigata.jp",
+ "nagaoka.niigata.jp",
+ "niigata.niigata.jp",
+ "ojiya.niigata.jp",
+ "omi.niigata.jp",
+ "sado.niigata.jp",
+ "sanjo.niigata.jp",
+ "seiro.niigata.jp",
+ "seirou.niigata.jp",
+ "sekikawa.niigata.jp",
+ "shibata.niigata.jp",
+ "tagami.niigata.jp",
+ "tainai.niigata.jp",
+ "tochio.niigata.jp",
+ "tokamachi.niigata.jp",
+ "tsubame.niigata.jp",
+ "tsunan.niigata.jp",
+ "uonuma.niigata.jp",
+ "yahiko.niigata.jp",
+ "yoita.niigata.jp",
+ "yuzawa.niigata.jp",
+ "beppu.oita.jp",
+ "bungoono.oita.jp",
+ "bungotakada.oita.jp",
+ "hasama.oita.jp",
+ "hiji.oita.jp",
+ "himeshima.oita.jp",
+ "hita.oita.jp",
+ "kamitsue.oita.jp",
+ "kokonoe.oita.jp",
+ "kuju.oita.jp",
+ "kunisaki.oita.jp",
+ "kusu.oita.jp",
+ "oita.oita.jp",
+ "saiki.oita.jp",
+ "taketa.oita.jp",
+ "tsukumi.oita.jp",
+ "usa.oita.jp",
+ "usuki.oita.jp",
+ "yufu.oita.jp",
+ "akaiwa.okayama.jp",
+ "asakuchi.okayama.jp",
+ "bizen.okayama.jp",
+ "hayashima.okayama.jp",
+ "ibara.okayama.jp",
+ "kagamino.okayama.jp",
+ "kasaoka.okayama.jp",
+ "kibichuo.okayama.jp",
+ "kumenan.okayama.jp",
+ "kurashiki.okayama.jp",
+ "maniwa.okayama.jp",
+ "misaki.okayama.jp",
+ "nagi.okayama.jp",
+ "niimi.okayama.jp",
+ "nishiawakura.okayama.jp",
+ "okayama.okayama.jp",
+ "satosho.okayama.jp",
+ "setouchi.okayama.jp",
+ "shinjo.okayama.jp",
+ "shoo.okayama.jp",
+ "soja.okayama.jp",
+ "takahashi.okayama.jp",
+ "tamano.okayama.jp",
+ "tsuyama.okayama.jp",
+ "wake.okayama.jp",
+ "yakage.okayama.jp",
+ "aguni.okinawa.jp",
+ "ginowan.okinawa.jp",
+ "ginoza.okinawa.jp",
+ "gushikami.okinawa.jp",
+ "haebaru.okinawa.jp",
+ "higashi.okinawa.jp",
+ "hirara.okinawa.jp",
+ "iheya.okinawa.jp",
+ "ishigaki.okinawa.jp",
+ "ishikawa.okinawa.jp",
+ "itoman.okinawa.jp",
+ "izena.okinawa.jp",
+ "kadena.okinawa.jp",
+ "kin.okinawa.jp",
+ "kitadaito.okinawa.jp",
+ "kitanakagusuku.okinawa.jp",
+ "kumejima.okinawa.jp",
+ "kunigami.okinawa.jp",
+ "minamidaito.okinawa.jp",
+ "motobu.okinawa.jp",
+ "nago.okinawa.jp",
+ "naha.okinawa.jp",
+ "nakagusuku.okinawa.jp",
+ "nakijin.okinawa.jp",
+ "nanjo.okinawa.jp",
+ "nishihara.okinawa.jp",
+ "ogimi.okinawa.jp",
+ "okinawa.okinawa.jp",
+ "onna.okinawa.jp",
+ "shimoji.okinawa.jp",
+ "taketomi.okinawa.jp",
+ "tarama.okinawa.jp",
+ "tokashiki.okinawa.jp",
+ "tomigusuku.okinawa.jp",
+ "tonaki.okinawa.jp",
+ "urasoe.okinawa.jp",
+ "uruma.okinawa.jp",
+ "yaese.okinawa.jp",
+ "yomitan.okinawa.jp",
+ "yonabaru.okinawa.jp",
+ "yonaguni.okinawa.jp",
+ "zamami.okinawa.jp",
+ "abeno.osaka.jp",
+ "chihayaakasaka.osaka.jp",
+ "chuo.osaka.jp",
+ "daito.osaka.jp",
+ "fujiidera.osaka.jp",
+ "habikino.osaka.jp",
+ "hannan.osaka.jp",
+ "higashiosaka.osaka.jp",
+ "higashisumiyoshi.osaka.jp",
+ "higashiyodogawa.osaka.jp",
+ "hirakata.osaka.jp",
+ "ibaraki.osaka.jp",
+ "ikeda.osaka.jp",
+ "izumi.osaka.jp",
+ "izumiotsu.osaka.jp",
+ "izumisano.osaka.jp",
+ "kadoma.osaka.jp",
+ "kaizuka.osaka.jp",
+ "kanan.osaka.jp",
+ "kashiwara.osaka.jp",
+ "katano.osaka.jp",
+ "kawachinagano.osaka.jp",
+ "kishiwada.osaka.jp",
+ "kita.osaka.jp",
+ "kumatori.osaka.jp",
+ "matsubara.osaka.jp",
+ "minato.osaka.jp",
+ "minoh.osaka.jp",
+ "misaki.osaka.jp",
+ "moriguchi.osaka.jp",
+ "neyagawa.osaka.jp",
+ "nishi.osaka.jp",
+ "nose.osaka.jp",
+ "osakasayama.osaka.jp",
+ "sakai.osaka.jp",
+ "sayama.osaka.jp",
+ "sennan.osaka.jp",
+ "settsu.osaka.jp",
+ "shijonawate.osaka.jp",
+ "shimamoto.osaka.jp",
+ "suita.osaka.jp",
+ "tadaoka.osaka.jp",
+ "taishi.osaka.jp",
+ "tajiri.osaka.jp",
+ "takaishi.osaka.jp",
+ "takatsuki.osaka.jp",
+ "tondabayashi.osaka.jp",
+ "toyonaka.osaka.jp",
+ "toyono.osaka.jp",
+ "yao.osaka.jp",
+ "ariake.saga.jp",
+ "arita.saga.jp",
+ "fukudomi.saga.jp",
+ "genkai.saga.jp",
+ "hamatama.saga.jp",
+ "hizen.saga.jp",
+ "imari.saga.jp",
+ "kamimine.saga.jp",
+ "kanzaki.saga.jp",
+ "karatsu.saga.jp",
+ "kashima.saga.jp",
+ "kitagata.saga.jp",
+ "kitahata.saga.jp",
+ "kiyama.saga.jp",
+ "kouhoku.saga.jp",
+ "kyuragi.saga.jp",
+ "nishiarita.saga.jp",
+ "ogi.saga.jp",
+ "omachi.saga.jp",
+ "ouchi.saga.jp",
+ "saga.saga.jp",
+ "shiroishi.saga.jp",
+ "taku.saga.jp",
+ "tara.saga.jp",
+ "tosu.saga.jp",
+ "yoshinogari.saga.jp",
+ "arakawa.saitama.jp",
+ "asaka.saitama.jp",
+ "chichibu.saitama.jp",
+ "fujimi.saitama.jp",
+ "fujimino.saitama.jp",
+ "fukaya.saitama.jp",
+ "hanno.saitama.jp",
+ "hanyu.saitama.jp",
+ "hasuda.saitama.jp",
+ "hatogaya.saitama.jp",
+ "hatoyama.saitama.jp",
+ "hidaka.saitama.jp",
+ "higashichichibu.saitama.jp",
+ "higashimatsuyama.saitama.jp",
+ "honjo.saitama.jp",
+ "ina.saitama.jp",
+ "iruma.saitama.jp",
+ "iwatsuki.saitama.jp",
+ "kamiizumi.saitama.jp",
+ "kamikawa.saitama.jp",
+ "kamisato.saitama.jp",
+ "kasukabe.saitama.jp",
+ "kawagoe.saitama.jp",
+ "kawaguchi.saitama.jp",
+ "kawajima.saitama.jp",
+ "kazo.saitama.jp",
+ "kitamoto.saitama.jp",
+ "koshigaya.saitama.jp",
+ "kounosu.saitama.jp",
+ "kuki.saitama.jp",
+ "kumagaya.saitama.jp",
+ "matsubushi.saitama.jp",
+ "minano.saitama.jp",
+ "misato.saitama.jp",
+ "miyashiro.saitama.jp",
+ "miyoshi.saitama.jp",
+ "moroyama.saitama.jp",
+ "nagatoro.saitama.jp",
+ "namegawa.saitama.jp",
+ "niiza.saitama.jp",
+ "ogano.saitama.jp",
+ "ogawa.saitama.jp",
+ "ogose.saitama.jp",
+ "okegawa.saitama.jp",
+ "omiya.saitama.jp",
+ "otaki.saitama.jp",
+ "ranzan.saitama.jp",
+ "ryokami.saitama.jp",
+ "saitama.saitama.jp",
+ "sakado.saitama.jp",
+ "satte.saitama.jp",
+ "sayama.saitama.jp",
+ "shiki.saitama.jp",
+ "shiraoka.saitama.jp",
+ "soka.saitama.jp",
+ "sugito.saitama.jp",
+ "toda.saitama.jp",
+ "tokigawa.saitama.jp",
+ "tokorozawa.saitama.jp",
+ "tsurugashima.saitama.jp",
+ "urawa.saitama.jp",
+ "warabi.saitama.jp",
+ "yashio.saitama.jp",
+ "yokoze.saitama.jp",
+ "yono.saitama.jp",
+ "yorii.saitama.jp",
+ "yoshida.saitama.jp",
+ "yoshikawa.saitama.jp",
+ "yoshimi.saitama.jp",
+ "aisho.shiga.jp",
+ "gamo.shiga.jp",
+ "higashiomi.shiga.jp",
+ "hikone.shiga.jp",
+ "koka.shiga.jp",
+ "konan.shiga.jp",
+ "kosei.shiga.jp",
+ "koto.shiga.jp",
+ "kusatsu.shiga.jp",
+ "maibara.shiga.jp",
+ "moriyama.shiga.jp",
+ "nagahama.shiga.jp",
+ "nishiazai.shiga.jp",
+ "notogawa.shiga.jp",
+ "omihachiman.shiga.jp",
+ "otsu.shiga.jp",
+ "ritto.shiga.jp",
+ "ryuoh.shiga.jp",
+ "takashima.shiga.jp",
+ "takatsuki.shiga.jp",
+ "torahime.shiga.jp",
+ "toyosato.shiga.jp",
+ "yasu.shiga.jp",
+ "akagi.shimane.jp",
+ "ama.shimane.jp",
+ "gotsu.shimane.jp",
+ "hamada.shimane.jp",
+ "higashiizumo.shimane.jp",
+ "hikawa.shimane.jp",
+ "hikimi.shimane.jp",
+ "izumo.shimane.jp",
+ "kakinoki.shimane.jp",
+ "masuda.shimane.jp",
+ "matsue.shimane.jp",
+ "misato.shimane.jp",
+ "nishinoshima.shimane.jp",
+ "ohda.shimane.jp",
+ "okinoshima.shimane.jp",
+ "okuizumo.shimane.jp",
+ "shimane.shimane.jp",
+ "tamayu.shimane.jp",
+ "tsuwano.shimane.jp",
+ "unnan.shimane.jp",
+ "yakumo.shimane.jp",
+ "yasugi.shimane.jp",
+ "yatsuka.shimane.jp",
+ "arai.shizuoka.jp",
+ "atami.shizuoka.jp",
+ "fuji.shizuoka.jp",
+ "fujieda.shizuoka.jp",
+ "fujikawa.shizuoka.jp",
+ "fujinomiya.shizuoka.jp",
+ "fukuroi.shizuoka.jp",
+ "gotemba.shizuoka.jp",
+ "haibara.shizuoka.jp",
+ "hamamatsu.shizuoka.jp",
+ "higashiizu.shizuoka.jp",
+ "ito.shizuoka.jp",
+ "iwata.shizuoka.jp",
+ "izu.shizuoka.jp",
+ "izunokuni.shizuoka.jp",
+ "kakegawa.shizuoka.jp",
+ "kannami.shizuoka.jp",
+ "kawanehon.shizuoka.jp",
+ "kawazu.shizuoka.jp",
+ "kikugawa.shizuoka.jp",
+ "kosai.shizuoka.jp",
+ "makinohara.shizuoka.jp",
+ "matsuzaki.shizuoka.jp",
+ "minamiizu.shizuoka.jp",
+ "mishima.shizuoka.jp",
+ "morimachi.shizuoka.jp",
+ "nishiizu.shizuoka.jp",
+ "numazu.shizuoka.jp",
+ "omaezaki.shizuoka.jp",
+ "shimada.shizuoka.jp",
+ "shimizu.shizuoka.jp",
+ "shimoda.shizuoka.jp",
+ "shizuoka.shizuoka.jp",
+ "susono.shizuoka.jp",
+ "yaizu.shizuoka.jp",
+ "yoshida.shizuoka.jp",
+ "ashikaga.tochigi.jp",
+ "bato.tochigi.jp",
+ "haga.tochigi.jp",
+ "ichikai.tochigi.jp",
+ "iwafune.tochigi.jp",
+ "kaminokawa.tochigi.jp",
+ "kanuma.tochigi.jp",
+ "karasuyama.tochigi.jp",
+ "kuroiso.tochigi.jp",
+ "mashiko.tochigi.jp",
+ "mibu.tochigi.jp",
+ "moka.tochigi.jp",
+ "motegi.tochigi.jp",
+ "nasu.tochigi.jp",
+ "nasushiobara.tochigi.jp",
+ "nikko.tochigi.jp",
+ "nishikata.tochigi.jp",
+ "nogi.tochigi.jp",
+ "ohira.tochigi.jp",
+ "ohtawara.tochigi.jp",
+ "oyama.tochigi.jp",
+ "sakura.tochigi.jp",
+ "sano.tochigi.jp",
+ "shimotsuke.tochigi.jp",
+ "shioya.tochigi.jp",
+ "takanezawa.tochigi.jp",
+ "tochigi.tochigi.jp",
+ "tsuga.tochigi.jp",
+ "ujiie.tochigi.jp",
+ "utsunomiya.tochigi.jp",
+ "yaita.tochigi.jp",
+ "aizumi.tokushima.jp",
+ "anan.tokushima.jp",
+ "ichiba.tokushima.jp",
+ "itano.tokushima.jp",
+ "kainan.tokushima.jp",
+ "komatsushima.tokushima.jp",
+ "matsushige.tokushima.jp",
+ "mima.tokushima.jp",
+ "minami.tokushima.jp",
+ "miyoshi.tokushima.jp",
+ "mugi.tokushima.jp",
+ "nakagawa.tokushima.jp",
+ "naruto.tokushima.jp",
+ "sanagochi.tokushima.jp",
+ "shishikui.tokushima.jp",
+ "tokushima.tokushima.jp",
+ "wajiki.tokushima.jp",
+ "adachi.tokyo.jp",
+ "akiruno.tokyo.jp",
+ "akishima.tokyo.jp",
+ "aogashima.tokyo.jp",
+ "arakawa.tokyo.jp",
+ "bunkyo.tokyo.jp",
+ "chiyoda.tokyo.jp",
+ "chofu.tokyo.jp",
+ "chuo.tokyo.jp",
+ "edogawa.tokyo.jp",
+ "fuchu.tokyo.jp",
+ "fussa.tokyo.jp",
+ "hachijo.tokyo.jp",
+ "hachioji.tokyo.jp",
+ "hamura.tokyo.jp",
+ "higashikurume.tokyo.jp",
+ "higashimurayama.tokyo.jp",
+ "higashiyamato.tokyo.jp",
+ "hino.tokyo.jp",
+ "hinode.tokyo.jp",
+ "hinohara.tokyo.jp",
+ "inagi.tokyo.jp",
+ "itabashi.tokyo.jp",
+ "katsushika.tokyo.jp",
+ "kita.tokyo.jp",
+ "kiyose.tokyo.jp",
+ "kodaira.tokyo.jp",
+ "koganei.tokyo.jp",
+ "kokubunji.tokyo.jp",
+ "komae.tokyo.jp",
+ "koto.tokyo.jp",
+ "kouzushima.tokyo.jp",
+ "kunitachi.tokyo.jp",
+ "machida.tokyo.jp",
+ "meguro.tokyo.jp",
+ "minato.tokyo.jp",
+ "mitaka.tokyo.jp",
+ "mizuho.tokyo.jp",
+ "musashimurayama.tokyo.jp",
+ "musashino.tokyo.jp",
+ "nakano.tokyo.jp",
+ "nerima.tokyo.jp",
+ "ogasawara.tokyo.jp",
+ "okutama.tokyo.jp",
+ "ome.tokyo.jp",
+ "oshima.tokyo.jp",
+ "ota.tokyo.jp",
+ "setagaya.tokyo.jp",
+ "shibuya.tokyo.jp",
+ "shinagawa.tokyo.jp",
+ "shinjuku.tokyo.jp",
+ "suginami.tokyo.jp",
+ "sumida.tokyo.jp",
+ "tachikawa.tokyo.jp",
+ "taito.tokyo.jp",
+ "tama.tokyo.jp",
+ "toshima.tokyo.jp",
+ "chizu.tottori.jp",
+ "hino.tottori.jp",
+ "kawahara.tottori.jp",
+ "koge.tottori.jp",
+ "kotoura.tottori.jp",
+ "misasa.tottori.jp",
+ "nanbu.tottori.jp",
+ "nichinan.tottori.jp",
+ "sakaiminato.tottori.jp",
+ "tottori.tottori.jp",
+ "wakasa.tottori.jp",
+ "yazu.tottori.jp",
+ "yonago.tottori.jp",
+ "asahi.toyama.jp",
+ "fuchu.toyama.jp",
+ "fukumitsu.toyama.jp",
+ "funahashi.toyama.jp",
+ "himi.toyama.jp",
+ "imizu.toyama.jp",
+ "inami.toyama.jp",
+ "johana.toyama.jp",
+ "kamiichi.toyama.jp",
+ "kurobe.toyama.jp",
+ "nakaniikawa.toyama.jp",
+ "namerikawa.toyama.jp",
+ "nanto.toyama.jp",
+ "nyuzen.toyama.jp",
+ "oyabe.toyama.jp",
+ "taira.toyama.jp",
+ "takaoka.toyama.jp",
+ "tateyama.toyama.jp",
+ "toga.toyama.jp",
+ "tonami.toyama.jp",
+ "toyama.toyama.jp",
+ "unazuki.toyama.jp",
+ "uozu.toyama.jp",
+ "yamada.toyama.jp",
+ "arida.wakayama.jp",
+ "aridagawa.wakayama.jp",
+ "gobo.wakayama.jp",
+ "hashimoto.wakayama.jp",
+ "hidaka.wakayama.jp",
+ "hirogawa.wakayama.jp",
+ "inami.wakayama.jp",
+ "iwade.wakayama.jp",
+ "kainan.wakayama.jp",
+ "kamitonda.wakayama.jp",
+ "katsuragi.wakayama.jp",
+ "kimino.wakayama.jp",
+ "kinokawa.wakayama.jp",
+ "kitayama.wakayama.jp",
+ "koya.wakayama.jp",
+ "koza.wakayama.jp",
+ "kozagawa.wakayama.jp",
+ "kudoyama.wakayama.jp",
+ "kushimoto.wakayama.jp",
+ "mihama.wakayama.jp",
+ "misato.wakayama.jp",
+ "nachikatsuura.wakayama.jp",
+ "shingu.wakayama.jp",
+ "shirahama.wakayama.jp",
+ "taiji.wakayama.jp",
+ "tanabe.wakayama.jp",
+ "wakayama.wakayama.jp",
+ "yuasa.wakayama.jp",
+ "yura.wakayama.jp",
+ "asahi.yamagata.jp",
+ "funagata.yamagata.jp",
+ "higashine.yamagata.jp",
+ "iide.yamagata.jp",
+ "kahoku.yamagata.jp",
+ "kaminoyama.yamagata.jp",
+ "kaneyama.yamagata.jp",
+ "kawanishi.yamagata.jp",
+ "mamurogawa.yamagata.jp",
+ "mikawa.yamagata.jp",
+ "murayama.yamagata.jp",
+ "nagai.yamagata.jp",
+ "nakayama.yamagata.jp",
+ "nanyo.yamagata.jp",
+ "nishikawa.yamagata.jp",
+ "obanazawa.yamagata.jp",
+ "oe.yamagata.jp",
+ "oguni.yamagata.jp",
+ "ohkura.yamagata.jp",
+ "oishida.yamagata.jp",
+ "sagae.yamagata.jp",
+ "sakata.yamagata.jp",
+ "sakegawa.yamagata.jp",
+ "shinjo.yamagata.jp",
+ "shirataka.yamagata.jp",
+ "shonai.yamagata.jp",
+ "takahata.yamagata.jp",
+ "tendo.yamagata.jp",
+ "tozawa.yamagata.jp",
+ "tsuruoka.yamagata.jp",
+ "yamagata.yamagata.jp",
+ "yamanobe.yamagata.jp",
+ "yonezawa.yamagata.jp",
+ "yuza.yamagata.jp",
+ "abu.yamaguchi.jp",
+ "hagi.yamaguchi.jp",
+ "hikari.yamaguchi.jp",
+ "hofu.yamaguchi.jp",
+ "iwakuni.yamaguchi.jp",
+ "kudamatsu.yamaguchi.jp",
+ "mitou.yamaguchi.jp",
+ "nagato.yamaguchi.jp",
+ "oshima.yamaguchi.jp",
+ "shimonoseki.yamaguchi.jp",
+ "shunan.yamaguchi.jp",
+ "tabuse.yamaguchi.jp",
+ "tokuyama.yamaguchi.jp",
+ "toyota.yamaguchi.jp",
+ "ube.yamaguchi.jp",
+ "yuu.yamaguchi.jp",
+ "chuo.yamanashi.jp",
+ "doshi.yamanashi.jp",
+ "fuefuki.yamanashi.jp",
+ "fujikawa.yamanashi.jp",
+ "fujikawaguchiko.yamanashi.jp",
+ "fujiyoshida.yamanashi.jp",
+ "hayakawa.yamanashi.jp",
+ "hokuto.yamanashi.jp",
+ "ichikawamisato.yamanashi.jp",
+ "kai.yamanashi.jp",
+ "kofu.yamanashi.jp",
+ "koshu.yamanashi.jp",
+ "kosuge.yamanashi.jp",
+ "minami-alps.yamanashi.jp",
+ "minobu.yamanashi.jp",
+ "nakamichi.yamanashi.jp",
+ "nanbu.yamanashi.jp",
+ "narusawa.yamanashi.jp",
+ "nirasaki.yamanashi.jp",
+ "nishikatsura.yamanashi.jp",
+ "oshino.yamanashi.jp",
+ "otsuki.yamanashi.jp",
+ "showa.yamanashi.jp",
+ "tabayama.yamanashi.jp",
+ "tsuru.yamanashi.jp",
+ "uenohara.yamanashi.jp",
+ "yamanakako.yamanashi.jp",
+ "yamanashi.yamanashi.jp",
+ "ke",
+ "ac.ke",
+ "co.ke",
+ "go.ke",
+ "info.ke",
+ "me.ke",
+ "mobi.ke",
+ "ne.ke",
+ "or.ke",
+ "sc.ke",
+ "kg",
+ "org.kg",
+ "net.kg",
+ "com.kg",
+ "edu.kg",
+ "gov.kg",
+ "mil.kg",
+ "*.kh",
+ "ki",
+ "edu.ki",
+ "biz.ki",
+ "net.ki",
+ "org.ki",
+ "gov.ki",
+ "info.ki",
+ "com.ki",
+ "km",
+ "org.km",
+ "nom.km",
+ "gov.km",
+ "prd.km",
+ "tm.km",
+ "edu.km",
+ "mil.km",
+ "ass.km",
+ "com.km",
+ "coop.km",
+ "asso.km",
+ "presse.km",
+ "medecin.km",
+ "notaires.km",
+ "pharmaciens.km",
+ "veterinaire.km",
+ "gouv.km",
+ "kn",
+ "net.kn",
+ "org.kn",
+ "edu.kn",
+ "gov.kn",
+ "kp",
+ "com.kp",
+ "edu.kp",
+ "gov.kp",
+ "org.kp",
+ "rep.kp",
+ "tra.kp",
+ "kr",
+ "ac.kr",
+ "co.kr",
+ "es.kr",
+ "go.kr",
+ "hs.kr",
+ "kg.kr",
+ "mil.kr",
+ "ms.kr",
+ "ne.kr",
+ "or.kr",
+ "pe.kr",
+ "re.kr",
+ "sc.kr",
+ "busan.kr",
+ "chungbuk.kr",
+ "chungnam.kr",
+ "daegu.kr",
+ "daejeon.kr",
+ "gangwon.kr",
+ "gwangju.kr",
+ "gyeongbuk.kr",
+ "gyeonggi.kr",
+ "gyeongnam.kr",
+ "incheon.kr",
+ "jeju.kr",
+ "jeonbuk.kr",
+ "jeonnam.kr",
+ "seoul.kr",
+ "ulsan.kr",
+ "kw",
+ "com.kw",
+ "edu.kw",
+ "emb.kw",
+ "gov.kw",
+ "ind.kw",
+ "net.kw",
+ "org.kw",
+ "ky",
+ "com.ky",
+ "edu.ky",
+ "net.ky",
+ "org.ky",
+ "kz",
+ "org.kz",
+ "edu.kz",
+ "net.kz",
+ "gov.kz",
+ "mil.kz",
+ "com.kz",
+ "la",
+ "int.la",
+ "net.la",
+ "info.la",
+ "edu.la",
+ "gov.la",
+ "per.la",
+ "com.la",
+ "org.la",
+ "lb",
+ "com.lb",
+ "edu.lb",
+ "gov.lb",
+ "net.lb",
+ "org.lb",
+ "lc",
+ "com.lc",
+ "net.lc",
+ "co.lc",
+ "org.lc",
+ "edu.lc",
+ "gov.lc",
+ "li",
+ "lk",
+ "gov.lk",
+ "sch.lk",
+ "net.lk",
+ "int.lk",
+ "com.lk",
+ "org.lk",
+ "edu.lk",
+ "ngo.lk",
+ "soc.lk",
+ "web.lk",
+ "ltd.lk",
+ "assn.lk",
+ "grp.lk",
+ "hotel.lk",
+ "ac.lk",
+ "lr",
+ "com.lr",
+ "edu.lr",
+ "gov.lr",
+ "org.lr",
+ "net.lr",
+ "ls",
+ "ac.ls",
+ "biz.ls",
+ "co.ls",
+ "edu.ls",
+ "gov.ls",
+ "info.ls",
+ "net.ls",
+ "org.ls",
+ "sc.ls",
+ "lt",
+ "gov.lt",
+ "lu",
+ "lv",
+ "com.lv",
+ "edu.lv",
+ "gov.lv",
+ "org.lv",
+ "mil.lv",
+ "id.lv",
+ "net.lv",
+ "asn.lv",
+ "conf.lv",
+ "ly",
+ "com.ly",
+ "net.ly",
+ "gov.ly",
+ "plc.ly",
+ "edu.ly",
+ "sch.ly",
+ "med.ly",
+ "org.ly",
+ "id.ly",
+ "ma",
+ "co.ma",
+ "net.ma",
+ "gov.ma",
+ "org.ma",
+ "ac.ma",
+ "press.ma",
+ "mc",
+ "tm.mc",
+ "asso.mc",
+ "md",
+ "me",
+ "co.me",
+ "net.me",
+ "org.me",
+ "edu.me",
+ "ac.me",
+ "gov.me",
+ "its.me",
+ "priv.me",
+ "mg",
+ "org.mg",
+ "nom.mg",
+ "gov.mg",
+ "prd.mg",
+ "tm.mg",
+ "edu.mg",
+ "mil.mg",
+ "com.mg",
+ "co.mg",
+ "mh",
+ "mil",
+ "mk",
+ "com.mk",
+ "org.mk",
+ "net.mk",
+ "edu.mk",
+ "gov.mk",
+ "inf.mk",
+ "name.mk",
+ "ml",
+ "com.ml",
+ "edu.ml",
+ "gouv.ml",
+ "gov.ml",
+ "net.ml",
+ "org.ml",
+ "presse.ml",
+ "*.mm",
+ "mn",
+ "gov.mn",
+ "edu.mn",
+ "org.mn",
+ "mo",
+ "com.mo",
+ "net.mo",
+ "org.mo",
+ "edu.mo",
+ "gov.mo",
+ "mobi",
+ "mp",
+ "mq",
+ "mr",
+ "gov.mr",
+ "ms",
+ "com.ms",
+ "edu.ms",
+ "gov.ms",
+ "net.ms",
+ "org.ms",
+ "mt",
+ "com.mt",
+ "edu.mt",
+ "net.mt",
+ "org.mt",
+ "mu",
+ "com.mu",
+ "net.mu",
+ "org.mu",
+ "gov.mu",
+ "ac.mu",
+ "co.mu",
+ "or.mu",
+ "museum",
+ "academy.museum",
+ "agriculture.museum",
+ "air.museum",
+ "airguard.museum",
+ "alabama.museum",
+ "alaska.museum",
+ "amber.museum",
+ "ambulance.museum",
+ "american.museum",
+ "americana.museum",
+ "americanantiques.museum",
+ "americanart.museum",
+ "amsterdam.museum",
+ "and.museum",
+ "annefrank.museum",
+ "anthro.museum",
+ "anthropology.museum",
+ "antiques.museum",
+ "aquarium.museum",
+ "arboretum.museum",
+ "archaeological.museum",
+ "archaeology.museum",
+ "architecture.museum",
+ "art.museum",
+ "artanddesign.museum",
+ "artcenter.museum",
+ "artdeco.museum",
+ "arteducation.museum",
+ "artgallery.museum",
+ "arts.museum",
+ "artsandcrafts.museum",
+ "asmatart.museum",
+ "assassination.museum",
+ "assisi.museum",
+ "association.museum",
+ "astronomy.museum",
+ "atlanta.museum",
+ "austin.museum",
+ "australia.museum",
+ "automotive.museum",
+ "aviation.museum",
+ "axis.museum",
+ "badajoz.museum",
+ "baghdad.museum",
+ "bahn.museum",
+ "bale.museum",
+ "baltimore.museum",
+ "barcelona.museum",
+ "baseball.museum",
+ "basel.museum",
+ "baths.museum",
+ "bauern.museum",
+ "beauxarts.museum",
+ "beeldengeluid.museum",
+ "bellevue.museum",
+ "bergbau.museum",
+ "berkeley.museum",
+ "berlin.museum",
+ "bern.museum",
+ "bible.museum",
+ "bilbao.museum",
+ "bill.museum",
+ "birdart.museum",
+ "birthplace.museum",
+ "bonn.museum",
+ "boston.museum",
+ "botanical.museum",
+ "botanicalgarden.museum",
+ "botanicgarden.museum",
+ "botany.museum",
+ "brandywinevalley.museum",
+ "brasil.museum",
+ "bristol.museum",
+ "british.museum",
+ "britishcolumbia.museum",
+ "broadcast.museum",
+ "brunel.museum",
+ "brussel.museum",
+ "brussels.museum",
+ "bruxelles.museum",
+ "building.museum",
+ "burghof.museum",
+ "bus.museum",
+ "bushey.museum",
+ "cadaques.museum",
+ "california.museum",
+ "cambridge.museum",
+ "can.museum",
+ "canada.museum",
+ "capebreton.museum",
+ "carrier.museum",
+ "cartoonart.museum",
+ "casadelamoneda.museum",
+ "castle.museum",
+ "castres.museum",
+ "celtic.museum",
+ "center.museum",
+ "chattanooga.museum",
+ "cheltenham.museum",
+ "chesapeakebay.museum",
+ "chicago.museum",
+ "children.museum",
+ "childrens.museum",
+ "childrensgarden.museum",
+ "chiropractic.museum",
+ "chocolate.museum",
+ "christiansburg.museum",
+ "cincinnati.museum",
+ "cinema.museum",
+ "circus.museum",
+ "civilisation.museum",
+ "civilization.museum",
+ "civilwar.museum",
+ "clinton.museum",
+ "clock.museum",
+ "coal.museum",
+ "coastaldefence.museum",
+ "cody.museum",
+ "coldwar.museum",
+ "collection.museum",
+ "colonialwilliamsburg.museum",
+ "coloradoplateau.museum",
+ "columbia.museum",
+ "columbus.museum",
+ "communication.museum",
+ "communications.museum",
+ "community.museum",
+ "computer.museum",
+ "computerhistory.museum",
+ "comunicações.museum",
+ "contemporary.museum",
+ "contemporaryart.museum",
+ "convent.museum",
+ "copenhagen.museum",
+ "corporation.museum",
+ "correios-e-telecomunicações.museum",
+ "corvette.museum",
+ "costume.museum",
+ "countryestate.museum",
+ "county.museum",
+ "crafts.museum",
+ "cranbrook.museum",
+ "creation.museum",
+ "cultural.museum",
+ "culturalcenter.museum",
+ "culture.museum",
+ "cyber.museum",
+ "cymru.museum",
+ "dali.museum",
+ "dallas.museum",
+ "database.museum",
+ "ddr.museum",
+ "decorativearts.museum",
+ "delaware.museum",
+ "delmenhorst.museum",
+ "denmark.museum",
+ "depot.museum",
+ "design.museum",
+ "detroit.museum",
+ "dinosaur.museum",
+ "discovery.museum",
+ "dolls.museum",
+ "donostia.museum",
+ "durham.museum",
+ "eastafrica.museum",
+ "eastcoast.museum",
+ "education.museum",
+ "educational.museum",
+ "egyptian.museum",
+ "eisenbahn.museum",
+ "elburg.museum",
+ "elvendrell.museum",
+ "embroidery.museum",
+ "encyclopedic.museum",
+ "england.museum",
+ "entomology.museum",
+ "environment.museum",
+ "environmentalconservation.museum",
+ "epilepsy.museum",
+ "essex.museum",
+ "estate.museum",
+ "ethnology.museum",
+ "exeter.museum",
+ "exhibition.museum",
+ "family.museum",
+ "farm.museum",
+ "farmequipment.museum",
+ "farmers.museum",
+ "farmstead.museum",
+ "field.museum",
+ "figueres.museum",
+ "filatelia.museum",
+ "film.museum",
+ "fineart.museum",
+ "finearts.museum",
+ "finland.museum",
+ "flanders.museum",
+ "florida.museum",
+ "force.museum",
+ "fortmissoula.museum",
+ "fortworth.museum",
+ "foundation.museum",
+ "francaise.museum",
+ "frankfurt.museum",
+ "franziskaner.museum",
+ "freemasonry.museum",
+ "freiburg.museum",
+ "fribourg.museum",
+ "frog.museum",
+ "fundacio.museum",
+ "furniture.museum",
+ "gallery.museum",
+ "garden.museum",
+ "gateway.museum",
+ "geelvinck.museum",
+ "gemological.museum",
+ "geology.museum",
+ "georgia.museum",
+ "giessen.museum",
+ "glas.museum",
+ "glass.museum",
+ "gorge.museum",
+ "grandrapids.museum",
+ "graz.museum",
+ "guernsey.museum",
+ "halloffame.museum",
+ "hamburg.museum",
+ "handson.museum",
+ "harvestcelebration.museum",
+ "hawaii.museum",
+ "health.museum",
+ "heimatunduhren.museum",
+ "hellas.museum",
+ "helsinki.museum",
+ "hembygdsforbund.museum",
+ "heritage.museum",
+ "histoire.museum",
+ "historical.museum",
+ "historicalsociety.museum",
+ "historichouses.museum",
+ "historisch.museum",
+ "historisches.museum",
+ "history.museum",
+ "historyofscience.museum",
+ "horology.museum",
+ "house.museum",
+ "humanities.museum",
+ "illustration.museum",
+ "imageandsound.museum",
+ "indian.museum",
+ "indiana.museum",
+ "indianapolis.museum",
+ "indianmarket.museum",
+ "intelligence.museum",
+ "interactive.museum",
+ "iraq.museum",
+ "iron.museum",
+ "isleofman.museum",
+ "jamison.museum",
+ "jefferson.museum",
+ "jerusalem.museum",
+ "jewelry.museum",
+ "jewish.museum",
+ "jewishart.museum",
+ "jfk.museum",
+ "journalism.museum",
+ "judaica.museum",
+ "judygarland.museum",
+ "juedisches.museum",
+ "juif.museum",
+ "karate.museum",
+ "karikatur.museum",
+ "kids.museum",
+ "koebenhavn.museum",
+ "koeln.museum",
+ "kunst.museum",
+ "kunstsammlung.museum",
+ "kunstunddesign.museum",
+ "labor.museum",
+ "labour.museum",
+ "lajolla.museum",
+ "lancashire.museum",
+ "landes.museum",
+ "lans.museum",
+ "läns.museum",
+ "larsson.museum",
+ "lewismiller.museum",
+ "lincoln.museum",
+ "linz.museum",
+ "living.museum",
+ "livinghistory.museum",
+ "localhistory.museum",
+ "london.museum",
+ "losangeles.museum",
+ "louvre.museum",
+ "loyalist.museum",
+ "lucerne.museum",
+ "luxembourg.museum",
+ "luzern.museum",
+ "mad.museum",
+ "madrid.museum",
+ "mallorca.museum",
+ "manchester.museum",
+ "mansion.museum",
+ "mansions.museum",
+ "manx.museum",
+ "marburg.museum",
+ "maritime.museum",
+ "maritimo.museum",
+ "maryland.museum",
+ "marylhurst.museum",
+ "media.museum",
+ "medical.museum",
+ "medizinhistorisches.museum",
+ "meeres.museum",
+ "memorial.museum",
+ "mesaverde.museum",
+ "michigan.museum",
+ "midatlantic.museum",
+ "military.museum",
+ "mill.museum",
+ "miners.museum",
+ "mining.museum",
+ "minnesota.museum",
+ "missile.museum",
+ "missoula.museum",
+ "modern.museum",
+ "moma.museum",
+ "money.museum",
+ "monmouth.museum",
+ "monticello.museum",
+ "montreal.museum",
+ "moscow.museum",
+ "motorcycle.museum",
+ "muenchen.museum",
+ "muenster.museum",
+ "mulhouse.museum",
+ "muncie.museum",
+ "museet.museum",
+ "museumcenter.museum",
+ "museumvereniging.museum",
+ "music.museum",
+ "national.museum",
+ "nationalfirearms.museum",
+ "nationalheritage.museum",
+ "nativeamerican.museum",
+ "naturalhistory.museum",
+ "naturalhistorymuseum.museum",
+ "naturalsciences.museum",
+ "nature.museum",
+ "naturhistorisches.museum",
+ "natuurwetenschappen.museum",
+ "naumburg.museum",
+ "naval.museum",
+ "nebraska.museum",
+ "neues.museum",
+ "newhampshire.museum",
+ "newjersey.museum",
+ "newmexico.museum",
+ "newport.museum",
+ "newspaper.museum",
+ "newyork.museum",
+ "niepce.museum",
+ "norfolk.museum",
+ "north.museum",
+ "nrw.museum",
+ "nyc.museum",
+ "nyny.museum",
+ "oceanographic.museum",
+ "oceanographique.museum",
+ "omaha.museum",
+ "online.museum",
+ "ontario.museum",
+ "openair.museum",
+ "oregon.museum",
+ "oregontrail.museum",
+ "otago.museum",
+ "oxford.museum",
+ "pacific.museum",
+ "paderborn.museum",
+ "palace.museum",
+ "paleo.museum",
+ "palmsprings.museum",
+ "panama.museum",
+ "paris.museum",
+ "pasadena.museum",
+ "pharmacy.museum",
+ "philadelphia.museum",
+ "philadelphiaarea.museum",
+ "philately.museum",
+ "phoenix.museum",
+ "photography.museum",
+ "pilots.museum",
+ "pittsburgh.museum",
+ "planetarium.museum",
+ "plantation.museum",
+ "plants.museum",
+ "plaza.museum",
+ "portal.museum",
+ "portland.museum",
+ "portlligat.museum",
+ "posts-and-telecommunications.museum",
+ "preservation.museum",
+ "presidio.museum",
+ "press.museum",
+ "project.museum",
+ "public.museum",
+ "pubol.museum",
+ "quebec.museum",
+ "railroad.museum",
+ "railway.museum",
+ "research.museum",
+ "resistance.museum",
+ "riodejaneiro.museum",
+ "rochester.museum",
+ "rockart.museum",
+ "roma.museum",
+ "russia.museum",
+ "saintlouis.museum",
+ "salem.museum",
+ "salvadordali.museum",
+ "salzburg.museum",
+ "sandiego.museum",
+ "sanfrancisco.museum",
+ "santabarbara.museum",
+ "santacruz.museum",
+ "santafe.museum",
+ "saskatchewan.museum",
+ "satx.museum",
+ "savannahga.museum",
+ "schlesisches.museum",
+ "schoenbrunn.museum",
+ "schokoladen.museum",
+ "school.museum",
+ "schweiz.museum",
+ "science.museum",
+ "scienceandhistory.museum",
+ "scienceandindustry.museum",
+ "sciencecenter.museum",
+ "sciencecenters.museum",
+ "science-fiction.museum",
+ "sciencehistory.museum",
+ "sciences.museum",
+ "sciencesnaturelles.museum",
+ "scotland.museum",
+ "seaport.museum",
+ "settlement.museum",
+ "settlers.museum",
+ "shell.museum",
+ "sherbrooke.museum",
+ "sibenik.museum",
+ "silk.museum",
+ "ski.museum",
+ "skole.museum",
+ "society.museum",
+ "sologne.museum",
+ "soundandvision.museum",
+ "southcarolina.museum",
+ "southwest.museum",
+ "space.museum",
+ "spy.museum",
+ "square.museum",
+ "stadt.museum",
+ "stalbans.museum",
+ "starnberg.museum",
+ "state.museum",
+ "stateofdelaware.museum",
+ "station.museum",
+ "steam.museum",
+ "steiermark.museum",
+ "stjohn.museum",
+ "stockholm.museum",
+ "stpetersburg.museum",
+ "stuttgart.museum",
+ "suisse.museum",
+ "surgeonshall.museum",
+ "surrey.museum",
+ "svizzera.museum",
+ "sweden.museum",
+ "sydney.museum",
+ "tank.museum",
+ "tcm.museum",
+ "technology.museum",
+ "telekommunikation.museum",
+ "television.museum",
+ "texas.museum",
+ "textile.museum",
+ "theater.museum",
+ "time.museum",
+ "timekeeping.museum",
+ "topology.museum",
+ "torino.museum",
+ "touch.museum",
+ "town.museum",
+ "transport.museum",
+ "tree.museum",
+ "trolley.museum",
+ "trust.museum",
+ "trustee.museum",
+ "uhren.museum",
+ "ulm.museum",
+ "undersea.museum",
+ "university.museum",
+ "usa.museum",
+ "usantiques.museum",
+ "usarts.museum",
+ "uscountryestate.museum",
+ "usculture.museum",
+ "usdecorativearts.museum",
+ "usgarden.museum",
+ "ushistory.museum",
+ "ushuaia.museum",
+ "uslivinghistory.museum",
+ "utah.museum",
+ "uvic.museum",
+ "valley.museum",
+ "vantaa.museum",
+ "versailles.museum",
+ "viking.museum",
+ "village.museum",
+ "virginia.museum",
+ "virtual.museum",
+ "virtuel.museum",
+ "vlaanderen.museum",
+ "volkenkunde.museum",
+ "wales.museum",
+ "wallonie.museum",
+ "war.museum",
+ "washingtondc.museum",
+ "watchandclock.museum",
+ "watch-and-clock.museum",
+ "western.museum",
+ "westfalen.museum",
+ "whaling.museum",
+ "wildlife.museum",
+ "williamsburg.museum",
+ "windmill.museum",
+ "workshop.museum",
+ "york.museum",
+ "yorkshire.museum",
+ "yosemite.museum",
+ "youth.museum",
+ "zoological.museum",
+ "zoology.museum",
+ "ירושלים.museum",
+ "иком.museum",
+ "mv",
+ "aero.mv",
+ "biz.mv",
+ "com.mv",
+ "coop.mv",
+ "edu.mv",
+ "gov.mv",
+ "info.mv",
+ "int.mv",
+ "mil.mv",
+ "museum.mv",
+ "name.mv",
+ "net.mv",
+ "org.mv",
+ "pro.mv",
+ "mw",
+ "ac.mw",
+ "biz.mw",
+ "co.mw",
+ "com.mw",
+ "coop.mw",
+ "edu.mw",
+ "gov.mw",
+ "int.mw",
+ "museum.mw",
+ "net.mw",
+ "org.mw",
+ "mx",
+ "com.mx",
+ "org.mx",
+ "gob.mx",
+ "edu.mx",
+ "net.mx",
+ "my",
+ "biz.my",
+ "com.my",
+ "edu.my",
+ "gov.my",
+ "mil.my",
+ "name.my",
+ "net.my",
+ "org.my",
+ "mz",
+ "ac.mz",
+ "adv.mz",
+ "co.mz",
+ "edu.mz",
+ "gov.mz",
+ "mil.mz",
+ "net.mz",
+ "org.mz",
+ "na",
+ "info.na",
+ "pro.na",
+ "name.na",
+ "school.na",
+ "or.na",
+ "dr.na",
+ "us.na",
+ "mx.na",
+ "ca.na",
+ "in.na",
+ "cc.na",
+ "tv.na",
+ "ws.na",
+ "mobi.na",
+ "co.na",
+ "com.na",
+ "org.na",
+ "name",
+ "nc",
+ "asso.nc",
+ "nom.nc",
+ "ne",
+ "net",
+ "nf",
+ "com.nf",
+ "net.nf",
+ "per.nf",
+ "rec.nf",
+ "web.nf",
+ "arts.nf",
+ "firm.nf",
+ "info.nf",
+ "other.nf",
+ "store.nf",
+ "ng",
+ "com.ng",
+ "edu.ng",
+ "gov.ng",
+ "i.ng",
+ "mil.ng",
+ "mobi.ng",
+ "name.ng",
+ "net.ng",
+ "org.ng",
+ "sch.ng",
+ "ni",
+ "ac.ni",
+ "biz.ni",
+ "co.ni",
+ "com.ni",
+ "edu.ni",
+ "gob.ni",
+ "in.ni",
+ "info.ni",
+ "int.ni",
+ "mil.ni",
+ "net.ni",
+ "nom.ni",
+ "org.ni",
+ "web.ni",
+ "nl",
+ "no",
+ "fhs.no",
+ "vgs.no",
+ "fylkesbibl.no",
+ "folkebibl.no",
+ "museum.no",
+ "idrett.no",
+ "priv.no",
+ "mil.no",
+ "stat.no",
+ "dep.no",
+ "kommune.no",
+ "herad.no",
+ "aa.no",
+ "ah.no",
+ "bu.no",
+ "fm.no",
+ "hl.no",
+ "hm.no",
+ "jan-mayen.no",
+ "mr.no",
+ "nl.no",
+ "nt.no",
+ "of.no",
+ "ol.no",
+ "oslo.no",
+ "rl.no",
+ "sf.no",
+ "st.no",
+ "svalbard.no",
+ "tm.no",
+ "tr.no",
+ "va.no",
+ "vf.no",
+ "gs.aa.no",
+ "gs.ah.no",
+ "gs.bu.no",
+ "gs.fm.no",
+ "gs.hl.no",
+ "gs.hm.no",
+ "gs.jan-mayen.no",
+ "gs.mr.no",
+ "gs.nl.no",
+ "gs.nt.no",
+ "gs.of.no",
+ "gs.ol.no",
+ "gs.oslo.no",
+ "gs.rl.no",
+ "gs.sf.no",
+ "gs.st.no",
+ "gs.svalbard.no",
+ "gs.tm.no",
+ "gs.tr.no",
+ "gs.va.no",
+ "gs.vf.no",
+ "akrehamn.no",
+ "åkrehamn.no",
+ "algard.no",
+ "ålgård.no",
+ "arna.no",
+ "brumunddal.no",
+ "bryne.no",
+ "bronnoysund.no",
+ "brønnøysund.no",
+ "drobak.no",
+ "drøbak.no",
+ "egersund.no",
+ "fetsund.no",
+ "floro.no",
+ "florø.no",
+ "fredrikstad.no",
+ "hokksund.no",
+ "honefoss.no",
+ "hønefoss.no",
+ "jessheim.no",
+ "jorpeland.no",
+ "jørpeland.no",
+ "kirkenes.no",
+ "kopervik.no",
+ "krokstadelva.no",
+ "langevag.no",
+ "langevåg.no",
+ "leirvik.no",
+ "mjondalen.no",
+ "mjøndalen.no",
+ "mo-i-rana.no",
+ "mosjoen.no",
+ "mosjøen.no",
+ "nesoddtangen.no",
+ "orkanger.no",
+ "osoyro.no",
+ "osøyro.no",
+ "raholt.no",
+ "råholt.no",
+ "sandnessjoen.no",
+ "sandnessjøen.no",
+ "skedsmokorset.no",
+ "slattum.no",
+ "spjelkavik.no",
+ "stathelle.no",
+ "stavern.no",
+ "stjordalshalsen.no",
+ "stjørdalshalsen.no",
+ "tananger.no",
+ "tranby.no",
+ "vossevangen.no",
+ "afjord.no",
+ "åfjord.no",
+ "agdenes.no",
+ "al.no",
+ "ål.no",
+ "alesund.no",
+ "ålesund.no",
+ "alstahaug.no",
+ "alta.no",
+ "áltá.no",
+ "alaheadju.no",
+ "álaheadju.no",
+ "alvdal.no",
+ "amli.no",
+ "åmli.no",
+ "amot.no",
+ "åmot.no",
+ "andebu.no",
+ "andoy.no",
+ "andøy.no",
+ "andasuolo.no",
+ "ardal.no",
+ "årdal.no",
+ "aremark.no",
+ "arendal.no",
+ "ås.no",
+ "aseral.no",
+ "åseral.no",
+ "asker.no",
+ "askim.no",
+ "askvoll.no",
+ "askoy.no",
+ "askøy.no",
+ "asnes.no",
+ "åsnes.no",
+ "audnedaln.no",
+ "aukra.no",
+ "aure.no",
+ "aurland.no",
+ "aurskog-holand.no",
+ "aurskog-høland.no",
+ "austevoll.no",
+ "austrheim.no",
+ "averoy.no",
+ "averøy.no",
+ "balestrand.no",
+ "ballangen.no",
+ "balat.no",
+ "bálát.no",
+ "balsfjord.no",
+ "bahccavuotna.no",
+ "báhccavuotna.no",
+ "bamble.no",
+ "bardu.no",
+ "beardu.no",
+ "beiarn.no",
+ "bajddar.no",
+ "bájddar.no",
+ "baidar.no",
+ "báidár.no",
+ "berg.no",
+ "bergen.no",
+ "berlevag.no",
+ "berlevåg.no",
+ "bearalvahki.no",
+ "bearalváhki.no",
+ "bindal.no",
+ "birkenes.no",
+ "bjarkoy.no",
+ "bjarkøy.no",
+ "bjerkreim.no",
+ "bjugn.no",
+ "bodo.no",
+ "bodø.no",
+ "badaddja.no",
+ "bådåddjå.no",
+ "budejju.no",
+ "bokn.no",
+ "bremanger.no",
+ "bronnoy.no",
+ "brønnøy.no",
+ "bygland.no",
+ "bykle.no",
+ "barum.no",
+ "bærum.no",
+ "bo.telemark.no",
+ "bø.telemark.no",
+ "bo.nordland.no",
+ "bø.nordland.no",
+ "bievat.no",
+ "bievát.no",
+ "bomlo.no",
+ "bømlo.no",
+ "batsfjord.no",
+ "båtsfjord.no",
+ "bahcavuotna.no",
+ "báhcavuotna.no",
+ "dovre.no",
+ "drammen.no",
+ "drangedal.no",
+ "dyroy.no",
+ "dyrøy.no",
+ "donna.no",
+ "dønna.no",
+ "eid.no",
+ "eidfjord.no",
+ "eidsberg.no",
+ "eidskog.no",
+ "eidsvoll.no",
+ "eigersund.no",
+ "elverum.no",
+ "enebakk.no",
+ "engerdal.no",
+ "etne.no",
+ "etnedal.no",
+ "evenes.no",
+ "evenassi.no",
+ "evenášši.no",
+ "evje-og-hornnes.no",
+ "farsund.no",
+ "fauske.no",
+ "fuossko.no",
+ "fuoisku.no",
+ "fedje.no",
+ "fet.no",
+ "finnoy.no",
+ "finnøy.no",
+ "fitjar.no",
+ "fjaler.no",
+ "fjell.no",
+ "flakstad.no",
+ "flatanger.no",
+ "flekkefjord.no",
+ "flesberg.no",
+ "flora.no",
+ "fla.no",
+ "flå.no",
+ "folldal.no",
+ "forsand.no",
+ "fosnes.no",
+ "frei.no",
+ "frogn.no",
+ "froland.no",
+ "frosta.no",
+ "frana.no",
+ "fræna.no",
+ "froya.no",
+ "frøya.no",
+ "fusa.no",
+ "fyresdal.no",
+ "forde.no",
+ "førde.no",
+ "gamvik.no",
+ "gangaviika.no",
+ "gáŋgaviika.no",
+ "gaular.no",
+ "gausdal.no",
+ "gildeskal.no",
+ "gildeskål.no",
+ "giske.no",
+ "gjemnes.no",
+ "gjerdrum.no",
+ "gjerstad.no",
+ "gjesdal.no",
+ "gjovik.no",
+ "gjøvik.no",
+ "gloppen.no",
+ "gol.no",
+ "gran.no",
+ "grane.no",
+ "granvin.no",
+ "gratangen.no",
+ "grimstad.no",
+ "grong.no",
+ "kraanghke.no",
+ "kråanghke.no",
+ "grue.no",
+ "gulen.no",
+ "hadsel.no",
+ "halden.no",
+ "halsa.no",
+ "hamar.no",
+ "hamaroy.no",
+ "habmer.no",
+ "hábmer.no",
+ "hapmir.no",
+ "hápmir.no",
+ "hammerfest.no",
+ "hammarfeasta.no",
+ "hámmárfeasta.no",
+ "haram.no",
+ "hareid.no",
+ "harstad.no",
+ "hasvik.no",
+ "aknoluokta.no",
+ "ákŋoluokta.no",
+ "hattfjelldal.no",
+ "aarborte.no",
+ "haugesund.no",
+ "hemne.no",
+ "hemnes.no",
+ "hemsedal.no",
+ "heroy.more-og-romsdal.no",
+ "herøy.møre-og-romsdal.no",
+ "heroy.nordland.no",
+ "herøy.nordland.no",
+ "hitra.no",
+ "hjartdal.no",
+ "hjelmeland.no",
+ "hobol.no",
+ "hobøl.no",
+ "hof.no",
+ "hol.no",
+ "hole.no",
+ "holmestrand.no",
+ "holtalen.no",
+ "holtålen.no",
+ "hornindal.no",
+ "horten.no",
+ "hurdal.no",
+ "hurum.no",
+ "hvaler.no",
+ "hyllestad.no",
+ "hagebostad.no",
+ "hægebostad.no",
+ "hoyanger.no",
+ "høyanger.no",
+ "hoylandet.no",
+ "høylandet.no",
+ "ha.no",
+ "hå.no",
+ "ibestad.no",
+ "inderoy.no",
+ "inderøy.no",
+ "iveland.no",
+ "jevnaker.no",
+ "jondal.no",
+ "jolster.no",
+ "jølster.no",
+ "karasjok.no",
+ "karasjohka.no",
+ "kárášjohka.no",
+ "karlsoy.no",
+ "galsa.no",
+ "gálsá.no",
+ "karmoy.no",
+ "karmøy.no",
+ "kautokeino.no",
+ "guovdageaidnu.no",
+ "klepp.no",
+ "klabu.no",
+ "klæbu.no",
+ "kongsberg.no",
+ "kongsvinger.no",
+ "kragero.no",
+ "kragerø.no",
+ "kristiansand.no",
+ "kristiansund.no",
+ "krodsherad.no",
+ "krødsherad.no",
+ "kvalsund.no",
+ "rahkkeravju.no",
+ "ráhkkerávju.no",
+ "kvam.no",
+ "kvinesdal.no",
+ "kvinnherad.no",
+ "kviteseid.no",
+ "kvitsoy.no",
+ "kvitsøy.no",
+ "kvafjord.no",
+ "kvæfjord.no",
+ "giehtavuoatna.no",
+ "kvanangen.no",
+ "kvænangen.no",
+ "navuotna.no",
+ "návuotna.no",
+ "kafjord.no",
+ "kåfjord.no",
+ "gaivuotna.no",
+ "gáivuotna.no",
+ "larvik.no",
+ "lavangen.no",
+ "lavagis.no",
+ "loabat.no",
+ "loabát.no",
+ "lebesby.no",
+ "davvesiida.no",
+ "leikanger.no",
+ "leirfjord.no",
+ "leka.no",
+ "leksvik.no",
+ "lenvik.no",
+ "leangaviika.no",
+ "leaŋgaviika.no",
+ "lesja.no",
+ "levanger.no",
+ "lier.no",
+ "lierne.no",
+ "lillehammer.no",
+ "lillesand.no",
+ "lindesnes.no",
+ "lindas.no",
+ "lindås.no",
+ "lom.no",
+ "loppa.no",
+ "lahppi.no",
+ "láhppi.no",
+ "lund.no",
+ "lunner.no",
+ "luroy.no",
+ "lurøy.no",
+ "luster.no",
+ "lyngdal.no",
+ "lyngen.no",
+ "ivgu.no",
+ "lardal.no",
+ "lerdal.no",
+ "lærdal.no",
+ "lodingen.no",
+ "lødingen.no",
+ "lorenskog.no",
+ "lørenskog.no",
+ "loten.no",
+ "løten.no",
+ "malvik.no",
+ "masoy.no",
+ "måsøy.no",
+ "muosat.no",
+ "muosát.no",
+ "mandal.no",
+ "marker.no",
+ "marnardal.no",
+ "masfjorden.no",
+ "meland.no",
+ "meldal.no",
+ "melhus.no",
+ "meloy.no",
+ "meløy.no",
+ "meraker.no",
+ "meråker.no",
+ "moareke.no",
+ "moåreke.no",
+ "midsund.no",
+ "midtre-gauldal.no",
+ "modalen.no",
+ "modum.no",
+ "molde.no",
+ "moskenes.no",
+ "moss.no",
+ "mosvik.no",
+ "malselv.no",
+ "målselv.no",
+ "malatvuopmi.no",
+ "málatvuopmi.no",
+ "namdalseid.no",
+ "aejrie.no",
+ "namsos.no",
+ "namsskogan.no",
+ "naamesjevuemie.no",
+ "nååmesjevuemie.no",
+ "laakesvuemie.no",
+ "nannestad.no",
+ "narvik.no",
+ "narviika.no",
+ "naustdal.no",
+ "nedre-eiker.no",
+ "nes.akershus.no",
+ "nes.buskerud.no",
+ "nesna.no",
+ "nesodden.no",
+ "nesseby.no",
+ "unjarga.no",
+ "unjárga.no",
+ "nesset.no",
+ "nissedal.no",
+ "nittedal.no",
+ "nord-aurdal.no",
+ "nord-fron.no",
+ "nord-odal.no",
+ "norddal.no",
+ "nordkapp.no",
+ "davvenjarga.no",
+ "davvenjárga.no",
+ "nordre-land.no",
+ "nordreisa.no",
+ "raisa.no",
+ "ráisa.no",
+ "nore-og-uvdal.no",
+ "notodden.no",
+ "naroy.no",
+ "nærøy.no",
+ "notteroy.no",
+ "nøtterøy.no",
+ "odda.no",
+ "oksnes.no",
+ "øksnes.no",
+ "oppdal.no",
+ "oppegard.no",
+ "oppegård.no",
+ "orkdal.no",
+ "orland.no",
+ "ørland.no",
+ "orskog.no",
+ "ørskog.no",
+ "orsta.no",
+ "ørsta.no",
+ "os.hedmark.no",
+ "os.hordaland.no",
+ "osen.no",
+ "osteroy.no",
+ "osterøy.no",
+ "ostre-toten.no",
+ "østre-toten.no",
+ "overhalla.no",
+ "ovre-eiker.no",
+ "øvre-eiker.no",
+ "oyer.no",
+ "øyer.no",
+ "oygarden.no",
+ "øygarden.no",
+ "oystre-slidre.no",
+ "øystre-slidre.no",
+ "porsanger.no",
+ "porsangu.no",
+ "porsáŋgu.no",
+ "porsgrunn.no",
+ "radoy.no",
+ "radøy.no",
+ "rakkestad.no",
+ "rana.no",
+ "ruovat.no",
+ "randaberg.no",
+ "rauma.no",
+ "rendalen.no",
+ "rennebu.no",
+ "rennesoy.no",
+ "rennesøy.no",
+ "rindal.no",
+ "ringebu.no",
+ "ringerike.no",
+ "ringsaker.no",
+ "rissa.no",
+ "risor.no",
+ "risør.no",
+ "roan.no",
+ "rollag.no",
+ "rygge.no",
+ "ralingen.no",
+ "rælingen.no",
+ "rodoy.no",
+ "rødøy.no",
+ "romskog.no",
+ "rømskog.no",
+ "roros.no",
+ "røros.no",
+ "rost.no",
+ "røst.no",
+ "royken.no",
+ "røyken.no",
+ "royrvik.no",
+ "røyrvik.no",
+ "rade.no",
+ "råde.no",
+ "salangen.no",
+ "siellak.no",
+ "saltdal.no",
+ "salat.no",
+ "sálát.no",
+ "sálat.no",
+ "samnanger.no",
+ "sande.more-og-romsdal.no",
+ "sande.møre-og-romsdal.no",
+ "sande.vestfold.no",
+ "sandefjord.no",
+ "sandnes.no",
+ "sandoy.no",
+ "sandøy.no",
+ "sarpsborg.no",
+ "sauda.no",
+ "sauherad.no",
+ "sel.no",
+ "selbu.no",
+ "selje.no",
+ "seljord.no",
+ "sigdal.no",
+ "siljan.no",
+ "sirdal.no",
+ "skaun.no",
+ "skedsmo.no",
+ "ski.no",
+ "skien.no",
+ "skiptvet.no",
+ "skjervoy.no",
+ "skjervøy.no",
+ "skierva.no",
+ "skiervá.no",
+ "skjak.no",
+ "skjåk.no",
+ "skodje.no",
+ "skanland.no",
+ "skånland.no",
+ "skanit.no",
+ "skánit.no",
+ "smola.no",
+ "smøla.no",
+ "snillfjord.no",
+ "snasa.no",
+ "snåsa.no",
+ "snoasa.no",
+ "snaase.no",
+ "snåase.no",
+ "sogndal.no",
+ "sokndal.no",
+ "sola.no",
+ "solund.no",
+ "songdalen.no",
+ "sortland.no",
+ "spydeberg.no",
+ "stange.no",
+ "stavanger.no",
+ "steigen.no",
+ "steinkjer.no",
+ "stjordal.no",
+ "stjørdal.no",
+ "stokke.no",
+ "stor-elvdal.no",
+ "stord.no",
+ "stordal.no",
+ "storfjord.no",
+ "omasvuotna.no",
+ "strand.no",
+ "stranda.no",
+ "stryn.no",
+ "sula.no",
+ "suldal.no",
+ "sund.no",
+ "sunndal.no",
+ "surnadal.no",
+ "sveio.no",
+ "svelvik.no",
+ "sykkylven.no",
+ "sogne.no",
+ "søgne.no",
+ "somna.no",
+ "sømna.no",
+ "sondre-land.no",
+ "søndre-land.no",
+ "sor-aurdal.no",
+ "sør-aurdal.no",
+ "sor-fron.no",
+ "sør-fron.no",
+ "sor-odal.no",
+ "sør-odal.no",
+ "sor-varanger.no",
+ "sør-varanger.no",
+ "matta-varjjat.no",
+ "mátta-várjjat.no",
+ "sorfold.no",
+ "sørfold.no",
+ "sorreisa.no",
+ "sørreisa.no",
+ "sorum.no",
+ "sørum.no",
+ "tana.no",
+ "deatnu.no",
+ "time.no",
+ "tingvoll.no",
+ "tinn.no",
+ "tjeldsund.no",
+ "dielddanuorri.no",
+ "tjome.no",
+ "tjøme.no",
+ "tokke.no",
+ "tolga.no",
+ "torsken.no",
+ "tranoy.no",
+ "tranøy.no",
+ "tromso.no",
+ "tromsø.no",
+ "tromsa.no",
+ "romsa.no",
+ "trondheim.no",
+ "troandin.no",
+ "trysil.no",
+ "trana.no",
+ "træna.no",
+ "trogstad.no",
+ "trøgstad.no",
+ "tvedestrand.no",
+ "tydal.no",
+ "tynset.no",
+ "tysfjord.no",
+ "divtasvuodna.no",
+ "divttasvuotna.no",
+ "tysnes.no",
+ "tysvar.no",
+ "tysvær.no",
+ "tonsberg.no",
+ "tønsberg.no",
+ "ullensaker.no",
+ "ullensvang.no",
+ "ulvik.no",
+ "utsira.no",
+ "vadso.no",
+ "vadsø.no",
+ "cahcesuolo.no",
+ "čáhcesuolo.no",
+ "vaksdal.no",
+ "valle.no",
+ "vang.no",
+ "vanylven.no",
+ "vardo.no",
+ "vardø.no",
+ "varggat.no",
+ "várggát.no",
+ "vefsn.no",
+ "vaapste.no",
+ "vega.no",
+ "vegarshei.no",
+ "vegårshei.no",
+ "vennesla.no",
+ "verdal.no",
+ "verran.no",
+ "vestby.no",
+ "vestnes.no",
+ "vestre-slidre.no",
+ "vestre-toten.no",
+ "vestvagoy.no",
+ "vestvågøy.no",
+ "vevelstad.no",
+ "vik.no",
+ "vikna.no",
+ "vindafjord.no",
+ "volda.no",
+ "voss.no",
+ "varoy.no",
+ "værøy.no",
+ "vagan.no",
+ "vågan.no",
+ "voagat.no",
+ "vagsoy.no",
+ "vågsøy.no",
+ "vaga.no",
+ "vågå.no",
+ "valer.ostfold.no",
+ "våler.østfold.no",
+ "valer.hedmark.no",
+ "våler.hedmark.no",
+ "*.np",
+ "nr",
+ "biz.nr",
+ "info.nr",
+ "gov.nr",
+ "edu.nr",
+ "org.nr",
+ "net.nr",
+ "com.nr",
+ "nu",
+ "nz",
+ "ac.nz",
+ "co.nz",
+ "cri.nz",
+ "geek.nz",
+ "gen.nz",
+ "govt.nz",
+ "health.nz",
+ "iwi.nz",
+ "kiwi.nz",
+ "maori.nz",
+ "mil.nz",
+ "māori.nz",
+ "net.nz",
+ "org.nz",
+ "parliament.nz",
+ "school.nz",
+ "om",
+ "co.om",
+ "com.om",
+ "edu.om",
+ "gov.om",
+ "med.om",
+ "museum.om",
+ "net.om",
+ "org.om",
+ "pro.om",
+ "onion",
+ "org",
+ "pa",
+ "ac.pa",
+ "gob.pa",
+ "com.pa",
+ "org.pa",
+ "sld.pa",
+ "edu.pa",
+ "net.pa",
+ "ing.pa",
+ "abo.pa",
+ "med.pa",
+ "nom.pa",
+ "pe",
+ "edu.pe",
+ "gob.pe",
+ "nom.pe",
+ "mil.pe",
+ "org.pe",
+ "com.pe",
+ "net.pe",
+ "pf",
+ "com.pf",
+ "org.pf",
+ "edu.pf",
+ "*.pg",
+ "ph",
+ "com.ph",
+ "net.ph",
+ "org.ph",
+ "gov.ph",
+ "edu.ph",
+ "ngo.ph",
+ "mil.ph",
+ "i.ph",
+ "pk",
+ "com.pk",
+ "net.pk",
+ "edu.pk",
+ "org.pk",
+ "fam.pk",
+ "biz.pk",
+ "web.pk",
+ "gov.pk",
+ "gob.pk",
+ "gok.pk",
+ "gon.pk",
+ "gop.pk",
+ "gos.pk",
+ "info.pk",
+ "pl",
+ "com.pl",
+ "net.pl",
+ "org.pl",
+ "aid.pl",
+ "agro.pl",
+ "atm.pl",
+ "auto.pl",
+ "biz.pl",
+ "edu.pl",
+ "gmina.pl",
+ "gsm.pl",
+ "info.pl",
+ "mail.pl",
+ "miasta.pl",
+ "media.pl",
+ "mil.pl",
+ "nieruchomosci.pl",
+ "nom.pl",
+ "pc.pl",
+ "powiat.pl",
+ "priv.pl",
+ "realestate.pl",
+ "rel.pl",
+ "sex.pl",
+ "shop.pl",
+ "sklep.pl",
+ "sos.pl",
+ "szkola.pl",
+ "targi.pl",
+ "tm.pl",
+ "tourism.pl",
+ "travel.pl",
+ "turystyka.pl",
+ "gov.pl",
+ "ap.gov.pl",
+ "ic.gov.pl",
+ "is.gov.pl",
+ "us.gov.pl",
+ "kmpsp.gov.pl",
+ "kppsp.gov.pl",
+ "kwpsp.gov.pl",
+ "psp.gov.pl",
+ "wskr.gov.pl",
+ "kwp.gov.pl",
+ "mw.gov.pl",
+ "ug.gov.pl",
+ "um.gov.pl",
+ "umig.gov.pl",
+ "ugim.gov.pl",
+ "upow.gov.pl",
+ "uw.gov.pl",
+ "starostwo.gov.pl",
+ "pa.gov.pl",
+ "po.gov.pl",
+ "psse.gov.pl",
+ "pup.gov.pl",
+ "rzgw.gov.pl",
+ "sa.gov.pl",
+ "so.gov.pl",
+ "sr.gov.pl",
+ "wsa.gov.pl",
+ "sko.gov.pl",
+ "uzs.gov.pl",
+ "wiih.gov.pl",
+ "winb.gov.pl",
+ "pinb.gov.pl",
+ "wios.gov.pl",
+ "witd.gov.pl",
+ "wzmiuw.gov.pl",
+ "piw.gov.pl",
+ "wiw.gov.pl",
+ "griw.gov.pl",
+ "wif.gov.pl",
+ "oum.gov.pl",
+ "sdn.gov.pl",
+ "zp.gov.pl",
+ "uppo.gov.pl",
+ "mup.gov.pl",
+ "wuoz.gov.pl",
+ "konsulat.gov.pl",
+ "oirm.gov.pl",
+ "augustow.pl",
+ "babia-gora.pl",
+ "bedzin.pl",
+ "beskidy.pl",
+ "bialowieza.pl",
+ "bialystok.pl",
+ "bielawa.pl",
+ "bieszczady.pl",
+ "boleslawiec.pl",
+ "bydgoszcz.pl",
+ "bytom.pl",
+ "cieszyn.pl",
+ "czeladz.pl",
+ "czest.pl",
+ "dlugoleka.pl",
+ "elblag.pl",
+ "elk.pl",
+ "glogow.pl",
+ "gniezno.pl",
+ "gorlice.pl",
+ "grajewo.pl",
+ "ilawa.pl",
+ "jaworzno.pl",
+ "jelenia-gora.pl",
+ "jgora.pl",
+ "kalisz.pl",
+ "kazimierz-dolny.pl",
+ "karpacz.pl",
+ "kartuzy.pl",
+ "kaszuby.pl",
+ "katowice.pl",
+ "kepno.pl",
+ "ketrzyn.pl",
+ "klodzko.pl",
+ "kobierzyce.pl",
+ "kolobrzeg.pl",
+ "konin.pl",
+ "konskowola.pl",
+ "kutno.pl",
+ "lapy.pl",
+ "lebork.pl",
+ "legnica.pl",
+ "lezajsk.pl",
+ "limanowa.pl",
+ "lomza.pl",
+ "lowicz.pl",
+ "lubin.pl",
+ "lukow.pl",
+ "malbork.pl",
+ "malopolska.pl",
+ "mazowsze.pl",
+ "mazury.pl",
+ "mielec.pl",
+ "mielno.pl",
+ "mragowo.pl",
+ "naklo.pl",
+ "nowaruda.pl",
+ "nysa.pl",
+ "olawa.pl",
+ "olecko.pl",
+ "olkusz.pl",
+ "olsztyn.pl",
+ "opoczno.pl",
+ "opole.pl",
+ "ostroda.pl",
+ "ostroleka.pl",
+ "ostrowiec.pl",
+ "ostrowwlkp.pl",
+ "pila.pl",
+ "pisz.pl",
+ "podhale.pl",
+ "podlasie.pl",
+ "polkowice.pl",
+ "pomorze.pl",
+ "pomorskie.pl",
+ "prochowice.pl",
+ "pruszkow.pl",
+ "przeworsk.pl",
+ "pulawy.pl",
+ "radom.pl",
+ "rawa-maz.pl",
+ "rybnik.pl",
+ "rzeszow.pl",
+ "sanok.pl",
+ "sejny.pl",
+ "slask.pl",
+ "slupsk.pl",
+ "sosnowiec.pl",
+ "stalowa-wola.pl",
+ "skoczow.pl",
+ "starachowice.pl",
+ "stargard.pl",
+ "suwalki.pl",
+ "swidnica.pl",
+ "swiebodzin.pl",
+ "swinoujscie.pl",
+ "szczecin.pl",
+ "szczytno.pl",
+ "tarnobrzeg.pl",
+ "tgory.pl",
+ "turek.pl",
+ "tychy.pl",
+ "ustka.pl",
+ "walbrzych.pl",
+ "warmia.pl",
+ "warszawa.pl",
+ "waw.pl",
+ "wegrow.pl",
+ "wielun.pl",
+ "wlocl.pl",
+ "wloclawek.pl",
+ "wodzislaw.pl",
+ "wolomin.pl",
+ "wroclaw.pl",
+ "zachpomor.pl",
+ "zagan.pl",
+ "zarow.pl",
+ "zgora.pl",
+ "zgorzelec.pl",
+ "pm",
+ "pn",
+ "gov.pn",
+ "co.pn",
+ "org.pn",
+ "edu.pn",
+ "net.pn",
+ "post",
+ "pr",
+ "com.pr",
+ "net.pr",
+ "org.pr",
+ "gov.pr",
+ "edu.pr",
+ "isla.pr",
+ "pro.pr",
+ "biz.pr",
+ "info.pr",
+ "name.pr",
+ "est.pr",
+ "prof.pr",
+ "ac.pr",
+ "pro",
+ "aaa.pro",
+ "aca.pro",
+ "acct.pro",
+ "avocat.pro",
+ "bar.pro",
+ "cpa.pro",
+ "eng.pro",
+ "jur.pro",
+ "law.pro",
+ "med.pro",
+ "recht.pro",
+ "ps",
+ "edu.ps",
+ "gov.ps",
+ "sec.ps",
+ "plo.ps",
+ "com.ps",
+ "org.ps",
+ "net.ps",
+ "pt",
+ "net.pt",
+ "gov.pt",
+ "org.pt",
+ "edu.pt",
+ "int.pt",
+ "publ.pt",
+ "com.pt",
+ "nome.pt",
+ "pw",
+ "co.pw",
+ "ne.pw",
+ "or.pw",
+ "ed.pw",
+ "go.pw",
+ "belau.pw",
+ "py",
+ "com.py",
+ "coop.py",
+ "edu.py",
+ "gov.py",
+ "mil.py",
+ "net.py",
+ "org.py",
+ "qa",
+ "com.qa",
+ "edu.qa",
+ "gov.qa",
+ "mil.qa",
+ "name.qa",
+ "net.qa",
+ "org.qa",
+ "sch.qa",
+ "re",
+ "asso.re",
+ "com.re",
+ "nom.re",
+ "ro",
+ "arts.ro",
+ "com.ro",
+ "firm.ro",
+ "info.ro",
+ "nom.ro",
+ "nt.ro",
+ "org.ro",
+ "rec.ro",
+ "store.ro",
+ "tm.ro",
+ "www.ro",
+ "rs",
+ "ac.rs",
+ "co.rs",
+ "edu.rs",
+ "gov.rs",
+ "in.rs",
+ "org.rs",
+ "ru",
+ "rw",
+ "ac.rw",
+ "co.rw",
+ "coop.rw",
+ "gov.rw",
+ "mil.rw",
+ "net.rw",
+ "org.rw",
+ "sa",
+ "com.sa",
+ "net.sa",
+ "org.sa",
+ "gov.sa",
+ "med.sa",
+ "pub.sa",
+ "edu.sa",
+ "sch.sa",
+ "sb",
+ "com.sb",
+ "edu.sb",
+ "gov.sb",
+ "net.sb",
+ "org.sb",
+ "sc",
+ "com.sc",
+ "gov.sc",
+ "net.sc",
+ "org.sc",
+ "edu.sc",
+ "sd",
+ "com.sd",
+ "net.sd",
+ "org.sd",
+ "edu.sd",
+ "med.sd",
+ "tv.sd",
+ "gov.sd",
+ "info.sd",
+ "se",
+ "a.se",
+ "ac.se",
+ "b.se",
+ "bd.se",
+ "brand.se",
+ "c.se",
+ "d.se",
+ "e.se",
+ "f.se",
+ "fh.se",
+ "fhsk.se",
+ "fhv.se",
+ "g.se",
+ "h.se",
+ "i.se",
+ "k.se",
+ "komforb.se",
+ "kommunalforbund.se",
+ "komvux.se",
+ "l.se",
+ "lanbib.se",
+ "m.se",
+ "n.se",
+ "naturbruksgymn.se",
+ "o.se",
+ "org.se",
+ "p.se",
+ "parti.se",
+ "pp.se",
+ "press.se",
+ "r.se",
+ "s.se",
+ "t.se",
+ "tm.se",
+ "u.se",
+ "w.se",
+ "x.se",
+ "y.se",
+ "z.se",
+ "sg",
+ "com.sg",
+ "net.sg",
+ "org.sg",
+ "gov.sg",
+ "edu.sg",
+ "per.sg",
+ "sh",
+ "com.sh",
+ "net.sh",
+ "gov.sh",
+ "org.sh",
+ "mil.sh",
+ "si",
+ "sj",
+ "sk",
+ "sl",
+ "com.sl",
+ "net.sl",
+ "edu.sl",
+ "gov.sl",
+ "org.sl",
+ "sm",
+ "sn",
+ "art.sn",
+ "com.sn",
+ "edu.sn",
+ "gouv.sn",
+ "org.sn",
+ "perso.sn",
+ "univ.sn",
+ "so",
+ "com.so",
+ "edu.so",
+ "gov.so",
+ "me.so",
+ "net.so",
+ "org.so",
+ "sr",
+ "ss",
+ "biz.ss",
+ "com.ss",
+ "edu.ss",
+ "gov.ss",
+ "me.ss",
+ "net.ss",
+ "org.ss",
+ "sch.ss",
+ "st",
+ "co.st",
+ "com.st",
+ "consulado.st",
+ "edu.st",
+ "embaixada.st",
+ "mil.st",
+ "net.st",
+ "org.st",
+ "principe.st",
+ "saotome.st",
+ "store.st",
+ "su",
+ "sv",
+ "com.sv",
+ "edu.sv",
+ "gob.sv",
+ "org.sv",
+ "red.sv",
+ "sx",
+ "gov.sx",
+ "sy",
+ "edu.sy",
+ "gov.sy",
+ "net.sy",
+ "mil.sy",
+ "com.sy",
+ "org.sy",
+ "sz",
+ "co.sz",
+ "ac.sz",
+ "org.sz",
+ "tc",
+ "td",
+ "tel",
+ "tf",
+ "tg",
+ "th",
+ "ac.th",
+ "co.th",
+ "go.th",
+ "in.th",
+ "mi.th",
+ "net.th",
+ "or.th",
+ "tj",
+ "ac.tj",
+ "biz.tj",
+ "co.tj",
+ "com.tj",
+ "edu.tj",
+ "go.tj",
+ "gov.tj",
+ "int.tj",
+ "mil.tj",
+ "name.tj",
+ "net.tj",
+ "nic.tj",
+ "org.tj",
+ "test.tj",
+ "web.tj",
+ "tk",
+ "tl",
+ "gov.tl",
+ "tm",
+ "com.tm",
+ "co.tm",
+ "org.tm",
+ "net.tm",
+ "nom.tm",
+ "gov.tm",
+ "mil.tm",
+ "edu.tm",
+ "tn",
+ "com.tn",
+ "ens.tn",
+ "fin.tn",
+ "gov.tn",
+ "ind.tn",
+ "info.tn",
+ "intl.tn",
+ "mincom.tn",
+ "nat.tn",
+ "net.tn",
+ "org.tn",
+ "perso.tn",
+ "tourism.tn",
+ "to",
+ "com.to",
+ "gov.to",
+ "net.to",
+ "org.to",
+ "edu.to",
+ "mil.to",
+ "tr",
+ "av.tr",
+ "bbs.tr",
+ "bel.tr",
+ "biz.tr",
+ "com.tr",
+ "dr.tr",
+ "edu.tr",
+ "gen.tr",
+ "gov.tr",
+ "info.tr",
+ "mil.tr",
+ "k12.tr",
+ "kep.tr",
+ "name.tr",
+ "net.tr",
+ "org.tr",
+ "pol.tr",
+ "tel.tr",
+ "tsk.tr",
+ "tv.tr",
+ "web.tr",
+ "nc.tr",
+ "gov.nc.tr",
+ "tt",
+ "co.tt",
+ "com.tt",
+ "org.tt",
+ "net.tt",
+ "biz.tt",
+ "info.tt",
+ "pro.tt",
+ "int.tt",
+ "coop.tt",
+ "jobs.tt",
+ "mobi.tt",
+ "travel.tt",
+ "museum.tt",
+ "aero.tt",
+ "name.tt",
+ "gov.tt",
+ "edu.tt",
+ "tv",
+ "tw",
+ "edu.tw",
+ "gov.tw",
+ "mil.tw",
+ "com.tw",
+ "net.tw",
+ "org.tw",
+ "idv.tw",
+ "game.tw",
+ "ebiz.tw",
+ "club.tw",
+ "網路.tw",
+ "組織.tw",
+ "商業.tw",
+ "tz",
+ "ac.tz",
+ "co.tz",
+ "go.tz",
+ "hotel.tz",
+ "info.tz",
+ "me.tz",
+ "mil.tz",
+ "mobi.tz",
+ "ne.tz",
+ "or.tz",
+ "sc.tz",
+ "tv.tz",
+ "ua",
+ "com.ua",
+ "edu.ua",
+ "gov.ua",
+ "in.ua",
+ "net.ua",
+ "org.ua",
+ "cherkassy.ua",
+ "cherkasy.ua",
+ "chernigov.ua",
+ "chernihiv.ua",
+ "chernivtsi.ua",
+ "chernovtsy.ua",
+ "ck.ua",
+ "cn.ua",
+ "cr.ua",
+ "crimea.ua",
+ "cv.ua",
+ "dn.ua",
+ "dnepropetrovsk.ua",
+ "dnipropetrovsk.ua",
+ "donetsk.ua",
+ "dp.ua",
+ "if.ua",
+ "ivano-frankivsk.ua",
+ "kh.ua",
+ "kharkiv.ua",
+ "kharkov.ua",
+ "kherson.ua",
+ "khmelnitskiy.ua",
+ "khmelnytskyi.ua",
+ "kiev.ua",
+ "kirovograd.ua",
+ "km.ua",
+ "kr.ua",
+ "krym.ua",
+ "ks.ua",
+ "kv.ua",
+ "kyiv.ua",
+ "lg.ua",
+ "lt.ua",
+ "lugansk.ua",
+ "lutsk.ua",
+ "lv.ua",
+ "lviv.ua",
+ "mk.ua",
+ "mykolaiv.ua",
+ "nikolaev.ua",
+ "od.ua",
+ "odesa.ua",
+ "odessa.ua",
+ "pl.ua",
+ "poltava.ua",
+ "rivne.ua",
+ "rovno.ua",
+ "rv.ua",
+ "sb.ua",
+ "sebastopol.ua",
+ "sevastopol.ua",
+ "sm.ua",
+ "sumy.ua",
+ "te.ua",
+ "ternopil.ua",
+ "uz.ua",
+ "uzhgorod.ua",
+ "vinnica.ua",
+ "vinnytsia.ua",
+ "vn.ua",
+ "volyn.ua",
+ "yalta.ua",
+ "zaporizhzhe.ua",
+ "zaporizhzhia.ua",
+ "zhitomir.ua",
+ "zhytomyr.ua",
+ "zp.ua",
+ "zt.ua",
+ "ug",
+ "co.ug",
+ "or.ug",
+ "ac.ug",
+ "sc.ug",
+ "go.ug",
+ "ne.ug",
+ "com.ug",
+ "org.ug",
+ "uk",
+ "ac.uk",
+ "co.uk",
+ "gov.uk",
+ "ltd.uk",
+ "me.uk",
+ "net.uk",
+ "nhs.uk",
+ "org.uk",
+ "plc.uk",
+ "police.uk",
+ "*.sch.uk",
+ "us",
+ "dni.us",
+ "fed.us",
+ "isa.us",
+ "kids.us",
+ "nsn.us",
+ "ak.us",
+ "al.us",
+ "ar.us",
+ "as.us",
+ "az.us",
+ "ca.us",
+ "co.us",
+ "ct.us",
+ "dc.us",
+ "de.us",
+ "fl.us",
+ "ga.us",
+ "gu.us",
+ "hi.us",
+ "ia.us",
+ "id.us",
+ "il.us",
+ "in.us",
+ "ks.us",
+ "ky.us",
+ "la.us",
+ "ma.us",
+ "md.us",
+ "me.us",
+ "mi.us",
+ "mn.us",
+ "mo.us",
+ "ms.us",
+ "mt.us",
+ "nc.us",
+ "nd.us",
+ "ne.us",
+ "nh.us",
+ "nj.us",
+ "nm.us",
+ "nv.us",
+ "ny.us",
+ "oh.us",
+ "ok.us",
+ "or.us",
+ "pa.us",
+ "pr.us",
+ "ri.us",
+ "sc.us",
+ "sd.us",
+ "tn.us",
+ "tx.us",
+ "ut.us",
+ "vi.us",
+ "vt.us",
+ "va.us",
+ "wa.us",
+ "wi.us",
+ "wv.us",
+ "wy.us",
+ "k12.ak.us",
+ "k12.al.us",
+ "k12.ar.us",
+ "k12.as.us",
+ "k12.az.us",
+ "k12.ca.us",
+ "k12.co.us",
+ "k12.ct.us",
+ "k12.dc.us",
+ "k12.de.us",
+ "k12.fl.us",
+ "k12.ga.us",
+ "k12.gu.us",
+ "k12.ia.us",
+ "k12.id.us",
+ "k12.il.us",
+ "k12.in.us",
+ "k12.ks.us",
+ "k12.ky.us",
+ "k12.la.us",
+ "k12.ma.us",
+ "k12.md.us",
+ "k12.me.us",
+ "k12.mi.us",
+ "k12.mn.us",
+ "k12.mo.us",
+ "k12.ms.us",
+ "k12.mt.us",
+ "k12.nc.us",
+ "k12.ne.us",
+ "k12.nh.us",
+ "k12.nj.us",
+ "k12.nm.us",
+ "k12.nv.us",
+ "k12.ny.us",
+ "k12.oh.us",
+ "k12.ok.us",
+ "k12.or.us",
+ "k12.pa.us",
+ "k12.pr.us",
+ "k12.sc.us",
+ "k12.tn.us",
+ "k12.tx.us",
+ "k12.ut.us",
+ "k12.vi.us",
+ "k12.vt.us",
+ "k12.va.us",
+ "k12.wa.us",
+ "k12.wi.us",
+ "k12.wy.us",
+ "cc.ak.us",
+ "cc.al.us",
+ "cc.ar.us",
+ "cc.as.us",
+ "cc.az.us",
+ "cc.ca.us",
+ "cc.co.us",
+ "cc.ct.us",
+ "cc.dc.us",
+ "cc.de.us",
+ "cc.fl.us",
+ "cc.ga.us",
+ "cc.gu.us",
+ "cc.hi.us",
+ "cc.ia.us",
+ "cc.id.us",
+ "cc.il.us",
+ "cc.in.us",
+ "cc.ks.us",
+ "cc.ky.us",
+ "cc.la.us",
+ "cc.ma.us",
+ "cc.md.us",
+ "cc.me.us",
+ "cc.mi.us",
+ "cc.mn.us",
+ "cc.mo.us",
+ "cc.ms.us",
+ "cc.mt.us",
+ "cc.nc.us",
+ "cc.nd.us",
+ "cc.ne.us",
+ "cc.nh.us",
+ "cc.nj.us",
+ "cc.nm.us",
+ "cc.nv.us",
+ "cc.ny.us",
+ "cc.oh.us",
+ "cc.ok.us",
+ "cc.or.us",
+ "cc.pa.us",
+ "cc.pr.us",
+ "cc.ri.us",
+ "cc.sc.us",
+ "cc.sd.us",
+ "cc.tn.us",
+ "cc.tx.us",
+ "cc.ut.us",
+ "cc.vi.us",
+ "cc.vt.us",
+ "cc.va.us",
+ "cc.wa.us",
+ "cc.wi.us",
+ "cc.wv.us",
+ "cc.wy.us",
+ "lib.ak.us",
+ "lib.al.us",
+ "lib.ar.us",
+ "lib.as.us",
+ "lib.az.us",
+ "lib.ca.us",
+ "lib.co.us",
+ "lib.ct.us",
+ "lib.dc.us",
+ "lib.fl.us",
+ "lib.ga.us",
+ "lib.gu.us",
+ "lib.hi.us",
+ "lib.ia.us",
+ "lib.id.us",
+ "lib.il.us",
+ "lib.in.us",
+ "lib.ks.us",
+ "lib.ky.us",
+ "lib.la.us",
+ "lib.ma.us",
+ "lib.md.us",
+ "lib.me.us",
+ "lib.mi.us",
+ "lib.mn.us",
+ "lib.mo.us",
+ "lib.ms.us",
+ "lib.mt.us",
+ "lib.nc.us",
+ "lib.nd.us",
+ "lib.ne.us",
+ "lib.nh.us",
+ "lib.nj.us",
+ "lib.nm.us",
+ "lib.nv.us",
+ "lib.ny.us",
+ "lib.oh.us",
+ "lib.ok.us",
+ "lib.or.us",
+ "lib.pa.us",
+ "lib.pr.us",
+ "lib.ri.us",
+ "lib.sc.us",
+ "lib.sd.us",
+ "lib.tn.us",
+ "lib.tx.us",
+ "lib.ut.us",
+ "lib.vi.us",
+ "lib.vt.us",
+ "lib.va.us",
+ "lib.wa.us",
+ "lib.wi.us",
+ "lib.wy.us",
+ "pvt.k12.ma.us",
+ "chtr.k12.ma.us",
+ "paroch.k12.ma.us",
+ "ann-arbor.mi.us",
+ "cog.mi.us",
+ "dst.mi.us",
+ "eaton.mi.us",
+ "gen.mi.us",
+ "mus.mi.us",
+ "tec.mi.us",
+ "washtenaw.mi.us",
+ "uy",
+ "com.uy",
+ "edu.uy",
+ "gub.uy",
+ "mil.uy",
+ "net.uy",
+ "org.uy",
+ "uz",
+ "co.uz",
+ "com.uz",
+ "net.uz",
+ "org.uz",
+ "va",
+ "vc",
+ "com.vc",
+ "net.vc",
+ "org.vc",
+ "gov.vc",
+ "mil.vc",
+ "edu.vc",
+ "ve",
+ "arts.ve",
+ "bib.ve",
+ "co.ve",
+ "com.ve",
+ "e12.ve",
+ "edu.ve",
+ "firm.ve",
+ "gob.ve",
+ "gov.ve",
+ "info.ve",
+ "int.ve",
+ "mil.ve",
+ "net.ve",
+ "nom.ve",
+ "org.ve",
+ "rar.ve",
+ "rec.ve",
+ "store.ve",
+ "tec.ve",
+ "web.ve",
+ "vg",
+ "vi",
+ "co.vi",
+ "com.vi",
+ "k12.vi",
+ "net.vi",
+ "org.vi",
+ "vn",
+ "com.vn",
+ "net.vn",
+ "org.vn",
+ "edu.vn",
+ "gov.vn",
+ "int.vn",
+ "ac.vn",
+ "biz.vn",
+ "info.vn",
+ "name.vn",
+ "pro.vn",
+ "health.vn",
+ "vu",
+ "com.vu",
+ "edu.vu",
+ "net.vu",
+ "org.vu",
+ "wf",
+ "ws",
+ "com.ws",
+ "net.ws",
+ "org.ws",
+ "gov.ws",
+ "edu.ws",
+ "yt",
+ "امارات",
+ "հայ",
+ "বাংলা",
+ "бг",
+ "البحرين",
+ "бел",
+ "中国",
+ "中國",
+ "الجزائر",
+ "مصر",
+ "ею",
+ "ευ",
+ "موريتانيا",
+ "გე",
+ "ελ",
+ "香港",
+ "公司.香港",
+ "教育.香港",
+ "政府.香港",
+ "個人.香港",
+ "網絡.香港",
+ "組織.香港",
+ "ಭಾರತ",
+ "ଭାରତ",
+ "ভাৰত",
+ "भारतम्",
+ "भारोत",
+ "ڀارت",
+ "ഭാരതം",
+ "भारत",
+ "بارت",
+ "بھارت",
+ "భారత్",
+ "ભારત",
+ "ਭਾਰਤ",
+ "ভারত",
+ "இந்தியா",
+ "ایران",
+ "ايران",
+ "عراق",
+ "الاردن",
+ "한국",
+ "қаз",
+ "ລາວ",
+ "ලංකා",
+ "இலங்கை",
+ "المغرب",
+ "мкд",
+ "мон",
+ "澳門",
+ "澳门",
+ "مليسيا",
+ "عمان",
+ "پاکستان",
+ "پاكستان",
+ "فلسطين",
+ "срб",
+ "пр.срб",
+ "орг.срб",
+ "обр.срб",
+ "од.срб",
+ "упр.срб",
+ "ак.срб",
+ "рф",
+ "قطر",
+ "السعودية",
+ "السعودیة",
+ "السعودیۃ",
+ "السعوديه",
+ "سودان",
+ "新加坡",
+ "சிங்கப்பூர்",
+ "سورية",
+ "سوريا",
+ "ไทย",
+ "ศึกษา.ไทย",
+ "ธุรกิจ.ไทย",
+ "รัฐบาล.ไทย",
+ "ทหาร.ไทย",
+ "เน็ต.ไทย",
+ "องค์กร.ไทย",
+ "تونس",
+ "台灣",
+ "台湾",
+ "臺灣",
+ "укр",
+ "اليمن",
+ "xxx",
+ "ye",
+ "com.ye",
+ "edu.ye",
+ "gov.ye",
+ "net.ye",
+ "mil.ye",
+ "org.ye",
+ "ac.za",
+ "agric.za",
+ "alt.za",
+ "co.za",
+ "edu.za",
+ "gov.za",
+ "grondar.za",
+ "law.za",
+ "mil.za",
+ "net.za",
+ "ngo.za",
+ "nic.za",
+ "nis.za",
+ "nom.za",
+ "org.za",
+ "school.za",
+ "tm.za",
+ "web.za",
+ "zm",
+ "ac.zm",
+ "biz.zm",
+ "co.zm",
+ "com.zm",
+ "edu.zm",
+ "gov.zm",
+ "info.zm",
+ "mil.zm",
+ "net.zm",
+ "org.zm",
+ "sch.zm",
+ "zw",
+ "ac.zw",
+ "co.zw",
+ "gov.zw",
+ "mil.zw",
+ "org.zw",
+ "aaa",
+ "aarp",
+ "abarth",
+ "abb",
+ "abbott",
+ "abbvie",
+ "abc",
+ "able",
+ "abogado",
+ "abudhabi",
+ "academy",
+ "accenture",
+ "accountant",
+ "accountants",
+ "aco",
+ "actor",
+ "adac",
+ "ads",
+ "adult",
+ "aeg",
+ "aetna",
+ "afl",
+ "africa",
+ "agakhan",
+ "agency",
+ "aig",
+ "airbus",
+ "airforce",
+ "airtel",
+ "akdn",
+ "alfaromeo",
+ "alibaba",
+ "alipay",
+ "allfinanz",
+ "allstate",
+ "ally",
+ "alsace",
+ "alstom",
+ "amazon",
+ "americanexpress",
+ "americanfamily",
+ "amex",
+ "amfam",
+ "amica",
+ "amsterdam",
+ "analytics",
+ "android",
+ "anquan",
+ "anz",
+ "aol",
+ "apartments",
+ "app",
+ "apple",
+ "aquarelle",
+ "arab",
+ "aramco",
+ "archi",
+ "army",
+ "art",
+ "arte",
+ "asda",
+ "associates",
+ "athleta",
+ "attorney",
+ "auction",
+ "audi",
+ "audible",
+ "audio",
+ "auspost",
+ "author",
+ "auto",
+ "autos",
+ "avianca",
+ "aws",
+ "axa",
+ "azure",
+ "baby",
+ "baidu",
+ "banamex",
+ "bananarepublic",
+ "band",
+ "bank",
+ "bar",
+ "barcelona",
+ "barclaycard",
+ "barclays",
+ "barefoot",
+ "bargains",
+ "baseball",
+ "basketball",
+ "bauhaus",
+ "bayern",
+ "bbc",
+ "bbt",
+ "bbva",
+ "bcg",
+ "bcn",
+ "beats",
+ "beauty",
+ "beer",
+ "bentley",
+ "berlin",
+ "best",
+ "bestbuy",
+ "bet",
+ "bharti",
+ "bible",
+ "bid",
+ "bike",
+ "bing",
+ "bingo",
+ "bio",
+ "black",
+ "blackfriday",
+ "blockbuster",
+ "blog",
+ "bloomberg",
+ "blue",
+ "bms",
+ "bmw",
+ "bnpparibas",
+ "boats",
+ "boehringer",
+ "bofa",
+ "bom",
+ "bond",
+ "boo",
+ "book",
+ "booking",
+ "bosch",
+ "bostik",
+ "boston",
+ "bot",
+ "boutique",
+ "box",
+ "bradesco",
+ "bridgestone",
+ "broadway",
+ "broker",
+ "brother",
+ "brussels",
+ "bugatti",
+ "build",
+ "builders",
+ "business",
+ "buy",
+ "buzz",
+ "bzh",
+ "cab",
+ "cafe",
+ "cal",
+ "call",
+ "calvinklein",
+ "cam",
+ "camera",
+ "camp",
+ "cancerresearch",
+ "canon",
+ "capetown",
+ "capital",
+ "capitalone",
+ "car",
+ "caravan",
+ "cards",
+ "care",
+ "career",
+ "careers",
+ "cars",
+ "casa",
+ "case",
+ "cash",
+ "casino",
+ "catering",
+ "catholic",
+ "cba",
+ "cbn",
+ "cbre",
+ "cbs",
+ "center",
+ "ceo",
+ "cern",
+ "cfa",
+ "cfd",
+ "chanel",
+ "channel",
+ "charity",
+ "chase",
+ "chat",
+ "cheap",
+ "chintai",
+ "christmas",
+ "chrome",
+ "church",
+ "cipriani",
+ "circle",
+ "cisco",
+ "citadel",
+ "citi",
+ "citic",
+ "city",
+ "cityeats",
+ "claims",
+ "cleaning",
+ "click",
+ "clinic",
+ "clinique",
+ "clothing",
+ "cloud",
+ "club",
+ "clubmed",
+ "coach",
+ "codes",
+ "coffee",
+ "college",
+ "cologne",
+ "comcast",
+ "commbank",
+ "community",
+ "company",
+ "compare",
+ "computer",
+ "comsec",
+ "condos",
+ "construction",
+ "consulting",
+ "contact",
+ "contractors",
+ "cooking",
+ "cookingchannel",
+ "cool",
+ "corsica",
+ "country",
+ "coupon",
+ "coupons",
+ "courses",
+ "cpa",
+ "credit",
+ "creditcard",
+ "creditunion",
+ "cricket",
+ "crown",
+ "crs",
+ "cruise",
+ "cruises",
+ "cuisinella",
+ "cymru",
+ "cyou",
+ "dabur",
+ "dad",
+ "dance",
+ "data",
+ "date",
+ "dating",
+ "datsun",
+ "day",
+ "dclk",
+ "dds",
+ "deal",
+ "dealer",
+ "deals",
+ "degree",
+ "delivery",
+ "dell",
+ "deloitte",
+ "delta",
+ "democrat",
+ "dental",
+ "dentist",
+ "desi",
+ "design",
+ "dev",
+ "dhl",
+ "diamonds",
+ "diet",
+ "digital",
+ "direct",
+ "directory",
+ "discount",
+ "discover",
+ "dish",
+ "diy",
+ "dnp",
+ "docs",
+ "doctor",
+ "dog",
+ "domains",
+ "dot",
+ "download",
+ "drive",
+ "dtv",
+ "dubai",
+ "dunlop",
+ "dupont",
+ "durban",
+ "dvag",
+ "dvr",
+ "earth",
+ "eat",
+ "eco",
+ "edeka",
+ "education",
+ "email",
+ "emerck",
+ "energy",
+ "engineer",
+ "engineering",
+ "enterprises",
+ "epson",
+ "equipment",
+ "ericsson",
+ "erni",
+ "esq",
+ "estate",
+ "etisalat",
+ "eurovision",
+ "eus",
+ "events",
+ "exchange",
+ "expert",
+ "exposed",
+ "express",
+ "extraspace",
+ "fage",
+ "fail",
+ "fairwinds",
+ "faith",
+ "family",
+ "fan",
+ "fans",
+ "farm",
+ "farmers",
+ "fashion",
+ "fast",
+ "fedex",
+ "feedback",
+ "ferrari",
+ "ferrero",
+ "fiat",
+ "fidelity",
+ "fido",
+ "film",
+ "final",
+ "finance",
+ "financial",
+ "fire",
+ "firestone",
+ "firmdale",
+ "fish",
+ "fishing",
+ "fit",
+ "fitness",
+ "flickr",
+ "flights",
+ "flir",
+ "florist",
+ "flowers",
+ "fly",
+ "foo",
+ "food",
+ "foodnetwork",
+ "football",
+ "ford",
+ "forex",
+ "forsale",
+ "forum",
+ "foundation",
+ "fox",
+ "free",
+ "fresenius",
+ "frl",
+ "frogans",
+ "frontdoor",
+ "frontier",
+ "ftr",
+ "fujitsu",
+ "fun",
+ "fund",
+ "furniture",
+ "futbol",
+ "fyi",
+ "gal",
+ "gallery",
+ "gallo",
+ "gallup",
+ "game",
+ "games",
+ "gap",
+ "garden",
+ "gay",
+ "gbiz",
+ "gdn",
+ "gea",
+ "gent",
+ "genting",
+ "george",
+ "ggee",
+ "gift",
+ "gifts",
+ "gives",
+ "giving",
+ "glass",
+ "gle",
+ "global",
+ "globo",
+ "gmail",
+ "gmbh",
+ "gmo",
+ "gmx",
+ "godaddy",
+ "gold",
+ "goldpoint",
+ "golf",
+ "goo",
+ "goodyear",
+ "goog",
+ "google",
+ "gop",
+ "got",
+ "grainger",
+ "graphics",
+ "gratis",
+ "green",
+ "gripe",
+ "grocery",
+ "group",
+ "guardian",
+ "gucci",
+ "guge",
+ "guide",
+ "guitars",
+ "guru",
+ "hair",
+ "hamburg",
+ "hangout",
+ "haus",
+ "hbo",
+ "hdfc",
+ "hdfcbank",
+ "health",
+ "healthcare",
+ "help",
+ "helsinki",
+ "here",
+ "hermes",
+ "hgtv",
+ "hiphop",
+ "hisamitsu",
+ "hitachi",
+ "hiv",
+ "hkt",
+ "hockey",
+ "holdings",
+ "holiday",
+ "homedepot",
+ "homegoods",
+ "homes",
+ "homesense",
+ "honda",
+ "horse",
+ "hospital",
+ "host",
+ "hosting",
+ "hot",
+ "hoteles",
+ "hotels",
+ "hotmail",
+ "house",
+ "how",
+ "hsbc",
+ "hughes",
+ "hyatt",
+ "hyundai",
+ "ibm",
+ "icbc",
+ "ice",
+ "icu",
+ "ieee",
+ "ifm",
+ "ikano",
+ "imamat",
+ "imdb",
+ "immo",
+ "immobilien",
+ "inc",
+ "industries",
+ "infiniti",
+ "ing",
+ "ink",
+ "institute",
+ "insurance",
+ "insure",
+ "international",
+ "intuit",
+ "investments",
+ "ipiranga",
+ "irish",
+ "ismaili",
+ "ist",
+ "istanbul",
+ "itau",
+ "itv",
+ "jaguar",
+ "java",
+ "jcb",
+ "jeep",
+ "jetzt",
+ "jewelry",
+ "jio",
+ "jll",
+ "jmp",
+ "jnj",
+ "joburg",
+ "jot",
+ "joy",
+ "jpmorgan",
+ "jprs",
+ "juegos",
+ "juniper",
+ "kaufen",
+ "kddi",
+ "kerryhotels",
+ "kerrylogistics",
+ "kerryproperties",
+ "kfh",
+ "kia",
+ "kids",
+ "kim",
+ "kinder",
+ "kindle",
+ "kitchen",
+ "kiwi",
+ "koeln",
+ "komatsu",
+ "kosher",
+ "kpmg",
+ "kpn",
+ "krd",
+ "kred",
+ "kuokgroup",
+ "kyoto",
+ "lacaixa",
+ "lamborghini",
+ "lamer",
+ "lancaster",
+ "lancia",
+ "land",
+ "landrover",
+ "lanxess",
+ "lasalle",
+ "lat",
+ "latino",
+ "latrobe",
+ "law",
+ "lawyer",
+ "lds",
+ "lease",
+ "leclerc",
+ "lefrak",
+ "legal",
+ "lego",
+ "lexus",
+ "lgbt",
+ "lidl",
+ "life",
+ "lifeinsurance",
+ "lifestyle",
+ "lighting",
+ "like",
+ "lilly",
+ "limited",
+ "limo",
+ "lincoln",
+ "linde",
+ "link",
+ "lipsy",
+ "live",
+ "living",
+ "llc",
+ "llp",
+ "loan",
+ "loans",
+ "locker",
+ "locus",
+ "loft",
+ "lol",
+ "london",
+ "lotte",
+ "lotto",
+ "love",
+ "lpl",
+ "lplfinancial",
+ "ltd",
+ "ltda",
+ "lundbeck",
+ "luxe",
+ "luxury",
+ "macys",
+ "madrid",
+ "maif",
+ "maison",
+ "makeup",
+ "man",
+ "management",
+ "mango",
+ "map",
+ "market",
+ "marketing",
+ "markets",
+ "marriott",
+ "marshalls",
+ "maserati",
+ "mattel",
+ "mba",
+ "mckinsey",
+ "med",
+ "media",
+ "meet",
+ "melbourne",
+ "meme",
+ "memorial",
+ "men",
+ "menu",
+ "merckmsd",
+ "miami",
+ "microsoft",
+ "mini",
+ "mint",
+ "mit",
+ "mitsubishi",
+ "mlb",
+ "mls",
+ "mma",
+ "mobile",
+ "moda",
+ "moe",
+ "moi",
+ "mom",
+ "monash",
+ "money",
+ "monster",
+ "mormon",
+ "mortgage",
+ "moscow",
+ "moto",
+ "motorcycles",
+ "mov",
+ "movie",
+ "msd",
+ "mtn",
+ "mtr",
+ "music",
+ "mutual",
+ "nab",
+ "nagoya",
+ "natura",
+ "navy",
+ "nba",
+ "nec",
+ "netbank",
+ "netflix",
+ "network",
+ "neustar",
+ "new",
+ "news",
+ "next",
+ "nextdirect",
+ "nexus",
+ "nfl",
+ "ngo",
+ "nhk",
+ "nico",
+ "nike",
+ "nikon",
+ "ninja",
+ "nissan",
+ "nissay",
+ "nokia",
+ "northwesternmutual",
+ "norton",
+ "now",
+ "nowruz",
+ "nowtv",
+ "nra",
+ "nrw",
+ "ntt",
+ "nyc",
+ "obi",
+ "observer",
+ "office",
+ "okinawa",
+ "olayan",
+ "olayangroup",
+ "oldnavy",
+ "ollo",
+ "omega",
+ "one",
+ "ong",
+ "onl",
+ "online",
+ "ooo",
+ "open",
+ "oracle",
+ "orange",
+ "organic",
+ "origins",
+ "osaka",
+ "otsuka",
+ "ott",
+ "ovh",
+ "page",
+ "panasonic",
+ "paris",
+ "pars",
+ "partners",
+ "parts",
+ "party",
+ "passagens",
+ "pay",
+ "pccw",
+ "pet",
+ "pfizer",
+ "pharmacy",
+ "phd",
+ "philips",
+ "phone",
+ "photo",
+ "photography",
+ "photos",
+ "physio",
+ "pics",
+ "pictet",
+ "pictures",
+ "pid",
+ "pin",
+ "ping",
+ "pink",
+ "pioneer",
+ "pizza",
+ "place",
+ "play",
+ "playstation",
+ "plumbing",
+ "plus",
+ "pnc",
+ "pohl",
+ "poker",
+ "politie",
+ "porn",
+ "pramerica",
+ "praxi",
+ "press",
+ "prime",
+ "prod",
+ "productions",
+ "prof",
+ "progressive",
+ "promo",
+ "properties",
+ "property",
+ "protection",
+ "pru",
+ "prudential",
+ "pub",
+ "pwc",
+ "qpon",
+ "quebec",
+ "quest",
+ "racing",
+ "radio",
+ "read",
+ "realestate",
+ "realtor",
+ "realty",
+ "recipes",
+ "red",
+ "redstone",
+ "redumbrella",
+ "rehab",
+ "reise",
+ "reisen",
+ "reit",
+ "reliance",
+ "ren",
+ "rent",
+ "rentals",
+ "repair",
+ "report",
+ "republican",
+ "rest",
+ "restaurant",
+ "review",
+ "reviews",
+ "rexroth",
+ "rich",
+ "richardli",
+ "ricoh",
+ "ril",
+ "rio",
+ "rip",
+ "rocher",
+ "rocks",
+ "rodeo",
+ "rogers",
+ "room",
+ "rsvp",
+ "rugby",
+ "ruhr",
+ "run",
+ "rwe",
+ "ryukyu",
+ "saarland",
+ "safe",
+ "safety",
+ "sakura",
+ "sale",
+ "salon",
+ "samsclub",
+ "samsung",
+ "sandvik",
+ "sandvikcoromant",
+ "sanofi",
+ "sap",
+ "sarl",
+ "sas",
+ "save",
+ "saxo",
+ "sbi",
+ "sbs",
+ "sca",
+ "scb",
+ "schaeffler",
+ "schmidt",
+ "scholarships",
+ "school",
+ "schule",
+ "schwarz",
+ "science",
+ "scot",
+ "search",
+ "seat",
+ "secure",
+ "security",
+ "seek",
+ "select",
+ "sener",
+ "services",
+ "ses",
+ "seven",
+ "sew",
+ "sex",
+ "sexy",
+ "sfr",
+ "shangrila",
+ "sharp",
+ "shaw",
+ "shell",
+ "shia",
+ "shiksha",
+ "shoes",
+ "shop",
+ "shopping",
+ "shouji",
+ "show",
+ "showtime",
+ "silk",
+ "sina",
+ "singles",
+ "site",
+ "ski",
+ "skin",
+ "sky",
+ "skype",
+ "sling",
+ "smart",
+ "smile",
+ "sncf",
+ "soccer",
+ "social",
+ "softbank",
+ "software",
+ "sohu",
+ "solar",
+ "solutions",
+ "song",
+ "sony",
+ "soy",
+ "spa",
+ "space",
+ "sport",
+ "spot",
+ "srl",
+ "stada",
+ "staples",
+ "star",
+ "statebank",
+ "statefarm",
+ "stc",
+ "stcgroup",
+ "stockholm",
+ "storage",
+ "store",
+ "stream",
+ "studio",
+ "study",
+ "style",
+ "sucks",
+ "supplies",
+ "supply",
+ "support",
+ "surf",
+ "surgery",
+ "suzuki",
+ "swatch",
+ "swiss",
+ "sydney",
+ "systems",
+ "tab",
+ "taipei",
+ "talk",
+ "taobao",
+ "target",
+ "tatamotors",
+ "tatar",
+ "tattoo",
+ "tax",
+ "taxi",
+ "tci",
+ "tdk",
+ "team",
+ "tech",
+ "technology",
+ "temasek",
+ "tennis",
+ "teva",
+ "thd",
+ "theater",
+ "theatre",
+ "tiaa",
+ "tickets",
+ "tienda",
+ "tiffany",
+ "tips",
+ "tires",
+ "tirol",
+ "tjmaxx",
+ "tjx",
+ "tkmaxx",
+ "tmall",
+ "today",
+ "tokyo",
+ "tools",
+ "top",
+ "toray",
+ "toshiba",
+ "total",
+ "tours",
+ "town",
+ "toyota",
+ "toys",
+ "trade",
+ "trading",
+ "training",
+ "travel",
+ "travelchannel",
+ "travelers",
+ "travelersinsurance",
+ "trust",
+ "trv",
+ "tube",
+ "tui",
+ "tunes",
+ "tushu",
+ "tvs",
+ "ubank",
+ "ubs",
+ "unicom",
+ "university",
+ "uno",
+ "uol",
+ "ups",
+ "vacations",
+ "vana",
+ "vanguard",
+ "vegas",
+ "ventures",
+ "verisign",
+ "versicherung",
+ "vet",
+ "viajes",
+ "video",
+ "vig",
+ "viking",
+ "villas",
+ "vin",
+ "vip",
+ "virgin",
+ "visa",
+ "vision",
+ "viva",
+ "vivo",
+ "vlaanderen",
+ "vodka",
+ "volkswagen",
+ "volvo",
+ "vote",
+ "voting",
+ "voto",
+ "voyage",
+ "vuelos",
+ "wales",
+ "walmart",
+ "walter",
+ "wang",
+ "wanggou",
+ "watch",
+ "watches",
+ "weather",
+ "weatherchannel",
+ "webcam",
+ "weber",
+ "website",
+ "wedding",
+ "weibo",
+ "weir",
+ "whoswho",
+ "wien",
+ "wiki",
+ "williamhill",
+ "win",
+ "windows",
+ "wine",
+ "winners",
+ "wme",
+ "wolterskluwer",
+ "woodside",
+ "work",
+ "works",
+ "world",
+ "wow",
+ "wtc",
+ "wtf",
+ "xbox",
+ "xerox",
+ "xfinity",
+ "xihuan",
+ "xin",
+ "कॉम",
+ "セール",
+ "佛山",
+ "慈善",
+ "集团",
+ "在线",
+ "点看",
+ "คอม",
+ "八卦",
+ "موقع",
+ "公益",
+ "公司",
+ "香格里拉",
+ "网站",
+ "移动",
+ "我爱你",
+ "москва",
+ "католик",
+ "онлайн",
+ "сайт",
+ "联通",
+ "קום",
+ "时尚",
+ "微博",
+ "淡马锡",
+ "ファッション",
+ "орг",
+ "नेट",
+ "ストア",
+ "アマゾン",
+ "삼성",
+ "商标",
+ "商店",
+ "商城",
+ "дети",
+ "ポイント",
+ "新闻",
+ "家電",
+ "كوم",
+ "中文网",
+ "中信",
+ "娱乐",
+ "谷歌",
+ "電訊盈科",
+ "购物",
+ "クラウド",
+ "通販",
+ "网店",
+ "संगठन",
+ "餐厅",
+ "网络",
+ "ком",
+ "亚马逊",
+ "诺基亚",
+ "食品",
+ "飞利浦",
+ "手机",
+ "ارامكو",
+ "العليان",
+ "اتصالات",
+ "بازار",
+ "ابوظبي",
+ "كاثوليك",
+ "همراه",
+ "닷컴",
+ "政府",
+ "شبكة",
+ "بيتك",
+ "عرب",
+ "机构",
+ "组织机构",
+ "健康",
+ "招聘",
+ "рус",
+ "大拿",
+ "みんな",
+ "グーグル",
+ "世界",
+ "書籍",
+ "网址",
+ "닷넷",
+ "コム",
+ "天主教",
+ "游戏",
+ "vermögensberater",
+ "vermögensberatung",
+ "企业",
+ "信息",
+ "嘉里大酒店",
+ "嘉里",
+ "广东",
+ "政务",
+ "xyz",
+ "yachts",
+ "yahoo",
+ "yamaxun",
+ "yandex",
+ "yodobashi",
+ "yoga",
+ "yokohama",
+ "you",
+ "youtube",
+ "yun",
+ "zappos",
+ "zara",
+ "zero",
+ "zip",
+ "zone",
+ "zuerich",
+ "cc.ua",
+ "inf.ua",
+ "ltd.ua",
+ "611.to",
+ "graphox.us",
+ "*.devcdnaccesso.com",
+ "adobeaemcloud.com",
+ "*.dev.adobeaemcloud.com",
+ "hlx.live",
+ "adobeaemcloud.net",
+ "hlx.page",
+ "hlx3.page",
+ "beep.pl",
+ "airkitapps.com",
+ "airkitapps-au.com",
+ "airkitapps.eu",
+ "aivencloud.com",
+ "barsy.ca",
+ "*.compute.estate",
+ "*.alces.network",
+ "kasserver.com",
+ "altervista.org",
+ "alwaysdata.net",
+ "cloudfront.net",
+ "*.compute.amazonaws.com",
+ "*.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com.cn",
+ "us-east-1.amazonaws.com",
+ "cn-north-1.eb.amazonaws.com.cn",
+ "cn-northwest-1.eb.amazonaws.com.cn",
+ "elasticbeanstalk.com",
+ "ap-northeast-1.elasticbeanstalk.com",
+ "ap-northeast-2.elasticbeanstalk.com",
+ "ap-northeast-3.elasticbeanstalk.com",
+ "ap-south-1.elasticbeanstalk.com",
+ "ap-southeast-1.elasticbeanstalk.com",
+ "ap-southeast-2.elasticbeanstalk.com",
+ "ca-central-1.elasticbeanstalk.com",
+ "eu-central-1.elasticbeanstalk.com",
+ "eu-west-1.elasticbeanstalk.com",
+ "eu-west-2.elasticbeanstalk.com",
+ "eu-west-3.elasticbeanstalk.com",
+ "sa-east-1.elasticbeanstalk.com",
+ "us-east-1.elasticbeanstalk.com",
+ "us-east-2.elasticbeanstalk.com",
+ "us-gov-west-1.elasticbeanstalk.com",
+ "us-west-1.elasticbeanstalk.com",
+ "us-west-2.elasticbeanstalk.com",
+ "*.elb.amazonaws.com",
+ "*.elb.amazonaws.com.cn",
+ "awsglobalaccelerator.com",
+ "s3.amazonaws.com",
+ "s3-ap-northeast-1.amazonaws.com",
+ "s3-ap-northeast-2.amazonaws.com",
+ "s3-ap-south-1.amazonaws.com",
+ "s3-ap-southeast-1.amazonaws.com",
+ "s3-ap-southeast-2.amazonaws.com",
+ "s3-ca-central-1.amazonaws.com",
+ "s3-eu-central-1.amazonaws.com",
+ "s3-eu-west-1.amazonaws.com",
+ "s3-eu-west-2.amazonaws.com",
+ "s3-eu-west-3.amazonaws.com",
+ "s3-external-1.amazonaws.com",
+ "s3-fips-us-gov-west-1.amazonaws.com",
+ "s3-sa-east-1.amazonaws.com",
+ "s3-us-gov-west-1.amazonaws.com",
+ "s3-us-east-2.amazonaws.com",
+ "s3-us-west-1.amazonaws.com",
+ "s3-us-west-2.amazonaws.com",
+ "s3.ap-northeast-2.amazonaws.com",
+ "s3.ap-south-1.amazonaws.com",
+ "s3.cn-north-1.amazonaws.com.cn",
+ "s3.ca-central-1.amazonaws.com",
+ "s3.eu-central-1.amazonaws.com",
+ "s3.eu-west-2.amazonaws.com",
+ "s3.eu-west-3.amazonaws.com",
+ "s3.us-east-2.amazonaws.com",
+ "s3.dualstack.ap-northeast-1.amazonaws.com",
+ "s3.dualstack.ap-northeast-2.amazonaws.com",
+ "s3.dualstack.ap-south-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-2.amazonaws.com",
+ "s3.dualstack.ca-central-1.amazonaws.com",
+ "s3.dualstack.eu-central-1.amazonaws.com",
+ "s3.dualstack.eu-west-1.amazonaws.com",
+ "s3.dualstack.eu-west-2.amazonaws.com",
+ "s3.dualstack.eu-west-3.amazonaws.com",
+ "s3.dualstack.sa-east-1.amazonaws.com",
+ "s3.dualstack.us-east-1.amazonaws.com",
+ "s3.dualstack.us-east-2.amazonaws.com",
+ "s3-website-us-east-1.amazonaws.com",
+ "s3-website-us-west-1.amazonaws.com",
+ "s3-website-us-west-2.amazonaws.com",
+ "s3-website-ap-northeast-1.amazonaws.com",
+ "s3-website-ap-southeast-1.amazonaws.com",
+ "s3-website-ap-southeast-2.amazonaws.com",
+ "s3-website-eu-west-1.amazonaws.com",
+ "s3-website-sa-east-1.amazonaws.com",
+ "s3-website.ap-northeast-2.amazonaws.com",
+ "s3-website.ap-south-1.amazonaws.com",
+ "s3-website.ca-central-1.amazonaws.com",
+ "s3-website.eu-central-1.amazonaws.com",
+ "s3-website.eu-west-2.amazonaws.com",
+ "s3-website.eu-west-3.amazonaws.com",
+ "s3-website.us-east-2.amazonaws.com",
+ "t3l3p0rt.net",
+ "tele.amune.org",
+ "apigee.io",
+ "siiites.com",
+ "appspacehosted.com",
+ "appspaceusercontent.com",
+ "appudo.net",
+ "on-aptible.com",
+ "user.aseinet.ne.jp",
+ "gv.vc",
+ "d.gv.vc",
+ "user.party.eus",
+ "pimienta.org",
+ "poivron.org",
+ "potager.org",
+ "sweetpepper.org",
+ "myasustor.com",
+ "cdn.prod.atlassian-dev.net",
+ "translated.page",
+ "myfritz.net",
+ "onavstack.net",
+ "*.awdev.ca",
+ "*.advisor.ws",
+ "ecommerce-shop.pl",
+ "b-data.io",
+ "backplaneapp.io",
+ "balena-devices.com",
+ "rs.ba",
+ "*.banzai.cloud",
+ "app.banzaicloud.io",
+ "*.backyards.banzaicloud.io",
+ "base.ec",
+ "official.ec",
+ "buyshop.jp",
+ "fashionstore.jp",
+ "handcrafted.jp",
+ "kawaiishop.jp",
+ "supersale.jp",
+ "theshop.jp",
+ "shopselect.net",
+ "base.shop",
+ "*.beget.app",
+ "betainabox.com",
+ "bnr.la",
+ "bitbucket.io",
+ "blackbaudcdn.net",
+ "of.je",
+ "bluebite.io",
+ "boomla.net",
+ "boutir.com",
+ "boxfuse.io",
+ "square7.ch",
+ "bplaced.com",
+ "bplaced.de",
+ "square7.de",
+ "bplaced.net",
+ "square7.net",
+ "shop.brendly.rs",
+ "browsersafetymark.io",
+ "uk0.bigv.io",
+ "dh.bytemark.co.uk",
+ "vm.bytemark.co.uk",
+ "cafjs.com",
+ "mycd.eu",
+ "drr.ac",
+ "uwu.ai",
+ "carrd.co",
+ "crd.co",
+ "ju.mp",
+ "ae.org",
+ "br.com",
+ "cn.com",
+ "com.de",
+ "com.se",
+ "de.com",
+ "eu.com",
+ "gb.net",
+ "hu.net",
+ "jp.net",
+ "jpn.com",
+ "mex.com",
+ "ru.com",
+ "sa.com",
+ "se.net",
+ "uk.com",
+ "uk.net",
+ "us.com",
+ "za.bz",
+ "za.com",
+ "ar.com",
+ "hu.com",
+ "kr.com",
+ "no.com",
+ "qc.com",
+ "uy.com",
+ "africa.com",
+ "gr.com",
+ "in.net",
+ "web.in",
+ "us.org",
+ "co.com",
+ "aus.basketball",
+ "nz.basketball",
+ "radio.am",
+ "radio.fm",
+ "c.la",
+ "certmgr.org",
+ "cx.ua",
+ "discourse.group",
+ "discourse.team",
+ "cleverapps.io",
+ "clerk.app",
+ "clerkstage.app",
+ "*.lcl.dev",
+ "*.lclstage.dev",
+ "*.stg.dev",
+ "*.stgstage.dev",
+ "clickrising.net",
+ "c66.me",
+ "cloud66.ws",
+ "cloud66.zone",
+ "jdevcloud.com",
+ "wpdevcloud.com",
+ "cloudaccess.host",
+ "freesite.host",
+ "cloudaccess.net",
+ "cloudcontrolled.com",
+ "cloudcontrolapp.com",
+ "*.cloudera.site",
+ "pages.dev",
+ "trycloudflare.com",
+ "workers.dev",
+ "wnext.app",
+ "co.ca",
+ "*.otap.co",
+ "co.cz",
+ "c.cdn77.org",
+ "cdn77-ssl.net",
+ "r.cdn77.net",
+ "rsc.cdn77.org",
+ "ssl.origin.cdn77-secure.org",
+ "cloudns.asia",
+ "cloudns.biz",
+ "cloudns.club",
+ "cloudns.cc",
+ "cloudns.eu",
+ "cloudns.in",
+ "cloudns.info",
+ "cloudns.org",
+ "cloudns.pro",
+ "cloudns.pw",
+ "cloudns.us",
+ "cnpy.gdn",
+ "codeberg.page",
+ "co.nl",
+ "co.no",
+ "webhosting.be",
+ "hosting-cluster.nl",
+ "ac.ru",
+ "edu.ru",
+ "gov.ru",
+ "int.ru",
+ "mil.ru",
+ "test.ru",
+ "dyn.cosidns.de",
+ "dynamisches-dns.de",
+ "dnsupdater.de",
+ "internet-dns.de",
+ "l-o-g-i-n.de",
+ "dynamic-dns.info",
+ "feste-ip.net",
+ "knx-server.net",
+ "static-access.net",
+ "realm.cz",
+ "*.cryptonomic.net",
+ "cupcake.is",
+ "curv.dev",
+ "*.customer-oci.com",
+ "*.oci.customer-oci.com",
+ "*.ocp.customer-oci.com",
+ "*.ocs.customer-oci.com",
+ "cyon.link",
+ "cyon.site",
+ "fnwk.site",
+ "folionetwork.site",
+ "platform0.app",
+ "daplie.me",
+ "localhost.daplie.me",
+ "dattolocal.com",
+ "dattorelay.com",
+ "dattoweb.com",
+ "mydatto.com",
+ "dattolocal.net",
+ "mydatto.net",
+ "biz.dk",
+ "co.dk",
+ "firm.dk",
+ "reg.dk",
+ "store.dk",
+ "dyndns.dappnode.io",
+ "*.dapps.earth",
+ "*.bzz.dapps.earth",
+ "builtwithdark.com",
+ "demo.datadetect.com",
+ "instance.datadetect.com",
+ "edgestack.me",
+ "ddns5.com",
+ "debian.net",
+ "deno.dev",
+ "deno-staging.dev",
+ "dedyn.io",
+ "deta.app",
+ "deta.dev",
+ "*.rss.my.id",
+ "*.diher.solutions",
+ "discordsays.com",
+ "discordsez.com",
+ "jozi.biz",
+ "dnshome.de",
+ "online.th",
+ "shop.th",
+ "drayddns.com",
+ "shoparena.pl",
+ "dreamhosters.com",
+ "mydrobo.com",
+ "drud.io",
+ "drud.us",
+ "duckdns.org",
+ "bip.sh",
+ "bitbridge.net",
+ "dy.fi",
+ "tunk.org",
+ "dyndns-at-home.com",
+ "dyndns-at-work.com",
+ "dyndns-blog.com",
+ "dyndns-free.com",
+ "dyndns-home.com",
+ "dyndns-ip.com",
+ "dyndns-mail.com",
+ "dyndns-office.com",
+ "dyndns-pics.com",
+ "dyndns-remote.com",
+ "dyndns-server.com",
+ "dyndns-web.com",
+ "dyndns-wiki.com",
+ "dyndns-work.com",
+ "dyndns.biz",
+ "dyndns.info",
+ "dyndns.org",
+ "dyndns.tv",
+ "at-band-camp.net",
+ "ath.cx",
+ "barrel-of-knowledge.info",
+ "barrell-of-knowledge.info",
+ "better-than.tv",
+ "blogdns.com",
+ "blogdns.net",
+ "blogdns.org",
+ "blogsite.org",
+ "boldlygoingnowhere.org",
+ "broke-it.net",
+ "buyshouses.net",
+ "cechire.com",
+ "dnsalias.com",
+ "dnsalias.net",
+ "dnsalias.org",
+ "dnsdojo.com",
+ "dnsdojo.net",
+ "dnsdojo.org",
+ "does-it.net",
+ "doesntexist.com",
+ "doesntexist.org",
+ "dontexist.com",
+ "dontexist.net",
+ "dontexist.org",
+ "doomdns.com",
+ "doomdns.org",
+ "dvrdns.org",
+ "dyn-o-saur.com",
+ "dynalias.com",
+ "dynalias.net",
+ "dynalias.org",
+ "dynathome.net",
+ "dyndns.ws",
+ "endofinternet.net",
+ "endofinternet.org",
+ "endoftheinternet.org",
+ "est-a-la-maison.com",
+ "est-a-la-masion.com",
+ "est-le-patron.com",
+ "est-mon-blogueur.com",
+ "for-better.biz",
+ "for-more.biz",
+ "for-our.info",
+ "for-some.biz",
+ "for-the.biz",
+ "forgot.her.name",
+ "forgot.his.name",
+ "from-ak.com",
+ "from-al.com",
+ "from-ar.com",
+ "from-az.net",
+ "from-ca.com",
+ "from-co.net",
+ "from-ct.com",
+ "from-dc.com",
+ "from-de.com",
+ "from-fl.com",
+ "from-ga.com",
+ "from-hi.com",
+ "from-ia.com",
+ "from-id.com",
+ "from-il.com",
+ "from-in.com",
+ "from-ks.com",
+ "from-ky.com",
+ "from-la.net",
+ "from-ma.com",
+ "from-md.com",
+ "from-me.org",
+ "from-mi.com",
+ "from-mn.com",
+ "from-mo.com",
+ "from-ms.com",
+ "from-mt.com",
+ "from-nc.com",
+ "from-nd.com",
+ "from-ne.com",
+ "from-nh.com",
+ "from-nj.com",
+ "from-nm.com",
+ "from-nv.com",
+ "from-ny.net",
+ "from-oh.com",
+ "from-ok.com",
+ "from-or.com",
+ "from-pa.com",
+ "from-pr.com",
+ "from-ri.com",
+ "from-sc.com",
+ "from-sd.com",
+ "from-tn.com",
+ "from-tx.com",
+ "from-ut.com",
+ "from-va.com",
+ "from-vt.com",
+ "from-wa.com",
+ "from-wi.com",
+ "from-wv.com",
+ "from-wy.com",
+ "ftpaccess.cc",
+ "fuettertdasnetz.de",
+ "game-host.org",
+ "game-server.cc",
+ "getmyip.com",
+ "gets-it.net",
+ "go.dyndns.org",
+ "gotdns.com",
+ "gotdns.org",
+ "groks-the.info",
+ "groks-this.info",
+ "ham-radio-op.net",
+ "here-for-more.info",
+ "hobby-site.com",
+ "hobby-site.org",
+ "home.dyndns.org",
+ "homedns.org",
+ "homeftp.net",
+ "homeftp.org",
+ "homeip.net",
+ "homelinux.com",
+ "homelinux.net",
+ "homelinux.org",
+ "homeunix.com",
+ "homeunix.net",
+ "homeunix.org",
+ "iamallama.com",
+ "in-the-band.net",
+ "is-a-anarchist.com",
+ "is-a-blogger.com",
+ "is-a-bookkeeper.com",
+ "is-a-bruinsfan.org",
+ "is-a-bulls-fan.com",
+ "is-a-candidate.org",
+ "is-a-caterer.com",
+ "is-a-celticsfan.org",
+ "is-a-chef.com",
+ "is-a-chef.net",
+ "is-a-chef.org",
+ "is-a-conservative.com",
+ "is-a-cpa.com",
+ "is-a-cubicle-slave.com",
+ "is-a-democrat.com",
+ "is-a-designer.com",
+ "is-a-doctor.com",
+ "is-a-financialadvisor.com",
+ "is-a-geek.com",
+ "is-a-geek.net",
+ "is-a-geek.org",
+ "is-a-green.com",
+ "is-a-guru.com",
+ "is-a-hard-worker.com",
+ "is-a-hunter.com",
+ "is-a-knight.org",
+ "is-a-landscaper.com",
+ "is-a-lawyer.com",
+ "is-a-liberal.com",
+ "is-a-libertarian.com",
+ "is-a-linux-user.org",
+ "is-a-llama.com",
+ "is-a-musician.com",
+ "is-a-nascarfan.com",
+ "is-a-nurse.com",
+ "is-a-painter.com",
+ "is-a-patsfan.org",
+ "is-a-personaltrainer.com",
+ "is-a-photographer.com",
+ "is-a-player.com",
+ "is-a-republican.com",
+ "is-a-rockstar.com",
+ "is-a-socialist.com",
+ "is-a-soxfan.org",
+ "is-a-student.com",
+ "is-a-teacher.com",
+ "is-a-techie.com",
+ "is-a-therapist.com",
+ "is-an-accountant.com",
+ "is-an-actor.com",
+ "is-an-actress.com",
+ "is-an-anarchist.com",
+ "is-an-artist.com",
+ "is-an-engineer.com",
+ "is-an-entertainer.com",
+ "is-by.us",
+ "is-certified.com",
+ "is-found.org",
+ "is-gone.com",
+ "is-into-anime.com",
+ "is-into-cars.com",
+ "is-into-cartoons.com",
+ "is-into-games.com",
+ "is-leet.com",
+ "is-lost.org",
+ "is-not-certified.com",
+ "is-saved.org",
+ "is-slick.com",
+ "is-uberleet.com",
+ "is-very-bad.org",
+ "is-very-evil.org",
+ "is-very-good.org",
+ "is-very-nice.org",
+ "is-very-sweet.org",
+ "is-with-theband.com",
+ "isa-geek.com",
+ "isa-geek.net",
+ "isa-geek.org",
+ "isa-hockeynut.com",
+ "issmarterthanyou.com",
+ "isteingeek.de",
+ "istmein.de",
+ "kicks-ass.net",
+ "kicks-ass.org",
+ "knowsitall.info",
+ "land-4-sale.us",
+ "lebtimnetz.de",
+ "leitungsen.de",
+ "likes-pie.com",
+ "likescandy.com",
+ "merseine.nu",
+ "mine.nu",
+ "misconfused.org",
+ "mypets.ws",
+ "myphotos.cc",
+ "neat-url.com",
+ "office-on-the.net",
+ "on-the-web.tv",
+ "podzone.net",
+ "podzone.org",
+ "readmyblog.org",
+ "saves-the-whales.com",
+ "scrapper-site.net",
+ "scrapping.cc",
+ "selfip.biz",
+ "selfip.com",
+ "selfip.info",
+ "selfip.net",
+ "selfip.org",
+ "sells-for-less.com",
+ "sells-for-u.com",
+ "sells-it.net",
+ "sellsyourhome.org",
+ "servebbs.com",
+ "servebbs.net",
+ "servebbs.org",
+ "serveftp.net",
+ "serveftp.org",
+ "servegame.org",
+ "shacknet.nu",
+ "simple-url.com",
+ "space-to-rent.com",
+ "stuff-4-sale.org",
+ "stuff-4-sale.us",
+ "teaches-yoga.com",
+ "thruhere.net",
+ "traeumtgerade.de",
+ "webhop.biz",
+ "webhop.info",
+ "webhop.net",
+ "webhop.org",
+ "worse-than.tv",
+ "writesthisblog.com",
+ "ddnss.de",
+ "dyn.ddnss.de",
+ "dyndns.ddnss.de",
+ "dyndns1.de",
+ "dyn-ip24.de",
+ "home-webserver.de",
+ "dyn.home-webserver.de",
+ "myhome-server.de",
+ "ddnss.org",
+ "definima.net",
+ "definima.io",
+ "ondigitalocean.app",
+ "*.digitaloceanspaces.com",
+ "bci.dnstrace.pro",
+ "ddnsfree.com",
+ "ddnsgeek.com",
+ "giize.com",
+ "gleeze.com",
+ "kozow.com",
+ "loseyourip.com",
+ "ooguy.com",
+ "theworkpc.com",
+ "casacam.net",
+ "dynu.net",
+ "accesscam.org",
+ "camdvr.org",
+ "freeddns.org",
+ "mywire.org",
+ "webredirect.org",
+ "myddns.rocks",
+ "blogsite.xyz",
+ "dynv6.net",
+ "e4.cz",
+ "eero.online",
+ "eero-stage.online",
+ "elementor.cloud",
+ "elementor.cool",
+ "en-root.fr",
+ "mytuleap.com",
+ "tuleap-partners.com",
+ "encr.app",
+ "encoreapi.com",
+ "onred.one",
+ "staging.onred.one",
+ "eu.encoway.cloud",
+ "eu.org",
+ "al.eu.org",
+ "asso.eu.org",
+ "at.eu.org",
+ "au.eu.org",
+ "be.eu.org",
+ "bg.eu.org",
+ "ca.eu.org",
+ "cd.eu.org",
+ "ch.eu.org",
+ "cn.eu.org",
+ "cy.eu.org",
+ "cz.eu.org",
+ "de.eu.org",
+ "dk.eu.org",
+ "edu.eu.org",
+ "ee.eu.org",
+ "es.eu.org",
+ "fi.eu.org",
+ "fr.eu.org",
+ "gr.eu.org",
+ "hr.eu.org",
+ "hu.eu.org",
+ "ie.eu.org",
+ "il.eu.org",
+ "in.eu.org",
+ "int.eu.org",
+ "is.eu.org",
+ "it.eu.org",
+ "jp.eu.org",
+ "kr.eu.org",
+ "lt.eu.org",
+ "lu.eu.org",
+ "lv.eu.org",
+ "mc.eu.org",
+ "me.eu.org",
+ "mk.eu.org",
+ "mt.eu.org",
+ "my.eu.org",
+ "net.eu.org",
+ "ng.eu.org",
+ "nl.eu.org",
+ "no.eu.org",
+ "nz.eu.org",
+ "paris.eu.org",
+ "pl.eu.org",
+ "pt.eu.org",
+ "q-a.eu.org",
+ "ro.eu.org",
+ "ru.eu.org",
+ "se.eu.org",
+ "si.eu.org",
+ "sk.eu.org",
+ "tr.eu.org",
+ "uk.eu.org",
+ "us.eu.org",
+ "eurodir.ru",
+ "eu-1.evennode.com",
+ "eu-2.evennode.com",
+ "eu-3.evennode.com",
+ "eu-4.evennode.com",
+ "us-1.evennode.com",
+ "us-2.evennode.com",
+ "us-3.evennode.com",
+ "us-4.evennode.com",
+ "twmail.cc",
+ "twmail.net",
+ "twmail.org",
+ "mymailer.com.tw",
+ "url.tw",
+ "onfabrica.com",
+ "apps.fbsbx.com",
+ "ru.net",
+ "adygeya.ru",
+ "bashkiria.ru",
+ "bir.ru",
+ "cbg.ru",
+ "com.ru",
+ "dagestan.ru",
+ "grozny.ru",
+ "kalmykia.ru",
+ "kustanai.ru",
+ "marine.ru",
+ "mordovia.ru",
+ "msk.ru",
+ "mytis.ru",
+ "nalchik.ru",
+ "nov.ru",
+ "pyatigorsk.ru",
+ "spb.ru",
+ "vladikavkaz.ru",
+ "vladimir.ru",
+ "abkhazia.su",
+ "adygeya.su",
+ "aktyubinsk.su",
+ "arkhangelsk.su",
+ "armenia.su",
+ "ashgabad.su",
+ "azerbaijan.su",
+ "balashov.su",
+ "bashkiria.su",
+ "bryansk.su",
+ "bukhara.su",
+ "chimkent.su",
+ "dagestan.su",
+ "east-kazakhstan.su",
+ "exnet.su",
+ "georgia.su",
+ "grozny.su",
+ "ivanovo.su",
+ "jambyl.su",
+ "kalmykia.su",
+ "kaluga.su",
+ "karacol.su",
+ "karaganda.su",
+ "karelia.su",
+ "khakassia.su",
+ "krasnodar.su",
+ "kurgan.su",
+ "kustanai.su",
+ "lenug.su",
+ "mangyshlak.su",
+ "mordovia.su",
+ "msk.su",
+ "murmansk.su",
+ "nalchik.su",
+ "navoi.su",
+ "north-kazakhstan.su",
+ "nov.su",
+ "obninsk.su",
+ "penza.su",
+ "pokrovsk.su",
+ "sochi.su",
+ "spb.su",
+ "tashkent.su",
+ "termez.su",
+ "togliatti.su",
+ "troitsk.su",
+ "tselinograd.su",
+ "tula.su",
+ "tuva.su",
+ "vladikavkaz.su",
+ "vladimir.su",
+ "vologda.su",
+ "channelsdvr.net",
+ "u.channelsdvr.net",
+ "edgecompute.app",
+ "fastly-terrarium.com",
+ "fastlylb.net",
+ "map.fastlylb.net",
+ "freetls.fastly.net",
+ "map.fastly.net",
+ "a.prod.fastly.net",
+ "global.prod.fastly.net",
+ "a.ssl.fastly.net",
+ "b.ssl.fastly.net",
+ "global.ssl.fastly.net",
+ "fastvps-server.com",
+ "fastvps.host",
+ "myfast.host",
+ "fastvps.site",
+ "myfast.space",
+ "fedorainfracloud.org",
+ "fedorapeople.org",
+ "cloud.fedoraproject.org",
+ "app.os.fedoraproject.org",
+ "app.os.stg.fedoraproject.org",
+ "conn.uk",
+ "copro.uk",
+ "hosp.uk",
+ "mydobiss.com",
+ "fh-muenster.io",
+ "filegear.me",
+ "filegear-au.me",
+ "filegear-de.me",
+ "filegear-gb.me",
+ "filegear-ie.me",
+ "filegear-jp.me",
+ "filegear-sg.me",
+ "firebaseapp.com",
+ "fireweb.app",
+ "flap.id",
+ "onflashdrive.app",
+ "fldrv.com",
+ "fly.dev",
+ "edgeapp.net",
+ "shw.io",
+ "flynnhosting.net",
+ "forgeblocks.com",
+ "id.forgerock.io",
+ "framer.app",
+ "framercanvas.com",
+ "*.frusky.de",
+ "ravpage.co.il",
+ "0e.vc",
+ "freebox-os.com",
+ "freeboxos.com",
+ "fbx-os.fr",
+ "fbxos.fr",
+ "freebox-os.fr",
+ "freeboxos.fr",
+ "freedesktop.org",
+ "freemyip.com",
+ "wien.funkfeuer.at",
+ "*.futurecms.at",
+ "*.ex.futurecms.at",
+ "*.in.futurecms.at",
+ "futurehosting.at",
+ "futuremailing.at",
+ "*.ex.ortsinfo.at",
+ "*.kunden.ortsinfo.at",
+ "*.statics.cloud",
+ "independent-commission.uk",
+ "independent-inquest.uk",
+ "independent-inquiry.uk",
+ "independent-panel.uk",
+ "independent-review.uk",
+ "public-inquiry.uk",
+ "royal-commission.uk",
+ "campaign.gov.uk",
+ "service.gov.uk",
+ "api.gov.uk",
+ "gehirn.ne.jp",
+ "usercontent.jp",
+ "gentapps.com",
+ "gentlentapis.com",
+ "lab.ms",
+ "cdn-edges.net",
+ "ghost.io",
+ "gsj.bz",
+ "githubusercontent.com",
+ "githubpreview.dev",
+ "github.io",
+ "gitlab.io",
+ "gitapp.si",
+ "gitpage.si",
+ "glitch.me",
+ "nog.community",
+ "co.ro",
+ "shop.ro",
+ "lolipop.io",
+ "angry.jp",
+ "babyblue.jp",
+ "babymilk.jp",
+ "backdrop.jp",
+ "bambina.jp",
+ "bitter.jp",
+ "blush.jp",
+ "boo.jp",
+ "boy.jp",
+ "boyfriend.jp",
+ "but.jp",
+ "candypop.jp",
+ "capoo.jp",
+ "catfood.jp",
+ "cheap.jp",
+ "chicappa.jp",
+ "chillout.jp",
+ "chips.jp",
+ "chowder.jp",
+ "chu.jp",
+ "ciao.jp",
+ "cocotte.jp",
+ "coolblog.jp",
+ "cranky.jp",
+ "cutegirl.jp",
+ "daa.jp",
+ "deca.jp",
+ "deci.jp",
+ "digick.jp",
+ "egoism.jp",
+ "fakefur.jp",
+ "fem.jp",
+ "flier.jp",
+ "floppy.jp",
+ "fool.jp",
+ "frenchkiss.jp",
+ "girlfriend.jp",
+ "girly.jp",
+ "gloomy.jp",
+ "gonna.jp",
+ "greater.jp",
+ "hacca.jp",
+ "heavy.jp",
+ "her.jp",
+ "hiho.jp",
+ "hippy.jp",
+ "holy.jp",
+ "hungry.jp",
+ "icurus.jp",
+ "itigo.jp",
+ "jellybean.jp",
+ "kikirara.jp",
+ "kill.jp",
+ "kilo.jp",
+ "kuron.jp",
+ "littlestar.jp",
+ "lolipopmc.jp",
+ "lolitapunk.jp",
+ "lomo.jp",
+ "lovepop.jp",
+ "lovesick.jp",
+ "main.jp",
+ "mods.jp",
+ "mond.jp",
+ "mongolian.jp",
+ "moo.jp",
+ "namaste.jp",
+ "nikita.jp",
+ "nobushi.jp",
+ "noor.jp",
+ "oops.jp",
+ "parallel.jp",
+ "parasite.jp",
+ "pecori.jp",
+ "peewee.jp",
+ "penne.jp",
+ "pepper.jp",
+ "perma.jp",
+ "pigboat.jp",
+ "pinoko.jp",
+ "punyu.jp",
+ "pupu.jp",
+ "pussycat.jp",
+ "pya.jp",
+ "raindrop.jp",
+ "readymade.jp",
+ "sadist.jp",
+ "schoolbus.jp",
+ "secret.jp",
+ "staba.jp",
+ "stripper.jp",
+ "sub.jp",
+ "sunnyday.jp",
+ "thick.jp",
+ "tonkotsu.jp",
+ "under.jp",
+ "upper.jp",
+ "velvet.jp",
+ "verse.jp",
+ "versus.jp",
+ "vivian.jp",
+ "watson.jp",
+ "weblike.jp",
+ "whitesnow.jp",
+ "zombie.jp",
+ "heteml.net",
+ "cloudapps.digital",
+ "london.cloudapps.digital",
+ "pymnt.uk",
+ "homeoffice.gov.uk",
+ "ro.im",
+ "goip.de",
+ "run.app",
+ "a.run.app",
+ "web.app",
+ "*.0emm.com",
+ "appspot.com",
+ "*.r.appspot.com",
+ "codespot.com",
+ "googleapis.com",
+ "googlecode.com",
+ "pagespeedmobilizer.com",
+ "publishproxy.com",
+ "withgoogle.com",
+ "withyoutube.com",
+ "*.gateway.dev",
+ "cloud.goog",
+ "translate.goog",
+ "*.usercontent.goog",
+ "cloudfunctions.net",
+ "blogspot.ae",
+ "blogspot.al",
+ "blogspot.am",
+ "blogspot.ba",
+ "blogspot.be",
+ "blogspot.bg",
+ "blogspot.bj",
+ "blogspot.ca",
+ "blogspot.cf",
+ "blogspot.ch",
+ "blogspot.cl",
+ "blogspot.co.at",
+ "blogspot.co.id",
+ "blogspot.co.il",
+ "blogspot.co.ke",
+ "blogspot.co.nz",
+ "blogspot.co.uk",
+ "blogspot.co.za",
+ "blogspot.com",
+ "blogspot.com.ar",
+ "blogspot.com.au",
+ "blogspot.com.br",
+ "blogspot.com.by",
+ "blogspot.com.co",
+ "blogspot.com.cy",
+ "blogspot.com.ee",
+ "blogspot.com.eg",
+ "blogspot.com.es",
+ "blogspot.com.mt",
+ "blogspot.com.ng",
+ "blogspot.com.tr",
+ "blogspot.com.uy",
+ "blogspot.cv",
+ "blogspot.cz",
+ "blogspot.de",
+ "blogspot.dk",
+ "blogspot.fi",
+ "blogspot.fr",
+ "blogspot.gr",
+ "blogspot.hk",
+ "blogspot.hr",
+ "blogspot.hu",
+ "blogspot.ie",
+ "blogspot.in",
+ "blogspot.is",
+ "blogspot.it",
+ "blogspot.jp",
+ "blogspot.kr",
+ "blogspot.li",
+ "blogspot.lt",
+ "blogspot.lu",
+ "blogspot.md",
+ "blogspot.mk",
+ "blogspot.mr",
+ "blogspot.mx",
+ "blogspot.my",
+ "blogspot.nl",
+ "blogspot.no",
+ "blogspot.pe",
+ "blogspot.pt",
+ "blogspot.qa",
+ "blogspot.re",
+ "blogspot.ro",
+ "blogspot.rs",
+ "blogspot.ru",
+ "blogspot.se",
+ "blogspot.sg",
+ "blogspot.si",
+ "blogspot.sk",
+ "blogspot.sn",
+ "blogspot.td",
+ "blogspot.tw",
+ "blogspot.ug",
+ "blogspot.vn",
+ "goupile.fr",
+ "gov.nl",
+ "awsmppl.com",
+ "günstigbestellen.de",
+ "günstigliefern.de",
+ "fin.ci",
+ "free.hr",
+ "caa.li",
+ "ua.rs",
+ "conf.se",
+ "hs.zone",
+ "hs.run",
+ "hashbang.sh",
+ "hasura.app",
+ "hasura-app.io",
+ "pages.it.hs-heilbronn.de",
+ "hepforge.org",
+ "herokuapp.com",
+ "herokussl.com",
+ "ravendb.cloud",
+ "myravendb.com",
+ "ravendb.community",
+ "ravendb.me",
+ "development.run",
+ "ravendb.run",
+ "homesklep.pl",
+ "secaas.hk",
+ "hoplix.shop",
+ "orx.biz",
+ "biz.gl",
+ "col.ng",
+ "firm.ng",
+ "gen.ng",
+ "ltd.ng",
+ "ngo.ng",
+ "edu.scot",
+ "sch.so",
+ "hostyhosting.io",
+ "häkkinen.fi",
+ "*.moonscale.io",
+ "moonscale.net",
+ "iki.fi",
+ "ibxos.it",
+ "iliadboxos.it",
+ "impertrixcdn.com",
+ "impertrix.com",
+ "smushcdn.com",
+ "wphostedmail.com",
+ "wpmucdn.com",
+ "tempurl.host",
+ "wpmudev.host",
+ "dyn-berlin.de",
+ "in-berlin.de",
+ "in-brb.de",
+ "in-butter.de",
+ "in-dsl.de",
+ "in-dsl.net",
+ "in-dsl.org",
+ "in-vpn.de",
+ "in-vpn.net",
+ "in-vpn.org",
+ "biz.at",
+ "info.at",
+ "info.cx",
+ "ac.leg.br",
+ "al.leg.br",
+ "am.leg.br",
+ "ap.leg.br",
+ "ba.leg.br",
+ "ce.leg.br",
+ "df.leg.br",
+ "es.leg.br",
+ "go.leg.br",
+ "ma.leg.br",
+ "mg.leg.br",
+ "ms.leg.br",
+ "mt.leg.br",
+ "pa.leg.br",
+ "pb.leg.br",
+ "pe.leg.br",
+ "pi.leg.br",
+ "pr.leg.br",
+ "rj.leg.br",
+ "rn.leg.br",
+ "ro.leg.br",
+ "rr.leg.br",
+ "rs.leg.br",
+ "sc.leg.br",
+ "se.leg.br",
+ "sp.leg.br",
+ "to.leg.br",
+ "pixolino.com",
+ "na4u.ru",
+ "iopsys.se",
+ "ipifony.net",
+ "iservschule.de",
+ "mein-iserv.de",
+ "schulplattform.de",
+ "schulserver.de",
+ "test-iserv.de",
+ "iserv.dev",
+ "iobb.net",
+ "mel.cloudlets.com.au",
+ "cloud.interhostsolutions.be",
+ "users.scale.virtualcloud.com.br",
+ "mycloud.by",
+ "alp1.ae.flow.ch",
+ "appengine.flow.ch",
+ "es-1.axarnet.cloud",
+ "diadem.cloud",
+ "vip.jelastic.cloud",
+ "jele.cloud",
+ "it1.eur.aruba.jenv-aruba.cloud",
+ "it1.jenv-aruba.cloud",
+ "keliweb.cloud",
+ "cs.keliweb.cloud",
+ "oxa.cloud",
+ "tn.oxa.cloud",
+ "uk.oxa.cloud",
+ "primetel.cloud",
+ "uk.primetel.cloud",
+ "ca.reclaim.cloud",
+ "uk.reclaim.cloud",
+ "us.reclaim.cloud",
+ "ch.trendhosting.cloud",
+ "de.trendhosting.cloud",
+ "jele.club",
+ "amscompute.com",
+ "clicketcloud.com",
+ "dopaas.com",
+ "hidora.com",
+ "paas.hosted-by-previder.com",
+ "rag-cloud.hosteur.com",
+ "rag-cloud-ch.hosteur.com",
+ "jcloud.ik-server.com",
+ "jcloud-ver-jpc.ik-server.com",
+ "demo.jelastic.com",
+ "kilatiron.com",
+ "paas.massivegrid.com",
+ "jed.wafaicloud.com",
+ "lon.wafaicloud.com",
+ "ryd.wafaicloud.com",
+ "j.scaleforce.com.cy",
+ "jelastic.dogado.eu",
+ "fi.cloudplatform.fi",
+ "demo.datacenter.fi",
+ "paas.datacenter.fi",
+ "jele.host",
+ "mircloud.host",
+ "paas.beebyte.io",
+ "sekd1.beebyteapp.io",
+ "jele.io",
+ "cloud-fr1.unispace.io",
+ "jc.neen.it",
+ "cloud.jelastic.open.tim.it",
+ "jcloud.kz",
+ "upaas.kazteleport.kz",
+ "cloudjiffy.net",
+ "fra1-de.cloudjiffy.net",
+ "west1-us.cloudjiffy.net",
+ "jls-sto1.elastx.net",
+ "jls-sto2.elastx.net",
+ "jls-sto3.elastx.net",
+ "faststacks.net",
+ "fr-1.paas.massivegrid.net",
+ "lon-1.paas.massivegrid.net",
+ "lon-2.paas.massivegrid.net",
+ "ny-1.paas.massivegrid.net",
+ "ny-2.paas.massivegrid.net",
+ "sg-1.paas.massivegrid.net",
+ "jelastic.saveincloud.net",
+ "nordeste-idc.saveincloud.net",
+ "j.scaleforce.net",
+ "jelastic.tsukaeru.net",
+ "sdscloud.pl",
+ "unicloud.pl",
+ "mircloud.ru",
+ "jelastic.regruhosting.ru",
+ "enscaled.sg",
+ "jele.site",
+ "jelastic.team",
+ "orangecloud.tn",
+ "j.layershift.co.uk",
+ "phx.enscaled.us",
+ "mircloud.us",
+ "myjino.ru",
+ "*.hosting.myjino.ru",
+ "*.landing.myjino.ru",
+ "*.spectrum.myjino.ru",
+ "*.vps.myjino.ru",
+ "jotelulu.cloud",
+ "*.triton.zone",
+ "*.cns.joyent.com",
+ "js.org",
+ "kaas.gg",
+ "khplay.nl",
+ "ktistory.com",
+ "kapsi.fi",
+ "keymachine.de",
+ "kinghost.net",
+ "uni5.net",
+ "knightpoint.systems",
+ "koobin.events",
+ "oya.to",
+ "kuleuven.cloud",
+ "ezproxy.kuleuven.be",
+ "co.krd",
+ "edu.krd",
+ "krellian.net",
+ "webthings.io",
+ "git-repos.de",
+ "lcube-server.de",
+ "svn-repos.de",
+ "leadpages.co",
+ "lpages.co",
+ "lpusercontent.com",
+ "lelux.site",
+ "co.business",
+ "co.education",
+ "co.events",
+ "co.financial",
+ "co.network",
+ "co.place",
+ "co.technology",
+ "app.lmpm.com",
+ "linkyard.cloud",
+ "linkyard-cloud.ch",
+ "members.linode.com",
+ "*.nodebalancer.linode.com",
+ "*.linodeobjects.com",
+ "ip.linodeusercontent.com",
+ "we.bs",
+ "*.user.localcert.dev",
+ "localzone.xyz",
+ "loginline.app",
+ "loginline.dev",
+ "loginline.io",
+ "loginline.services",
+ "loginline.site",
+ "servers.run",
+ "lohmus.me",
+ "krasnik.pl",
+ "leczna.pl",
+ "lubartow.pl",
+ "lublin.pl",
+ "poniatowa.pl",
+ "swidnik.pl",
+ "glug.org.uk",
+ "lug.org.uk",
+ "lugs.org.uk",
+ "barsy.bg",
+ "barsy.co.uk",
+ "barsyonline.co.uk",
+ "barsycenter.com",
+ "barsyonline.com",
+ "barsy.club",
+ "barsy.de",
+ "barsy.eu",
+ "barsy.in",
+ "barsy.info",
+ "barsy.io",
+ "barsy.me",
+ "barsy.menu",
+ "barsy.mobi",
+ "barsy.net",
+ "barsy.online",
+ "barsy.org",
+ "barsy.pro",
+ "barsy.pub",
+ "barsy.ro",
+ "barsy.shop",
+ "barsy.site",
+ "barsy.support",
+ "barsy.uk",
+ "*.magentosite.cloud",
+ "mayfirst.info",
+ "mayfirst.org",
+ "hb.cldmail.ru",
+ "cn.vu",
+ "mazeplay.com",
+ "mcpe.me",
+ "mcdir.me",
+ "mcdir.ru",
+ "mcpre.ru",
+ "vps.mcdir.ru",
+ "mediatech.by",
+ "mediatech.dev",
+ "hra.health",
+ "miniserver.com",
+ "memset.net",
+ "messerli.app",
+ "*.cloud.metacentrum.cz",
+ "custom.metacentrum.cz",
+ "flt.cloud.muni.cz",
+ "usr.cloud.muni.cz",
+ "meteorapp.com",
+ "eu.meteorapp.com",
+ "co.pl",
+ "*.azurecontainer.io",
+ "azurewebsites.net",
+ "azure-mobile.net",
+ "cloudapp.net",
+ "azurestaticapps.net",
+ "1.azurestaticapps.net",
+ "centralus.azurestaticapps.net",
+ "eastasia.azurestaticapps.net",
+ "eastus2.azurestaticapps.net",
+ "westeurope.azurestaticapps.net",
+ "westus2.azurestaticapps.net",
+ "csx.cc",
+ "mintere.site",
+ "forte.id",
+ "mozilla-iot.org",
+ "bmoattachments.org",
+ "net.ru",
+ "org.ru",
+ "pp.ru",
+ "hostedpi.com",
+ "customer.mythic-beasts.com",
+ "caracal.mythic-beasts.com",
+ "fentiger.mythic-beasts.com",
+ "lynx.mythic-beasts.com",
+ "ocelot.mythic-beasts.com",
+ "oncilla.mythic-beasts.com",
+ "onza.mythic-beasts.com",
+ "sphinx.mythic-beasts.com",
+ "vs.mythic-beasts.com",
+ "x.mythic-beasts.com",
+ "yali.mythic-beasts.com",
+ "cust.retrosnub.co.uk",
+ "ui.nabu.casa",
+ "pony.club",
+ "of.fashion",
+ "in.london",
+ "of.london",
+ "from.marketing",
+ "with.marketing",
+ "for.men",
+ "repair.men",
+ "and.mom",
+ "for.mom",
+ "for.one",
+ "under.one",
+ "for.sale",
+ "that.win",
+ "from.work",
+ "to.work",
+ "cloud.nospamproxy.com",
+ "netlify.app",
+ "4u.com",
+ "ngrok.io",
+ "nh-serv.co.uk",
+ "nfshost.com",
+ "*.developer.app",
+ "noop.app",
+ "*.northflank.app",
+ "*.build.run",
+ "*.code.run",
+ "*.database.run",
+ "*.migration.run",
+ "noticeable.news",
+ "dnsking.ch",
+ "mypi.co",
+ "n4t.co",
+ "001www.com",
+ "ddnslive.com",
+ "myiphost.com",
+ "forumz.info",
+ "16-b.it",
+ "32-b.it",
+ "64-b.it",
+ "soundcast.me",
+ "tcp4.me",
+ "dnsup.net",
+ "hicam.net",
+ "now-dns.net",
+ "ownip.net",
+ "vpndns.net",
+ "dynserv.org",
+ "now-dns.org",
+ "x443.pw",
+ "now-dns.top",
+ "ntdll.top",
+ "freeddns.us",
+ "crafting.xyz",
+ "zapto.xyz",
+ "nsupdate.info",
+ "nerdpol.ovh",
+ "blogsyte.com",
+ "brasilia.me",
+ "cable-modem.org",
+ "ciscofreak.com",
+ "collegefan.org",
+ "couchpotatofries.org",
+ "damnserver.com",
+ "ddns.me",
+ "ditchyourip.com",
+ "dnsfor.me",
+ "dnsiskinky.com",
+ "dvrcam.info",
+ "dynns.com",
+ "eating-organic.net",
+ "fantasyleague.cc",
+ "geekgalaxy.com",
+ "golffan.us",
+ "health-carereform.com",
+ "homesecuritymac.com",
+ "homesecuritypc.com",
+ "hopto.me",
+ "ilovecollege.info",
+ "loginto.me",
+ "mlbfan.org",
+ "mmafan.biz",
+ "myactivedirectory.com",
+ "mydissent.net",
+ "myeffect.net",
+ "mymediapc.net",
+ "mypsx.net",
+ "mysecuritycamera.com",
+ "mysecuritycamera.net",
+ "mysecuritycamera.org",
+ "net-freaks.com",
+ "nflfan.org",
+ "nhlfan.net",
+ "no-ip.ca",
+ "no-ip.co.uk",
+ "no-ip.net",
+ "noip.us",
+ "onthewifi.com",
+ "pgafan.net",
+ "point2this.com",
+ "pointto.us",
+ "privatizehealthinsurance.net",
+ "quicksytes.com",
+ "read-books.org",
+ "securitytactics.com",
+ "serveexchange.com",
+ "servehumour.com",
+ "servep2p.com",
+ "servesarcasm.com",
+ "stufftoread.com",
+ "ufcfan.org",
+ "unusualperson.com",
+ "workisboring.com",
+ "3utilities.com",
+ "bounceme.net",
+ "ddns.net",
+ "ddnsking.com",
+ "gotdns.ch",
+ "hopto.org",
+ "myftp.biz",
+ "myftp.org",
+ "myvnc.com",
+ "no-ip.biz",
+ "no-ip.info",
+ "no-ip.org",
+ "noip.me",
+ "redirectme.net",
+ "servebeer.com",
+ "serveblog.net",
+ "servecounterstrike.com",
+ "serveftp.com",
+ "servegame.com",
+ "servehalflife.com",
+ "servehttp.com",
+ "serveirc.com",
+ "serveminecraft.net",
+ "servemp3.com",
+ "servepics.com",
+ "servequake.com",
+ "sytes.net",
+ "webhop.me",
+ "zapto.org",
+ "stage.nodeart.io",
+ "pcloud.host",
+ "nyc.mn",
+ "static.observableusercontent.com",
+ "cya.gg",
+ "omg.lol",
+ "cloudycluster.net",
+ "omniwe.site",
+ "service.one",
+ "nid.io",
+ "opensocial.site",
+ "opencraft.hosting",
+ "orsites.com",
+ "operaunite.com",
+ "tech.orange",
+ "authgear-staging.com",
+ "authgearapps.com",
+ "skygearapp.com",
+ "outsystemscloud.com",
+ "*.webpaas.ovh.net",
+ "*.hosting.ovh.net",
+ "ownprovider.com",
+ "own.pm",
+ "*.owo.codes",
+ "ox.rs",
+ "oy.lc",
+ "pgfog.com",
+ "pagefrontapp.com",
+ "pagexl.com",
+ "*.paywhirl.com",
+ "bar0.net",
+ "bar1.net",
+ "bar2.net",
+ "rdv.to",
+ "art.pl",
+ "gliwice.pl",
+ "krakow.pl",
+ "poznan.pl",
+ "wroc.pl",
+ "zakopane.pl",
+ "pantheonsite.io",
+ "gotpantheon.com",
+ "mypep.link",
+ "perspecta.cloud",
+ "lk3.ru",
+ "on-web.fr",
+ "bc.platform.sh",
+ "ent.platform.sh",
+ "eu.platform.sh",
+ "us.platform.sh",
+ "*.platformsh.site",
+ "*.tst.site",
+ "platter-app.com",
+ "platter-app.dev",
+ "platterp.us",
+ "pdns.page",
+ "plesk.page",
+ "pleskns.com",
+ "dyn53.io",
+ "onporter.run",
+ "co.bn",
+ "postman-echo.com",
+ "pstmn.io",
+ "mock.pstmn.io",
+ "httpbin.org",
+ "prequalifyme.today",
+ "xen.prgmr.com",
+ "priv.at",
+ "prvcy.page",
+ "*.dweb.link",
+ "protonet.io",
+ "chirurgiens-dentistes-en-france.fr",
+ "byen.site",
+ "pubtls.org",
+ "pythonanywhere.com",
+ "eu.pythonanywhere.com",
+ "qoto.io",
+ "qualifioapp.com",
+ "qbuser.com",
+ "cloudsite.builders",
+ "instances.spawn.cc",
+ "instantcloud.cn",
+ "ras.ru",
+ "qa2.com",
+ "qcx.io",
+ "*.sys.qcx.io",
+ "dev-myqnapcloud.com",
+ "alpha-myqnapcloud.com",
+ "myqnapcloud.com",
+ "*.quipelements.com",
+ "vapor.cloud",
+ "vaporcloud.io",
+ "rackmaze.com",
+ "rackmaze.net",
+ "g.vbrplsbx.io",
+ "*.on-k3s.io",
+ "*.on-rancher.cloud",
+ "*.on-rio.io",
+ "readthedocs.io",
+ "rhcloud.com",
+ "app.render.com",
+ "onrender.com",
+ "repl.co",
+ "id.repl.co",
+ "repl.run",
+ "resindevice.io",
+ "devices.resinstaging.io",
+ "hzc.io",
+ "wellbeingzone.eu",
+ "wellbeingzone.co.uk",
+ "adimo.co.uk",
+ "itcouldbewor.se",
+ "git-pages.rit.edu",
+ "rocky.page",
+ "биз.рус",
+ "ком.рус",
+ "крым.рус",
+ "мир.рус",
+ "мск.рус",
+ "орг.рус",
+ "самара.рус",
+ "сочи.рус",
+ "спб.рус",
+ "я.рус",
+ "*.builder.code.com",
+ "*.dev-builder.code.com",
+ "*.stg-builder.code.com",
+ "sandcats.io",
+ "logoip.de",
+ "logoip.com",
+ "fr-par-1.baremetal.scw.cloud",
+ "fr-par-2.baremetal.scw.cloud",
+ "nl-ams-1.baremetal.scw.cloud",
+ "fnc.fr-par.scw.cloud",
+ "functions.fnc.fr-par.scw.cloud",
+ "k8s.fr-par.scw.cloud",
+ "nodes.k8s.fr-par.scw.cloud",
+ "s3.fr-par.scw.cloud",
+ "s3-website.fr-par.scw.cloud",
+ "whm.fr-par.scw.cloud",
+ "priv.instances.scw.cloud",
+ "pub.instances.scw.cloud",
+ "k8s.scw.cloud",
+ "k8s.nl-ams.scw.cloud",
+ "nodes.k8s.nl-ams.scw.cloud",
+ "s3.nl-ams.scw.cloud",
+ "s3-website.nl-ams.scw.cloud",
+ "whm.nl-ams.scw.cloud",
+ "k8s.pl-waw.scw.cloud",
+ "nodes.k8s.pl-waw.scw.cloud",
+ "s3.pl-waw.scw.cloud",
+ "s3-website.pl-waw.scw.cloud",
+ "scalebook.scw.cloud",
+ "smartlabeling.scw.cloud",
+ "dedibox.fr",
+ "schokokeks.net",
+ "gov.scot",
+ "service.gov.scot",
+ "scrysec.com",
+ "firewall-gateway.com",
+ "firewall-gateway.de",
+ "my-gateway.de",
+ "my-router.de",
+ "spdns.de",
+ "spdns.eu",
+ "firewall-gateway.net",
+ "my-firewall.org",
+ "myfirewall.org",
+ "spdns.org",
+ "seidat.net",
+ "sellfy.store",
+ "senseering.net",
+ "minisite.ms",
+ "magnet.page",
+ "biz.ua",
+ "co.ua",
+ "pp.ua",
+ "shiftcrypto.dev",
+ "shiftcrypto.io",
+ "shiftedit.io",
+ "myshopblocks.com",
+ "myshopify.com",
+ "shopitsite.com",
+ "shopware.store",
+ "mo-siemens.io",
+ "1kapp.com",
+ "appchizi.com",
+ "applinzi.com",
+ "sinaapp.com",
+ "vipsinaapp.com",
+ "siteleaf.net",
+ "bounty-full.com",
+ "alpha.bounty-full.com",
+ "beta.bounty-full.com",
+ "small-web.org",
+ "vp4.me",
+ "try-snowplow.com",
+ "srht.site",
+ "stackhero-network.com",
+ "musician.io",
+ "novecore.site",
+ "static.land",
+ "dev.static.land",
+ "sites.static.land",
+ "storebase.store",
+ "vps-host.net",
+ "atl.jelastic.vps-host.net",
+ "njs.jelastic.vps-host.net",
+ "ric.jelastic.vps-host.net",
+ "playstation-cloud.com",
+ "apps.lair.io",
+ "*.stolos.io",
+ "spacekit.io",
+ "customer.speedpartner.de",
+ "myspreadshop.at",
+ "myspreadshop.com.au",
+ "myspreadshop.be",
+ "myspreadshop.ca",
+ "myspreadshop.ch",
+ "myspreadshop.com",
+ "myspreadshop.de",
+ "myspreadshop.dk",
+ "myspreadshop.es",
+ "myspreadshop.fi",
+ "myspreadshop.fr",
+ "myspreadshop.ie",
+ "myspreadshop.it",
+ "myspreadshop.net",
+ "myspreadshop.nl",
+ "myspreadshop.no",
+ "myspreadshop.pl",
+ "myspreadshop.se",
+ "myspreadshop.co.uk",
+ "api.stdlib.com",
+ "storj.farm",
+ "utwente.io",
+ "soc.srcf.net",
+ "user.srcf.net",
+ "temp-dns.com",
+ "supabase.co",
+ "supabase.in",
+ "supabase.net",
+ "su.paba.se",
+ "*.s5y.io",
+ "*.sensiosite.cloud",
+ "syncloud.it",
+ "dscloud.biz",
+ "direct.quickconnect.cn",
+ "dsmynas.com",
+ "familyds.com",
+ "diskstation.me",
+ "dscloud.me",
+ "i234.me",
+ "myds.me",
+ "synology.me",
+ "dscloud.mobi",
+ "dsmynas.net",
+ "familyds.net",
+ "dsmynas.org",
+ "familyds.org",
+ "vpnplus.to",
+ "direct.quickconnect.to",
+ "tabitorder.co.il",
+ "taifun-dns.de",
+ "beta.tailscale.net",
+ "ts.net",
+ "gda.pl",
+ "gdansk.pl",
+ "gdynia.pl",
+ "med.pl",
+ "sopot.pl",
+ "site.tb-hosting.com",
+ "edugit.io",
+ "s3.teckids.org",
+ "telebit.app",
+ "telebit.io",
+ "*.telebit.xyz",
+ "gwiddle.co.uk",
+ "*.firenet.ch",
+ "*.svc.firenet.ch",
+ "reservd.com",
+ "thingdustdata.com",
+ "cust.dev.thingdust.io",
+ "cust.disrec.thingdust.io",
+ "cust.prod.thingdust.io",
+ "cust.testing.thingdust.io",
+ "reservd.dev.thingdust.io",
+ "reservd.disrec.thingdust.io",
+ "reservd.testing.thingdust.io",
+ "tickets.io",
+ "arvo.network",
+ "azimuth.network",
+ "tlon.network",
+ "torproject.net",
+ "pages.torproject.net",
+ "bloxcms.com",
+ "townnews-staging.com",
+ "tbits.me",
+ "12hp.at",
+ "2ix.at",
+ "4lima.at",
+ "lima-city.at",
+ "12hp.ch",
+ "2ix.ch",
+ "4lima.ch",
+ "lima-city.ch",
+ "trafficplex.cloud",
+ "de.cool",
+ "12hp.de",
+ "2ix.de",
+ "4lima.de",
+ "lima-city.de",
+ "1337.pictures",
+ "clan.rip",
+ "lima-city.rocks",
+ "webspace.rocks",
+ "lima.zone",
+ "*.transurl.be",
+ "*.transurl.eu",
+ "*.transurl.nl",
+ "site.transip.me",
+ "tuxfamily.org",
+ "dd-dns.de",
+ "diskstation.eu",
+ "diskstation.org",
+ "dray-dns.de",
+ "draydns.de",
+ "dyn-vpn.de",
+ "dynvpn.de",
+ "mein-vigor.de",
+ "my-vigor.de",
+ "my-wan.de",
+ "syno-ds.de",
+ "synology-diskstation.de",
+ "synology-ds.de",
+ "typedream.app",
+ "pro.typeform.com",
+ "uber.space",
+ "*.uberspace.de",
+ "hk.com",
+ "hk.org",
+ "ltd.hk",
+ "inc.hk",
+ "name.pm",
+ "sch.tf",
+ "biz.wf",
+ "sch.wf",
+ "org.yt",
+ "virtualuser.de",
+ "virtual-user.de",
+ "upli.io",
+ "urown.cloud",
+ "dnsupdate.info",
+ "lib.de.us",
+ "2038.io",
+ "vercel.app",
+ "vercel.dev",
+ "now.sh",
+ "router.management",
+ "v-info.info",
+ "voorloper.cloud",
+ "neko.am",
+ "nyaa.am",
+ "be.ax",
+ "cat.ax",
+ "es.ax",
+ "eu.ax",
+ "gg.ax",
+ "mc.ax",
+ "us.ax",
+ "xy.ax",
+ "nl.ci",
+ "xx.gl",
+ "app.gp",
+ "blog.gt",
+ "de.gt",
+ "to.gt",
+ "be.gy",
+ "cc.hn",
+ "blog.kg",
+ "io.kg",
+ "jp.kg",
+ "tv.kg",
+ "uk.kg",
+ "us.kg",
+ "de.ls",
+ "at.md",
+ "de.md",
+ "jp.md",
+ "to.md",
+ "indie.porn",
+ "vxl.sh",
+ "ch.tc",
+ "me.tc",
+ "we.tc",
+ "nyan.to",
+ "at.vg",
+ "blog.vu",
+ "dev.vu",
+ "me.vu",
+ "v.ua",
+ "*.vultrobjects.com",
+ "wafflecell.com",
+ "*.webhare.dev",
+ "reserve-online.net",
+ "reserve-online.com",
+ "bookonline.app",
+ "hotelwithflight.com",
+ "wedeploy.io",
+ "wedeploy.me",
+ "wedeploy.sh",
+ "remotewd.com",
+ "pages.wiardweb.com",
+ "wmflabs.org",
+ "toolforge.org",
+ "wmcloud.org",
+ "panel.gg",
+ "daemon.panel.gg",
+ "messwithdns.com",
+ "woltlab-demo.com",
+ "myforum.community",
+ "community-pro.de",
+ "diskussionsbereich.de",
+ "community-pro.net",
+ "meinforum.net",
+ "affinitylottery.org.uk",
+ "raffleentry.org.uk",
+ "weeklylottery.org.uk",
+ "wpenginepowered.com",
+ "js.wpenginepowered.com",
+ "wixsite.com",
+ "editorx.io",
+ "half.host",
+ "xnbay.com",
+ "u2.xnbay.com",
+ "u2-local.xnbay.com",
+ "cistron.nl",
+ "demon.nl",
+ "xs4all.space",
+ "yandexcloud.net",
+ "storage.yandexcloud.net",
+ "website.yandexcloud.net",
+ "official.academy",
+ "yolasite.com",
+ "ybo.faith",
+ "yombo.me",
+ "homelink.one",
+ "ybo.party",
+ "ybo.review",
+ "ybo.science",
+ "ybo.trade",
+ "ynh.fr",
+ "nohost.me",
+ "noho.st",
+ "za.net",
+ "za.org",
+ "bss.design",
+ "basicserver.io",
+ "virtualserver.io",
+ "enterprisecloud.nu"
+];
+
+/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
+
+(function (exports) {
+
+
+ var Punycode = require$$0$1;
+
+
+ var internals = {};
+
+
+ //
+ // Read rules from file.
+ //
+ internals.rules = require$$1.map(function (rule) {
+
+ return {
+ rule: rule,
+ suffix: rule.replace(/^(\*\.|\!)/, ''),
+ punySuffix: -1,
+ wildcard: rule.charAt(0) === '*',
+ exception: rule.charAt(0) === '!'
+ };
+ });
+
+
+ //
+ // Check is given string ends with `suffix`.
+ //
+ internals.endsWith = function (str, suffix) {
+
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ };
+
+
+ //
+ // Find rule for a given domain.
+ //
+ internals.findRule = function (domain) {
+
+ var punyDomain = Punycode.toASCII(domain);
+ return internals.rules.reduce(function (memo, rule) {
+
+ if (rule.punySuffix === -1){
+ rule.punySuffix = Punycode.toASCII(rule.suffix);
+ }
+ if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
+ return memo;
+ }
+ // This has been commented out as it never seems to run. This is because
+ // sub tlds always appear after their parents and we never find a shorter
+ // match.
+ //if (memo) {
+ // var memoSuffix = Punycode.toASCII(memo.suffix);
+ // if (memoSuffix.length >= punySuffix.length) {
+ // return memo;
+ // }
+ //}
+ return rule;
+ }, null);
+ };
+
+
+ //
+ // Error codes and messages.
+ //
+ exports.errorCodes = {
+ DOMAIN_TOO_SHORT: 'Domain name too short.',
+ DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
+ LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
+ LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
+ LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
+ LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
+ LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
+ };
+
+
+ //
+ // Validate domain name and throw if not valid.
+ //
+ // From wikipedia:
+ //
+ // Hostnames are composed of series of labels concatenated with dots, as are all
+ // domain names. Each label must be between 1 and 63 characters long, and the
+ // entire hostname (including the delimiting dots) has a maximum of 255 chars.
+ //
+ // Allowed chars:
+ //
+ // * `a-z`
+ // * `0-9`
+ // * `-` but not as a starting or ending character
+ // * `.` as a separator for the textual portions of a domain name
+ //
+ // * http://en.wikipedia.org/wiki/Domain_name
+ // * http://en.wikipedia.org/wiki/Hostname
+ //
+ internals.validate = function (input) {
+
+ // Before we can validate we need to take care of IDNs with unicode chars.
+ var ascii = Punycode.toASCII(input);
+
+ if (ascii.length < 1) {
+ return 'DOMAIN_TOO_SHORT';
+ }
+ if (ascii.length > 255) {
+ return 'DOMAIN_TOO_LONG';
+ }
+
+ // Check each part's length and allowed chars.
+ var labels = ascii.split('.');
+ var label;
+
+ for (var i = 0; i < labels.length; ++i) {
+ label = labels[i];
+ if (!label.length) {
+ return 'LABEL_TOO_SHORT';
+ }
+ if (label.length > 63) {
+ return 'LABEL_TOO_LONG';
+ }
+ if (label.charAt(0) === '-') {
+ return 'LABEL_STARTS_WITH_DASH';
+ }
+ if (label.charAt(label.length - 1) === '-') {
+ return 'LABEL_ENDS_WITH_DASH';
+ }
+ if (!/^[a-z0-9\-]+$/.test(label)) {
+ return 'LABEL_INVALID_CHARS';
+ }
+ }
+ };
+
+
+ //
+ // Public API
+ //
+
+
+ //
+ // Parse domain.
+ //
+ exports.parse = function (input) {
+
+ if (typeof input !== 'string') {
+ throw new TypeError('Domain name must be a string.');
+ }
+
+ // Force domain to lowercase.
+ var domain = input.slice(0).toLowerCase();
+
+ // Handle FQDN.
+ // TODO: Simply remove trailing dot?
+ if (domain.charAt(domain.length - 1) === '.') {
+ domain = domain.slice(0, domain.length - 1);
+ }
+
+ // Validate and sanitise input.
+ var error = internals.validate(domain);
+ if (error) {
+ return {
+ input: input,
+ error: {
+ message: exports.errorCodes[error],
+ code: error
+ }
+ };
+ }
+
+ var parsed = {
+ input: input,
+ tld: null,
+ sld: null,
+ domain: null,
+ subdomain: null,
+ listed: false
+ };
+
+ var domainParts = domain.split('.');
+
+ // Non-Internet TLD
+ if (domainParts[domainParts.length - 1] === 'local') {
+ return parsed;
+ }
+
+ var handlePunycode = function () {
+
+ if (!/xn--/.test(domain)) {
+ return parsed;
+ }
+ if (parsed.domain) {
+ parsed.domain = Punycode.toASCII(parsed.domain);
+ }
+ if (parsed.subdomain) {
+ parsed.subdomain = Punycode.toASCII(parsed.subdomain);
+ }
+ return parsed;
+ };
+
+ var rule = internals.findRule(domain);
+
+ // Unlisted tld.
+ if (!rule) {
+ if (domainParts.length < 2) {
+ return parsed;
+ }
+ parsed.tld = domainParts.pop();
+ parsed.sld = domainParts.pop();
+ parsed.domain = [parsed.sld, parsed.tld].join('.');
+ if (domainParts.length) {
+ parsed.subdomain = domainParts.pop();
+ }
+ return handlePunycode();
+ }
+
+ // At this point we know the public suffix is listed.
+ parsed.listed = true;
+
+ var tldParts = rule.suffix.split('.');
+ var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
+
+ if (rule.exception) {
+ privateParts.push(tldParts.shift());
+ }
+
+ parsed.tld = tldParts.join('.');
+
+ if (!privateParts.length) {
+ return handlePunycode();
+ }
+
+ if (rule.wildcard) {
+ tldParts.unshift(privateParts.pop());
+ parsed.tld = tldParts.join('.');
+ }
+
+ if (!privateParts.length) {
+ return handlePunycode();
+ }
+
+ parsed.sld = privateParts.pop();
+ parsed.domain = [parsed.sld, parsed.tld].join('.');
+
+ if (privateParts.length) {
+ parsed.subdomain = privateParts.join('.');
+ }
+
+ return handlePunycode();
+ };
+
+
+ //
+ // Get domain.
+ //
+ exports.get = function (domain) {
+
+ if (!domain) {
+ return null;
+ }
+ return exports.parse(domain).domain || null;
+ };
+
+
+ //
+ // Check whether domain belongs to a known public suffix.
+ //
+ exports.isValid = function (domain) {
+
+ var parsed = exports.parse(domain);
+ return Boolean(parsed.domain && parsed.listed);
+ };
+} (psl$1));
+
+/*!
+ * Copyright (c) 2018, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const psl = psl$1;
+
+// RFC 6761
+const SPECIAL_USE_DOMAINS = [
+ "local",
+ "example",
+ "invalid",
+ "localhost",
+ "test"
+];
+
+const SPECIAL_TREATMENT_DOMAINS = ["localhost", "invalid"];
+
+function getPublicSuffix(domain, options = {}) {
+ const domainParts = domain.split(".");
+ const topLevelDomain = domainParts[domainParts.length - 1];
+ const allowSpecialUseDomain = !!options.allowSpecialUseDomain;
+ const ignoreError = !!options.ignoreError;
+
+ if (allowSpecialUseDomain && SPECIAL_USE_DOMAINS.includes(topLevelDomain)) {
+ if (domainParts.length > 1) {
+ const secondLevelDomain = domainParts[domainParts.length - 2];
+ // In aforementioned example, the eTLD/pubSuf will be apple.localhost
+ return `${secondLevelDomain}.${topLevelDomain}`;
+ } else if (SPECIAL_TREATMENT_DOMAINS.includes(topLevelDomain)) {
+ // For a single word special use domain, e.g. 'localhost' or 'invalid', per RFC 6761,
+ // "Application software MAY recognize {localhost/invalid} names as special, or
+ // MAY pass them to name resolution APIs as they would for other domain names."
+ return `${topLevelDomain}`;
+ }
+ }
+
+ if (!ignoreError && SPECIAL_USE_DOMAINS.includes(topLevelDomain)) {
+ throw new Error(
+ `Cookie has domain set to the public suffix "${topLevelDomain}" which is a special use domain. To allow this, configure your CookieJar with {allowSpecialUseDomain:true, rejectPublicSuffixes: false}.`
+ );
+ }
+
+ return psl.get(domain);
+}
+
+pubsuffixPsl.getPublicSuffix = getPublicSuffix;
+
+var store = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*jshint unused:false */
+
+class Store$2 {
+ constructor() {
+ this.synchronous = false;
+ }
+
+ findCookie(domain, path, key, cb) {
+ throw new Error("findCookie is not implemented");
+ }
+
+ findCookies(domain, path, allowSpecialUseDomain, cb) {
+ throw new Error("findCookies is not implemented");
+ }
+
+ putCookie(cookie, cb) {
+ throw new Error("putCookie is not implemented");
+ }
+
+ updateCookie(oldCookie, newCookie, cb) {
+ // recommended default implementation:
+ // return this.putCookie(newCookie, cb);
+ throw new Error("updateCookie is not implemented");
+ }
+
+ removeCookie(domain, path, key, cb) {
+ throw new Error("removeCookie is not implemented");
+ }
+
+ removeCookies(domain, path, cb) {
+ throw new Error("removeCookies is not implemented");
+ }
+
+ removeAllCookies(cb) {
+ throw new Error("removeAllCookies is not implemented");
+ }
+
+ getAllCookies(cb) {
+ throw new Error(
+ "getAllCookies is not implemented (therefore jar cannot be serialized)"
+ );
+ }
+}
+
+store.Store = Store$2;
+
+var memstore = {};
+
+var universalify = {};
+
+universalify.fromCallback = function (fn) {
+ return Object.defineProperty(function () {
+ if (typeof arguments[arguments.length - 1] === 'function') fn.apply(this, arguments);
+ else {
+ return new Promise((resolve, reject) => {
+ arguments[arguments.length] = (err, res) => {
+ if (err) return reject(err)
+ resolve(res);
+ };
+ arguments.length++;
+ fn.apply(this, arguments);
+ })
+ }
+ }, 'name', { value: fn.name })
+};
+
+universalify.fromPromise = function (fn) {
+ return Object.defineProperty(function () {
+ const cb = arguments[arguments.length - 1];
+ if (typeof cb !== 'function') return fn.apply(this, arguments)
+ else {
+ delete arguments[arguments.length - 1];
+ arguments.length--;
+ fn.apply(this, arguments).then(r => cb(null, r), cb);
+ }
+ }, 'name', { value: fn.name })
+};
+
+var permuteDomain$1 = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var hasRequiredPermuteDomain;
+
+function requirePermuteDomain () {
+ if (hasRequiredPermuteDomain) return permuteDomain$1;
+ hasRequiredPermuteDomain = 1;
+ const pubsuffix = pubsuffixPsl;
+
+ // Gives the permutation of all possible domainMatch()es of a given domain. The
+ // array is in shortest-to-longest order. Handy for indexing.
+
+ function permuteDomain(domain, allowSpecialUseDomain) {
+ const pubSuf = pubsuffix.getPublicSuffix(domain, {
+ allowSpecialUseDomain: allowSpecialUseDomain
+ });
+
+ if (!pubSuf) {
+ return null;
+ }
+ if (pubSuf == domain) {
+ return [domain];
+ }
+
+ // Nuke trailing dot
+ if (domain.slice(-1) == ".") {
+ domain = domain.slice(0, -1);
+ }
+
+ const prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
+ const parts = prefix.split(".").reverse();
+ let cur = pubSuf;
+ const permutations = [cur];
+ while (parts.length) {
+ cur = `${parts.shift()}.${cur}`;
+ permutations.push(cur);
+ }
+ return permutations;
+ }
+
+ permuteDomain$1.permuteDomain = permuteDomain;
+ return permuteDomain$1;
+}
+
+var pathMatch$3 = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * "A request-path path-matches a given cookie-path if at least one of the
+ * following conditions holds:"
+ */
+function pathMatch$2(reqPath, cookiePath) {
+ // "o The cookie-path and the request-path are identical."
+ if (cookiePath === reqPath) {
+ return true;
+ }
+
+ const idx = reqPath.indexOf(cookiePath);
+ if (idx === 0) {
+ // "o The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/")."
+ if (cookiePath.substr(-1) === "/") {
+ return true;
+ }
+
+ // " o The cookie-path is a prefix of the request-path, and the first
+ // character of the request-path that is not included in the cookie- path
+ // is a %x2F ("/") character."
+ if (reqPath.substr(cookiePath.length, 1) === "/") {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+pathMatch$3.pathMatch = pathMatch$2;
+
+var utilHelper = {};
+
+function requireUtil() {
+ try {
+ // eslint-disable-next-line no-restricted-modules
+ return require("util");
+ } catch (e) {
+ return null;
+ }
+}
+
+// for v10.12.0+
+function lookupCustomInspectSymbol() {
+ return Symbol.for("nodejs.util.inspect.custom");
+}
+
+// for older node environments
+function tryReadingCustomSymbolFromUtilInspect(options) {
+ const _requireUtil = options.requireUtil || requireUtil;
+ const util = _requireUtil();
+ return util ? util.inspect.custom : null;
+}
+
+utilHelper.getUtilInspect = function getUtilInspect(fallback, options = {}) {
+ const _requireUtil = options.requireUtil || requireUtil;
+ const util = _requireUtil();
+ return function inspect(value, showHidden, depth) {
+ return util ? util.inspect(value, showHidden, depth) : fallback(value);
+ };
+};
+
+utilHelper.getCustomInspectSymbol = function getCustomInspectSymbol(options = {}) {
+ const _lookupCustomInspectSymbol =
+ options.lookupCustomInspectSymbol || lookupCustomInspectSymbol;
+
+ // get custom inspect symbol for node environments
+ return (
+ _lookupCustomInspectSymbol() ||
+ tryReadingCustomSymbolFromUtilInspect(options)
+ );
+};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const { fromCallback: fromCallback$1 } = universalify;
+const Store$1 = store.Store;
+const permuteDomain = requirePermuteDomain().permuteDomain;
+const pathMatch$1 = pathMatch$3.pathMatch;
+const { getCustomInspectSymbol: getCustomInspectSymbol$1, getUtilInspect } = utilHelper;
+
+class MemoryCookieStore$1 extends Store$1 {
+ constructor() {
+ super();
+ this.synchronous = true;
+ this.idx = Object.create(null);
+ const customInspectSymbol = getCustomInspectSymbol$1();
+ if (customInspectSymbol) {
+ this[customInspectSymbol] = this.inspect;
+ }
+ }
+
+ inspect() {
+ const util = { inspect: getUtilInspect(inspectFallback) };
+ return `{ idx: ${util.inspect(this.idx, false, 2)} }`;
+ }
+
+ findCookie(domain, path, key, cb) {
+ if (!this.idx[domain]) {
+ return cb(null, undefined);
+ }
+ if (!this.idx[domain][path]) {
+ return cb(null, undefined);
+ }
+ return cb(null, this.idx[domain][path][key] || null);
+ }
+ findCookies(domain, path, allowSpecialUseDomain, cb) {
+ const results = [];
+ if (typeof allowSpecialUseDomain === "function") {
+ cb = allowSpecialUseDomain;
+ allowSpecialUseDomain = true;
+ }
+ if (!domain) {
+ return cb(null, []);
+ }
+
+ let pathMatcher;
+ if (!path) {
+ // null means "all paths"
+ pathMatcher = function matchAll(domainIndex) {
+ for (const curPath in domainIndex) {
+ const pathIndex = domainIndex[curPath];
+ for (const key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ }
+ };
+ } else {
+ pathMatcher = function matchRFC(domainIndex) {
+ //NOTE: we should use path-match algorithm from S5.1.4 here
+ //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
+ Object.keys(domainIndex).forEach(cookiePath => {
+ if (pathMatch$1(path, cookiePath)) {
+ const pathIndex = domainIndex[cookiePath];
+ for (const key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ }
+ });
+ };
+ }
+
+ const domains = permuteDomain(domain, allowSpecialUseDomain) || [domain];
+ const idx = this.idx;
+ domains.forEach(curDomain => {
+ const domainIndex = idx[curDomain];
+ if (!domainIndex) {
+ return;
+ }
+ pathMatcher(domainIndex);
+ });
+
+ cb(null, results);
+ }
+
+ putCookie(cookie, cb) {
+ if (!this.idx[cookie.domain]) {
+ this.idx[cookie.domain] = Object.create(null);
+ }
+ if (!this.idx[cookie.domain][cookie.path]) {
+ this.idx[cookie.domain][cookie.path] = Object.create(null);
+ }
+ this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
+ cb(null);
+ }
+ updateCookie(oldCookie, newCookie, cb) {
+ // updateCookie() may avoid updating cookies that are identical. For example,
+ // lastAccessed may not be important to some stores and an equality
+ // comparison could exclude that field.
+ this.putCookie(newCookie, cb);
+ }
+ removeCookie(domain, path, key, cb) {
+ if (
+ this.idx[domain] &&
+ this.idx[domain][path] &&
+ this.idx[domain][path][key]
+ ) {
+ delete this.idx[domain][path][key];
+ }
+ cb(null);
+ }
+ removeCookies(domain, path, cb) {
+ if (this.idx[domain]) {
+ if (path) {
+ delete this.idx[domain][path];
+ } else {
+ delete this.idx[domain];
+ }
+ }
+ return cb(null);
+ }
+ removeAllCookies(cb) {
+ this.idx = Object.create(null);
+ return cb(null);
+ }
+ getAllCookies(cb) {
+ const cookies = [];
+ const idx = this.idx;
+
+ const domains = Object.keys(idx);
+ domains.forEach(domain => {
+ const paths = Object.keys(idx[domain]);
+ paths.forEach(path => {
+ const keys = Object.keys(idx[domain][path]);
+ keys.forEach(key => {
+ if (key !== null) {
+ cookies.push(idx[domain][path][key]);
+ }
+ });
+ });
+ });
+
+ // Sort by creationIndex so deserializing retains the creation order.
+ // When implementing your own store, this SHOULD retain the order too
+ cookies.sort((a, b) => {
+ return (a.creationIndex || 0) - (b.creationIndex || 0);
+ });
+
+ cb(null, cookies);
+ }
+}
+
+[
+ "findCookie",
+ "findCookies",
+ "putCookie",
+ "updateCookie",
+ "removeCookie",
+ "removeCookies",
+ "removeAllCookies",
+ "getAllCookies"
+].forEach(name => {
+ MemoryCookieStore$1.prototype[name] = fromCallback$1(
+ MemoryCookieStore$1.prototype[name]
+ );
+});
+
+memstore.MemoryCookieStore = MemoryCookieStore$1;
+
+function inspectFallback(val) {
+ const domains = Object.keys(val);
+ if (domains.length === 0) {
+ return "[Object: null prototype] {}";
+ }
+ let result = "[Object: null prototype] {\n";
+ Object.keys(val).forEach((domain, i) => {
+ result += formatDomain(domain, val[domain]);
+ if (i < domains.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += "}";
+ return result;
+}
+
+function formatDomain(domainName, domainValue) {
+ const indent = " ";
+ let result = `${indent}'${domainName}': [Object: null prototype] {\n`;
+ Object.keys(domainValue).forEach((path, i, paths) => {
+ result += formatPath(path, domainValue[path]);
+ if (i < paths.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += `${indent}}`;
+ return result;
+}
+
+function formatPath(pathName, pathValue) {
+ const indent = " ";
+ let result = `${indent}'${pathName}': [Object: null prototype] {\n`;
+ Object.keys(pathValue).forEach((cookieName, i, cookieNames) => {
+ const cookie = pathValue[cookieName];
+ result += ` ${cookieName}: ${cookie.inspect()}`;
+ if (i < cookieNames.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += `${indent}}`;
+ return result;
+}
+
+memstore.inspectFallback = inspectFallback;
+
+var validators$1 = {};
+
+/* ************************************************************************************
+Extracted from check-types.js
+https://gitlab.com/philbooth/check-types.js
+
+MIT License
+
+Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Phil Booth
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+************************************************************************************ */
+
+/* Validation functions copied from check-types package - https://www.npmjs.com/package/check-types */
+function isFunction(data) {
+ return typeof data === "function";
+}
+
+function isNonEmptyString(data) {
+ return isString(data) && data !== "";
+}
+
+function isDate(data) {
+ return isInstanceStrict(data, Date) && isInteger(data.getTime());
+}
+
+function isEmptyString(data) {
+ return data === "" || (data instanceof String && data.toString() === "");
+}
+
+function isString(data) {
+ return typeof data === "string" || data instanceof String;
+}
+
+function isObject$1(data) {
+ return toString.call(data) === "[object Object]";
+}
+function isInstanceStrict(data, prototype) {
+ try {
+ return data instanceof prototype;
+ } catch (error) {
+ return false;
+ }
+}
+
+function isInteger(data) {
+ return typeof data === "number" && data % 1 === 0;
+}
+/* End validation functions */
+
+function validate(bool, cb, options) {
+ if (!isFunction(cb)) {
+ options = cb;
+ cb = null;
+ }
+ if (!isObject$1(options)) options = { Error: "Failed Check" };
+ if (!bool) {
+ if (cb) {
+ cb(new ParameterError(options));
+ } else {
+ throw new ParameterError(options);
+ }
+ }
+}
+
+class ParameterError extends Error {
+ constructor(...params) {
+ super(...params);
+ }
+}
+
+validators$1.ParameterError = ParameterError;
+validators$1.isFunction = isFunction;
+validators$1.isNonEmptyString = isNonEmptyString;
+validators$1.isDate = isDate;
+validators$1.isEmptyString = isEmptyString;
+validators$1.isString = isString;
+validators$1.isObject = isObject$1;
+validators$1.validate = validate;
+
+// generated by genversion
+var version = '4.1.3';
+
+/*!
+ * Copyright (c) 2015-2020, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const punycode = require$$0;
+const urlParse = urlParse$1;
+const pubsuffix = pubsuffixPsl;
+const Store = store.Store;
+const MemoryCookieStore = memstore.MemoryCookieStore;
+const pathMatch = pathMatch$3.pathMatch;
+const validators = validators$1;
+const VERSION = version;
+const { fromCallback } = universalify;
+const { getCustomInspectSymbol } = utilHelper;
+
+// From RFC6265 S4.1.1
+// note that it excludes \x3B ";"
+const COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
+
+const CONTROL_CHARS = /[\x00-\x1F]/;
+
+// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
+// the "relaxed" mode, see:
+// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
+const TERMINATORS = ["\n", "\r", "\0"];
+
+// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
+// Note ';' is \x3B
+const PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
+
+// date-time parsing constants (RFC6265 S5.1.1)
+
+const DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
+
+const MONTH_TO_NUM = {
+ jan: 0,
+ feb: 1,
+ mar: 2,
+ apr: 3,
+ may: 4,
+ jun: 5,
+ jul: 6,
+ aug: 7,
+ sep: 8,
+ oct: 9,
+ nov: 10,
+ dec: 11
+};
+
+const MAX_TIME = 2147483647000; // 31-bit max
+const MIN_TIME = 0; // 31-bit min
+const SAME_SITE_CONTEXT_VAL_ERR =
+ 'Invalid sameSiteContext option for getCookies(); expected one of "strict", "lax", or "none"';
+
+function checkSameSiteContext(value) {
+ validators.validate(validators.isNonEmptyString(value), value);
+ const context = String(value).toLowerCase();
+ if (context === "none" || context === "lax" || context === "strict") {
+ return context;
+ } else {
+ return null;
+ }
+}
+
+const PrefixSecurityEnum = Object.freeze({
+ SILENT: "silent",
+ STRICT: "strict",
+ DISABLED: "unsafe-disabled"
+});
+
+// Dumped from ip-regex@4.0.0, with the following changes:
+// * all capturing groups converted to non-capturing -- "(?:)"
+// * support for IPv6 Scoped Literal ("%eth1") removed
+// * lowercase hexadecimal only
+const IP_REGEX_LOWERCASE = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|(?:[a-f\d]{1,4}:){1}(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|(?::(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:)))$)/;
+const IP_V6_REGEX = `
+\\[?(?:
+(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|
+(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|
+(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|
+(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|
+(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:))
+)(?:%[0-9a-zA-Z]{1,})?\\]?
+`
+ .replace(/\s*\/\/.*$/gm, "")
+ .replace(/\n/g, "")
+ .trim();
+const IP_V6_REGEX_OBJECT = new RegExp(`^${IP_V6_REGEX}$`);
+
+/*
+ * Parses a Natural number (i.e., non-negative integer) with either the
+ * *DIGIT ( non-digit *OCTET )
+ * or
+ * *DIGIT
+ * grammar (RFC6265 S5.1.1).
+ *
+ * The "trailingOK" boolean controls if the grammar accepts a
+ * "( non-digit *OCTET )" trailer.
+ */
+function parseDigits(token, minDigits, maxDigits, trailingOK) {
+ let count = 0;
+ while (count < token.length) {
+ const c = token.charCodeAt(count);
+ // "non-digit = %x00-2F / %x3A-FF"
+ if (c <= 0x2f || c >= 0x3a) {
+ break;
+ }
+ count++;
+ }
+
+ // constrain to a minimum and maximum number of digits.
+ if (count < minDigits || count > maxDigits) {
+ return null;
+ }
+
+ if (!trailingOK && count != token.length) {
+ return null;
+ }
+
+ return parseInt(token.substr(0, count), 10);
+}
+
+function parseTime(token) {
+ const parts = token.split(":");
+ const result = [0, 0, 0];
+
+ /* RF6256 S5.1.1:
+ * time = hms-time ( non-digit *OCTET )
+ * hms-time = time-field ":" time-field ":" time-field
+ * time-field = 1*2DIGIT
+ */
+
+ if (parts.length !== 3) {
+ return null;
+ }
+
+ for (let i = 0; i < 3; i++) {
+ // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
+ // followed by "( non-digit *OCTET )" so therefore the last time-field can
+ // have a trailer
+ const trailingOK = i == 2;
+ const num = parseDigits(parts[i], 1, 2, trailingOK);
+ if (num === null) {
+ return null;
+ }
+ result[i] = num;
+ }
+
+ return result;
+}
+
+function parseMonth(token) {
+ token = String(token)
+ .substr(0, 3)
+ .toLowerCase();
+ const num = MONTH_TO_NUM[token];
+ return num >= 0 ? num : null;
+}
+
+/*
+ * RFC6265 S5.1.1 date parser (see RFC for full grammar)
+ */
+function parseDate(str) {
+ if (!str) {
+ return;
+ }
+
+ /* RFC6265 S5.1.1:
+ * 2. Process each date-token sequentially in the order the date-tokens
+ * appear in the cookie-date
+ */
+ const tokens = str.split(DATE_DELIM);
+ if (!tokens) {
+ return;
+ }
+
+ let hour = null;
+ let minute = null;
+ let second = null;
+ let dayOfMonth = null;
+ let month = null;
+ let year = null;
+
+ for (let i = 0; i < tokens.length; i++) {
+ const token = tokens[i].trim();
+ if (!token.length) {
+ continue;
+ }
+
+ let result;
+
+ /* 2.1. If the found-time flag is not set and the token matches the time
+ * production, set the found-time flag and set the hour- value,
+ * minute-value, and second-value to the numbers denoted by the digits in
+ * the date-token, respectively. Skip the remaining sub-steps and continue
+ * to the next date-token.
+ */
+ if (second === null) {
+ result = parseTime(token);
+ if (result) {
+ hour = result[0];
+ minute = result[1];
+ second = result[2];
+ continue;
+ }
+ }
+
+ /* 2.2. If the found-day-of-month flag is not set and the date-token matches
+ * the day-of-month production, set the found-day-of- month flag and set
+ * the day-of-month-value to the number denoted by the date-token. Skip
+ * the remaining sub-steps and continue to the next date-token.
+ */
+ if (dayOfMonth === null) {
+ // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
+ result = parseDigits(token, 1, 2, true);
+ if (result !== null) {
+ dayOfMonth = result;
+ continue;
+ }
+ }
+
+ /* 2.3. If the found-month flag is not set and the date-token matches the
+ * month production, set the found-month flag and set the month-value to
+ * the month denoted by the date-token. Skip the remaining sub-steps and
+ * continue to the next date-token.
+ */
+ if (month === null) {
+ result = parseMonth(token);
+ if (result !== null) {
+ month = result;
+ continue;
+ }
+ }
+
+ /* 2.4. If the found-year flag is not set and the date-token matches the
+ * year production, set the found-year flag and set the year-value to the
+ * number denoted by the date-token. Skip the remaining sub-steps and
+ * continue to the next date-token.
+ */
+ if (year === null) {
+ // "year = 2*4DIGIT ( non-digit *OCTET )"
+ result = parseDigits(token, 2, 4, true);
+ if (result !== null) {
+ year = result;
+ /* From S5.1.1:
+ * 3. If the year-value is greater than or equal to 70 and less
+ * than or equal to 99, increment the year-value by 1900.
+ * 4. If the year-value is greater than or equal to 0 and less
+ * than or equal to 69, increment the year-value by 2000.
+ */
+ if (year >= 70 && year <= 99) {
+ year += 1900;
+ } else if (year >= 0 && year <= 69) {
+ year += 2000;
+ }
+ }
+ }
+ }
+
+ /* RFC 6265 S5.1.1
+ * "5. Abort these steps and fail to parse the cookie-date if:
+ * * at least one of the found-day-of-month, found-month, found-
+ * year, or found-time flags is not set,
+ * * the day-of-month-value is less than 1 or greater than 31,
+ * * the year-value is less than 1601,
+ * * the hour-value is greater than 23,
+ * * the minute-value is greater than 59, or
+ * * the second-value is greater than 59.
+ * (Note that leap seconds cannot be represented in this syntax.)"
+ *
+ * So, in order as above:
+ */
+ if (
+ dayOfMonth === null ||
+ month === null ||
+ year === null ||
+ second === null ||
+ dayOfMonth < 1 ||
+ dayOfMonth > 31 ||
+ year < 1601 ||
+ hour > 23 ||
+ minute > 59 ||
+ second > 59
+ ) {
+ return;
+ }
+
+ return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
+}
+
+function formatDate(date) {
+ validators.validate(validators.isDate(date), date);
+ return date.toUTCString();
+}
+
+// S5.1.2 Canonicalized Host Names
+function canonicalDomain(str) {
+ if (str == null) {
+ return null;
+ }
+ str = str.trim().replace(/^\./, ""); // S4.1.2.3 & S5.2.3: ignore leading .
+
+ if (IP_V6_REGEX_OBJECT.test(str)) {
+ str = str.replace("[", "").replace("]", "");
+ }
+
+ // convert to IDN if any non-ASCII characters
+ if (punycode && /[^\u0001-\u007f]/.test(str)) {
+ str = punycode.toASCII(str);
+ }
+
+ return str.toLowerCase();
+}
+
+// S5.1.3 Domain Matching
+function domainMatch(str, domStr, canonicalize) {
+ if (str == null || domStr == null) {
+ return null;
+ }
+ if (canonicalize !== false) {
+ str = canonicalDomain(str);
+ domStr = canonicalDomain(domStr);
+ }
+
+ /*
+ * S5.1.3:
+ * "A string domain-matches a given domain string if at least one of the
+ * following conditions hold:"
+ *
+ * " o The domain string and the string are identical. (Note that both the
+ * domain string and the string will have been canonicalized to lower case at
+ * this point)"
+ */
+ if (str == domStr) {
+ return true;
+ }
+
+ /* " o All of the following [three] conditions hold:" */
+
+ /* "* The domain string is a suffix of the string" */
+ const idx = str.lastIndexOf(domStr);
+ if (idx <= 0) {
+ return false; // it's a non-match (-1) or prefix (0)
+ }
+
+ // next, check it's a proper suffix
+ // e.g., "a.b.c".indexOf("b.c") === 2
+ // 5 === 3+2
+ if (str.length !== domStr.length + idx) {
+ return false; // it's not a suffix
+ }
+
+ /* " * The last character of the string that is not included in the
+ * domain string is a %x2E (".") character." */
+ if (str.substr(idx - 1, 1) !== ".") {
+ return false; // doesn't align on "."
+ }
+
+ /* " * The string is a host name (i.e., not an IP address)." */
+ if (IP_REGEX_LOWERCASE.test(str)) {
+ return false; // it's an IP address
+ }
+
+ return true;
+}
+
+// RFC6265 S5.1.4 Paths and Path-Match
+
+/*
+ * "The user agent MUST use an algorithm equivalent to the following algorithm
+ * to compute the default-path of a cookie:"
+ *
+ * Assumption: the path (and not query part or absolute uri) is passed in.
+ */
+function defaultPath(path) {
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
+ if (!path || path.substr(0, 1) !== "/") {
+ return "/";
+ }
+
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining step."
+ if (path === "/") {
+ return path;
+ }
+
+ const rightSlash = path.lastIndexOf("/");
+ if (rightSlash === 0) {
+ return "/";
+ }
+
+ // "4. Output the characters of the uri-path from the first character up to,
+ // but not including, the right-most %x2F ("/")."
+ return path.slice(0, rightSlash);
+}
+
+function trimTerminator(str) {
+ if (validators.isEmptyString(str)) return str;
+ for (let t = 0; t < TERMINATORS.length; t++) {
+ const terminatorIdx = str.indexOf(TERMINATORS[t]);
+ if (terminatorIdx !== -1) {
+ str = str.substr(0, terminatorIdx);
+ }
+ }
+
+ return str;
+}
+
+function parseCookiePair(cookiePair, looseMode) {
+ cookiePair = trimTerminator(cookiePair);
+ validators.validate(validators.isString(cookiePair), cookiePair);
+
+ let firstEq = cookiePair.indexOf("=");
+ if (looseMode) {
+ if (firstEq === 0) {
+ // '=' is immediately at start
+ cookiePair = cookiePair.substr(1);
+ firstEq = cookiePair.indexOf("="); // might still need to split on '='
+ }
+ } else {
+ // non-loose mode
+ if (firstEq <= 0) {
+ // no '=' or is at start
+ return; // needs to have non-empty "cookie-name"
+ }
+ }
+
+ let cookieName, cookieValue;
+ if (firstEq <= 0) {
+ cookieName = "";
+ cookieValue = cookiePair.trim();
+ } else {
+ cookieName = cookiePair.substr(0, firstEq).trim();
+ cookieValue = cookiePair.substr(firstEq + 1).trim();
+ }
+
+ if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
+ return;
+ }
+
+ const c = new Cookie();
+ c.key = cookieName;
+ c.value = cookieValue;
+ return c;
+}
+
+function parse(str, options) {
+ if (!options || typeof options !== "object") {
+ options = {};
+ }
+
+ if (validators.isEmptyString(str) || !validators.isString(str)) {
+ return null;
+ }
+
+ str = str.trim();
+
+ // We use a regex to parse the "name-value-pair" part of S5.2
+ const firstSemi = str.indexOf(";"); // S5.2 step 1
+ const cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi);
+ const c = parseCookiePair(cookiePair, !!options.loose);
+ if (!c) {
+ return;
+ }
+
+ if (firstSemi === -1) {
+ return c;
+ }
+
+ // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
+ // (including the %x3B (";") in question)." plus later on in the same section
+ // "discard the first ";" and trim".
+ const unparsed = str.slice(firstSemi + 1).trim();
+
+ // "If the unparsed-attributes string is empty, skip the rest of these
+ // steps."
+ if (unparsed.length === 0) {
+ return c;
+ }
+
+ /*
+ * S5.2 says that when looping over the items "[p]rocess the attribute-name
+ * and attribute-value according to the requirements in the following
+ * subsections" for every item. Plus, for many of the individual attributes
+ * in S5.3 it says to use the "attribute-value of the last attribute in the
+ * cookie-attribute-list". Therefore, in this implementation, we overwrite
+ * the previous value.
+ */
+ const cookie_avs = unparsed.split(";");
+ while (cookie_avs.length) {
+ const av = cookie_avs.shift().trim();
+ if (av.length === 0) {
+ // happens if ";;" appears
+ continue;
+ }
+ const av_sep = av.indexOf("=");
+ let av_key, av_value;
+
+ if (av_sep === -1) {
+ av_key = av;
+ av_value = null;
+ } else {
+ av_key = av.substr(0, av_sep);
+ av_value = av.substr(av_sep + 1);
+ }
+
+ av_key = av_key.trim().toLowerCase();
+
+ if (av_value) {
+ av_value = av_value.trim();
+ }
+
+ switch (av_key) {
+ case "expires": // S5.2.1
+ if (av_value) {
+ const exp = parseDate(av_value);
+ // "If the attribute-value failed to parse as a cookie date, ignore the
+ // cookie-av."
+ if (exp) {
+ // over and underflow not realistically a concern: V8's getTime() seems to
+ // store something larger than a 32-bit time_t (even with 32-bit node)
+ c.expires = exp;
+ }
+ }
+ break;
+
+ case "max-age": // S5.2.2
+ if (av_value) {
+ // "If the first character of the attribute-value is not a DIGIT or a "-"
+ // character ...[or]... If the remainder of attribute-value contains a
+ // non-DIGIT character, ignore the cookie-av."
+ if (/^-?[0-9]+$/.test(av_value)) {
+ const delta = parseInt(av_value, 10);
+ // "If delta-seconds is less than or equal to zero (0), let expiry-time
+ // be the earliest representable date and time."
+ c.setMaxAge(delta);
+ }
+ }
+ break;
+
+ case "domain": // S5.2.3
+ // "If the attribute-value is empty, the behavior is undefined. However,
+ // the user agent SHOULD ignore the cookie-av entirely."
+ if (av_value) {
+ // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
+ // (".") character."
+ const domain = av_value.trim().replace(/^\./, "");
+ if (domain) {
+ // "Convert the cookie-domain to lower case."
+ c.domain = domain.toLowerCase();
+ }
+ }
+ break;
+
+ case "path": // S5.2.4
+ /*
+ * "If the attribute-value is empty or if the first character of the
+ * attribute-value is not %x2F ("/"):
+ * Let cookie-path be the default-path.
+ * Otherwise:
+ * Let cookie-path be the attribute-value."
+ *
+ * We'll represent the default-path as null since it depends on the
+ * context of the parsing.
+ */
+ c.path = av_value && av_value[0] === "/" ? av_value : null;
+ break;
+
+ case "secure": // S5.2.5
+ /*
+ * "If the attribute-name case-insensitively matches the string "Secure",
+ * the user agent MUST append an attribute to the cookie-attribute-list
+ * with an attribute-name of Secure and an empty attribute-value."
+ */
+ c.secure = true;
+ break;
+
+ case "httponly": // S5.2.6 -- effectively the same as 'secure'
+ c.httpOnly = true;
+ break;
+
+ case "samesite": // RFC6265bis-02 S5.3.7
+ const enforcement = av_value ? av_value.toLowerCase() : "";
+ switch (enforcement) {
+ case "strict":
+ c.sameSite = "strict";
+ break;
+ case "lax":
+ c.sameSite = "lax";
+ break;
+ case "none":
+ c.sameSite = "none";
+ break;
+ default:
+ c.sameSite = undefined;
+ break;
+ }
+ break;
+
+ default:
+ c.extensions = c.extensions || [];
+ c.extensions.push(av);
+ break;
+ }
+ }
+
+ return c;
+}
+
+/**
+ * If the cookie-name begins with a case-sensitive match for the
+ * string "__Secure-", abort these steps and ignore the cookie
+ * entirely unless the cookie's secure-only-flag is true.
+ * @param cookie
+ * @returns boolean
+ */
+function isSecurePrefixConditionMet(cookie) {
+ validators.validate(validators.isObject(cookie), cookie);
+ return !cookie.key.startsWith("__Secure-") || cookie.secure;
+}
+
+/**
+ * If the cookie-name begins with a case-sensitive match for the
+ * string "__Host-", abort these steps and ignore the cookie
+ * entirely unless the cookie meets all the following criteria:
+ * 1. The cookie's secure-only-flag is true.
+ * 2. The cookie's host-only-flag is true.
+ * 3. The cookie-attribute-list contains an attribute with an
+ * attribute-name of "Path", and the cookie's path is "/".
+ * @param cookie
+ * @returns boolean
+ */
+function isHostPrefixConditionMet(cookie) {
+ validators.validate(validators.isObject(cookie));
+ return (
+ !cookie.key.startsWith("__Host-") ||
+ (cookie.secure &&
+ cookie.hostOnly &&
+ cookie.path != null &&
+ cookie.path === "/")
+ );
+}
+
+// avoid the V8 deoptimization monster!
+function jsonParse(str) {
+ let obj;
+ try {
+ obj = JSON.parse(str);
+ } catch (e) {
+ return e;
+ }
+ return obj;
+}
+
+function fromJSON(str) {
+ if (!str || validators.isEmptyString(str)) {
+ return null;
+ }
+
+ let obj;
+ if (typeof str === "string") {
+ obj = jsonParse(str);
+ if (obj instanceof Error) {
+ return null;
+ }
+ } else {
+ // assume it's an Object
+ obj = str;
+ }
+
+ const c = new Cookie();
+ for (let i = 0; i < Cookie.serializableProperties.length; i++) {
+ const prop = Cookie.serializableProperties[i];
+ if (obj[prop] === undefined || obj[prop] === cookieDefaults[prop]) {
+ continue; // leave as prototype default
+ }
+
+ if (prop === "expires" || prop === "creation" || prop === "lastAccessed") {
+ if (obj[prop] === null) {
+ c[prop] = null;
+ } else {
+ c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]);
+ }
+ } else {
+ c[prop] = obj[prop];
+ }
+ }
+
+ return c;
+}
+
+/* Section 5.4 part 2:
+ * "* Cookies with longer paths are listed before cookies with
+ * shorter paths.
+ *
+ * * Among cookies that have equal-length path fields, cookies with
+ * earlier creation-times are listed before cookies with later
+ * creation-times."
+ */
+
+function cookieCompare(a, b) {
+ validators.validate(validators.isObject(a), a);
+ validators.validate(validators.isObject(b), b);
+ let cmp = 0;
+
+ // descending for length: b CMP a
+ const aPathLen = a.path ? a.path.length : 0;
+ const bPathLen = b.path ? b.path.length : 0;
+ cmp = bPathLen - aPathLen;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ // ascending for time: a CMP b
+ const aTime = a.creation ? a.creation.getTime() : MAX_TIME;
+ const bTime = b.creation ? b.creation.getTime() : MAX_TIME;
+ cmp = aTime - bTime;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ // break ties for the same millisecond (precision of JavaScript's clock)
+ cmp = a.creationIndex - b.creationIndex;
+
+ return cmp;
+}
+
+// Gives the permutation of all possible pathMatch()es of a given path. The
+// array is in longest-to-shortest order. Handy for indexing.
+function permutePath(path) {
+ validators.validate(validators.isString(path));
+ if (path === "/") {
+ return ["/"];
+ }
+ const permutations = [path];
+ while (path.length > 1) {
+ const lindex = path.lastIndexOf("/");
+ if (lindex === 0) {
+ break;
+ }
+ path = path.substr(0, lindex);
+ permutations.push(path);
+ }
+ permutations.push("/");
+ return permutations;
+}
+
+function getCookieContext(url) {
+ if (url instanceof Object) {
+ return url;
+ }
+ // NOTE: decodeURI will throw on malformed URIs (see GH-32).
+ // Therefore, we will just skip decoding for such URIs.
+ try {
+ url = decodeURI(url);
+ } catch (err) {
+ // Silently swallow error
+ }
+
+ return urlParse(url);
+}
+
+const cookieDefaults = {
+ // the order in which the RFC has them:
+ key: "",
+ value: "",
+ expires: "Infinity",
+ maxAge: null,
+ domain: null,
+ path: null,
+ secure: false,
+ httpOnly: false,
+ extensions: null,
+ // set by the CookieJar:
+ hostOnly: null,
+ pathIsDefault: null,
+ creation: null,
+ lastAccessed: null,
+ sameSite: undefined
+};
+
+class Cookie {
+ constructor(options = {}) {
+ const customInspectSymbol = getCustomInspectSymbol();
+ if (customInspectSymbol) {
+ this[customInspectSymbol] = this.inspect;
+ }
+
+ Object.assign(this, cookieDefaults, options);
+ this.creation = this.creation || new Date();
+
+ // used to break creation ties in cookieCompare():
+ Object.defineProperty(this, "creationIndex", {
+ configurable: false,
+ enumerable: false, // important for assert.deepEqual checks
+ writable: true,
+ value: ++Cookie.cookiesCreated
+ });
+ }
+
+ inspect() {
+ const now = Date.now();
+ const hostOnly = this.hostOnly != null ? this.hostOnly : "?";
+ const createAge = this.creation
+ ? `${now - this.creation.getTime()}ms`
+ : "?";
+ const accessAge = this.lastAccessed
+ ? `${now - this.lastAccessed.getTime()}ms`
+ : "?";
+ return `Cookie="${this.toString()}; hostOnly=${hostOnly}; aAge=${accessAge}; cAge=${createAge}"`;
+ }
+
+ toJSON() {
+ const obj = {};
+
+ for (const prop of Cookie.serializableProperties) {
+ if (this[prop] === cookieDefaults[prop]) {
+ continue; // leave as prototype default
+ }
+
+ if (
+ prop === "expires" ||
+ prop === "creation" ||
+ prop === "lastAccessed"
+ ) {
+ if (this[prop] === null) {
+ obj[prop] = null;
+ } else {
+ obj[prop] =
+ this[prop] == "Infinity" // intentionally not ===
+ ? "Infinity"
+ : this[prop].toISOString();
+ }
+ } else if (prop === "maxAge") {
+ if (this[prop] !== null) {
+ // again, intentionally not ===
+ obj[prop] =
+ this[prop] == Infinity || this[prop] == -Infinity
+ ? this[prop].toString()
+ : this[prop];
+ }
+ } else {
+ if (this[prop] !== cookieDefaults[prop]) {
+ obj[prop] = this[prop];
+ }
+ }
+ }
+
+ return obj;
+ }
+
+ clone() {
+ return fromJSON(this.toJSON());
+ }
+
+ validate() {
+ if (!COOKIE_OCTETS.test(this.value)) {
+ return false;
+ }
+ if (
+ this.expires != Infinity &&
+ !(this.expires instanceof Date) &&
+ !parseDate(this.expires)
+ ) {
+ return false;
+ }
+ if (this.maxAge != null && this.maxAge <= 0) {
+ return false; // "Max-Age=" non-zero-digit *DIGIT
+ }
+ if (this.path != null && !PATH_VALUE.test(this.path)) {
+ return false;
+ }
+
+ const cdomain = this.cdomain();
+ if (cdomain) {
+ if (cdomain.match(/\.$/)) {
+ return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
+ }
+ const suffix = pubsuffix.getPublicSuffix(cdomain);
+ if (suffix == null) {
+ // it's a public suffix
+ return false;
+ }
+ }
+ return true;
+ }
+
+ setExpires(exp) {
+ if (exp instanceof Date) {
+ this.expires = exp;
+ } else {
+ this.expires = parseDate(exp) || "Infinity";
+ }
+ }
+
+ setMaxAge(age) {
+ if (age === Infinity || age === -Infinity) {
+ this.maxAge = age.toString(); // so JSON.stringify() works
+ } else {
+ this.maxAge = age;
+ }
+ }
+
+ cookieString() {
+ let val = this.value;
+ if (val == null) {
+ val = "";
+ }
+ if (this.key === "") {
+ return val;
+ }
+ return `${this.key}=${val}`;
+ }
+
+ // gives Set-Cookie header format
+ toString() {
+ let str = this.cookieString();
+
+ if (this.expires != Infinity) {
+ if (this.expires instanceof Date) {
+ str += `; Expires=${formatDate(this.expires)}`;
+ } else {
+ str += `; Expires=${this.expires}`;
+ }
+ }
+
+ if (this.maxAge != null && this.maxAge != Infinity) {
+ str += `; Max-Age=${this.maxAge}`;
+ }
+
+ if (this.domain && !this.hostOnly) {
+ str += `; Domain=${this.domain}`;
+ }
+ if (this.path) {
+ str += `; Path=${this.path}`;
+ }
+
+ if (this.secure) {
+ str += "; Secure";
+ }
+ if (this.httpOnly) {
+ str += "; HttpOnly";
+ }
+ if (this.sameSite && this.sameSite !== "none") {
+ const ssCanon = Cookie.sameSiteCanonical[this.sameSite.toLowerCase()];
+ str += `; SameSite=${ssCanon ? ssCanon : this.sameSite}`;
+ }
+ if (this.extensions) {
+ this.extensions.forEach(ext => {
+ str += `; ${ext}`;
+ });
+ }
+
+ return str;
+ }
+
+ // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere)
+ // S5.3 says to give the "latest representable date" for which we use Infinity
+ // For "expired" we use 0
+ TTL(now) {
+ /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
+ * attribute, the Max-Age attribute has precedence and controls the
+ * expiration date of the cookie.
+ * (Concurs with S5.3 step 3)
+ */
+ if (this.maxAge != null) {
+ return this.maxAge <= 0 ? 0 : this.maxAge * 1000;
+ }
+
+ let expires = this.expires;
+ if (expires != Infinity) {
+ if (!(expires instanceof Date)) {
+ expires = parseDate(expires) || Infinity;
+ }
+
+ if (expires == Infinity) {
+ return Infinity;
+ }
+
+ return expires.getTime() - (now || Date.now());
+ }
+
+ return Infinity;
+ }
+
+ // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere)
+ expiryTime(now) {
+ if (this.maxAge != null) {
+ const relativeTo = now || this.creation || new Date();
+ const age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000;
+ return relativeTo.getTime() + age;
+ }
+
+ if (this.expires == Infinity) {
+ return Infinity;
+ }
+ return this.expires.getTime();
+ }
+
+ // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere), except it returns a Date
+ expiryDate(now) {
+ const millisec = this.expiryTime(now);
+ if (millisec == Infinity) {
+ return new Date(MAX_TIME);
+ } else if (millisec == -Infinity) {
+ return new Date(MIN_TIME);
+ } else {
+ return new Date(millisec);
+ }
+ }
+
+ // This replaces the "persistent-flag" parts of S5.3 step 3
+ isPersistent() {
+ return this.maxAge != null || this.expires != Infinity;
+ }
+
+ // Mostly S5.1.2 and S5.2.3:
+ canonicalizedDomain() {
+ if (this.domain == null) {
+ return null;
+ }
+ return canonicalDomain(this.domain);
+ }
+
+ cdomain() {
+ return this.canonicalizedDomain();
+ }
+}
+
+Cookie.cookiesCreated = 0;
+Cookie.parse = parse;
+Cookie.fromJSON = fromJSON;
+Cookie.serializableProperties = Object.keys(cookieDefaults);
+Cookie.sameSiteLevel = {
+ strict: 3,
+ lax: 2,
+ none: 1
+};
+
+Cookie.sameSiteCanonical = {
+ strict: "Strict",
+ lax: "Lax"
+};
+
+function getNormalizedPrefixSecurity(prefixSecurity) {
+ if (prefixSecurity != null) {
+ const normalizedPrefixSecurity = prefixSecurity.toLowerCase();
+ /* The three supported options */
+ switch (normalizedPrefixSecurity) {
+ case PrefixSecurityEnum.STRICT:
+ case PrefixSecurityEnum.SILENT:
+ case PrefixSecurityEnum.DISABLED:
+ return normalizedPrefixSecurity;
+ }
+ }
+ /* Default is SILENT */
+ return PrefixSecurityEnum.SILENT;
+}
+
+class CookieJar {
+ constructor(store, options = { rejectPublicSuffixes: true }) {
+ if (typeof options === "boolean") {
+ options = { rejectPublicSuffixes: options };
+ }
+ validators.validate(validators.isObject(options), options);
+ this.rejectPublicSuffixes = options.rejectPublicSuffixes;
+ this.enableLooseMode = !!options.looseMode;
+ this.allowSpecialUseDomain =
+ typeof options.allowSpecialUseDomain === "boolean"
+ ? options.allowSpecialUseDomain
+ : true;
+ this.store = store || new MemoryCookieStore();
+ this.prefixSecurity = getNormalizedPrefixSecurity(options.prefixSecurity);
+ this._cloneSync = syncWrap("clone");
+ this._importCookiesSync = syncWrap("_importCookies");
+ this.getCookiesSync = syncWrap("getCookies");
+ this.getCookieStringSync = syncWrap("getCookieString");
+ this.getSetCookieStringsSync = syncWrap("getSetCookieStrings");
+ this.removeAllCookiesSync = syncWrap("removeAllCookies");
+ this.setCookieSync = syncWrap("setCookie");
+ this.serializeSync = syncWrap("serialize");
+ }
+
+ setCookie(cookie, url, options, cb) {
+ validators.validate(validators.isNonEmptyString(url), cb, options);
+ let err;
+
+ if (validators.isFunction(url)) {
+ cb = url;
+ return cb(new Error("No URL was specified"));
+ }
+
+ const context = getCookieContext(url);
+ if (validators.isFunction(options)) {
+ cb = options;
+ options = {};
+ }
+
+ validators.validate(validators.isFunction(cb), cb);
+
+ if (
+ !validators.isNonEmptyString(cookie) &&
+ !validators.isObject(cookie) &&
+ cookie instanceof String &&
+ cookie.length == 0
+ ) {
+ return cb(null);
+ }
+
+ const host = canonicalDomain(context.hostname);
+ const loose = options.loose || this.enableLooseMode;
+
+ let sameSiteContext = null;
+ if (options.sameSiteContext) {
+ sameSiteContext = checkSameSiteContext(options.sameSiteContext);
+ if (!sameSiteContext) {
+ return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
+ }
+ }
+
+ // S5.3 step 1
+ if (typeof cookie === "string" || cookie instanceof String) {
+ cookie = Cookie.parse(cookie, { loose: loose });
+ if (!cookie) {
+ err = new Error("Cookie failed to parse");
+ return cb(options.ignoreError ? null : err);
+ }
+ } else if (!(cookie instanceof Cookie)) {
+ // If you're seeing this error, and are passing in a Cookie object,
+ // it *might* be a Cookie object from another loaded version of tough-cookie.
+ err = new Error(
+ "First argument to setCookie must be a Cookie object or string"
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+
+ // S5.3 step 2
+ const now = options.now || new Date(); // will assign later to save effort in the face of errors
+
+ // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
+
+ // S5.3 step 4: NOOP; domain is null by default
+
+ // S5.3 step 5: public suffixes
+ if (this.rejectPublicSuffixes && cookie.domain) {
+ const suffix = pubsuffix.getPublicSuffix(cookie.cdomain(), {
+ allowSpecialUseDomain: this.allowSpecialUseDomain,
+ ignoreError: options.ignoreError
+ });
+ if (suffix == null && !IP_V6_REGEX_OBJECT.test(cookie.domain)) {
+ // e.g. "com"
+ err = new Error("Cookie has domain set to a public suffix");
+ return cb(options.ignoreError ? null : err);
+ }
+ }
+
+ // S5.3 step 6:
+ if (cookie.domain) {
+ if (!domainMatch(host, cookie.cdomain(), false)) {
+ err = new Error(
+ `Cookie not in this host's domain. Cookie:${cookie.cdomain()} Request:${host}`
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+
+ if (cookie.hostOnly == null) {
+ // don't reset if already set
+ cookie.hostOnly = false;
+ }
+ } else {
+ cookie.hostOnly = true;
+ cookie.domain = host;
+ }
+
+ //S5.2.4 If the attribute-value is empty or if the first character of the
+ //attribute-value is not %x2F ("/"):
+ //Let cookie-path be the default-path.
+ if (!cookie.path || cookie.path[0] !== "/") {
+ cookie.path = defaultPath(context.pathname);
+ cookie.pathIsDefault = true;
+ }
+
+ // S5.3 step 8: NOOP; secure attribute
+ // S5.3 step 9: NOOP; httpOnly attribute
+
+ // S5.3 step 10
+ if (options.http === false && cookie.httpOnly) {
+ err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+
+ // 6252bis-02 S5.4 Step 13 & 14:
+ if (
+ cookie.sameSite !== "none" &&
+ cookie.sameSite !== undefined &&
+ sameSiteContext
+ ) {
+ // "If the cookie's "same-site-flag" is not "None", and the cookie
+ // is being set from a context whose "site for cookies" is not an
+ // exact match for request-uri's host's registered domain, then
+ // abort these steps and ignore the newly created cookie entirely."
+ if (sameSiteContext === "none") {
+ err = new Error(
+ "Cookie is SameSite but this is a cross-origin request"
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+ }
+
+ /* 6265bis-02 S5.4 Steps 15 & 16 */
+ const ignoreErrorForPrefixSecurity =
+ this.prefixSecurity === PrefixSecurityEnum.SILENT;
+ const prefixSecurityDisabled =
+ this.prefixSecurity === PrefixSecurityEnum.DISABLED;
+ /* If prefix checking is not disabled ...*/
+ if (!prefixSecurityDisabled) {
+ let errorFound = false;
+ let errorMsg;
+ /* Check secure prefix condition */
+ if (!isSecurePrefixConditionMet(cookie)) {
+ errorFound = true;
+ errorMsg = "Cookie has __Secure prefix but Secure attribute is not set";
+ } else if (!isHostPrefixConditionMet(cookie)) {
+ /* Check host prefix condition */
+ errorFound = true;
+ errorMsg =
+ "Cookie has __Host prefix but either Secure or HostOnly attribute is not set or Path is not '/'";
+ }
+ if (errorFound) {
+ return cb(
+ options.ignoreError || ignoreErrorForPrefixSecurity
+ ? null
+ : new Error(errorMsg)
+ );
+ }
+ }
+
+ const store = this.store;
+
+ if (!store.updateCookie) {
+ store.updateCookie = function(oldCookie, newCookie, cb) {
+ this.putCookie(newCookie, cb);
+ };
+ }
+
+ function withCookie(err, oldCookie) {
+ if (err) {
+ return cb(err);
+ }
+
+ const next = function(err) {
+ if (err) {
+ return cb(err);
+ } else {
+ cb(null, cookie);
+ }
+ };
+
+ if (oldCookie) {
+ // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
+ // domain, and path as the newly created cookie:"
+ if (options.http === false && oldCookie.httpOnly) {
+ // step 11.2
+ err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+ cookie.creation = oldCookie.creation; // step 11.3
+ cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
+ cookie.lastAccessed = now;
+ // Step 11.4 (delete cookie) is implied by just setting the new one:
+ store.updateCookie(oldCookie, cookie, next); // step 12
+ } else {
+ cookie.creation = cookie.lastAccessed = now;
+ store.putCookie(cookie, next); // step 12
+ }
+ }
+
+ store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
+ }
+
+ // RFC6365 S5.4
+ getCookies(url, options, cb) {
+ validators.validate(validators.isNonEmptyString(url), cb, url);
+ const context = getCookieContext(url);
+ if (validators.isFunction(options)) {
+ cb = options;
+ options = {};
+ }
+ validators.validate(validators.isObject(options), cb, options);
+ validators.validate(validators.isFunction(cb), cb);
+
+ const host = canonicalDomain(context.hostname);
+ const path = context.pathname || "/";
+
+ let secure = options.secure;
+ if (
+ secure == null &&
+ context.protocol &&
+ (context.protocol == "https:" || context.protocol == "wss:")
+ ) {
+ secure = true;
+ }
+
+ let sameSiteLevel = 0;
+ if (options.sameSiteContext) {
+ const sameSiteContext = checkSameSiteContext(options.sameSiteContext);
+ sameSiteLevel = Cookie.sameSiteLevel[sameSiteContext];
+ if (!sameSiteLevel) {
+ return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
+ }
+ }
+
+ let http = options.http;
+ if (http == null) {
+ http = true;
+ }
+
+ const now = options.now || Date.now();
+ const expireCheck = options.expire !== false;
+ const allPaths = !!options.allPaths;
+ const store = this.store;
+
+ function matchingCookie(c) {
+ // "Either:
+ // The cookie's host-only-flag is true and the canonicalized
+ // request-host is identical to the cookie's domain.
+ // Or:
+ // The cookie's host-only-flag is false and the canonicalized
+ // request-host domain-matches the cookie's domain."
+ if (c.hostOnly) {
+ if (c.domain != host) {
+ return false;
+ }
+ } else {
+ if (!domainMatch(host, c.domain, false)) {
+ return false;
+ }
+ }
+
+ // "The request-uri's path path-matches the cookie's path."
+ if (!allPaths && !pathMatch(path, c.path)) {
+ return false;
+ }
+
+ // "If the cookie's secure-only-flag is true, then the request-uri's
+ // scheme must denote a "secure" protocol"
+ if (c.secure && !secure) {
+ return false;
+ }
+
+ // "If the cookie's http-only-flag is true, then exclude the cookie if the
+ // cookie-string is being generated for a "non-HTTP" API"
+ if (c.httpOnly && !http) {
+ return false;
+ }
+
+ // RFC6265bis-02 S5.3.7
+ if (sameSiteLevel) {
+ const cookieLevel = Cookie.sameSiteLevel[c.sameSite || "none"];
+ if (cookieLevel > sameSiteLevel) {
+ // only allow cookies at or below the request level
+ return false;
+ }
+ }
+
+ // deferred from S5.3
+ // non-RFC: allow retention of expired cookies by choice
+ if (expireCheck && c.expiryTime() <= now) {
+ store.removeCookie(c.domain, c.path, c.key, () => {}); // result ignored
+ return false;
+ }
+
+ return true;
+ }
+
+ store.findCookies(
+ host,
+ allPaths ? null : path,
+ this.allowSpecialUseDomain,
+ (err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ cookies = cookies.filter(matchingCookie);
+
+ // sorting of S5.4 part 2
+ if (options.sort !== false) {
+ cookies = cookies.sort(cookieCompare);
+ }
+
+ // S5.4 part 3
+ const now = new Date();
+ for (const cookie of cookies) {
+ cookie.lastAccessed = now;
+ }
+ // TODO persist lastAccessed
+
+ cb(null, cookies);
+ }
+ );
+ }
+
+ getCookieString(...args) {
+ const cb = args.pop();
+ validators.validate(validators.isFunction(cb), cb);
+ const next = function(err, cookies) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(
+ null,
+ cookies
+ .sort(cookieCompare)
+ .map(c => c.cookieString())
+ .join("; ")
+ );
+ }
+ };
+ args.push(next);
+ this.getCookies.apply(this, args);
+ }
+
+ getSetCookieStrings(...args) {
+ const cb = args.pop();
+ validators.validate(validators.isFunction(cb), cb);
+ const next = function(err, cookies) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(
+ null,
+ cookies.map(c => {
+ return c.toString();
+ })
+ );
+ }
+ };
+ args.push(next);
+ this.getCookies.apply(this, args);
+ }
+
+ serialize(cb) {
+ validators.validate(validators.isFunction(cb), cb);
+ let type = this.store.constructor.name;
+ if (validators.isObject(type)) {
+ type = null;
+ }
+
+ // update README.md "Serialization Format" if you change this, please!
+ const serialized = {
+ // The version of tough-cookie that serialized this jar. Generally a good
+ // practice since future versions can make data import decisions based on
+ // known past behavior. When/if this matters, use `semver`.
+ version: `tough-cookie@${VERSION}`,
+
+ // add the store type, to make humans happy:
+ storeType: type,
+
+ // CookieJar configuration:
+ rejectPublicSuffixes: !!this.rejectPublicSuffixes,
+ enableLooseMode: !!this.enableLooseMode,
+ allowSpecialUseDomain: !!this.allowSpecialUseDomain,
+ prefixSecurity: getNormalizedPrefixSecurity(this.prefixSecurity),
+
+ // this gets filled from getAllCookies:
+ cookies: []
+ };
+
+ if (
+ !(
+ this.store.getAllCookies &&
+ typeof this.store.getAllCookies === "function"
+ )
+ ) {
+ return cb(
+ new Error(
+ "store does not support getAllCookies and cannot be serialized"
+ )
+ );
+ }
+
+ this.store.getAllCookies((err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ serialized.cookies = cookies.map(cookie => {
+ // convert to serialized 'raw' cookies
+ cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie;
+
+ // Remove the index so new ones get assigned during deserialization
+ delete cookie.creationIndex;
+
+ return cookie;
+ });
+
+ return cb(null, serialized);
+ });
+ }
+
+ toJSON() {
+ return this.serializeSync();
+ }
+
+ // use the class method CookieJar.deserialize instead of calling this directly
+ _importCookies(serialized, cb) {
+ let cookies = serialized.cookies;
+ if (!cookies || !Array.isArray(cookies)) {
+ return cb(new Error("serialized jar has no cookies array"));
+ }
+ cookies = cookies.slice(); // do not modify the original
+
+ const putNext = err => {
+ if (err) {
+ return cb(err);
+ }
+
+ if (!cookies.length) {
+ return cb(err, this);
+ }
+
+ let cookie;
+ try {
+ cookie = fromJSON(cookies.shift());
+ } catch (e) {
+ return cb(e);
+ }
+
+ if (cookie === null) {
+ return putNext(null); // skip this cookie
+ }
+
+ this.store.putCookie(cookie, putNext);
+ };
+
+ putNext();
+ }
+
+ clone(newStore, cb) {
+ if (arguments.length === 1) {
+ cb = newStore;
+ newStore = null;
+ }
+
+ this.serialize((err, serialized) => {
+ if (err) {
+ return cb(err);
+ }
+ CookieJar.deserialize(serialized, newStore, cb);
+ });
+ }
+
+ cloneSync(newStore) {
+ if (arguments.length === 0) {
+ return this._cloneSync();
+ }
+ if (!newStore.synchronous) {
+ throw new Error(
+ "CookieJar clone destination store is not synchronous; use async API instead."
+ );
+ }
+ return this._cloneSync(newStore);
+ }
+
+ removeAllCookies(cb) {
+ validators.validate(validators.isFunction(cb), cb);
+ const store = this.store;
+
+ // Check that the store implements its own removeAllCookies(). The default
+ // implementation in Store will immediately call the callback with a "not
+ // implemented" Error.
+ if (
+ typeof store.removeAllCookies === "function" &&
+ store.removeAllCookies !== Store.prototype.removeAllCookies
+ ) {
+ return store.removeAllCookies(cb);
+ }
+
+ store.getAllCookies((err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ if (cookies.length === 0) {
+ return cb(null);
+ }
+
+ let completedCount = 0;
+ const removeErrors = [];
+
+ function removeCookieCb(removeErr) {
+ if (removeErr) {
+ removeErrors.push(removeErr);
+ }
+
+ completedCount++;
+
+ if (completedCount === cookies.length) {
+ return cb(removeErrors.length ? removeErrors[0] : null);
+ }
+ }
+
+ cookies.forEach(cookie => {
+ store.removeCookie(
+ cookie.domain,
+ cookie.path,
+ cookie.key,
+ removeCookieCb
+ );
+ });
+ });
+ }
+
+ static deserialize(strOrObj, store, cb) {
+ if (arguments.length !== 3) {
+ // store is optional
+ cb = store;
+ store = null;
+ }
+ validators.validate(validators.isFunction(cb), cb);
+
+ let serialized;
+ if (typeof strOrObj === "string") {
+ serialized = jsonParse(strOrObj);
+ if (serialized instanceof Error) {
+ return cb(serialized);
+ }
+ } else {
+ serialized = strOrObj;
+ }
+
+ const jar = new CookieJar(store, {
+ rejectPublicSuffixes: serialized.rejectPublicSuffixes,
+ looseMode: serialized.enableLooseMode,
+ allowSpecialUseDomain: serialized.allowSpecialUseDomain,
+ prefixSecurity: serialized.prefixSecurity
+ });
+ jar._importCookies(serialized, err => {
+ if (err) {
+ return cb(err);
+ }
+ cb(null, jar);
+ });
+ }
+
+ static deserializeSync(strOrObj, store) {
+ const serialized =
+ typeof strOrObj === "string" ? JSON.parse(strOrObj) : strOrObj;
+ const jar = new CookieJar(store, {
+ rejectPublicSuffixes: serialized.rejectPublicSuffixes,
+ looseMode: serialized.enableLooseMode
+ });
+
+ // catch this mistake early:
+ if (!jar.store.synchronous) {
+ throw new Error(
+ "CookieJar store is not synchronous; use async API instead."
+ );
+ }
+
+ jar._importCookiesSync(serialized);
+ return jar;
+ }
+}
+CookieJar.fromJSON = CookieJar.deserializeSync;
+
+[
+ "_importCookies",
+ "clone",
+ "getCookies",
+ "getCookieString",
+ "getSetCookieStrings",
+ "removeAllCookies",
+ "serialize",
+ "setCookie"
+].forEach(name => {
+ CookieJar.prototype[name] = fromCallback(CookieJar.prototype[name]);
+});
+CookieJar.deserialize = fromCallback(CookieJar.deserialize);
+
+// Use a closure to provide a true imperative API for synchronous stores.
+function syncWrap(method) {
+ return function(...args) {
+ if (!this.store.synchronous) {
+ throw new Error(
+ "CookieJar store is not synchronous; use async API instead."
+ );
+ }
+
+ let syncErr, syncResult;
+ this[method](...args, (err, result) => {
+ syncErr = err;
+ syncResult = result;
+ });
+
+ if (syncErr) {
+ throw syncErr;
+ }
+ return syncResult;
+ };
+}
+
+cookie.version = VERSION;
+cookie.CookieJar = CookieJar;
+cookie.Cookie = Cookie;
+cookie.Store = Store;
+cookie.MemoryCookieStore = MemoryCookieStore;
+cookie.parseDate = parseDate;
+cookie.formatDate = formatDate;
+cookie.parse = parse;
+cookie.fromJSON = fromJSON;
+cookie.domainMatch = domainMatch;
+cookie.defaultPath = defaultPath;
+cookie.pathMatch = pathMatch;
+cookie.getPublicSuffix = pubsuffix.getPublicSuffix;
+cookie.cookieCompare = cookieCompare;
+cookie.permuteDomain = requirePermuteDomain().permuteDomain;
+cookie.permutePath = permutePath;
+cookie.canonicalDomain = canonicalDomain;
+cookie.PrefixSecurityEnum = PrefixSecurityEnum;
+cookie.ParameterError = validators.ParameterError;
+
+const { promisify } = require$$0$2;
+const tough = cookie;
+
+var fetchCookie = function fetchCookieDecorator (fetch, jar, ignoreError = true) {
+ fetch = fetch || window.fetch;
+ jar = jar || new tough.CookieJar();
+
+ const getCookieString = promisify(jar.getCookieString.bind(jar));
+ const setCookie = promisify(jar.setCookie.bind(jar));
+
+ async function fetchCookie (url, opts) {
+ opts = opts || {};
+
+ // Prepare request
+ const cookie = await getCookieString(typeof url === 'string' ? url : url.url);
+
+ if (url.headers && typeof url.headers.append === 'function') {
+ url.headers.append('cookie', cookie);
+ } else if (opts.headers && typeof opts.headers.append === 'function') {
+ opts.headers.append('cookie', cookie);
+ } else {
+ opts.headers = Object.assign(
+ opts.headers || {},
+ cookie ? { cookie: cookie } : {}
+ );
+ }
+
+ // Actual request
+ const res = await fetch(url, opts);
+
+ // Get cookie header
+ var cookies = [];
+ if (res.headers.getAll) {
+ // node-fetch v1
+ cookies = res.headers.getAll('set-cookie');
+ // console.warn("You are using a fetch version that supports 'Headers.getAll' which is deprecated!")
+ // console.warn("In the future 'fetch-cookie-v2' may discontinue supporting that fetch implementation.")
+ // console.warn('Details: https://developer.mozilla.org/en-US/docs/Web/API/Headers/getAll')
+ } else {
+ // node-fetch v2
+ const headers = res.headers.raw();
+ if (headers['set-cookie'] !== undefined) {
+ cookies = headers['set-cookie'];
+ }
+ }
+
+ // Store all present cookies
+ await Promise.all(cookies.map((cookie) => setCookie(cookie, res.url, { ignoreError })));
+
+ return res
+ }
+
+ return fetchCookie
+};
+
+var fetchCookie$1 = /*@__PURE__*/getDefaultExportFromCjs(fetchCookie);
+
+/**
+ * @author Toru Nagashima
+ * @copyright 2015 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+/**
+ * @typedef {object} PrivateData
+ * @property {EventTarget} eventTarget The event target.
+ * @property {{type:string}} event The original event object.
+ * @property {number} eventPhase The current event phase.
+ * @property {EventTarget|null} currentTarget The current event target.
+ * @property {boolean} canceled The flag to prevent default.
+ * @property {boolean} stopped The flag to stop propagation.
+ * @property {boolean} immediateStopped The flag to stop propagation immediately.
+ * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.
+ * @property {number} timeStamp The unix time.
+ * @private
+ */
+
+/**
+ * Private data for event wrappers.
+ * @type {WeakMap}
+ * @private
+ */
+const privateData = new WeakMap();
+
+/**
+ * Cache for wrapper classes.
+ * @type {WeakMap
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+function Deque(capacity) {
+ this._capacity = getCapacity(capacity);
+ this._length = 0;
+ this._front = 0;
+ if (isArray(capacity)) {
+ var len = capacity.length;
+ for (var i = 0; i < len; ++i) {
+ this[i] = capacity[i];
+ }
+ this._length = len;
+ }
+}
+
+Deque.prototype.toArray = function Deque$toArray() {
+ var len = this._length;
+ var ret = new Array(len);
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ ret[j] = this[(front + j) & (capacity - 1)];
+ }
+ return ret;
+};
+
+Deque.prototype.push = function Deque$push(item) {
+ var argsLength = arguments.length;
+ var length = this._length;
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = 0; i < argsLength; ++i) {
+ this._checkCapacity(length + 1);
+ var j = (this._front + length) & (this._capacity - 1);
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ }
+ return length;
+ }
+ else {
+ var j = this._front;
+ for (var i = 0; i < argsLength; ++i) {
+ this[(j + length) & (capacity - 1)] = arguments[i];
+ j++;
+ }
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var i = (this._front + length) & (this._capacity - 1);
+ this[i] = item;
+ this._length = length + 1;
+ return length + 1;
+};
+
+Deque.prototype.pop = function Deque$pop() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var i = (this._front + length - 1) & (this._capacity - 1);
+ var ret = this[i];
+ this[i] = void 0;
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.shift = function Deque$shift() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var front = this._front;
+ var ret = this[front];
+ this[front] = void 0;
+ this._front = (front + 1) & (this._capacity - 1);
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.unshift = function Deque$unshift(item) {
+ var length = this._length;
+ var argsLength = arguments.length;
+
+
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = argsLength - 1; i >= 0; i--) {
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var j = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ this._front = j;
+ }
+ return length;
+ }
+ else {
+ var front = this._front;
+ for (var i = argsLength - 1; i >= 0; i--) {
+ var j = (((( front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ front = j;
+ }
+ this._front = front;
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var i = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[i] = item;
+ this._length = length + 1;
+ this._front = i;
+ return length + 1;
+};
+
+Deque.prototype.peekBack = function Deque$peekBack() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var index = (this._front + length - 1) & (this._capacity - 1);
+ return this[index];
+};
+
+Deque.prototype.peekFront = function Deque$peekFront() {
+ if (this._length === 0) {
+ return void 0;
+ }
+ return this[this._front];
+};
+
+Deque.prototype.get = function Deque$get(index) {
+ var i = index;
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ var len = this._length;
+ if (i < 0) {
+ i = i + len;
+ }
+ if (i < 0 || i >= len) {
+ return void 0;
+ }
+ return this[(this._front + i) & (this._capacity - 1)];
+};
+
+Deque.prototype.isEmpty = function Deque$isEmpty() {
+ return this._length === 0;
+};
+
+Deque.prototype.clear = function Deque$clear() {
+ var len = this._length;
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ this[(front + j) & (capacity - 1)] = void 0;
+ }
+ this._length = 0;
+ this._front = 0;
+};
+
+Deque.prototype.toString = function Deque$toString() {
+ return this.toArray().toString();
+};
+
+Deque.prototype.valueOf = Deque.prototype.toString;
+Deque.prototype.removeFront = Deque.prototype.shift;
+Deque.prototype.removeBack = Deque.prototype.pop;
+Deque.prototype.insertFront = Deque.prototype.unshift;
+Deque.prototype.insertBack = Deque.prototype.push;
+Deque.prototype.enqueue = Deque.prototype.push;
+Deque.prototype.dequeue = Deque.prototype.shift;
+Deque.prototype.toJSON = Deque.prototype.toArray;
+
+Object.defineProperty(Deque.prototype, "length", {
+ get: function() {
+ return this._length;
+ },
+ set: function() {
+ throw new RangeError("");
+ }
+});
+
+Deque.prototype._checkCapacity = function Deque$_checkCapacity(size) {
+ if (this._capacity < size) {
+ this._resizeTo(getCapacity(this._capacity * 1.5 + 16));
+ }
+};
+
+Deque.prototype._resizeTo = function Deque$_resizeTo(capacity) {
+ var oldCapacity = this._capacity;
+ this._capacity = capacity;
+ var front = this._front;
+ var length = this._length;
+ if (front + length > oldCapacity) {
+ var moveItemsCount = (front + length) & (oldCapacity - 1);
+ arrayMove(this, 0, this, oldCapacity, moveItemsCount);
+ }
+};
+
+
+var isArray = Array.isArray;
+
+function arrayMove(src, srcIndex, dst, dstIndex, len) {
+ for (var j = 0; j < len; ++j) {
+ dst[j + dstIndex] = src[j + srcIndex];
+ src[j + srcIndex] = void 0;
+ }
+}
+
+function pow2AtLeast(n) {
+ n = n >>> 0;
+ n = n - 1;
+ n = n | (n >> 1);
+ n = n | (n >> 2);
+ n = n | (n >> 4);
+ n = n | (n >> 8);
+ n = n | (n >> 16);
+ return n + 1;
+}
+
+function getCapacity(capacity) {
+ if (typeof capacity !== "number") {
+ if (isArray(capacity)) {
+ capacity = capacity.length;
+ }
+ else {
+ return 16;
+ }
+ }
+ return pow2AtLeast(
+ Math.min(
+ Math.max(16, capacity), 1073741824)
+ );
+}
+
+var deque = Deque;
+
+var Deque$1 = /*@__PURE__*/getDefaultExportFromCjs(deque);
+
+function readAsBlobOrBuffer(storedObject, type) {
+ // In Node, we've stored a buffer
+ storedObject.type = type; // non-standard, but used for consistency
+ return storedObject;
+}
+
+// in Node, we store the buffer directly
+function prepareAttachmentForStorage(attData, cb) {
+ cb(attData);
+}
+
+function createEmptyBlobOrBuffer(type) {
+ return typedBuffer('', 'binary', type);
+}
+
+// similar to an idb or websql transaction object
+
+function getCacheFor(transaction, store) {
+ var prefix = store.prefix()[0];
+ var cache = transaction._cache;
+ var subCache = cache.get(prefix);
+ if (!subCache) {
+ subCache = new Map();
+ cache.set(prefix, subCache);
+ }
+ return subCache;
+}
+
+class LevelTransaction {
+ constructor() {
+ this._batch = [];
+ this._cache = new Map();
+ }
+
+ get(store, key, callback) {
+ var cache = getCacheFor(this, store);
+ var exists = cache.get(key);
+ if (exists) {
+ return nextTick$4(function () {
+ callback(null, exists);
+ });
+ } else if (exists === null) { // deleted marker
+ /* istanbul ignore next */
+ return nextTick$4(function () {
+ callback({name: 'NotFoundError'});
+ });
+ }
+ store.get(key, function (err, res) {
+ if (err) {
+ /* istanbul ignore else */
+ if (err.name === 'NotFoundError') {
+ cache.set(key, null);
+ }
+ return callback(err);
+ }
+ cache.set(key, res);
+ callback(null, res);
+ });
+ }
+
+ batch(batch) {
+ for (var i = 0, len = batch.length; i < len; i++) {
+ var operation = batch[i];
+
+ var cache = getCacheFor(this, operation.prefix);
+
+ if (operation.type === 'put') {
+ cache.set(operation.key, operation.value);
+ } else {
+ cache.set(operation.key, null);
+ }
+ }
+ this._batch = this._batch.concat(batch);
+ }
+
+ execute(db, callback) {
+ var keys = new Set();
+ var uniqBatches = [];
+
+ // remove duplicates; last one wins
+ for (var i = this._batch.length - 1; i >= 0; i--) {
+ var operation = this._batch[i];
+ var lookupKey = operation.prefix.prefix()[0] + '\xff' + operation.key;
+ if (keys.has(lookupKey)) {
+ continue;
+ }
+ keys.add(lookupKey);
+ uniqBatches.push(operation);
+ }
+
+ db.batch(uniqBatches, callback);
+ }
+}
+
+var DOC_STORE = 'document-store';
+var BY_SEQ_STORE = 'by-sequence';
+var ATTACHMENT_STORE = 'attach-store';
+var BINARY_STORE = 'attach-binary-store';
+var LOCAL_STORE = 'local-store';
+var META_STORE = 'meta-store';
+
+// leveldb barks if we try to open a db multiple times
+// so we cache opened connections here for initstore()
+var dbStores = new Map();
+
+// store the value of update_seq in the by-sequence store the key name will
+// never conflict, since the keys in the by-sequence store are integers
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var MD5_PREFIX = 'md5-';
+
+var safeJsonEncoding = {
+ encode: safeJsonStringify,
+ decode: safeJsonParse,
+ buffer: false,
+ type: 'cheap-json'
+};
+
+var levelChanges = new Changes();
+
+// winningRev and deleted are performance-killers, but
+// in newer versions of PouchDB, they are cached on the metadata
+function getWinningRev(metadata) {
+ return 'winningRev' in metadata ?
+ metadata.winningRev : winningRev(metadata);
+}
+
+function getIsDeleted(metadata, winningRev) {
+ return 'deleted' in metadata ?
+ metadata.deleted : isDeleted(metadata, winningRev);
+}
+
+function fetchAttachment(att, stores, opts) {
+ var type = att.content_type;
+ return new Promise(function (resolve, reject) {
+ stores.binaryStore.get(att.digest, function (err, buffer) {
+ var data;
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return reject(err);
+ } else {
+ // empty
+ if (!opts.binary) {
+ data = '';
+ } else {
+ data = binStringToBluffer('', type);
+ }
+ }
+ } else { // non-empty
+ if (opts.binary) {
+ data = readAsBlobOrBuffer(buffer, type);
+ } else {
+ data = buffer.toString('base64');
+ }
+ }
+ delete att.stub;
+ delete att.length;
+ att.data = data;
+ resolve();
+ });
+ });
+}
+
+function fetchAttachments(results, stores, opts) {
+ var atts = [];
+ results.forEach(function (row) {
+ if (!(row.doc && row.doc._attachments)) {
+ return;
+ }
+ var attNames = Object.keys(row.doc._attachments);
+ attNames.forEach(function (attName) {
+ var att = row.doc._attachments[attName];
+ if (!('data' in att)) {
+ atts.push(att);
+ }
+ });
+ });
+
+ return Promise.all(atts.map(function (att) {
+ return fetchAttachment(att, stores, opts);
+ }));
+}
+
+function LevelPouch(opts, callback) {
+ opts = clone$1(opts);
+ var api = this;
+ var instanceId;
+ var stores = {};
+ var revLimit = opts.revs_limit;
+ var db;
+ var name = opts.name;
+ // TODO: this is undocumented and unused probably
+ /* istanbul ignore else */
+ if (typeof opts.createIfMissing === 'undefined') {
+ opts.createIfMissing = true;
+ }
+
+ var leveldown = opts.db;
+
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ dbStore = new Map();
+ dbStores.set(leveldownName, dbStore);
+ }
+ if (dbStore.has(name)) {
+ db = dbStore.get(name);
+ afterDBCreated();
+ } else {
+ dbStore.set(name, sublevelPouch(levelup$1(leveldown(name), opts, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ dbStore.delete(name);
+ return callback(err);
+ }
+ db = dbStore.get(name);
+ db._docCount = -1;
+ db._queue = new Deque$1();
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationOne(name, db, afterDBCreated);
+ } else {
+ afterDBCreated();
+ }
+ })));
+ }
+
+ function afterDBCreated() {
+ stores.docStore = db.sublevel(DOC_STORE, {valueEncoding: safeJsonEncoding});
+ stores.bySeqStore = db.sublevel(BY_SEQ_STORE, {valueEncoding: 'json'});
+ stores.attachmentStore =
+ db.sublevel(ATTACHMENT_STORE, {valueEncoding: 'json'});
+ stores.binaryStore = db.sublevel(BINARY_STORE, {valueEncoding: 'binary'});
+ stores.localStore = db.sublevel(LOCAL_STORE, {valueEncoding: 'json'});
+ stores.metaStore = db.sublevel(META_STORE, {valueEncoding: 'json'});
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationTwo(db, stores, afterLastMigration);
+ } else {
+ afterLastMigration();
+ }
+ }
+
+ function afterLastMigration() {
+ stores.metaStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (typeof db._updateSeq === 'undefined') {
+ db._updateSeq = value || 0;
+ }
+ stores.metaStore.get(DOC_COUNT_KEY, function (err, value) {
+ db._docCount = !err ? value : 0;
+ stores.metaStore.get(UUID_KEY, function (err, value) {
+ instanceId = !err ? value : uuid();
+ stores.metaStore.put(UUID_KEY, instanceId, function () {
+ nextTick$4(function () {
+ callback(null, api);
+ });
+ });
+ });
+ });
+ });
+ }
+
+ function countDocs(callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(new Error('database is closed'));
+ }
+ return callback(null, db._docCount); // use cached value
+ }
+
+ api._remote = false;
+ /* istanbul ignore next */
+ api.type = function () {
+ return 'leveldb';
+ };
+
+ api._id = function (callback) {
+ callback(null, instanceId);
+ };
+
+ api._info = function (callback) {
+ var res = {
+ doc_count: db._docCount,
+ update_seq: db._updateSeq,
+ backend_adapter: functionName(leveldown)
+ };
+ return nextTick$4(function () {
+ callback(null, res);
+ });
+ };
+
+ function tryCode(fun, args) {
+ try {
+ fun.apply(null, args);
+ } catch (err) {
+ args[args.length - 1](err);
+ }
+ }
+
+ function executeNext() {
+ var firstTask = db._queue.peekFront();
+
+ if (firstTask.type === 'read') {
+ runReadOperation(firstTask);
+ } else { // write, only do one at a time
+ runWriteOperation(firstTask);
+ }
+ }
+
+ function runReadOperation(firstTask) {
+ // do multiple reads at once simultaneously, because it's safe
+
+ var readTasks = [firstTask];
+ var i = 1;
+ var nextTask = db._queue.get(i);
+ while (typeof nextTask !== 'undefined' && nextTask.type === 'read') {
+ readTasks.push(nextTask);
+ i++;
+ nextTask = db._queue.get(i);
+ }
+
+ var numDone = 0;
+
+ readTasks.forEach(function (readTask) {
+ var args = readTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ if (++numDone === readTasks.length) {
+ nextTick$4(function () {
+ // all read tasks have finished
+ readTasks.forEach(function () {
+ db._queue.shift();
+ });
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ }
+ };
+ tryCode(readTask.fun, args);
+ });
+ }
+
+ function runWriteOperation(firstTask) {
+ var args = firstTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ nextTick$4(function () {
+ db._queue.shift();
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ };
+ tryCode(firstTask.fun, args);
+ }
+
+ // all read/write operations to the database are done in a queue,
+ // similar to how websql/idb works. this avoids problems such
+ // as e.g. compaction needing to have a lock on the database while
+ // it updates stuff. in the future we can revisit this.
+ function writeLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'write'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$4(executeNext);
+ }
+ };
+ }
+
+ // same as the writelock, but multiple can run at once
+ function readLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'read'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$4(executeNext);
+ }
+ };
+ }
+
+ function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+ }
+
+ function parseSeq(s) {
+ return parseInt(s, 10);
+ }
+
+ api._get = readLock(function (id, opts, callback) {
+ opts = clone$1(opts);
+
+ stores.docStore.get(id, function (err, metadata) {
+
+ if (err || !metadata) {
+ return callback(createError$2(MISSING_DOC, 'missing'));
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, rev);
+ if (deleted) {
+ return callback(createError$2(MISSING_DOC, "deleted"));
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var seq = metadata.rev_map[rev];
+
+ stores.bySeqStore.get(formatSeq(seq), function (err, doc) {
+ if (!doc) {
+ return callback(createError$2(MISSING_DOC));
+ }
+ /* istanbul ignore if */
+ if ('_id' in doc && doc._id !== metadata.id) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ doc._id = metadata.id;
+ if ('_rev' in doc) {
+ /* istanbul ignore if */
+ if (doc._rev !== rev) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ } else {
+ // we didn't always store this
+ doc._rev = rev;
+ }
+ return callback(null, {doc: doc, metadata: metadata});
+ });
+ });
+ });
+
+ // not technically part of the spec, but if putAttachment has its own
+ // method...
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ stores.binaryStore.get(digest, function (err, attach) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ }
+ // Empty attachment
+ return callback(null, opts.binary ? createEmptyBlobOrBuffer(type) : '');
+ }
+
+ if (opts.binary) {
+ callback(null, readAsBlobOrBuffer(attach, type));
+ } else {
+ callback(null, attach.toString('base64'));
+ }
+ });
+ };
+
+ api._bulkDocs = writeLock(function (req, opts, callback) {
+ var newEdits = opts.new_edits;
+ var results = new Array(req.docs.length);
+ var fetchedDocs = new Map();
+ var stemmedRevs = new Map();
+
+ var txn = new LevelTransaction();
+ var docCountDelta = 0;
+ var newUpdateSeq = db._updateSeq;
+
+ // parse the docs and give each a sequence number
+ var userDocs = req.docs;
+ var docInfos = userDocs.map(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ return doc;
+ }
+ var newDoc = parseDoc(doc, newEdits, api.__opts);
+
+ if (newDoc.metadata && !newDoc.metadata.rev_map) {
+ newDoc.metadata.rev_map = {};
+ }
+
+ return newDoc;
+ });
+ var infoErrors = docInfos.filter(function (doc) {
+ return doc.error;
+ });
+
+ if (infoErrors.length) {
+ return callback(infoErrors[0]);
+ }
+
+ // verify any stub attachments as a precondition test
+
+ function verifyAttachment(digest, callback) {
+ txn.get(stores.attachmentStore, digest, function (levelErr) {
+ if (levelErr) {
+ var err = createError$2(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ callback(err);
+ } else {
+ callback();
+ }
+ });
+ }
+
+ function verifyAttachments(finish) {
+ var digests = [];
+ userDocs.forEach(function (doc) {
+ if (doc && doc._attachments) {
+ Object.keys(doc._attachments).forEach(function (filename) {
+ var att = doc._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ });
+ });
+ }
+
+ function fetchExistingDocs(finish) {
+ var numDone = 0;
+ var overallErr;
+ function checkDone() {
+ if (++numDone === userDocs.length) {
+ return finish(overallErr);
+ }
+ }
+
+ userDocs.forEach(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ // skip local docs
+ return checkDone();
+ }
+ txn.get(stores.docStore, doc._id, function (err, info) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ overallErr = err;
+ }
+ } else {
+ fetchedDocs.set(doc._id, info);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function compact(revsMap, callback) {
+ var promise = Promise.resolve();
+ revsMap.forEach(function (revs, docId) {
+ // TODO: parallelize, for now need to be sequential to
+ // pass orphaned attachment tests
+ promise = promise.then(function () {
+ return new Promise(function (resolve, reject) {
+ api._doCompactionNoLock(docId, revs, {ctx: txn}, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return reject(err);
+ }
+ resolve();
+ });
+ });
+ });
+ });
+
+ promise.then(function () {
+ callback();
+ }, callback);
+ }
+
+ function autoCompact(callback) {
+ var revsMap = new Map();
+ fetchedDocs.forEach(function (metadata, docId) {
+ revsMap.set(docId, compactTree(metadata));
+ });
+ compact(revsMap, callback);
+ }
+
+ function finish() {
+ compact(stemmedRevs, function (error) {
+ /* istanbul ignore if */
+ if (error) {
+ complete(error);
+ }
+ if (api.auto_compaction) {
+ return autoCompact(complete);
+ }
+ complete();
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback2) {
+ docCountDelta += delta;
+
+ var err = null;
+ var recv = 0;
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ docInfo.data._id = docInfo.metadata.id;
+ docInfo.data._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ docInfo.data._deleted = true;
+ }
+
+ if (docInfo.stemmedRevs.length) {
+ stemmedRevs.set(docInfo.metadata.id, docInfo.stemmedRevs);
+ }
+
+ var attachments = docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) :
+ [];
+
+ function attachmentSaved(attachmentErr) {
+ recv++;
+ if (!err) {
+ /* istanbul ignore if */
+ if (attachmentErr) {
+ err = attachmentErr;
+ callback2(err);
+ } else if (recv === attachments.length) {
+ finish();
+ }
+ }
+ }
+
+ function onMD5Load(doc, key, data, attachmentSaved) {
+ return function (result) {
+ saveAttachment(doc, MD5_PREFIX + result, key, data, attachmentSaved);
+ };
+ }
+
+ function doMD5(doc, key, attachmentSaved) {
+ return function (data) {
+ binaryMd5(data, onMD5Load(doc, key, data, attachmentSaved));
+ };
+ }
+
+ for (var i = 0; i < attachments.length; i++) {
+ var key = attachments[i];
+ var att = docInfo.data._attachments[key];
+
+ if (att.stub) {
+ // still need to update the refs mapping
+ var id = docInfo.data._id;
+ var rev = docInfo.data._rev;
+ saveAttachmentRefs(id, rev, att.digest, attachmentSaved);
+ continue;
+ }
+ var data;
+ if (typeof att.data === 'string') {
+ // input is assumed to be a base64 string
+ try {
+ data = atob(att.data);
+ } catch (e) {
+ callback(createError$2(BAD_ARG,
+ 'Attachment is not a valid base64 string'));
+ return;
+ }
+ doMD5(docInfo, key, attachmentSaved)(data);
+ } else {
+ prepareAttachmentForStorage(att.data,
+ doMD5(docInfo, key, attachmentSaved));
+ }
+ }
+
+ function finish() {
+ var seq = docInfo.metadata.rev_map[docInfo.metadata.rev];
+ /* istanbul ignore if */
+ if (seq) {
+ // check that there aren't any existing revisions with the same
+ // revision id, else we shouldn't do anything
+ return callback2();
+ }
+ seq = ++newUpdateSeq;
+ docInfo.metadata.rev_map[docInfo.metadata.rev] =
+ docInfo.metadata.seq = seq;
+ var seqKey = formatSeq(seq);
+ var batch = [{
+ key: seqKey,
+ value: docInfo.data,
+ prefix: stores.bySeqStore,
+ type: 'put'
+ }, {
+ key: docInfo.metadata.id,
+ value: docInfo.metadata,
+ prefix: stores.docStore,
+ type: 'put'
+ }];
+ txn.batch(batch);
+ results[resultsIdx] = {
+ ok: true,
+ id: docInfo.metadata.id,
+ rev: docInfo.metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ callback2();
+ }
+
+ if (!attachments.length) {
+ finish();
+ }
+ }
+
+ // attachments are queued per-digest, otherwise the refs could be
+ // overwritten by concurrent writes in the same bulkDocs session
+ var attachmentQueues = {};
+
+ function saveAttachmentRefs(id, rev, digest, callback) {
+
+ function fetchAtt() {
+ return new Promise(function (resolve, reject) {
+ txn.get(stores.attachmentStore, digest, function (err, oldAtt) {
+ /* istanbul ignore if */
+ if (err && err.name !== 'NotFoundError') {
+ return reject(err);
+ }
+ resolve(oldAtt);
+ });
+ });
+ }
+
+ function saveAtt(oldAtt) {
+ var ref = [id, rev].join('@');
+ var newAtt = {};
+
+ if (oldAtt) {
+ if (oldAtt.refs) {
+ // only update references if this attachment already has them
+ // since we cannot migrate old style attachments here without
+ // doing a full db scan for references
+ newAtt.refs = oldAtt.refs;
+ newAtt.refs[ref] = true;
+ }
+ } else {
+ newAtt.refs = {};
+ newAtt.refs[ref] = true;
+ }
+
+ return new Promise(function (resolve) {
+ txn.batch([{
+ type: 'put',
+ prefix: stores.attachmentStore,
+ key: digest,
+ value: newAtt
+ }]);
+ resolve(!oldAtt);
+ });
+ }
+
+ // put attachments in a per-digest queue, to avoid two docs with the same
+ // attachment overwriting each other
+ var queue = attachmentQueues[digest] || Promise.resolve();
+ attachmentQueues[digest] = queue.then(function () {
+ return fetchAtt().then(saveAtt).then(function (isNewAttachment) {
+ callback(null, isNewAttachment);
+ }, callback);
+ });
+ }
+
+ function saveAttachment(docInfo, digest, key, data, callback) {
+ var att = docInfo.data._attachments[key];
+ delete att.data;
+ att.digest = digest;
+ att.length = data.length;
+ var id = docInfo.metadata.id;
+ var rev = docInfo.metadata.rev;
+ att.revpos = parseInt(rev, 10);
+
+ saveAttachmentRefs(id, rev, digest, function (err, isNewAttachment) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ // do not try to store empty attachments
+ if (data.length === 0) {
+ return callback(err);
+ }
+ if (!isNewAttachment) {
+ // small optimization - don't bother writing it again
+ return callback(err);
+ }
+ txn.batch([{
+ type: 'put',
+ prefix: stores.binaryStore,
+ key: digest,
+ value: Buffer.from(data, 'binary')
+ }]);
+ callback();
+ });
+ }
+
+ function complete(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return nextTick$4(function () {
+ callback(err);
+ });
+ }
+ txn.batch([
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: UPDATE_SEQ_KEY,
+ value: newUpdateSeq
+ },
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: DOC_COUNT_KEY,
+ value: db._docCount + docCountDelta
+ }
+ ]);
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ db._docCount += docCountDelta;
+ db._updateSeq = newUpdateSeq;
+ levelChanges.notify(name);
+ nextTick$4(function () {
+ callback(null, results);
+ });
+ });
+ }
+
+ if (!docInfos.length) {
+ return callback(null, []);
+ }
+
+ verifyAttachments(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ fetchExistingDocs(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ processDocs(revLimit, docInfos, api, fetchedDocs, txn, results,
+ writeDoc, opts, finish);
+ });
+ });
+ });
+ api._allDocs = function (opts, callback) {
+ if ('keys' in opts) {
+ return allDocsKeysQuery(this, opts);
+ }
+ return readLock(function (opts, callback) {
+ opts = clone$1(opts);
+ countDocs(function (err, docCount) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var readstreamOpts = {};
+ var skip = opts.skip || 0;
+ if (opts.startkey) {
+ readstreamOpts.gte = opts.startkey;
+ }
+ if (opts.endkey) {
+ readstreamOpts.lte = opts.endkey;
+ }
+ if (opts.key) {
+ readstreamOpts.gte = readstreamOpts.lte = opts.key;
+ }
+ if (opts.descending) {
+ readstreamOpts.reverse = true;
+ // switch start and ends
+ var tmp = readstreamOpts.lte;
+ readstreamOpts.lte = readstreamOpts.gte;
+ readstreamOpts.gte = tmp;
+ }
+ var limit;
+ if (typeof opts.limit === 'number') {
+ limit = opts.limit;
+ }
+ if (limit === 0 ||
+ ('gte' in readstreamOpts && 'lte' in readstreamOpts &&
+ readstreamOpts.gte > readstreamOpts.lte)) {
+ // should return 0 results when start is greater than end.
+ // normally level would "fix" this for us by reversing the order,
+ // so short-circuit instead
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ return callback(null, returnVal);
+ }
+ var results = [];
+ var docstream = stores.docStore.readStream(readstreamOpts);
+
+ var throughStream = obj(function (entry, _, next) {
+ var metadata = entry.value;
+ // winningRev and deleted are performance-killers, but
+ // in newer versions of PouchDB, they are cached on the metadata
+ var winningRev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, winningRev);
+ if (!deleted) {
+ if (skip-- > 0) {
+ next();
+ return;
+ } else if (typeof limit === 'number' && limit-- <= 0) {
+ docstream.unpipe();
+ docstream.destroy();
+ next();
+ return;
+ }
+ } else if (opts.deleted !== 'ok') {
+ next();
+ return;
+ }
+ function allDocsInner(data) {
+ var doc = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ if (opts.include_docs) {
+ doc.doc = data;
+ doc.doc._rev = doc.value.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc.doc._conflicts = conflicts;
+ }
+ }
+ for (var att in doc.doc._attachments) {
+ if (Object.prototype.hasOwnProperty.call(doc.doc._attachments, att)) {
+ doc.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ if (opts.inclusive_end === false && metadata.id === opts.endkey) {
+ return next();
+ } else if (deleted) {
+ if (opts.deleted === 'ok') {
+ doc.value.deleted = true;
+ doc.doc = null;
+ } else {
+ /* istanbul ignore next */
+ return next();
+ }
+ }
+ results.push(doc);
+ next();
+ }
+ if (opts.include_docs) {
+ var seq = metadata.rev_map[winningRev];
+ stores.bySeqStore.get(formatSeq(seq), function (err, data) {
+ allDocsInner(data);
+ });
+ }
+ else {
+ allDocsInner();
+ }
+ }, function (next) {
+ Promise.resolve().then(function () {
+ if (opts.include_docs && opts.attachments) {
+ return fetchAttachments(results, stores, opts);
+ }
+ }).then(function () {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ callback(null, returnVal);
+ }, callback);
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ });
+
+ docstream.on('error', callback);
+
+ docstream.pipe(throughStream);
+ });
+ })(opts, callback);
+ };
+
+ api._changes = function (opts) {
+ opts = clone$1(opts);
+
+ if (opts.continuous) {
+ var id = name + ':' + uuid();
+ levelChanges.addListener(name, id, api, opts);
+ levelChanges.notify(name);
+ return {
+ cancel: function () {
+ levelChanges.removeListener(name, id);
+ }
+ };
+ }
+
+ var descending = opts.descending;
+ var results = [];
+ var lastSeq = opts.since || 0;
+ var called = 0;
+ var streamOpts = {
+ reverse: descending
+ };
+ var limit;
+ if ('limit' in opts && opts.limit > 0) {
+ limit = opts.limit;
+ }
+ if (!streamOpts.reverse) {
+ streamOpts.start = formatSeq(opts.since || 0);
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ function complete() {
+ opts.done = true;
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+ changeStream.unpipe(throughStream);
+ changeStream.destroy();
+ if (!opts.continuous && !opts.cancelled) {
+ if (opts.include_docs && opts.attachments && opts.return_docs) {
+ fetchAttachments(results, stores, opts).then(function () {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ });
+ } else {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ }
+ }
+ }
+ var changeStream = stores.bySeqStore.readStream(streamOpts);
+ var throughStream = obj(function (data, _, next) {
+ if (limit && called >= limit) {
+ complete();
+ return next();
+ }
+ if (opts.cancelled || opts.done) {
+ return next();
+ }
+
+ var seq = parseSeq(data.key);
+ var doc = data.value;
+
+ if (seq === opts.since && !descending) {
+ // couchdb ignores `since` if descending=true
+ return next();
+ }
+
+ if (docIds && !docIds.has(doc._id)) {
+ return next();
+ }
+
+ var metadata;
+
+ function onGetMetadata(metadata) {
+ var winningRev = getWinningRev(metadata);
+
+ function onGetWinningDoc(winningDoc) {
+
+ var change = opts.processChange(winningDoc, metadata, opts);
+ change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ called++;
+
+ if (opts.attachments && opts.include_docs) {
+ // fetch attachment immediately for the benefit
+ // of live listeners
+ fetchAttachments([change], stores, opts).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ }
+ next();
+ }
+
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return next();
+ }
+
+ lastSeq = seq;
+
+ if (winningRev === doc._rev) {
+ return onGetWinningDoc(doc);
+ }
+
+ // fetch the winner
+
+ var winningSeq = metadata.rev_map[winningRev];
+
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, doc) {
+ onGetWinningDoc(doc);
+ });
+ }
+
+ metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(metadata);
+ }
+ // metadata not cached, have to go fetch it
+ stores.docStore.get(doc._id, function (err, metadata) {
+ /* istanbul ignore if */
+ if (opts.cancelled || opts.done || db.isClosed() ||
+ isLocalId(metadata.id)) {
+ return next();
+ }
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(metadata);
+ });
+ }, function (next) {
+ if (opts.cancelled) {
+ return next();
+ }
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ complete();
+ });
+ changeStream.pipe(throughStream);
+ return {
+ cancel: function () {
+ opts.cancelled = true;
+ complete();
+ }
+ };
+ };
+
+ api._close = function (callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(createError$2(NOT_OPEN));
+ }
+ db.close(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ dbStore.delete(name);
+
+ var adapterName = functionName(leveldown);
+ var adapterStore = dbStores.get(adapterName);
+ var viewNamePrefix = PouchDB.prefix + name + "-mrview-";
+ var keys = [...adapterStore.keys()].filter(k => k.includes(viewNamePrefix));
+ keys.forEach(key => {
+ var eventEmitter = adapterStore.get(key);
+ eventEmitter.removeAllListeners();
+ eventEmitter.close();
+ adapterStore.delete(key);
+ });
+
+ callback();
+ }
+ });
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ stores.docStore.get(docId, function (err, metadata) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, metadata.rev_tree);
+ }
+ });
+ };
+
+ api._doCompaction = writeLock(function (docId, revs, opts, callback) {
+ api._doCompactionNoLock(docId, revs, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._doCompactionNoLock = function (docId, revs, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ if (!revs.length) {
+ return callback();
+ }
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.docStore, docId, function (err, metadata) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var seqs = revs.map(function (rev) {
+ var seq = metadata.rev_map[rev];
+ delete metadata.rev_map[rev];
+ return seq;
+ });
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var batch = [];
+ batch.push({
+ key: metadata.id,
+ value: metadata,
+ type: 'put',
+ prefix: stores.docStore
+ });
+
+ var digestMap = {};
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === revs.length) { // done
+ /* istanbul ignore if */
+ if (overallErr) {
+ return callback(overallErr);
+ }
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function finish(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ txn.batch(batch);
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback();
+ }
+ txn.execute(db, callback);
+ }
+
+ function deleteOrphanedAttachments() {
+ var possiblyOrphanedAttachments = Object.keys(digestMap);
+ if (!possiblyOrphanedAttachments.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === possiblyOrphanedAttachments.length) {
+ finish(overallErr);
+ }
+ }
+ var refsToDelete = new Map();
+ revs.forEach(function (rev) {
+ refsToDelete.set(docId + '@' + rev, true);
+ });
+ possiblyOrphanedAttachments.forEach(function (digest) {
+ txn.get(stores.attachmentStore, digest, function (err, attData) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var refs = Object.keys(attData.refs || {}).filter(function (ref) {
+ return !refsToDelete.has(ref);
+ });
+ var newRefs = {};
+ refs.forEach(function (ref) {
+ newRefs[ref] = true;
+ });
+ if (refs.length) { // not orphaned
+ batch.push({
+ key: digest,
+ type: 'put',
+ value: {refs: newRefs},
+ prefix: stores.attachmentStore
+ });
+ } else { // orphaned, can safely delete
+ batch = batch.concat([{
+ key: digest,
+ type: 'del',
+ prefix: stores.attachmentStore
+ }, {
+ key: digest,
+ type: 'del',
+ prefix: stores.binaryStore
+ }]);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ seqs.forEach(function (seq) {
+ batch.push({
+ key: formatSeq(seq),
+ type: 'del',
+ prefix: stores.bySeqStore
+ });
+ txn.get(stores.bySeqStore, formatSeq(seq), function (err, doc) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var atts = Object.keys(doc._attachments || {});
+ atts.forEach(function (attName) {
+ var digest = doc._attachments[attName].digest;
+ digestMap[digest] = true;
+ });
+ checkDone();
+ });
+ });
+ });
+ };
+
+ api._getLocal = function (id, callback) {
+ stores.localStore.get(id, function (err, doc) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, doc);
+ }
+ });
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._putLocalNoLock(doc, opts, callback);
+ } else {
+ api._putLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._putLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._putLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._putLocalNoLock = function (doc, opts, callback) {
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.localStore, id, function (err, resp) {
+ if (err && oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ if (resp && resp._rev !== oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ doc._rev =
+ oldRev ? '0-' + (parseInt(oldRev.split('-')[1], 10) + 1) : '0-1';
+ var batch = [
+ {
+ type: 'put',
+ prefix: stores.localStore,
+ key: id,
+ value: doc
+ }
+ ];
+
+ txn.batch(batch);
+ var ret = {ok: true, id: doc._id, rev: doc._rev};
+
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._removeLocalNoLock(doc, opts, callback);
+ } else {
+ api._removeLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._removeLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._removeLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._removeLocalNoLock = function (doc, opts, callback) {
+ var txn = opts.ctx || new LevelTransaction();
+ txn.get(stores.localStore, doc._id, function (err, resp) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ } else {
+ return callback(createError$2(MISSING_DOC));
+ }
+ }
+ if (resp._rev !== doc._rev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ txn.batch([{
+ prefix: stores.localStore,
+ type: 'del',
+ key: doc._id
+ }]);
+ var ret = {ok: true, id: doc._id, rev: '0-0'};
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ // close and delete open leveldb stores
+ api._destroy = function (opts, callback) {
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ /* istanbul ignore else */
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ return callDestroy(name, callback);
+ }
+
+ /* istanbul ignore else */
+ if (dbStore.has(name)) {
+ levelChanges.removeAllListeners(name);
+
+ dbStore.get(name).close(function () {
+ dbStore.delete(name);
+ callDestroy(name, callback);
+ });
+ } else {
+ callDestroy(name, callback);
+ }
+ };
+ function callDestroy(name, cb) {
+ // May not exist if leveldown is backed by memory adapter
+ /* istanbul ignore else */
+ if ('destroy' in leveldown) {
+ leveldown.destroy(name, cb);
+ } else {
+ cb(null);
+ }
+ }
+}
+
+export { LevelPouch as L, errors$2 as e, immutable as i, levelup as l, mutable as m, obj as o };
diff --git a/packages/pouchdb-lib/lib/index-ce9a41d8.js b/packages/pouchdb-lib/lib/index-ce9a41d8.js
new file mode 100644
index 0000000000..5f9d1f34cc
--- /dev/null
+++ b/packages/pouchdb-lib/lib/index-ce9a41d8.js
@@ -0,0 +1,12596 @@
+import { g as getDefaultExportFromCjs, c as commonjsGlobal } from './_commonjsHelpers-24198af3.js';
+import require$$0$2 from 'events';
+import require$$0$1 from 'util';
+import require$$0 from 'buffer';
+import Stream from 'stream';
+import require$$8 from 'assert';
+import PouchDB from './pouchdb-core.js';
+import { changesHandler as Changes, uuid, filterChange } from './pouchdb-utils.js';
+import { a as allDocsKeysQuery } from './allDocsKeysQuery-7f4fbcb9.js';
+import { p as parseDoc } from './parseDoc-71681539.js';
+import { a as collectConflicts } from './collectConflicts-ad0b7c70.js';
+import { t as traverseRevTree, w as winningRev } from './rootToLeaf-f8d0e78a.js';
+import { l as latest, c as compactTree } from './latest-0521537f.js';
+import { a as isLocalId, i as isDeleted } from './isLocalId-d067de54.js';
+import { b as binStringToBluffer } from './binaryStringToBlobOrBuffer-39ece35b.js';
+import { createError as createError$2, MISSING_DOC, NOT_OPEN, REV_CONFLICT, MISSING_STUB, BAD_ARG } from './pouchdb-errors.js';
+import { b as binaryMd5 } from './binaryMd5-601b2421.js';
+import 'crypto';
+import { p as processDocs } from './processDocs-7c802567.js';
+import { s as safeJsonStringify, a as safeJsonParse } from './safeJsonStringify-6520e306.js';
+import { t as typedBuffer } from './typedBuffer-a8220a49.js';
+import 'node:events';
+import { n as nextTick$4 } from './nextTick-ea093886.js';
+import { f as functionName } from './functionName-706c6c65.js';
+import { c as clone$1 } from './clone-7eeb6295.js';
+
+var immutable = extend$3;
+
+var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+
+function extend$3() {
+ var target = {};
+
+ for (var i = 0; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (hasOwnProperty$2.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+var deferredLeveldown = {exports: {}};
+
+var abstractLeveldown$1 = {};
+
+var mutable = extend$2;
+
+var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+
+function extend$2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (hasOwnProperty$1.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+// For (old) browser support
+var xtend$2 = immutable;
+var assign$1 = mutable;
+
+var levelSupports$1 = function supports () {
+ var manifest = xtend$2.apply(null, arguments);
+
+ return assign$1(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$2(manifest.additionalMethods)
+ })
+};
+
+var nextTick$3 = process.nextTick;
+
+var nextTick$2 = nextTick$3;
+
+function AbstractIterator$2 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$2(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$2(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$2.prototype._next = function (callback) {
+ nextTick$2(callback);
+};
+
+AbstractIterator$2.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$2.prototype._seek = function (target) {};
+
+AbstractIterator$2.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$2(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$2.prototype._end = function (callback) {
+ nextTick$2(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$2.prototype._nextTick = nextTick$2;
+
+var abstractIterator = AbstractIterator$2;
+
+var nextTick$1 = nextTick$3;
+
+function AbstractChainedBatch$1 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$1.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$1.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$1.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$1.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$1.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$1.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$1.prototype._nextTick = nextTick$1;
+
+var abstractChainedBatch = AbstractChainedBatch$1;
+
+var xtend$1 = immutable;
+var supports$1 = levelSupports$1;
+var Buffer$1 = require$$0.Buffer;
+var AbstractIterator$1 = abstractIterator;
+var AbstractChainedBatch = abstractChainedBatch;
+var nextTick = nextTick$3;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var rangeOptions = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$1 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports$1(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$1.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._open = function (options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._close = function (callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._get = function (key, options, callback) {
+ nextTick(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$1.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._put = function (key, value, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._del = function (key, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend$1(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._batch = function (array, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$1.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption (k) {
+ return rangeOptions.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$1.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$1.prototype._iterator = function (options) {
+ return new AbstractIterator$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch(this)
+};
+
+AbstractLevelDOWN$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$1.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$1.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$1.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$1.prototype._nextTick = nextTick;
+
+var abstractLeveldown = AbstractLevelDOWN$1;
+
+abstractLeveldown$1.AbstractLevelDOWN = abstractLeveldown;
+abstractLeveldown$1.AbstractIterator = abstractIterator;
+abstractLeveldown$1.AbstractChainedBatch = abstractChainedBatch;
+
+var inherits$6 = {exports: {}};
+
+var inherits_browser = {exports: {}};
+
+var hasRequiredInherits_browser;
+
+function requireInherits_browser () {
+ if (hasRequiredInherits_browser) return inherits_browser.exports;
+ hasRequiredInherits_browser = 1;
+ if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ }
+ };
+ } else {
+ // old school shim for old browsers
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ var TempCtor = function () {};
+ TempCtor.prototype = superCtor.prototype;
+ ctor.prototype = new TempCtor();
+ ctor.prototype.constructor = ctor;
+ }
+ };
+ }
+ return inherits_browser.exports;
+}
+
+try {
+ var util$3 = require('util');
+ /* istanbul ignore next */
+ if (typeof util$3.inherits !== 'function') throw '';
+ inherits$6.exports = util$3.inherits;
+} catch (e) {
+ /* istanbul ignore next */
+ inherits$6.exports = requireInherits_browser();
+}
+
+var inheritsExports = inherits$6.exports;
+var inherits$5 = /*@__PURE__*/getDefaultExportFromCjs(inheritsExports);
+
+var AbstractIterator = abstractLeveldown$1.AbstractIterator;
+var inherits$4 = inheritsExports;
+
+function DeferredIterator$1 (db, options) {
+ AbstractIterator.call(this, db);
+
+ this._options = options;
+ this._iterator = null;
+ this._operations = [];
+}
+
+inherits$4(DeferredIterator$1, AbstractIterator);
+
+DeferredIterator$1.prototype.setDb = function (db) {
+ var it = this._iterator = db.iterator(this._options);
+ this._operations.forEach(function (op) {
+ it[op.method].apply(it, op.args);
+ });
+};
+
+DeferredIterator$1.prototype._operation = function (method, args) {
+ if (this._iterator) return this._iterator[method].apply(this._iterator, args)
+ this._operations.push({ method: method, args: args });
+};
+
+'next end'.split(' ').forEach(function (m) {
+ DeferredIterator$1.prototype['_' + m] = function () {
+ this._operation(m, arguments);
+ };
+});
+
+// Must defer seek() rather than _seek() because it requires db._serializeKey to be available
+DeferredIterator$1.prototype.seek = function () {
+ this._operation('seek', arguments);
+};
+
+var deferredIterator = DeferredIterator$1;
+
+var AbstractLevelDOWN = abstractLeveldown$1.AbstractLevelDOWN;
+var inherits$3 = inheritsExports;
+var DeferredIterator = deferredIterator;
+var deferrables = 'put get del batch clear'.split(' ');
+var optionalDeferrables = 'approximateSize compactRange'.split(' ');
+
+function DeferredLevelDOWN$1 (db) {
+ AbstractLevelDOWN.call(this, db.supports || {});
+
+ // TODO (future major): remove this fallback; db must have manifest that
+ // declares approximateSize and compactRange in additionalMethods.
+ optionalDeferrables.forEach(function (m) {
+ if (typeof db[m] === 'function' && !this.supports.additionalMethods[m]) {
+ this.supports.additionalMethods[m] = true;
+ }
+ }, this);
+
+ this._db = db;
+ this._operations = [];
+ closed(this);
+}
+
+inherits$3(DeferredLevelDOWN$1, AbstractLevelDOWN);
+
+DeferredLevelDOWN$1.prototype.type = 'deferred-leveldown';
+
+DeferredLevelDOWN$1.prototype._open = function (options, callback) {
+ var self = this;
+
+ this._db.open(options, function (err) {
+ if (err) return callback(err)
+
+ self._operations.forEach(function (op) {
+ if (op.iterator) {
+ op.iterator.setDb(self._db);
+ } else {
+ self._db[op.method].apply(self._db, op.args);
+ }
+ });
+ self._operations = [];
+
+ open(self);
+ callback();
+ });
+};
+
+DeferredLevelDOWN$1.prototype._close = function (callback) {
+ var self = this;
+
+ this._db.close(function (err) {
+ if (err) return callback(err)
+ closed(self);
+ callback();
+ });
+};
+
+function open (self) {
+ deferrables.concat('iterator').forEach(function (m) {
+ self['_' + m] = function () {
+ return this._db[m].apply(this._db, arguments)
+ };
+ });
+ Object.keys(self.supports.additionalMethods).forEach(function (m) {
+ self[m] = function () {
+ return this._db[m].apply(this._db, arguments)
+ };
+ });
+}
+
+function closed (self) {
+ deferrables.forEach(function (m) {
+ self['_' + m] = function () {
+ this._operations.push({ method: m, args: arguments });
+ };
+ });
+ Object.keys(self.supports.additionalMethods).forEach(function (m) {
+ self[m] = function () {
+ this._operations.push({ method: m, args: arguments });
+ };
+ });
+ self._iterator = function (options) {
+ var it = new DeferredIterator(self, options);
+ this._operations.push({ iterator: it });
+ return it
+ };
+}
+
+DeferredLevelDOWN$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+DeferredLevelDOWN$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+deferredLeveldown.exports = DeferredLevelDOWN$1;
+deferredLeveldown.exports.DeferredIterator = DeferredIterator;
+
+var deferredLeveldownExports = deferredLeveldown.exports;
+
+var readable$2 = {exports: {}};
+
+var stream$1;
+var hasRequiredStream$1;
+
+function requireStream$1 () {
+ if (hasRequiredStream$1) return stream$1;
+ hasRequiredStream$1 = 1;
+ stream$1 = Stream;
+ return stream$1;
+}
+
+var buffer_list$1;
+var hasRequiredBuffer_list$1;
+
+function requireBuffer_list$1 () {
+ if (hasRequiredBuffer_list$1) return buffer_list$1;
+ hasRequiredBuffer_list$1 = 1;
+
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var _require = require$$0,
+ Buffer = _require.Buffer;
+ var _require2 = require$$0$1,
+ inspect = _require2.inspect;
+ var custom = inspect && inspect.custom || 'inspect';
+ function copyBuffer(src, target, offset) {
+ Buffer.prototype.copy.call(src, target, offset);
+ }
+ buffer_list$1 = /*#__PURE__*/function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+ _createClass(BufferList, [{
+ key: "push",
+ value: function push(v) {
+ var entry = {
+ data: v,
+ next: null
+ };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ }
+ }, {
+ key: "unshift",
+ value: function unshift(v) {
+ var entry = {
+ data: v,
+ next: this.head
+ };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ }
+ }, {
+ key: "shift",
+ value: function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ }
+ }, {
+ key: "join",
+ value: function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) ret += s + p.data;
+ return ret;
+ }
+ }, {
+ key: "concat",
+ value: function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes or characters from the buffered data.
+ }, {
+ key: "consume",
+ value: function consume(n, hasStrings) {
+ var ret;
+ if (n < this.head.data.length) {
+ // `slice` is the same for buffers and strings.
+ ret = this.head.data.slice(0, n);
+ this.head.data = this.head.data.slice(n);
+ } else if (n === this.head.data.length) {
+ // First chunk is a perfect match.
+ ret = this.shift();
+ } else {
+ // Result spans more than one buffer.
+ ret = hasStrings ? this._getString(n) : this._getBuffer(n);
+ }
+ return ret;
+ }
+ }, {
+ key: "first",
+ value: function first() {
+ return this.head.data;
+ }
+
+ // Consumes a specified amount of characters from the buffered data.
+ }, {
+ key: "_getString",
+ value: function _getString(n) {
+ var p = this.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes from the buffered data.
+ }, {
+ key: "_getBuffer",
+ value: function _getBuffer(n) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = this.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Make sure the linked list only shows the minimal necessary information.
+ }, {
+ key: custom,
+ value: function value(_, options) {
+ return inspect(this, _objectSpread(_objectSpread({}, options), {}, {
+ // Only inspect one level.
+ depth: 0,
+ // It should not recurse.
+ customInspect: false
+ }));
+ }
+ }]);
+ return BufferList;
+ }();
+ return buffer_list$1;
+}
+
+var destroy_1$1;
+var hasRequiredDestroy$1;
+
+function requireDestroy$1 () {
+ if (hasRequiredDestroy$1) return destroy_1$1;
+ hasRequiredDestroy$1 = 1;
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err) {
+ if (!this._writableState) {
+ process.nextTick(emitErrorNT, this, err);
+ } else if (!this._writableState.errorEmitted) {
+ this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorNT, this, err);
+ }
+ }
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ if (!_this._writableState) {
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else if (!_this._writableState.errorEmitted) {
+ _this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ } else if (cb) {
+ process.nextTick(emitCloseNT, _this);
+ cb(err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ });
+ return this;
+ }
+ function emitErrorAndCloseNT(self, err) {
+ emitErrorNT(self, err);
+ emitCloseNT(self);
+ }
+ function emitCloseNT(self) {
+ if (self._writableState && !self._writableState.emitClose) return;
+ if (self._readableState && !self._readableState.emitClose) return;
+ self.emit('close');
+ }
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finalCalled = false;
+ this._writableState.prefinished = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+ function errorOrDestroy(stream, err) {
+ // We have tests that rely on errors being emitted
+ // in the same tick, so changing this is semver major.
+ // For now when you opt-in to autoDestroy we allow
+ // the error to be emitted nextTick. In a future
+ // semver major update we should change the default to this.
+
+ var rState = stream._readableState;
+ var wState = stream._writableState;
+ if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
+ }
+ destroy_1$1 = {
+ destroy: destroy,
+ undestroy: undestroy,
+ errorOrDestroy: errorOrDestroy
+ };
+ return destroy_1$1;
+}
+
+var errors$3 = {};
+
+var hasRequiredErrors$1;
+
+function requireErrors$1 () {
+ if (hasRequiredErrors$1) return errors$3;
+ hasRequiredErrors$1 = 1;
+
+ const codes = {};
+
+ function createErrorType(code, message, Base) {
+ if (!Base) {
+ Base = Error;
+ }
+
+ function getMessage (arg1, arg2, arg3) {
+ if (typeof message === 'string') {
+ return message
+ } else {
+ return message(arg1, arg2, arg3)
+ }
+ }
+
+ class NodeError extends Base {
+ constructor (arg1, arg2, arg3) {
+ super(getMessage(arg1, arg2, arg3));
+ }
+ }
+
+ NodeError.prototype.name = Base.name;
+ NodeError.prototype.code = code;
+
+ codes[code] = NodeError;
+ }
+
+ // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
+ function oneOf(expected, thing) {
+ if (Array.isArray(expected)) {
+ const len = expected.length;
+ expected = expected.map((i) => String(i));
+ if (len > 2) {
+ return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
+ expected[len - 1];
+ } else if (len === 2) {
+ return `one of ${thing} ${expected[0]} or ${expected[1]}`;
+ } else {
+ return `of ${thing} ${expected[0]}`;
+ }
+ } else {
+ return `of ${thing} ${String(expected)}`;
+ }
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
+ function startsWith(str, search, pos) {
+ return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
+ function endsWith(str, search, this_len) {
+ if (this_len === undefined || this_len > str.length) {
+ this_len = str.length;
+ }
+ return str.substring(this_len - search.length, this_len) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ function includes(str, search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > str.length) {
+ return false;
+ } else {
+ return str.indexOf(search, start) !== -1;
+ }
+ }
+
+ createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
+ return 'The value "' + value + '" is invalid for option "' + name + '"'
+ }, TypeError);
+ createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
+ // determiner: 'must be' or 'must not be'
+ let determiner;
+ if (typeof expected === 'string' && startsWith(expected, 'not ')) {
+ determiner = 'must not be';
+ expected = expected.replace(/^not /, '');
+ } else {
+ determiner = 'must be';
+ }
+
+ let msg;
+ if (endsWith(name, ' argument')) {
+ // For cases like 'first argument'
+ msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
+ } else {
+ const type = includes(name, '.') ? 'property' : 'argument';
+ msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
+ }
+
+ msg += `. Received type ${typeof actual}`;
+ return msg;
+ }, TypeError);
+ createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
+ createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
+ return 'The ' + name + ' method is not implemented'
+ });
+ createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
+ createErrorType('ERR_STREAM_DESTROYED', function (name) {
+ return 'Cannot call ' + name + ' after a stream was destroyed';
+ });
+ createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
+ createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
+ createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
+ createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
+ createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
+ return 'Unknown encoding: ' + arg
+ }, TypeError);
+ createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
+
+ errors$3.codes = codes;
+ return errors$3;
+}
+
+var state$1;
+var hasRequiredState$1;
+
+function requireState$1 () {
+ if (hasRequiredState$1) return state$1;
+ hasRequiredState$1 = 1;
+
+ var ERR_INVALID_OPT_VALUE = requireErrors$1().codes.ERR_INVALID_OPT_VALUE;
+ function highWaterMarkFrom(options, isDuplex, duplexKey) {
+ return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
+ }
+ function getHighWaterMark(state, options, duplexKey, isDuplex) {
+ var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
+ if (hwm != null) {
+ if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
+ var name = isDuplex ? duplexKey : 'highWaterMark';
+ throw new ERR_INVALID_OPT_VALUE(name, hwm);
+ }
+ return Math.floor(hwm);
+ }
+
+ // Default value
+ return state.objectMode ? 16 : 16 * 1024;
+ }
+ state$1 = {
+ getHighWaterMark: getHighWaterMark
+ };
+ return state$1;
+}
+
+var node;
+var hasRequiredNode;
+
+function requireNode () {
+ if (hasRequiredNode) return node;
+ hasRequiredNode = 1;
+ /**
+ * For Node.js, simply re-export the core `util.deprecate` function.
+ */
+
+ node = require$$0$1.deprecate;
+ return node;
+}
+
+var _stream_writable$2;
+var hasRequired_stream_writable$2;
+
+function require_stream_writable$2 () {
+ if (hasRequired_stream_writable$2) return _stream_writable$2;
+ hasRequired_stream_writable$2 = 1;
+
+ _stream_writable$2 = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream$1();
+ /**/
+
+ var Buffer = require$$0.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+ var destroyImpl = requireDestroy$1();
+ var _require = requireState$1(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors$1().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
+ ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
+ ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
+ ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ inheritsExports(Writable, Stream);
+ function nop() {}
+ function WritableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex$2();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream,
+ // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'finish' (and potentially 'end')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function writableStateBufferGetter() {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function value(object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function realHasInstance(object) {
+ return object instanceof this;
+ };
+ }
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex$2();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the WritableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
+ this._writableState = new WritableState(options, this, isDuplex);
+
+ // legacy.
+ this.writable = true;
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+ if (typeof options.writev === 'function') this._writev = options.writev;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
+ };
+ function writeAfterEnd(stream, cb) {
+ var er = new ERR_STREAM_WRITE_AFTER_END();
+ // TODO: defer error events consistently everywhere, not just the cb
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var er;
+ if (chunk === null) {
+ er = new ERR_STREAM_NULL_VALUES();
+ } else if (typeof chunk !== 'string' && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
+ }
+ if (er) {
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ return false;
+ }
+ return true;
+ }
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+ if (typeof cb !== 'function') cb = nop;
+ if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+ return ret;
+ };
+ Writable.prototype.cork = function () {
+ this._writableState.corked++;
+ };
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+ if (state.corked) {
+ state.corked--;
+ if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+ state.length += len;
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+ return ret;
+ }
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ process.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ process.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+ if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
+ onwriteStateUpdate(state);
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state) || stream.destroyed;
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+ if (sync) {
+ process.nextTick(afterWrite, stream, state, finished, cb);
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
+ };
+ Writable.prototype._writev = null;
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending) endWritable(this, state, cb);
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ errorOrDestroy(stream, err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function' && !state.destroyed) {
+ state.pendingcb++;
+ state.finalCalled = true;
+ process.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the readable side is ready for autoDestroy as well
+ var rState = stream._readableState;
+ if (!rState || rState.autoDestroy && rState.endEmitted) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ return need;
+ }
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+
+ // reuse the free corkReq.
+ state.corkedRequestsFree.next = corkReq;
+ }
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+ return _stream_writable$2;
+}
+
+var _stream_duplex$2;
+var hasRequired_stream_duplex$2;
+
+function require_stream_duplex$2 () {
+ if (hasRequired_stream_duplex$2) return _stream_duplex$2;
+ hasRequired_stream_duplex$2 = 1;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+ _stream_duplex$2 = Duplex;
+ var Readable = require_stream_readable$2();
+ var Writable = require_stream_writable$2();
+ inheritsExports(Duplex, Readable);
+ {
+ // Allow the keys array to be GC'ed.
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+ Readable.call(this, options);
+ Writable.call(this, options);
+ this.allowHalfOpen = true;
+ if (options) {
+ if (options.readable === false) this.readable = false;
+ if (options.writable === false) this.writable = false;
+ if (options.allowHalfOpen === false) {
+ this.allowHalfOpen = false;
+ this.once('end', onend);
+ }
+ }
+ }
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // If the writable side ended, then we're ok.
+ if (this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(onEndNT, this);
+ }
+ function onEndNT(self) {
+ self.end();
+ }
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+ return _stream_duplex$2;
+}
+
+var string_decoder$1 = {};
+
+var safeBuffer = {exports: {}};
+
+/*! safe-buffer. MIT License. Feross Aboukhadijeh */
+safeBuffer.exports;
+
+var hasRequiredSafeBuffer;
+
+function requireSafeBuffer () {
+ if (hasRequiredSafeBuffer) return safeBuffer.exports;
+ hasRequiredSafeBuffer = 1;
+ (function (module, exports) {
+ /* eslint-disable node/no-deprecated-api */
+ var buffer = require$$0;
+ var Buffer = buffer.Buffer;
+
+ // alternative to using Object.keys for old browsers
+ function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key];
+ }
+ }
+ if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer;
+ } else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports);
+ exports.Buffer = SafeBuffer;
+ }
+
+ function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+ }
+
+ SafeBuffer.prototype = Object.create(Buffer.prototype);
+
+ // Copy static methods from Buffer
+ copyProps(Buffer, SafeBuffer);
+
+ SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+ };
+
+ SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size);
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding);
+ } else {
+ buf.fill(fill);
+ }
+ } else {
+ buf.fill(0);
+ }
+ return buf
+ };
+
+ SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+ };
+
+ SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+ };
+ } (safeBuffer, safeBuffer.exports));
+ return safeBuffer.exports;
+}
+
+var hasRequiredString_decoder$1;
+
+function requireString_decoder$1 () {
+ if (hasRequiredString_decoder$1) return string_decoder$1;
+ hasRequiredString_decoder$1 = 1;
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ /**/
+
+ var isEncoding = Buffer.isEncoding || function (encoding) {
+ encoding = '' + encoding;
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ function _normalizeEncoding(enc) {
+ if (!enc) return 'utf8';
+ var retried;
+ while (true) {
+ switch (enc) {
+ case 'utf8':
+ case 'utf-8':
+ return 'utf8';
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return 'utf16le';
+ case 'latin1':
+ case 'binary':
+ return 'latin1';
+ case 'base64':
+ case 'ascii':
+ case 'hex':
+ return enc;
+ default:
+ if (retried) return; // undefined
+ enc = ('' + enc).toLowerCase();
+ retried = true;
+ }
+ }
+ }
+ // Do not cache `Buffer.isEncoding` when checking encoding names as some
+ // modules monkey-patch it to support additional encodings
+ function normalizeEncoding(enc) {
+ var nenc = _normalizeEncoding(enc);
+ if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+ return nenc || enc;
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters.
+ string_decoder$1.StringDecoder = StringDecoder;
+ function StringDecoder(encoding) {
+ this.encoding = normalizeEncoding(encoding);
+ var nb;
+ switch (this.encoding) {
+ case 'utf16le':
+ this.text = utf16Text;
+ this.end = utf16End;
+ nb = 4;
+ break;
+ case 'utf8':
+ this.fillLast = utf8FillLast;
+ nb = 4;
+ break;
+ case 'base64':
+ this.text = base64Text;
+ this.end = base64End;
+ nb = 3;
+ break;
+ default:
+ this.write = simpleWrite;
+ this.end = simpleEnd;
+ return;
+ }
+ this.lastNeed = 0;
+ this.lastTotal = 0;
+ this.lastChar = Buffer.allocUnsafe(nb);
+ }
+
+ StringDecoder.prototype.write = function (buf) {
+ if (buf.length === 0) return '';
+ var r;
+ var i;
+ if (this.lastNeed) {
+ r = this.fillLast(buf);
+ if (r === undefined) return '';
+ i = this.lastNeed;
+ this.lastNeed = 0;
+ } else {
+ i = 0;
+ }
+ if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+ return r || '';
+ };
+
+ StringDecoder.prototype.end = utf8End;
+
+ // Returns only complete characters in a Buffer
+ StringDecoder.prototype.text = utf8Text;
+
+ // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+ StringDecoder.prototype.fillLast = function (buf) {
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+ this.lastNeed -= buf.length;
+ };
+
+ // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+ // continuation byte. If an invalid byte is detected, -2 is returned.
+ function utf8CheckByte(byte) {
+ if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+ return byte >> 6 === 0x02 ? -1 : -2;
+ }
+
+ // Checks at most 3 bytes at the end of a Buffer in order to detect an
+ // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+ // needed to complete the UTF-8 character (if applicable) are returned.
+ function utf8CheckIncomplete(self, buf, i) {
+ var j = buf.length - 1;
+ if (j < i) return 0;
+ var nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 1;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 2;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) {
+ if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+ }
+ return nb;
+ }
+ return 0;
+ }
+
+ // Validates as many continuation bytes for a multi-byte UTF-8 character as
+ // needed or are available. If we see a non-continuation byte where we expect
+ // one, we "replace" the validated continuation bytes we've seen so far with
+ // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
+ // behavior. The continuation byte check is included three times in the case
+ // where all of the continuation bytes for a character exist in the same buffer.
+ // It is also done this way as a slight performance increase instead of using a
+ // loop.
+ function utf8CheckExtraBytes(self, buf, p) {
+ if ((buf[0] & 0xC0) !== 0x80) {
+ self.lastNeed = 0;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 1 && buf.length > 1) {
+ if ((buf[1] & 0xC0) !== 0x80) {
+ self.lastNeed = 1;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 2 && buf.length > 2) {
+ if ((buf[2] & 0xC0) !== 0x80) {
+ self.lastNeed = 2;
+ return '\ufffd';
+ }
+ }
+ }
+ }
+
+ // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+ function utf8FillLast(buf) {
+ var p = this.lastTotal - this.lastNeed;
+ var r = utf8CheckExtraBytes(this, buf);
+ if (r !== undefined) return r;
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, p, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, p, 0, buf.length);
+ this.lastNeed -= buf.length;
+ }
+
+ // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+ // partial character, the character's bytes are buffered until the required
+ // number of bytes are available.
+ function utf8Text(buf, i) {
+ var total = utf8CheckIncomplete(this, buf, i);
+ if (!this.lastNeed) return buf.toString('utf8', i);
+ this.lastTotal = total;
+ var end = buf.length - (total - this.lastNeed);
+ buf.copy(this.lastChar, 0, end);
+ return buf.toString('utf8', i, end);
+ }
+
+ // For UTF-8, a replacement character is added when ending on a partial
+ // character.
+ function utf8End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + '\ufffd';
+ return r;
+ }
+
+ // UTF-16LE typically needs two bytes per character, but even if we have an even
+ // number of bytes available, we need to check if we end on a leading/high
+ // surrogate. In that case, we need to wait for the next two bytes in order to
+ // decode the last character properly.
+ function utf16Text(buf, i) {
+ if ((buf.length - i) % 2 === 0) {
+ var r = buf.toString('utf16le', i);
+ if (r) {
+ var c = r.charCodeAt(r.length - 1);
+ if (c >= 0xD800 && c <= 0xDBFF) {
+ this.lastNeed = 2;
+ this.lastTotal = 4;
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ return r.slice(0, -1);
+ }
+ }
+ return r;
+ }
+ this.lastNeed = 1;
+ this.lastTotal = 2;
+ this.lastChar[0] = buf[buf.length - 1];
+ return buf.toString('utf16le', i, buf.length - 1);
+ }
+
+ // For UTF-16LE we do not explicitly append special replacement characters if we
+ // end on a partial character, we simply let v8 handle that.
+ function utf16End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) {
+ var end = this.lastTotal - this.lastNeed;
+ return r + this.lastChar.toString('utf16le', 0, end);
+ }
+ return r;
+ }
+
+ function base64Text(buf, i) {
+ var n = (buf.length - i) % 3;
+ if (n === 0) return buf.toString('base64', i);
+ this.lastNeed = 3 - n;
+ this.lastTotal = 3;
+ if (n === 1) {
+ this.lastChar[0] = buf[buf.length - 1];
+ } else {
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ }
+ return buf.toString('base64', i, buf.length - n);
+ }
+
+ function base64End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+ return r;
+ }
+
+ // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+ function simpleWrite(buf) {
+ return buf.toString(this.encoding);
+ }
+
+ function simpleEnd(buf) {
+ return buf && buf.length ? this.write(buf) : '';
+ }
+ return string_decoder$1;
+}
+
+var endOfStream$1;
+var hasRequiredEndOfStream$1;
+
+function requireEndOfStream$1 () {
+ if (hasRequiredEndOfStream$1) return endOfStream$1;
+ hasRequiredEndOfStream$1 = 1;
+
+ var ERR_STREAM_PREMATURE_CLOSE = requireErrors$1().codes.ERR_STREAM_PREMATURE_CLOSE;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ callback.apply(this, args);
+ };
+ }
+ function noop() {}
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function eos(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
+ callback = once(callback || noop);
+ var readable = opts.readable || opts.readable !== false && stream.readable;
+ var writable = opts.writable || opts.writable !== false && stream.writable;
+ var onlegacyfinish = function onlegacyfinish() {
+ if (!stream.writable) onfinish();
+ };
+ var writableEnded = stream._writableState && stream._writableState.finished;
+ var onfinish = function onfinish() {
+ writable = false;
+ writableEnded = true;
+ if (!readable) callback.call(stream);
+ };
+ var readableEnded = stream._readableState && stream._readableState.endEmitted;
+ var onend = function onend() {
+ readable = false;
+ readableEnded = true;
+ if (!writable) callback.call(stream);
+ };
+ var onerror = function onerror(err) {
+ callback.call(stream, err);
+ };
+ var onclose = function onclose() {
+ var err;
+ if (readable && !readableEnded) {
+ if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ if (writable && !writableEnded) {
+ if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ };
+ var onrequest = function onrequest() {
+ stream.req.on('finish', onfinish);
+ };
+ if (isRequest(stream)) {
+ stream.on('complete', onfinish);
+ stream.on('abort', onclose);
+ if (stream.req) onrequest();else stream.on('request', onrequest);
+ } else if (writable && !stream._writableState) {
+ // legacy streams
+ stream.on('end', onlegacyfinish);
+ stream.on('close', onlegacyfinish);
+ }
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+ return function () {
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+ }
+ endOfStream$1 = eos;
+ return endOfStream$1;
+}
+
+var async_iterator$1;
+var hasRequiredAsync_iterator$1;
+
+function requireAsync_iterator$1 () {
+ if (hasRequiredAsync_iterator$1) return async_iterator$1;
+ hasRequiredAsync_iterator$1 = 1;
+
+ var _Object$setPrototypeO;
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var finished = requireEndOfStream$1();
+ var kLastResolve = Symbol('lastResolve');
+ var kLastReject = Symbol('lastReject');
+ var kError = Symbol('error');
+ var kEnded = Symbol('ended');
+ var kLastPromise = Symbol('lastPromise');
+ var kHandlePromise = Symbol('handlePromise');
+ var kStream = Symbol('stream');
+ function createIterResult(value, done) {
+ return {
+ value: value,
+ done: done
+ };
+ }
+ function readAndResolve(iter) {
+ var resolve = iter[kLastResolve];
+ if (resolve !== null) {
+ var data = iter[kStream].read();
+ // we defer if data is null
+ // we can be expecting either 'end' or
+ // 'error'
+ if (data !== null) {
+ iter[kLastPromise] = null;
+ iter[kLastResolve] = null;
+ iter[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ }
+ }
+ }
+ function onReadable(iter) {
+ // we wait for the next tick, because it might
+ // emit an error with process.nextTick
+ process.nextTick(readAndResolve, iter);
+ }
+ function wrapForNext(lastPromise, iter) {
+ return function (resolve, reject) {
+ lastPromise.then(function () {
+ if (iter[kEnded]) {
+ resolve(createIterResult(undefined, true));
+ return;
+ }
+ iter[kHandlePromise](resolve, reject);
+ }, reject);
+ };
+ }
+ var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
+ var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
+ get stream() {
+ return this[kStream];
+ },
+ next: function next() {
+ var _this = this;
+ // if we have detected an error in the meanwhile
+ // reject straight away
+ var error = this[kError];
+ if (error !== null) {
+ return Promise.reject(error);
+ }
+ if (this[kEnded]) {
+ return Promise.resolve(createIterResult(undefined, true));
+ }
+ if (this[kStream].destroyed) {
+ // We need to defer via nextTick because if .destroy(err) is
+ // called, the error will be emitted via nextTick, and
+ // we cannot guarantee that there is no error lingering around
+ // waiting to be emitted.
+ return new Promise(function (resolve, reject) {
+ process.nextTick(function () {
+ if (_this[kError]) {
+ reject(_this[kError]);
+ } else {
+ resolve(createIterResult(undefined, true));
+ }
+ });
+ });
+ }
+
+ // if we have multiple next() calls
+ // we will wait for the previous Promise to finish
+ // this logic is optimized to support for await loops,
+ // where next() is only called once at a time
+ var lastPromise = this[kLastPromise];
+ var promise;
+ if (lastPromise) {
+ promise = new Promise(wrapForNext(lastPromise, this));
+ } else {
+ // fast path needed to support multiple this.push()
+ // without triggering the next() queue
+ var data = this[kStream].read();
+ if (data !== null) {
+ return Promise.resolve(createIterResult(data, false));
+ }
+ promise = new Promise(this[kHandlePromise]);
+ }
+ this[kLastPromise] = promise;
+ return promise;
+ }
+ }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
+ return this;
+ }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
+ var _this2 = this;
+ // destroy(err, cb) is a private API
+ // we can guarantee we have that here, because we control the
+ // Readable class this is attached to
+ return new Promise(function (resolve, reject) {
+ _this2[kStream].destroy(null, function (err) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(createIterResult(undefined, true));
+ });
+ });
+ }), _Object$setPrototypeO), AsyncIteratorPrototype);
+ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
+ var _Object$create;
+ var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
+ value: stream,
+ writable: true
+ }), _defineProperty(_Object$create, kLastResolve, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kLastReject, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kError, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kEnded, {
+ value: stream._readableState.endEmitted,
+ writable: true
+ }), _defineProperty(_Object$create, kHandlePromise, {
+ value: function value(resolve, reject) {
+ var data = iterator[kStream].read();
+ if (data) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ } else {
+ iterator[kLastResolve] = resolve;
+ iterator[kLastReject] = reject;
+ }
+ },
+ writable: true
+ }), _Object$create));
+ iterator[kLastPromise] = null;
+ finished(stream, function (err) {
+ if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
+ var reject = iterator[kLastReject];
+ // reject if we are waiting for data in the Promise
+ // returned by next() and store the error
+ if (reject !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ reject(err);
+ }
+ iterator[kError] = err;
+ return;
+ }
+ var resolve = iterator[kLastResolve];
+ if (resolve !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(undefined, true));
+ }
+ iterator[kEnded] = true;
+ });
+ stream.on('readable', onReadable.bind(null, iterator));
+ return iterator;
+ };
+ async_iterator$1 = createReadableStreamAsyncIterator;
+ return async_iterator$1;
+}
+
+var from_1$1;
+var hasRequiredFrom$1;
+
+function requireFrom$1 () {
+ if (hasRequiredFrom$1) return from_1$1;
+ hasRequiredFrom$1 = 1;
+
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var ERR_INVALID_ARG_TYPE = requireErrors$1().codes.ERR_INVALID_ARG_TYPE;
+ function from(Readable, iterable, opts) {
+ var iterator;
+ if (iterable && typeof iterable.next === 'function') {
+ iterator = iterable;
+ } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);
+ var readable = new Readable(_objectSpread({
+ objectMode: true
+ }, opts));
+ // Reading boolean to protect against _read
+ // being called before last iteration completion.
+ var reading = false;
+ readable._read = function () {
+ if (!reading) {
+ reading = true;
+ next();
+ }
+ };
+ function next() {
+ return _next2.apply(this, arguments);
+ }
+ function _next2() {
+ _next2 = _asyncToGenerator(function* () {
+ try {
+ var _yield$iterator$next = yield iterator.next(),
+ value = _yield$iterator$next.value,
+ done = _yield$iterator$next.done;
+ if (done) {
+ readable.push(null);
+ } else if (readable.push(yield value)) {
+ next();
+ } else {
+ reading = false;
+ }
+ } catch (err) {
+ readable.destroy(err);
+ }
+ });
+ return _next2.apply(this, arguments);
+ }
+ return readable;
+ }
+ from_1$1 = from;
+ return from_1$1;
+}
+
+var _stream_readable$2;
+var hasRequired_stream_readable$2;
+
+function require_stream_readable$2 () {
+ if (hasRequired_stream_readable$2) return _stream_readable$2;
+ hasRequired_stream_readable$2 = 1;
+
+ _stream_readable$2 = Readable;
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$0$2.EventEmitter;
+ var EElistenerCount = function EElistenerCount(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream$1();
+ /**/
+
+ var Buffer = require$$0.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+ var debugUtil = require$$0$1;
+ var debug;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function debug() {};
+ }
+ /**/
+
+ var BufferList = requireBuffer_list$1();
+ var destroyImpl = requireDestroy$1();
+ var _require = requireState$1(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors$1().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
+
+ // Lazy loaded to improve the startup performance.
+ var StringDecoder;
+ var createReadableStreamAsyncIterator;
+ var from;
+ inheritsExports(Readable, Stream);
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+ function ReadableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex$2();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+ this.paused = true;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'end' (and potentially 'finish')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex$2();
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the ReadableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ this._readableState = new ReadableState(options, this, isDuplex);
+
+ // legacy
+ this.readable = true;
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+ Stream.call(this);
+ }
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ debug('readableAddChunk', chunk);
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ errorOrDestroy(stream, er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (addToFront) {
+ if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
+ } else if (state.destroyed) {
+ return false;
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ maybeReadMore(stream, state);
+ }
+ }
+
+ // We can push more data if we are below the highWaterMark.
+ // Also, if we have no data yet, we can stand some more bytes.
+ // This is to work around cases where hwm=0, such as the repl.
+ return !state.ended && (state.length < state.highWaterMark || state.length === 0);
+ }
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ state.awaitDrain = 0;
+ stream.emit('data', chunk);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
+ }
+ return er;
+ }
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ var decoder = new StringDecoder(enc);
+ this._readableState.decoder = decoder;
+ // If setEncoding(null), decoder.encoding equals utf8
+ this._readableState.encoding = this._readableState.decoder.encoding;
+
+ // Iterate over current buffer to convert already stored Buffers:
+ var p = this._readableState.buffer.head;
+ var content = '';
+ while (p !== null) {
+ content += decoder.write(p.data);
+ p = p.next;
+ }
+ this._readableState.buffer.clear();
+ if (content !== '') this._readableState.buffer.push(content);
+ this._readableState.length = content.length;
+ return this;
+ };
+
+ // Don't raise the hwm > 1GB
+ var MAX_HWM = 0x40000000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+ if (ret === null) {
+ state.needReadable = state.length <= state.highWaterMark;
+ n = 0;
+ } else {
+ state.length -= n;
+ state.awaitDrain = 0;
+ }
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+ if (ret !== null) this.emit('data', ret);
+ return ret;
+ };
+ function onEofChunk(stream, state) {
+ debug('onEofChunk');
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+ if (state.sync) {
+ // if we are sync, wait until next tick to emit the data.
+ // Otherwise we risk emitting data in the flow()
+ // the readable code triggers during a read() call
+ emitReadable(stream);
+ } else {
+ // emit 'readable' now to make sure it gets picked up.
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ state.emittedReadable = true;
+ emitReadable_(stream);
+ }
+ }
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ debug('emitReadable', state.needReadable, state.emittedReadable);
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ process.nextTick(emitReadable_, stream);
+ }
+ }
+ function emitReadable_(stream) {
+ var state = stream._readableState;
+ debug('emitReadable_', state.destroyed, state.length, state.ended);
+ if (!state.destroyed && (state.length || state.ended)) {
+ stream.emit('readable');
+ state.emittedReadable = false;
+ }
+
+ // The stream needs another readable event if
+ // 1. It is not flowing, as the flow mechanism will take
+ // care of it.
+ // 2. It is not ended.
+ // 3. It is below the highWaterMark, so we can schedule
+ // another readable later.
+ state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+ function maybeReadMore_(stream, state) {
+ // Attempt to read more data if we should.
+ //
+ // The conditions for reading more data are (one of):
+ // - Not enough data buffered (state.length < state.highWaterMark). The loop
+ // is responsible for filling the buffer with enough data if such data
+ // is available. If highWaterMark is 0 and we are not in the flowing mode
+ // we should _not_ attempt to buffer any extra data. We'll get more data
+ // when the stream consumer calls read() instead.
+ // - No data in the buffer, and the stream is in flowing mode. In this mode
+ // the loop below is responsible for ensuring read() is called. Failing to
+ // call read here would abort the flow and there's no other mechanism for
+ // continuing the flow if the stream consumer has just subscribed to the
+ // 'data' event.
+ //
+ // In addition to the above conditions to keep reading data, the following
+ // conditions prevent the data from being read:
+ // - The stream has ended (state.ended).
+ // - There is already a pending 'read' operation (state.reading). This is a
+ // case where the the stream has called the implementation defined _read()
+ // method, but they are processing the call asynchronously and have _not_
+ // called push() with new data. In this case we skip performing more
+ // read()s. The execution ends in this method again after the _read() ends
+ // up calling push() with more data.
+ while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
+ var len = state.length;
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
+ };
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ debug('dest.write', ret);
+ if (ret === false) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', state.awaitDrain);
+ state.awaitDrain++;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+ return dest;
+ };
+ function pipeOnDrain(src) {
+ return function pipeOnDrainFunctionResult() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = {
+ hasUnpiped: false
+ };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {
+ hasUnpiped: false
+ });
+ return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+ dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+ var state = this._readableState;
+ if (ev === 'data') {
+ // update readableListening so that resume() may be a no-op
+ // a few lines down. This is needed to support once('readable').
+ state.readableListening = this.listenerCount('readable') > 0;
+
+ // Try start flowing on next tick if stream isn't explicitly paused
+ if (state.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.flowing = false;
+ state.emittedReadable = false;
+ debug('on readable', state.length, state.reading);
+ if (state.length) {
+ emitReadable(this);
+ } else if (!state.reading) {
+ process.nextTick(nReadingNextTick, this);
+ }
+ }
+ }
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+ Readable.prototype.removeListener = function (ev, fn) {
+ var res = Stream.prototype.removeListener.call(this, ev, fn);
+ if (ev === 'readable') {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ Readable.prototype.removeAllListeners = function (ev) {
+ var res = Stream.prototype.removeAllListeners.apply(this, arguments);
+ if (ev === 'readable' || ev === undefined) {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ function updateReadableListening(self) {
+ var state = self._readableState;
+ state.readableListening = self.listenerCount('readable') > 0;
+ if (state.resumeScheduled && !state.paused) {
+ // flowing needs to be set to true now, otherwise
+ // the upcoming resume will not flow.
+ state.flowing = true;
+
+ // crude way to check if we should resume
+ } else if (self.listenerCount('data') > 0) {
+ self.resume();
+ }
+ }
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ // we flow only if there is no one listening
+ // for readable, but we still have to call
+ // resume()
+ state.flowing = !state.readableListening;
+ resume(this, state);
+ }
+ state.paused = false;
+ return this;
+ };
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(resume_, stream, state);
+ }
+ }
+ function resume_(stream, state) {
+ debug('resume', state.reading);
+ if (!state.reading) {
+ stream.read(0);
+ }
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (this._readableState.flowing !== false) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ this._readableState.paused = true;
+ return this;
+ };
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null);
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+ var state = this._readableState;
+ var paused = false;
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+ _this.push(null);
+ });
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function methodWrap(method) {
+ return function methodWrapReturnFunction() {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+ return this;
+ };
+ if (typeof Symbol === 'function') {
+ Readable.prototype[Symbol.asyncIterator] = function () {
+ if (createReadableStreamAsyncIterator === undefined) {
+ createReadableStreamAsyncIterator = requireAsync_iterator$1();
+ }
+ return createReadableStreamAsyncIterator(this);
+ };
+ }
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState && this._readableState.buffer;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableFlowing', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.flowing;
+ },
+ set: function set(state) {
+ if (this._readableState) {
+ this._readableState.flowing = state;
+ }
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+ Object.defineProperty(Readable.prototype, 'readableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.length;
+ }
+ });
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = state.buffer.consume(n, state.decoder);
+ }
+ return ret;
+ }
+ function endReadable(stream) {
+ var state = stream._readableState;
+ debug('endReadable', state.endEmitted);
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(endReadableNT, state, stream);
+ }
+ }
+ function endReadableNT(state, stream) {
+ debug('endReadableNT', state.endEmitted, state.length);
+
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the writable side is ready for autoDestroy as well
+ var wState = stream._writableState;
+ if (!wState || wState.autoDestroy && wState.finished) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ if (typeof Symbol === 'function') {
+ Readable.from = function (iterable, opts) {
+ if (from === undefined) {
+ from = requireFrom$1();
+ }
+ return from(Readable, iterable, opts);
+ };
+ }
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable$2;
+}
+
+var _stream_transform$2;
+var hasRequired_stream_transform$1;
+
+function require_stream_transform$1 () {
+ if (hasRequired_stream_transform$1) return _stream_transform$2;
+ hasRequired_stream_transform$1 = 1;
+
+ _stream_transform$2 = Transform;
+ var _require$codes = requireErrors$1().codes,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
+ ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
+ var Duplex = require_stream_duplex$2();
+ inheritsExports(Transform, Duplex);
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+ var cb = ts.writecb;
+ if (cb === null) {
+ return this.emit('error', new ERR_MULTIPLE_CALLBACK());
+ }
+ ts.writechunk = null;
+ ts.writecb = null;
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ this.push(data);
+ cb(er);
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+ Duplex.call(this, options);
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+ function prefinish() {
+ var _this = this;
+ if (typeof this._flush === 'function' && !this._readableState.destroyed) {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
+ };
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+ if (ts.writechunk !== null && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+ Transform.prototype._destroy = function (err, cb) {
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ });
+ };
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // TODO(BridgeAR): Write a test for these two error cases
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
+ if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
+ return stream.push(null);
+ }
+ return _stream_transform$2;
+}
+
+var _stream_passthrough$2;
+var hasRequired_stream_passthrough$1;
+
+function require_stream_passthrough$1 () {
+ if (hasRequired_stream_passthrough$1) return _stream_passthrough$2;
+ hasRequired_stream_passthrough$1 = 1;
+
+ _stream_passthrough$2 = PassThrough;
+ var Transform = require_stream_transform$1();
+ inheritsExports(PassThrough, Transform);
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+ Transform.call(this, options);
+ }
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough$2;
+}
+
+var pipeline_1$1;
+var hasRequiredPipeline$1;
+
+function requirePipeline$1 () {
+ if (hasRequiredPipeline$1) return pipeline_1$1;
+ hasRequiredPipeline$1 = 1;
+
+ var eos;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ callback.apply(void 0, arguments);
+ };
+ }
+ var _require$codes = requireErrors$1().codes,
+ ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
+ function noop(err) {
+ // Rethrow the error if it exists to avoid swallowing it
+ if (err) throw err;
+ }
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function destroyer(stream, reading, writing, callback) {
+ callback = once(callback);
+ var closed = false;
+ stream.on('close', function () {
+ closed = true;
+ });
+ if (eos === undefined) eos = requireEndOfStream$1();
+ eos(stream, {
+ readable: reading,
+ writable: writing
+ }, function (err) {
+ if (err) return callback(err);
+ closed = true;
+ callback();
+ });
+ var destroyed = false;
+ return function (err) {
+ if (closed) return;
+ if (destroyed) return;
+ destroyed = true;
+
+ // request.destroy just do .end - .abort is what we want
+ if (isRequest(stream)) return stream.abort();
+ if (typeof stream.destroy === 'function') return stream.destroy();
+ callback(err || new ERR_STREAM_DESTROYED('pipe'));
+ };
+ }
+ function call(fn) {
+ fn();
+ }
+ function pipe(from, to) {
+ return from.pipe(to);
+ }
+ function popCallback(streams) {
+ if (!streams.length) return noop;
+ if (typeof streams[streams.length - 1] !== 'function') return noop;
+ return streams.pop();
+ }
+ function pipeline() {
+ for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
+ streams[_key] = arguments[_key];
+ }
+ var callback = popCallback(streams);
+ if (Array.isArray(streams[0])) streams = streams[0];
+ if (streams.length < 2) {
+ throw new ERR_MISSING_ARGS('streams');
+ }
+ var error;
+ var destroys = streams.map(function (stream, i) {
+ var reading = i < streams.length - 1;
+ var writing = i > 0;
+ return destroyer(stream, reading, writing, function (err) {
+ if (!error) error = err;
+ if (err) destroys.forEach(call);
+ if (reading) return;
+ destroys.forEach(call);
+ callback(error);
+ });
+ });
+ return streams.reduce(pipe);
+ }
+ pipeline_1$1 = pipeline;
+ return pipeline_1$1;
+}
+
+readable$2.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1.Readable;
+ Object.assign(module.exports, Stream$1);
+ module.exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable$2();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable$2();
+ exports.Duplex = require_stream_duplex$2();
+ exports.Transform = require_stream_transform$1();
+ exports.PassThrough = require_stream_passthrough$1();
+ exports.finished = requireEndOfStream$1();
+ exports.pipeline = requirePipeline$1();
+ }
+} (readable$2, readable$2.exports));
+
+var readableExports$2 = readable$2.exports;
+
+var inherits$2 = inheritsExports;
+var Readable$1 = readableExports$2.Readable;
+var extend$1 = immutable;
+
+var levelIteratorStream = ReadStream$1;
+inherits$2(ReadStream$1, Readable$1);
+
+function ReadStream$1 (iterator, options) {
+ if (!(this instanceof ReadStream$1)) return new ReadStream$1(iterator, options)
+ options = options || {};
+ Readable$1.call(this, extend$1(options, {
+ objectMode: true
+ }));
+ this._iterator = iterator;
+ this._options = options;
+ this.on('end', this.destroy.bind(this, null, null));
+}
+
+ReadStream$1.prototype._read = function () {
+ var self = this;
+ var options = this._options;
+ if (this.destroyed) return
+
+ this._iterator.next(function (err, key, value) {
+ if (self.destroyed) return
+ if (err) return self.destroy(err)
+
+ if (key === undefined && value === undefined) {
+ self.push(null);
+ } else if (options.keys !== false && options.values === false) {
+ self.push(key);
+ } else if (options.keys === false && options.values !== false) {
+ self.push(value);
+ } else {
+ self.push({ key: key, value: value });
+ }
+ });
+};
+
+ReadStream$1.prototype._destroy = function (err, callback) {
+ this._iterator.end(function (err2) {
+ callback(err || err2);
+ });
+};
+
+var errno = {exports: {}};
+
+var prr$1 = {exports: {}};
+
+/*!
+ * prr
+ * (c) 2013 Rod Vagg
+ * https://github.com/rvagg/prr
+ * License: MIT
+ */
+prr$1.exports;
+
+(function (module) {
+ (function (name, context, definition) {
+ if (module.exports)
+ module.exports = definition();
+ else
+ context[name] = definition();
+ })('prr', commonjsGlobal, function() {
+
+ var setProperty = typeof Object.defineProperty == 'function'
+ ? function (obj, key, options) {
+ Object.defineProperty(obj, key, options);
+ return obj
+ }
+ : function (obj, key, options) { // < es5
+ obj[key] = options.value;
+ return obj
+ }
+
+ , makeOptions = function (value, options) {
+ var oo = typeof options == 'object'
+ , os = !oo && typeof options == 'string'
+ , op = function (p) {
+ return oo
+ ? !!options[p]
+ : os
+ ? options.indexOf(p[0]) > -1
+ : false
+ };
+
+ return {
+ enumerable : op('enumerable')
+ , configurable : op('configurable')
+ , writable : op('writable')
+ , value : value
+ }
+ }
+
+ , prr = function (obj, key, value, options) {
+ var k;
+
+ options = makeOptions(value, options);
+
+ if (typeof key == 'object') {
+ for (k in key) {
+ if (Object.hasOwnProperty.call(key, k)) {
+ options.value = key[k];
+ setProperty(obj, k, options);
+ }
+ }
+ return obj
+ }
+
+ return setProperty(obj, key, options)
+ };
+
+ return prr
+ });
+} (prr$1));
+
+var prrExports = prr$1.exports;
+
+var prr = prrExports;
+
+function init (type, message, cause) {
+ if (!!message && typeof message != 'string') {
+ message = message.message || message.name;
+ }
+ prr(this, {
+ type : type
+ , name : type
+ // can be passed just a 'cause'
+ , cause : typeof message != 'string' ? message : cause
+ , message : message
+ }, 'ewr');
+}
+
+// generic prototype, not intended to be actually used - helpful for `instanceof`
+function CustomError (message, cause) {
+ Error.call(this);
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, this.constructor);
+ init.call(this, 'CustomError', message, cause);
+}
+
+CustomError.prototype = new Error();
+
+function createError$1 (errno, type, proto) {
+ var err = function (message, cause) {
+ init.call(this, type, message, cause);
+ //TODO: the specificity here is stupid, errno should be available everywhere
+ if (type == 'FilesystemError') {
+ this.code = this.cause.code;
+ this.path = this.cause.path;
+ this.errno = this.cause.errno;
+ this.message =
+ (errno.errno[this.cause.errno]
+ ? errno.errno[this.cause.errno].description
+ : this.cause.message)
+ + (this.cause.path ? ' [' + this.cause.path + ']' : '');
+ }
+ Error.call(this);
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, err);
+ };
+ err.prototype = !!proto ? new proto() : new CustomError();
+ return err
+}
+
+var custom = function (errno) {
+ var ce = function (type, proto) {
+ return createError$1(errno, type, proto)
+ };
+ return {
+ CustomError : CustomError
+ , FilesystemError : ce('FilesystemError')
+ , createError : ce
+ }
+};
+
+errno.exports;
+
+(function (module) {
+ var all = module.exports.all = [
+ {
+ errno: -2,
+ code: 'ENOENT',
+ description: 'no such file or directory'
+ },
+ {
+ errno: -1,
+ code: 'UNKNOWN',
+ description: 'unknown error'
+ },
+ {
+ errno: 0,
+ code: 'OK',
+ description: 'success'
+ },
+ {
+ errno: 1,
+ code: 'EOF',
+ description: 'end of file'
+ },
+ {
+ errno: 2,
+ code: 'EADDRINFO',
+ description: 'getaddrinfo error'
+ },
+ {
+ errno: 3,
+ code: 'EACCES',
+ description: 'permission denied'
+ },
+ {
+ errno: 4,
+ code: 'EAGAIN',
+ description: 'resource temporarily unavailable'
+ },
+ {
+ errno: 5,
+ code: 'EADDRINUSE',
+ description: 'address already in use'
+ },
+ {
+ errno: 6,
+ code: 'EADDRNOTAVAIL',
+ description: 'address not available'
+ },
+ {
+ errno: 7,
+ code: 'EAFNOSUPPORT',
+ description: 'address family not supported'
+ },
+ {
+ errno: 8,
+ code: 'EALREADY',
+ description: 'connection already in progress'
+ },
+ {
+ errno: 9,
+ code: 'EBADF',
+ description: 'bad file descriptor'
+ },
+ {
+ errno: 10,
+ code: 'EBUSY',
+ description: 'resource busy or locked'
+ },
+ {
+ errno: 11,
+ code: 'ECONNABORTED',
+ description: 'software caused connection abort'
+ },
+ {
+ errno: 12,
+ code: 'ECONNREFUSED',
+ description: 'connection refused'
+ },
+ {
+ errno: 13,
+ code: 'ECONNRESET',
+ description: 'connection reset by peer'
+ },
+ {
+ errno: 14,
+ code: 'EDESTADDRREQ',
+ description: 'destination address required'
+ },
+ {
+ errno: 15,
+ code: 'EFAULT',
+ description: 'bad address in system call argument'
+ },
+ {
+ errno: 16,
+ code: 'EHOSTUNREACH',
+ description: 'host is unreachable'
+ },
+ {
+ errno: 17,
+ code: 'EINTR',
+ description: 'interrupted system call'
+ },
+ {
+ errno: 18,
+ code: 'EINVAL',
+ description: 'invalid argument'
+ },
+ {
+ errno: 19,
+ code: 'EISCONN',
+ description: 'socket is already connected'
+ },
+ {
+ errno: 20,
+ code: 'EMFILE',
+ description: 'too many open files'
+ },
+ {
+ errno: 21,
+ code: 'EMSGSIZE',
+ description: 'message too long'
+ },
+ {
+ errno: 22,
+ code: 'ENETDOWN',
+ description: 'network is down'
+ },
+ {
+ errno: 23,
+ code: 'ENETUNREACH',
+ description: 'network is unreachable'
+ },
+ {
+ errno: 24,
+ code: 'ENFILE',
+ description: 'file table overflow'
+ },
+ {
+ errno: 25,
+ code: 'ENOBUFS',
+ description: 'no buffer space available'
+ },
+ {
+ errno: 26,
+ code: 'ENOMEM',
+ description: 'not enough memory'
+ },
+ {
+ errno: 27,
+ code: 'ENOTDIR',
+ description: 'not a directory'
+ },
+ {
+ errno: 28,
+ code: 'EISDIR',
+ description: 'illegal operation on a directory'
+ },
+ {
+ errno: 29,
+ code: 'ENONET',
+ description: 'machine is not on the network'
+ },
+ {
+ errno: 31,
+ code: 'ENOTCONN',
+ description: 'socket is not connected'
+ },
+ {
+ errno: 32,
+ code: 'ENOTSOCK',
+ description: 'socket operation on non-socket'
+ },
+ {
+ errno: 33,
+ code: 'ENOTSUP',
+ description: 'operation not supported on socket'
+ },
+ {
+ errno: 34,
+ code: 'ENOENT',
+ description: 'no such file or directory'
+ },
+ {
+ errno: 35,
+ code: 'ENOSYS',
+ description: 'function not implemented'
+ },
+ {
+ errno: 36,
+ code: 'EPIPE',
+ description: 'broken pipe'
+ },
+ {
+ errno: 37,
+ code: 'EPROTO',
+ description: 'protocol error'
+ },
+ {
+ errno: 38,
+ code: 'EPROTONOSUPPORT',
+ description: 'protocol not supported'
+ },
+ {
+ errno: 39,
+ code: 'EPROTOTYPE',
+ description: 'protocol wrong type for socket'
+ },
+ {
+ errno: 40,
+ code: 'ETIMEDOUT',
+ description: 'connection timed out'
+ },
+ {
+ errno: 41,
+ code: 'ECHARSET',
+ description: 'invalid Unicode character'
+ },
+ {
+ errno: 42,
+ code: 'EAIFAMNOSUPPORT',
+ description: 'address family for hostname not supported'
+ },
+ {
+ errno: 44,
+ code: 'EAISERVICE',
+ description: 'servname not supported for ai_socktype'
+ },
+ {
+ errno: 45,
+ code: 'EAISOCKTYPE',
+ description: 'ai_socktype not supported'
+ },
+ {
+ errno: 46,
+ code: 'ESHUTDOWN',
+ description: 'cannot send after transport endpoint shutdown'
+ },
+ {
+ errno: 47,
+ code: 'EEXIST',
+ description: 'file already exists'
+ },
+ {
+ errno: 48,
+ code: 'ESRCH',
+ description: 'no such process'
+ },
+ {
+ errno: 49,
+ code: 'ENAMETOOLONG',
+ description: 'name too long'
+ },
+ {
+ errno: 50,
+ code: 'EPERM',
+ description: 'operation not permitted'
+ },
+ {
+ errno: 51,
+ code: 'ELOOP',
+ description: 'too many symbolic links encountered'
+ },
+ {
+ errno: 52,
+ code: 'EXDEV',
+ description: 'cross-device link not permitted'
+ },
+ {
+ errno: 53,
+ code: 'ENOTEMPTY',
+ description: 'directory not empty'
+ },
+ {
+ errno: 54,
+ code: 'ENOSPC',
+ description: 'no space left on device'
+ },
+ {
+ errno: 55,
+ code: 'EIO',
+ description: 'i/o error'
+ },
+ {
+ errno: 56,
+ code: 'EROFS',
+ description: 'read-only file system'
+ },
+ {
+ errno: 57,
+ code: 'ENODEV',
+ description: 'no such device'
+ },
+ {
+ errno: 58,
+ code: 'ESPIPE',
+ description: 'invalid seek'
+ },
+ {
+ errno: 59,
+ code: 'ECANCELED',
+ description: 'operation canceled'
+ }
+ ];
+
+ module.exports.errno = {};
+ module.exports.code = {};
+
+ all.forEach(function (error) {
+ module.exports.errno[error.errno] = error;
+ module.exports.code[error.code] = error;
+ });
+
+ module.exports.custom = custom(module.exports);
+ module.exports.create = module.exports.custom.createError;
+} (errno));
+
+var errnoExports = errno.exports;
+
+var createError = errnoExports.create;
+var LevelUPError = createError('LevelUPError');
+var NotFoundError$2 = createError('NotFoundError', LevelUPError);
+
+NotFoundError$2.prototype.notFound = true;
+NotFoundError$2.prototype.status = 404;
+
+var errors$2 = {
+ LevelUPError: LevelUPError,
+ InitializationError: createError('InitializationError', LevelUPError),
+ OpenError: createError('OpenError', LevelUPError),
+ ReadError: createError('ReadError', LevelUPError),
+ WriteError: createError('WriteError', LevelUPError),
+ NotFoundError: NotFoundError$2,
+ EncodingError: createError('EncodingError', LevelUPError)
+};
+
+function promisify$2 () {
+ var callback;
+ var promise = new Promise(function (resolve, reject) {
+ callback = function callback (err, value) {
+ if (err) reject(err);
+ else resolve(value);
+ };
+ });
+ callback.promise = promise;
+ return callback
+}
+
+var promisify_1 = promisify$2;
+
+var common = {};
+
+common.getCallback = function (options, callback) {
+ return typeof options === 'function' ? options : callback
+};
+
+common.getOptions = function (options) {
+ return typeof options === 'object' && options !== null ? options : {}
+};
+
+var WriteError$1 = errors$2.WriteError;
+var promisify$1 = promisify_1;
+var getCallback$1 = common.getCallback;
+var getOptions$1 = common.getOptions;
+
+function Batch$1 (levelup) {
+ // TODO (next major): remove this._levelup alias
+ this.db = this._levelup = levelup;
+ this.batch = levelup.db.batch();
+ this.ops = [];
+ this.length = 0;
+}
+
+Batch$1.prototype.put = function (key, value) {
+ try {
+ this.batch.put(key, value);
+ } catch (e) {
+ throw new WriteError$1(e)
+ }
+
+ this.ops.push({ type: 'put', key: key, value: value });
+ this.length++;
+
+ return this
+};
+
+Batch$1.prototype.del = function (key) {
+ try {
+ this.batch.del(key);
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ this.ops.push({ type: 'del', key: key });
+ this.length++;
+
+ return this
+};
+
+Batch$1.prototype.clear = function () {
+ try {
+ this.batch.clear();
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ this.ops = [];
+ this.length = 0;
+
+ return this
+};
+
+Batch$1.prototype.write = function (options, callback) {
+ var levelup = this._levelup;
+ var ops = this.ops;
+ var promise;
+
+ callback = getCallback$1(options, callback);
+
+ if (!callback) {
+ callback = promisify$1();
+ promise = callback.promise;
+ }
+
+ options = getOptions$1(options);
+
+ try {
+ this.batch.write(options, function (err) {
+ if (err) { return callback(new WriteError$1(err)) }
+ levelup.emit('batch', ops);
+ callback();
+ });
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ return promise
+};
+
+var batch = Batch$1;
+
+// For (old) browser support
+var xtend = immutable;
+var assign = mutable;
+
+var levelSupports = function supports () {
+ var manifest = xtend.apply(null, arguments);
+
+ return assign(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend(manifest.additionalMethods)
+ })
+};
+
+var EventEmitter$1 = require$$0$2.EventEmitter;
+var inherits$1 = require$$0$1.inherits;
+var extend = immutable;
+var DeferredLevelDOWN = deferredLeveldownExports;
+var IteratorStream = levelIteratorStream;
+var Batch = batch;
+var errors$1 = errors$2;
+var supports = levelSupports;
+var assert = require$$8;
+var promisify = promisify_1;
+var getCallback = common.getCallback;
+var getOptions = common.getOptions;
+
+var WriteError = errors$1.WriteError;
+var ReadError = errors$1.ReadError;
+var NotFoundError$1 = errors$1.NotFoundError;
+var OpenError = errors$1.OpenError;
+var InitializationError = errors$1.InitializationError;
+
+// Possible AbstractLevelDOWN#status values:
+// - 'new' - newly created, not opened or closed
+// - 'opening' - waiting for the database to be opened, post open()
+// - 'open' - successfully opened the database, available for use
+// - 'closing' - waiting for the database to be closed, post close()
+// - 'closed' - database has been successfully closed, should not be
+// used except for another open() operation
+
+function LevelUP (db, options, callback) {
+ if (!(this instanceof LevelUP)) {
+ return new LevelUP(db, options, callback)
+ }
+
+ var error;
+ var self = this;
+
+ EventEmitter$1.call(this);
+ this.setMaxListeners(Infinity);
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ options = options || {};
+
+ if (!db || typeof db !== 'object') {
+ error = new InitializationError('First argument must be an abstract-leveldown compliant store');
+ if (typeof callback === 'function') {
+ return process.nextTick(callback, error)
+ }
+ throw error
+ }
+
+ assert.strictEqual(typeof db.status, 'string', '.status required, old abstract-leveldown');
+
+ this.options = getOptions(options);
+ this._db = db;
+ this.db = new DeferredLevelDOWN(db);
+ this.open(callback || function (err) {
+ if (err) self.emit('error', err);
+ });
+
+ // Create manifest based on deferred-leveldown's
+ this.supports = supports(this.db.supports, {
+ status: false,
+ deferredOpen: true,
+ openCallback: true,
+ promises: true,
+ streams: true
+ });
+
+ // Experimental: enrich levelup interface
+ Object.keys(this.supports.additionalMethods).forEach(function (method) {
+ if (this[method] != null) return
+
+ // Don't do this.db[method].bind() because this.db is dynamic.
+ this[method] = function () {
+ return this.db[method].apply(this.db, arguments)
+ };
+ }, this);
+}
+
+LevelUP.prototype.emit = EventEmitter$1.prototype.emit;
+LevelUP.prototype.once = EventEmitter$1.prototype.once;
+inherits$1(LevelUP, EventEmitter$1);
+
+LevelUP.prototype.open = function (opts, callback) {
+ var self = this;
+ var promise;
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = null;
+ }
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (!opts) {
+ opts = this.options;
+ }
+
+ if (this.isOpen()) {
+ process.nextTick(callback, null, self);
+ return promise
+ }
+
+ if (this._isOpening()) {
+ this.once('open', function () { callback(null, self); });
+ return promise
+ }
+
+ this.emit('opening');
+
+ this.db.open(opts, function (err) {
+ if (err) {
+ return callback(new OpenError(err))
+ }
+ self.db = self._db;
+ callback(null, self);
+ self.emit('open');
+ self.emit('ready');
+ });
+
+ return promise
+};
+
+LevelUP.prototype.close = function (callback) {
+ var self = this;
+ var promise;
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (this.isOpen()) {
+ this.db.close(function () {
+ self.emit('closed');
+ callback.apply(null, arguments);
+ });
+ this.emit('closing');
+ this.db = new DeferredLevelDOWN(this._db);
+ } else if (this.isClosed()) {
+ process.nextTick(callback);
+ } else if (this.db.status === 'closing') {
+ this.once('closed', callback);
+ } else if (this._isOpening()) {
+ this.once('open', function () {
+ self.close(callback);
+ });
+ }
+
+ return promise
+};
+
+LevelUP.prototype.isOpen = function () {
+ return this.db.status === 'open'
+};
+
+LevelUP.prototype._isOpening = function () {
+ return this.db.status === 'opening'
+};
+
+LevelUP.prototype.isClosed = function () {
+ return (/^clos|new/).test(this.db.status)
+};
+
+LevelUP.prototype.get = function (key, options, callback) {
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.get(key, options, function (err, value) {
+ if (err) {
+ if ((/notfound/i).test(err) || err.notFound) {
+ err = new NotFoundError$1('Key not found in database [' + key + ']', err);
+ } else {
+ err = new ReadError(err);
+ }
+ return callback(err)
+ }
+ callback(null, value);
+ });
+
+ return promise
+};
+
+LevelUP.prototype.put = function (key, value, options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.put(key, value, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('put', key, value);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.del = function (key, options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.del(key, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('del', key);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.batch = function (arr, options, callback) {
+ if (!arguments.length) {
+ return new Batch(this)
+ }
+
+ var self = this;
+ var promise;
+
+ if (typeof arr === 'function') callback = arr;
+ else callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.batch(arr, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('batch', arr);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.iterator = function (options) {
+ return this.db.iterator(options)
+};
+
+LevelUP.prototype.clear = function (options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+ options = getOptions(options);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) {
+ return promise
+ }
+
+ this.db.clear(options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('clear', options);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.readStream =
+LevelUP.prototype.createReadStream = function (options) {
+ options = extend({ keys: true, values: true }, options);
+ if (typeof options.limit !== 'number') { options.limit = -1; }
+ return new IteratorStream(this.db.iterator(options), options)
+};
+
+LevelUP.prototype.keyStream =
+LevelUP.prototype.createKeyStream = function (options) {
+ return this.createReadStream(extend(options, { keys: true, values: false }))
+};
+
+LevelUP.prototype.valueStream =
+LevelUP.prototype.createValueStream = function (options) {
+ return this.createReadStream(extend(options, { keys: false, values: true }))
+};
+
+LevelUP.prototype.toString = function () {
+ return 'LevelUP'
+};
+
+LevelUP.prototype.type = 'levelup';
+
+function maybeError (db, callback) {
+ if (!db._isOpening() && !db.isOpen()) {
+ process.nextTick(callback, new ReadError('Database is not open'));
+ return true
+ }
+}
+
+LevelUP.errors = errors$1;
+var levelup = LevelUP.default = LevelUP;
+
+var levelup$1 = /*@__PURE__*/getDefaultExportFromCjs(levelup);
+
+var ltgt$1 = {};
+
+(function (exports) {
+ exports.compare = function (a, b) {
+
+ if(Buffer.isBuffer(a)) {
+ var l = Math.min(a.length, b.length);
+ for(var i = 0; i < l; i++) {
+ var cmp = a[i] - b[i];
+ if(cmp) return cmp
+ }
+ return a.length - b.length
+ }
+
+ return a < b ? -1 : a > b ? 1 : 0
+ };
+
+ // to be compatible with the current abstract-leveldown tests
+ // nullish or empty strings.
+ // I could use !!val but I want to permit numbers and booleans,
+ // if possible.
+
+ function isDef (val) {
+ return val !== undefined && val !== ''
+ }
+
+ function has (range, name) {
+ return Object.hasOwnProperty.call(range, name)
+ }
+
+ function hasKey(range, name) {
+ return Object.hasOwnProperty.call(range, name) && name
+ }
+
+ var lowerBoundKey = exports.lowerBoundKey = function (range) {
+ return (
+ hasKey(range, 'gt')
+ || hasKey(range, 'gte')
+ || hasKey(range, 'min')
+ || (range.reverse ? hasKey(range, 'end') : hasKey(range, 'start'))
+ || undefined
+ )
+ };
+
+ var lowerBound = exports.lowerBound = function (range, def) {
+ var k = lowerBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ var lowerBoundInclusive = exports.lowerBoundInclusive = function (range) {
+ return has(range, 'gt') ? false : true
+ };
+
+ var upperBoundInclusive = exports.upperBoundInclusive =
+ function (range) {
+ return (has(range, 'lt') /*&& !range.maxEx*/) ? false : true
+ };
+
+ var lowerBoundExclusive = exports.lowerBoundExclusive =
+ function (range) {
+ return !lowerBoundInclusive(range)
+ };
+
+ var upperBoundExclusive = exports.upperBoundExclusive =
+ function (range) {
+ return !upperBoundInclusive(range)
+ };
+
+ var upperBoundKey = exports.upperBoundKey = function (range) {
+ return (
+ hasKey(range, 'lt')
+ || hasKey(range, 'lte')
+ || hasKey(range, 'max')
+ || (range.reverse ? hasKey(range, 'start') : hasKey(range, 'end'))
+ || undefined
+ )
+ };
+
+ var upperBound = exports.upperBound = function (range, def) {
+ var k = upperBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ exports.start = function (range, def) {
+ return range.reverse ? upperBound(range, def) : lowerBound(range, def)
+ };
+ exports.end = function (range, def) {
+ return range.reverse ? lowerBound(range, def) : upperBound(range, def)
+ };
+ exports.startInclusive = function (range) {
+ return (
+ range.reverse
+ ? upperBoundInclusive(range)
+ : lowerBoundInclusive(range)
+ )
+ };
+ exports.endInclusive = function (range) {
+ return (
+ range.reverse
+ ? lowerBoundInclusive(range)
+ : upperBoundInclusive(range)
+ )
+ };
+
+ function id (e) { return e }
+
+ exports.toLtgt = function (range, _range, map, lower, upper) {
+ _range = _range || {};
+ map = map || id;
+ var defaults = arguments.length > 3;
+ var lb = exports.lowerBoundKey(range);
+ var ub = exports.upperBoundKey(range);
+ if(lb) {
+ if(lb === 'gt') _range.gt = map(range.gt, false);
+ else _range.gte = map(range[lb], false);
+ }
+ else if(defaults)
+ _range.gte = map(lower, false);
+
+ if(ub) {
+ if(ub === 'lt') _range.lt = map(range.lt, true);
+ else _range.lte = map(range[ub], true);
+ }
+ else if(defaults)
+ _range.lte = map(upper, true);
+
+ if(range.reverse != null)
+ _range.reverse = !!range.reverse;
+
+ //if range was used mutably
+ //(in level-sublevel it's part of an options object
+ //that has more properties on it.)
+ if(has(_range, 'max')) delete _range.max;
+ if(has(_range, 'min')) delete _range.min;
+ if(has(_range, 'start')) delete _range.start;
+ if(has(_range, 'end')) delete _range.end;
+
+ return _range
+ };
+
+ exports.contains = function (range, key, compare) {
+ compare = compare || exports.compare;
+
+ var lb = lowerBound(range);
+ if(isDef(lb)) {
+ var cmp = compare(key, lb);
+ if(cmp < 0 || (cmp === 0 && lowerBoundExclusive(range)))
+ return false
+ }
+
+ var ub = upperBound(range);
+ if(isDef(ub)) {
+ var cmp = compare(key, ub);
+ if(cmp > 0 || (cmp === 0) && upperBoundExclusive(range))
+ return false
+ }
+
+ return true
+ };
+
+ exports.filter = function (range, compare) {
+ return function (key) {
+ return exports.contains(range, key, compare)
+ }
+ };
+} (ltgt$1));
+
+var ltgt = /*@__PURE__*/getDefaultExportFromCjs(ltgt$1);
+
+var encodings$1 = {};
+
+(function (exports) {
+ var Buffer = require$$0.Buffer;
+
+ exports.utf8 = exports['utf-8'] = {
+ encode: function (data) {
+ return isBinary(data) ? data : String(data)
+ },
+ decode: identity,
+ buffer: false,
+ type: 'utf8'
+ };
+
+ exports.json = {
+ encode: JSON.stringify,
+ decode: JSON.parse,
+ buffer: false,
+ type: 'json'
+ };
+
+ exports.binary = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data)
+ },
+ decode: identity,
+ buffer: true,
+ type: 'binary'
+ };
+
+ exports.none = {
+ encode: identity,
+ decode: identity,
+ buffer: false,
+ type: 'id'
+ };
+
+ exports.id = exports.none;
+
+ var bufferEncodings = [
+ 'hex',
+ 'ascii',
+ 'base64',
+ 'ucs2',
+ 'ucs-2',
+ 'utf16le',
+ 'utf-16le'
+ ];
+
+ bufferEncodings.forEach(function (type) {
+ exports[type] = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data, type)
+ },
+ decode: function (buffer) {
+ return buffer.toString(type)
+ },
+ buffer: true,
+ type: type
+ };
+ });
+
+ function identity (value) {
+ return value
+ }
+
+ function isBinary (data) {
+ return data === undefined || data === null || Buffer.isBuffer(data)
+ }
+} (encodings$1));
+
+var encodings = encodings$1;
+
+var levelCodec = Codec;
+
+function Codec (opts) {
+ if (!(this instanceof Codec)) {
+ return new Codec(opts)
+ }
+ this.opts = opts || {};
+ this.encodings = encodings;
+}
+
+Codec.prototype._encoding = function (encoding) {
+ if (typeof encoding === 'string') encoding = encodings[encoding];
+ if (!encoding) encoding = encodings.id;
+ return encoding
+};
+
+Codec.prototype._keyEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && batchOpts.keyEncoding) ||
+ (opts && opts.keyEncoding) ||
+ this.opts.keyEncoding)
+};
+
+Codec.prototype._valueEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && (batchOpts.valueEncoding || batchOpts.encoding)) ||
+ (opts && (opts.valueEncoding || opts.encoding)) ||
+ (this.opts.valueEncoding || this.opts.encoding))
+};
+
+Codec.prototype.encodeKey = function (key, opts, batchOpts) {
+ return this._keyEncoding(opts, batchOpts).encode(key)
+};
+
+Codec.prototype.encodeValue = function (value, opts, batchOpts) {
+ return this._valueEncoding(opts, batchOpts).encode(value)
+};
+
+Codec.prototype.decodeKey = function (key, opts) {
+ return this._keyEncoding(opts).decode(key)
+};
+
+Codec.prototype.decodeValue = function (value, opts) {
+ return this._valueEncoding(opts).decode(value)
+};
+
+Codec.prototype.encodeBatch = function (ops, opts) {
+ var self = this;
+
+ return ops.map(function (_op) {
+ var op = {
+ type: _op.type,
+ key: self.encodeKey(_op.key, opts, _op)
+ };
+ if (self.keyAsBuffer(opts, _op)) op.keyEncoding = 'binary';
+ if (_op.prefix) op.prefix = _op.prefix;
+ if ('value' in _op) {
+ op.value = self.encodeValue(_op.value, opts, _op);
+ if (self.valueAsBuffer(opts, _op)) op.valueEncoding = 'binary';
+ }
+ return op
+ })
+};
+
+var ltgtKeys = ['lt', 'gt', 'lte', 'gte', 'start', 'end'];
+
+Codec.prototype.encodeLtgt = function (ltgt) {
+ var self = this;
+ var ret = {};
+ Object.keys(ltgt).forEach(function (key) {
+ ret[key] = ltgtKeys.indexOf(key) > -1
+ ? self.encodeKey(ltgt[key], ltgt)
+ : ltgt[key];
+ });
+ return ret
+};
+
+Codec.prototype.createStreamDecoder = function (opts) {
+ var self = this;
+
+ if (opts.keys && opts.values) {
+ return function (key, value) {
+ return {
+ key: self.decodeKey(key, opts),
+ value: self.decodeValue(value, opts)
+ }
+ }
+ } else if (opts.keys) {
+ return function (key) {
+ return self.decodeKey(key, opts)
+ }
+ } else if (opts.values) {
+ return function (_, value) {
+ return self.decodeValue(value, opts)
+ }
+ } else {
+ return function () {}
+ }
+};
+
+Codec.prototype.keyAsBuffer = function (opts) {
+ return this._keyEncoding(opts).buffer
+};
+
+Codec.prototype.valueAsBuffer = function (opts) {
+ return this._valueEncoding(opts).buffer
+};
+
+var Codec$1 = /*@__PURE__*/getDefaultExportFromCjs(levelCodec);
+
+var readable$1 = {exports: {}};
+
+var isarray = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+var util$2 = {};
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray$1(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+util$2.isArray = isArray$1;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+util$2.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+util$2.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+util$2.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+util$2.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+util$2.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+util$2.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+util$2.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+}
+util$2.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+util$2.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+util$2.isDate = isDate;
+
+function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+util$2.isError = isError;
+
+function isFunction$1(arg) {
+ return typeof arg === 'function';
+}
+util$2.isFunction = isFunction$1;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+util$2.isPrimitive = isPrimitive;
+
+util$2.isBuffer = require$$0.Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+var _stream_writable$1;
+var hasRequired_stream_writable$1;
+
+function require_stream_writable$1 () {
+ if (hasRequired_stream_writable$1) return _stream_writable$1;
+ hasRequired_stream_writable$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // A bit simpler than readable streams.
+ // Implement an async ._write(chunk, cb), and it'll handle all
+ // the drain event emission and buffering.
+
+ _stream_writable$1 = Writable;
+
+ /**/
+ var Buffer = require$$0.Buffer;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Stream$1 = Stream;
+
+ util.inherits(Writable, Stream$1);
+
+ function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+ }
+
+ function WritableState(options, stream) {
+ var Duplex = require_stream_duplex$1();
+
+ options = options || {};
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function(er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.buffer = [];
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+ }
+
+ function Writable(options) {
+ var Duplex = require_stream_duplex$1();
+
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof Duplex))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function() {
+ this.emit('error', new Error('Cannot pipe. Not readable.'));
+ };
+
+
+ function writeAfterEnd(stream, state, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ }
+
+ // If we get something that is not a buffer, string, null, or undefined,
+ // and we're not in objectMode, then that's an error.
+ // Otherwise stream chunks are all considered to be of length=1, and the
+ // watermarks determine how many objects to keep in the buffer, rather than
+ // how many bytes or characters.
+ function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ var er = new TypeError('Invalid non-string/buffer chunk');
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ valid = false;
+ }
+ return valid;
+ }
+
+ Writable.prototype.write = function(chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+
+ if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (!util.isFunction(cb))
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
+
+ return ret;
+ };
+
+ Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+ };
+
+ Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+ };
+
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ util.isString(chunk)) {
+ chunk = new Buffer(chunk, encoding);
+ }
+ return chunk;
+ }
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, chunk, encoding, cb) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret)
+ state.needDrain = true;
+
+ if (state.writing || state.corked)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ return ret;
+ }
+
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+
+ function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ state.pendingcb--;
+ cb(er);
+ });
+ else {
+ state.pendingcb--;
+ cb(er);
+ }
+
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ }
+
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er)
+ onwriteError(stream, state, sync, er, cb);
+ else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(stream, state);
+
+ if (!finished &&
+ !state.corked &&
+ !state.bufferProcessing &&
+ state.buffer.length) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ process.nextTick(function() {
+ afterWrite(stream, state, finished, cb);
+ });
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished)
+ onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
+ }
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+ }
+
+ state.bufferProcessing = false;
+ }
+
+ Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+
+ };
+
+ Writable.prototype._writev = null;
+
+ Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (util.isFunction(chunk)) {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (!util.isNullOrUndefined(chunk))
+ this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished)
+ endWritable(this, state, cb);
+ };
+
+
+ function needFinish(stream, state) {
+ return (state.ending &&
+ state.length === 0 &&
+ !state.finished &&
+ !state.writing);
+ }
+
+ function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+
+ function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
+ }
+ return need;
+ }
+
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished)
+ process.nextTick(cb);
+ else
+ stream.once('finish', cb);
+ }
+ state.ended = true;
+ }
+ return _stream_writable$1;
+}
+
+var _stream_duplex$1;
+var hasRequired_stream_duplex$1;
+
+function require_stream_duplex$1 () {
+ if (hasRequired_stream_duplex$1) return _stream_duplex$1;
+ hasRequired_stream_duplex$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // a duplex stream is just a stream that is both readable and writable.
+ // Since JS doesn't have multiple prototypal inheritance, this class
+ // prototypally inherits from Readable, and then parasitically from
+ // Writable.
+
+ _stream_duplex$1 = Duplex;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Readable = require_stream_readable$1();
+ var Writable = require_stream_writable$1();
+
+ util.inherits(Duplex, Readable);
+
+ forEach(objectKeys(Writable.prototype), function(method) {
+ if (!Duplex.prototype[method])
+ Duplex.prototype[method] = Writable.prototype[method];
+ });
+
+ function Duplex(options) {
+ if (!(this instanceof Duplex))
+ return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false)
+ this.readable = false;
+
+ if (options && options.writable === false)
+ this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false)
+ this.allowHalfOpen = false;
+
+ this.once('end', onend);
+ }
+
+ // the no-half-open enforcer
+ function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended)
+ return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(this.end.bind(this));
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+ return _stream_duplex$1;
+}
+
+var string_decoder = {};
+
+var hasRequiredString_decoder;
+
+function requireString_decoder () {
+ if (hasRequiredString_decoder) return string_decoder;
+ hasRequiredString_decoder = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var Buffer = require$$0.Buffer;
+
+ var isBufferEncoding = Buffer.isEncoding
+ || function(encoding) {
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+ default: return false;
+ }
+ };
+
+
+ function assertEncoding(encoding) {
+ if (encoding && !isBufferEncoding(encoding)) {
+ throw new Error('Unknown encoding: ' + encoding);
+ }
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters. CESU-8 is handled as part of the UTF-8 encoding.
+ //
+ // @TODO Handling all encodings inside a single object makes it very difficult
+ // to reason about this code, so it should be split up in the future.
+ // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+ // points as used by CESU-8.
+ var StringDecoder = string_decoder.StringDecoder = function(encoding) {
+ this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+ assertEncoding(encoding);
+ switch (this.encoding) {
+ case 'utf8':
+ // CESU-8 represents each of Surrogate Pair by 3-bytes
+ this.surrogateSize = 3;
+ break;
+ case 'ucs2':
+ case 'utf16le':
+ // UTF-16 represents each of Surrogate Pair by 2-bytes
+ this.surrogateSize = 2;
+ this.detectIncompleteChar = utf16DetectIncompleteChar;
+ break;
+ case 'base64':
+ // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+ this.surrogateSize = 3;
+ this.detectIncompleteChar = base64DetectIncompleteChar;
+ break;
+ default:
+ this.write = passThroughWrite;
+ return;
+ }
+
+ // Enough space to store all bytes of a single character. UTF-8 needs 4
+ // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+ this.charBuffer = new Buffer(6);
+ // Number of bytes received for the current incomplete multi-byte character.
+ this.charReceived = 0;
+ // Number of bytes expected for the current incomplete multi-byte character.
+ this.charLength = 0;
+ };
+
+
+ // write decodes the given buffer and returns it as JS string that is
+ // guaranteed to not contain any partial multi-byte characters. Any partial
+ // character found at the end of the buffer is buffered up, and will be
+ // returned when calling write again with the remaining bytes.
+ //
+ // Note: Converting a Buffer containing an orphan surrogate to a String
+ // currently works, but converting a String to a Buffer (via `new Buffer`, or
+ // Buffer#write) will replace incomplete surrogates with the unicode
+ // replacement character. See https://codereview.chromium.org/121173009/ .
+ StringDecoder.prototype.write = function(buffer) {
+ var charStr = '';
+ // if our last write ended with an incomplete multibyte character
+ while (this.charLength) {
+ // determine how many remaining bytes this buffer has to offer for this char
+ var available = (buffer.length >= this.charLength - this.charReceived) ?
+ this.charLength - this.charReceived :
+ buffer.length;
+
+ // add the new bytes to the char buffer
+ buffer.copy(this.charBuffer, this.charReceived, 0, available);
+ this.charReceived += available;
+
+ if (this.charReceived < this.charLength) {
+ // still not enough chars in this buffer? wait for more ...
+ return '';
+ }
+
+ // remove bytes belonging to the current character from the buffer
+ buffer = buffer.slice(available, buffer.length);
+
+ // get the character that was split
+ charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ var charCode = charStr.charCodeAt(charStr.length - 1);
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ this.charLength += this.surrogateSize;
+ charStr = '';
+ continue;
+ }
+ this.charReceived = this.charLength = 0;
+
+ // if there are no more bytes in this buffer, just emit our char
+ if (buffer.length === 0) {
+ return charStr;
+ }
+ break;
+ }
+
+ // determine and set charLength / charReceived
+ this.detectIncompleteChar(buffer);
+
+ var end = buffer.length;
+ if (this.charLength) {
+ // buffer the incomplete character bytes we got
+ buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+ end -= this.charReceived;
+ }
+
+ charStr += buffer.toString(this.encoding, 0, end);
+
+ var end = charStr.length - 1;
+ var charCode = charStr.charCodeAt(end);
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ var size = this.surrogateSize;
+ this.charLength += size;
+ this.charReceived += size;
+ this.charBuffer.copy(this.charBuffer, size, 0, size);
+ buffer.copy(this.charBuffer, 0, 0, size);
+ return charStr.substring(0, end);
+ }
+
+ // or just emit the charStr
+ return charStr;
+ };
+
+ // detectIncompleteChar determines if there is an incomplete UTF-8 character at
+ // the end of the given buffer. If so, it sets this.charLength to the byte
+ // length that character, and sets this.charReceived to the number of bytes
+ // that are available for this character.
+ StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+ // determine how many bytes we have to check at the end of this buffer
+ var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+ // Figure out if one of the last i bytes of our buffer announces an
+ // incomplete char.
+ for (; i > 0; i--) {
+ var c = buffer[buffer.length - i];
+
+ // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+ // 110XXXXX
+ if (i == 1 && c >> 5 == 0x06) {
+ this.charLength = 2;
+ break;
+ }
+
+ // 1110XXXX
+ if (i <= 2 && c >> 4 == 0x0E) {
+ this.charLength = 3;
+ break;
+ }
+
+ // 11110XXX
+ if (i <= 3 && c >> 3 == 0x1E) {
+ this.charLength = 4;
+ break;
+ }
+ }
+ this.charReceived = i;
+ };
+
+ StringDecoder.prototype.end = function(buffer) {
+ var res = '';
+ if (buffer && buffer.length)
+ res = this.write(buffer);
+
+ if (this.charReceived) {
+ var cr = this.charReceived;
+ var buf = this.charBuffer;
+ var enc = this.encoding;
+ res += buf.slice(0, cr).toString(enc);
+ }
+
+ return res;
+ };
+
+ function passThroughWrite(buffer) {
+ return buffer.toString(this.encoding);
+ }
+
+ function utf16DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 2;
+ this.charLength = this.charReceived ? 2 : 0;
+ }
+
+ function base64DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 3;
+ this.charLength = this.charReceived ? 3 : 0;
+ }
+ return string_decoder;
+}
+
+var _stream_readable$1;
+var hasRequired_stream_readable$1;
+
+function require_stream_readable$1 () {
+ if (hasRequired_stream_readable$1) return _stream_readable$1;
+ hasRequired_stream_readable$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ _stream_readable$1 = Readable;
+
+ /**/
+ var isArray = isarray;
+ /**/
+
+
+ /**/
+ var Buffer = require$$0.Buffer;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ var EE = require$$0$2.EventEmitter;
+
+ /**/
+ if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ var Stream$1 = Stream;
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var StringDecoder;
+
+
+ /**/
+ var debug = require$$0$1;
+ if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+ } else {
+ debug = function () {};
+ }
+ /**/
+
+
+ util.inherits(Readable, Stream$1);
+
+ function ReadableState(options, stream) {
+ var Duplex = require_stream_duplex$1();
+
+ options = options || {};
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+
+ function Readable(options) {
+ require_stream_duplex$1();
+
+ if (!(this instanceof Readable))
+ return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function(chunk, encoding) {
+ var state = this._readableState;
+
+ if (util.isString(chunk) && !state.objectMode) {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = new Buffer(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function(chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+ };
+
+ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (util.isNullOrUndefined(chunk)) {
+ state.reading = false;
+ if (!state.ended)
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var e = new Error('stream.unshift() after end event');
+ stream.emit('error', e);
+ } else {
+ if (state.decoder && !addToFront && !encoding)
+ chunk = state.decoder.write(chunk);
+
+ if (!addToFront)
+ state.reading = false;
+
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ state.buffer.push(chunk);
+
+ if (state.needReadable)
+ emitReadable(stream);
+ }
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+ }
+
+
+
+ // if it's past the high water mark, we can push in some more.
+ // Also, if we have no data yet, we can stand some
+ // more bytes. This is to work around cases where hwm=0,
+ // such as the repl. Also, if the push() triggered a
+ // readable event, and the user called read(largeNumber) such that
+ // needReadable was set, then we ought to push more, so that another
+ // 'readable' event will be triggered.
+ function needMoreData(state) {
+ return !state.ended &&
+ (state.needReadable ||
+ state.length < state.highWaterMark ||
+ state.length === 0);
+ }
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function(enc) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+ };
+
+ // Don't raise the hwm > 128MB
+ var MAX_HWM = 0x800000;
+ function roundUpToNextPowerOf2(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2
+ n--;
+ for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+ n++;
+ }
+ return n;
+ }
+
+ function howMuchToRead(n, state) {
+ if (state.length === 0 && state.ended)
+ return 0;
+
+ if (state.objectMode)
+ return n === 0 ? 0 : 1;
+
+ if (isNaN(n) || util.isNull(n)) {
+ // only flow one buffer at a time
+ if (state.flowing && state.buffer.length)
+ return state.buffer[0].length;
+ else
+ return state.length;
+ }
+
+ if (n <= 0)
+ return 0;
+
+ // If we're asking for more than the target buffer level,
+ // then raise the water mark. Bump up to the next highest
+ // power of 2, to prevent increasing it excessively in tiny
+ // amounts.
+ if (n > state.highWaterMark)
+ state.highWaterMark = roundUpToNextPowerOf2(n);
+
+ // don't have that much. return null, unless we've ended.
+ if (n > state.length) {
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ } else
+ return state.length;
+ }
+
+ return n;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function(n) {
+ debug('read', n);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (!util.isNumber(n) || n > 0)
+ state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 &&
+ state.needReadable &&
+ (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0)
+ endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ }
+
+ if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ }
+
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (doRead && !state.reading)
+ n = howMuchToRead(nOrig, state);
+
+ var ret;
+ if (n > 0)
+ ret = fromList(n, state);
+ else
+ ret = null;
+
+ if (util.isNull(ret)) {
+ state.needReadable = true;
+ n = 0;
+ }
+
+ state.length -= n;
+
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
+ endReadable(this);
+
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
+ return ret;
+ };
+
+ function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+ }
+
+
+ function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+ }
+ }
+
+ function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+ }
+
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(function() {
+ maybeReadMore_(stream, state);
+ });
+ }
+ }
+
+ function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended &&
+ state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ else
+ len = state.length;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function(n) {
+ this.emit('error', new Error('not implemented'));
+ };
+
+ Readable.prototype.pipe = function(dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+ dest !== process.stdout &&
+ dest !== process.stderr;
+
+ var endFn = doEnd ? onend : cleanup;
+ if (state.endEmitted)
+ process.nextTick(endFn);
+ else
+ src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', cleanup);
+ src.removeListener('data', ondata);
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
+ ondrain();
+ }
+
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EE.listenerCount(dest, 'error') === 0)
+ dest.emit('error', er);
+ }
+ // This is a brutally ugly hack to make sure that our error handler
+ // is attached before any userland ones. NEVER DO THIS.
+ if (!dest._events || !dest._events.error)
+ dest.on('error', onerror);
+ else if (isArray(dest._events.error))
+ dest._events.error.unshift(onerror);
+ else
+ dest._events.error = [onerror, dest._events.error];
+
+
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+ };
+
+ function pipeOnDrain(src) {
+ return function() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+
+
+ Readable.prototype.unpipe = function(dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0)
+ return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes)
+ return this;
+
+ if (!dest)
+ dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest)
+ dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++)
+ dests[i].emit('unpipe', this);
+ return this;
+ }
+
+ // try to find the right one.
+ var i = indexOf(state.pipes, dest);
+ if (i === -1)
+ return this;
+
+ state.pipes.splice(i, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1)
+ state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function(ev, fn) {
+ var res = Stream$1.prototype.on.call(this, ev, fn);
+
+ // If listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.read(0);
+ });
+ } else if (state.length) {
+ emitReadable(this);
+ }
+ }
+ }
+
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function() {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
+ };
+
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+ }
+
+ function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+ }
+
+ Readable.prototype.pause = function() {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+ };
+
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ if (state.flowing) {
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
+ }
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function(stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function() {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length)
+ self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function(chunk) {
+ debug('wrapped data');
+ if (state.decoder)
+ chunk = state.decoder.write(chunk);
+ if (!chunk || !state.objectMode && !chunk.length)
+ return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ forEach(events, function(ev) {
+ stream.on(ev, self.emit.bind(self, ev));
+ });
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function(n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+ };
+
+
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ function fromList(n, state) {
+ var list = state.buffer;
+ var length = state.length;
+ var stringMode = !!state.decoder;
+ var objectMode = !!state.objectMode;
+ var ret;
+
+ // nothing in the list, definitely empty.
+ if (list.length === 0)
+ return null;
+
+ if (length === 0)
+ ret = null;
+ else if (objectMode)
+ ret = list.shift();
+ else if (!n || n >= length) {
+ // read it all, truncate the array.
+ if (stringMode)
+ ret = list.join('');
+ else
+ ret = Buffer.concat(list, length);
+ list.length = 0;
+ } else {
+ // read just some of it.
+ if (n < list[0].length) {
+ // just take a part of the first list item.
+ // slice is the same for buffers and strings.
+ var buf = list[0];
+ ret = buf.slice(0, n);
+ list[0] = buf.slice(n);
+ } else if (n === list[0].length) {
+ // first list is a perfect match
+ ret = list.shift();
+ } else {
+ // complex case.
+ // we have enough to cover it, but it spans past the first buffer.
+ if (stringMode)
+ ret = '';
+ else
+ ret = new Buffer(n);
+
+ var c = 0;
+ for (var i = 0, l = list.length; i < l && c < n; i++) {
+ var buf = list[0];
+ var cpy = Math.min(n - c, buf.length);
+
+ if (stringMode)
+ ret += buf.slice(0, cpy);
+ else
+ buf.copy(ret, c, 0, cpy);
+
+ if (cpy < buf.length)
+ list[0] = buf.slice(cpy);
+ else
+ list.shift();
+
+ c += cpy;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0)
+ throw new Error('endReadable called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(function() {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ });
+ }
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+
+ function indexOf (xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable$1;
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+var _stream_transform$1 = Transform$2;
+
+var Duplex = require_stream_duplex$1();
+
+/**/
+var util$1 = util$2;
+util$1.inherits = inheritsExports;
+/**/
+
+util$1.inherits(Transform$2, Duplex);
+
+
+function TransformState(options, stream) {
+ this.afterTransform = function(er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb)
+ return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (!util$1.isNullOrUndefined(data))
+ stream.push(data);
+
+ if (cb)
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+
+function Transform$2(options) {
+ if (!(this instanceof Transform$2))
+ return new Transform$2(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = new TransformState(options, this);
+
+ // when the writable side finishes, then flush out anything remaining.
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ this.once('prefinish', function() {
+ if (util$1.isFunction(this._flush))
+ this._flush(function(er) {
+ done(stream, er);
+ });
+ else
+ done(stream);
+ });
+}
+
+Transform$2.prototype.push = function(chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform$2.prototype._transform = function(chunk, encoding, cb) {
+ throw new Error('not implemented');
+};
+
+Transform$2.prototype._write = function(chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform ||
+ rs.needReadable ||
+ rs.length < rs.highWaterMark)
+ this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform$2.prototype._read = function(n) {
+ var ts = this._transformState;
+
+ if (!util$1.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+
+function done(stream, er) {
+ if (er)
+ return stream.emit('error', er);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var ts = stream._transformState;
+
+ if (ws.length)
+ throw new Error('calling transform done when ws.length != 0');
+
+ if (ts.transforming)
+ throw new Error('calling transform done when still transforming');
+
+ return stream.push(null);
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+var _stream_passthrough$1 = PassThrough;
+
+var Transform$1 = _stream_transform$1;
+
+/**/
+var util = util$2;
+util.inherits = inheritsExports;
+/**/
+
+util.inherits(PassThrough, Transform$1);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough))
+ return new PassThrough(options);
+
+ Transform$1.call(this, options);
+}
+
+PassThrough.prototype._transform = function(chunk, encoding, cb) {
+ cb(null, chunk);
+};
+
+readable$1.exports;
+
+(function (module, exports) {
+ exports = module.exports = require_stream_readable$1();
+ exports.Stream = Stream;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable$1();
+ exports.Duplex = require_stream_duplex$1();
+ exports.Transform = _stream_transform$1;
+ exports.PassThrough = _stream_passthrough$1;
+ if (!process.browser && process.env.READABLE_STREAM === 'disable') {
+ module.exports = Stream;
+ }
+} (readable$1, readable$1.exports));
+
+var readableExports$1 = readable$1.exports;
+var ReadableStreamCore = /*@__PURE__*/getDefaultExportFromCjs(readableExports$1);
+
+function isFunction(f) {
+ return 'function' === typeof f;
+}
+
+function getPrefix(db) {
+ if (isFunction(db.prefix)) {
+ return db.prefix();
+ }
+ return db;
+}
+
+function clone(_obj) {
+ var obj = {};
+ for (var k in _obj) {
+ obj[k] = _obj[k];
+ }
+ return obj;
+}
+
+function nut(db, precodec, codec) {
+ function encodePrefix(prefix, key, opts1, opts2) {
+ return precodec.encode([ prefix, codec.encodeKey(key, opts1, opts2 ) ]);
+ }
+
+ function addEncodings(op, prefix) {
+ if (prefix && prefix.options) {
+ op.keyEncoding =
+ op.keyEncoding || prefix.options.keyEncoding;
+ op.valueEncoding =
+ op.valueEncoding || prefix.options.valueEncoding;
+ }
+ return op;
+ }
+
+ db.open(function () { /* no-op */});
+
+ return {
+ apply: function (ops, opts, cb) {
+ opts = opts || {};
+
+ var batch = [];
+ var i = -1;
+ var len = ops.length;
+
+ while (++i < len) {
+ var op = ops[i];
+ addEncodings(op, op.prefix);
+ op.prefix = getPrefix(op.prefix);
+ batch.push({
+ key: encodePrefix(op.prefix, op.key, opts, op),
+ value: op.type !== 'del' && codec.encodeValue(op.value, opts, op),
+ type: op.type
+ });
+ }
+ db.db.batch(batch, opts, cb);
+ },
+ get: function (key, prefix, opts, cb) {
+ opts.asBuffer = codec.valueAsBuffer(opts);
+ return db.db.get(
+ encodePrefix(prefix, key, opts),
+ opts,
+ function (err, value) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, codec.decodeValue(value, opts));
+ }
+ }
+ );
+ },
+ createDecoder: function (opts) {
+ return function (key, value) {
+ return {
+ key: codec.decodeKey(precodec.decode(key)[1], opts),
+ value: codec.decodeValue(value, opts)
+ };
+ };
+ },
+ isClosed: function isClosed() {
+ return db.isClosed();
+ },
+ close: function close(cb) {
+ return db.close(cb);
+ },
+ iterator: function (_opts) {
+ var opts = clone(_opts || {});
+ var prefix = _opts.prefix || [];
+
+ function encodeKey(key) {
+ return encodePrefix(prefix, key, opts, {});
+ }
+
+ ltgt.toLtgt(_opts, opts, encodeKey, precodec.lowerBound, precodec.upperBound);
+
+ // if these legacy values are in the options, remove them
+
+ opts.prefix = null;
+
+ //************************************************
+ //hard coded defaults, for now...
+ //TODO: pull defaults and encoding out of levelup.
+ opts.keyAsBuffer = opts.valueAsBuffer = false;
+ //************************************************
+
+
+ //this is vital, otherwise limit: undefined will
+ //create an empty stream.
+ /* istanbul ignore next */
+ if ('number' !== typeof opts.limit) {
+ opts.limit = -1;
+ }
+
+ opts.keyAsBuffer = precodec.buffer;
+ opts.valueAsBuffer = codec.valueAsBuffer(opts);
+
+ function wrapIterator(iterator) {
+ return {
+ next: function (cb) {
+ return iterator.next(cb);
+ },
+ end: function (cb) {
+ iterator.end(cb);
+ }
+ };
+ }
+
+ return wrapIterator(db.db.iterator(opts));
+ }
+ };
+}
+
+function NotFoundError() {
+ Error.call(this);
+}
+
+inherits$5(NotFoundError, Error);
+
+NotFoundError.prototype.name = 'NotFoundError';
+
+var EventEmitter = require$$0$2.EventEmitter;
+var version = "6.5.4";
+
+var NOT_FOUND_ERROR = new NotFoundError();
+
+var sublevel = function (nut, prefix, createStream, options) {
+ var emitter = new EventEmitter();
+ emitter.sublevels = {};
+ emitter.options = options;
+
+ emitter.version = version;
+
+ emitter.methods = {};
+ prefix = prefix || [];
+
+ function mergeOpts(opts) {
+ var o = {};
+ var k;
+ if (options) {
+ for (k in options) {
+ if (typeof options[k] !== 'undefined') {
+ o[k] = options[k];
+ }
+ }
+ }
+ if (opts) {
+ for (k in opts) {
+ if (typeof opts[k] !== 'undefined') {
+ o[k] = opts[k];
+ }
+ }
+ }
+ return o;
+ }
+
+ emitter.put = function (key, value, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ nut.apply([{
+ key: key, value: value,
+ prefix: prefix.slice(), type: 'put'
+ }], mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('put', key, value);
+ cb(null);
+ });
+ };
+
+ emitter.prefix = function () {
+ return prefix.slice();
+ };
+
+ emitter.batch = function (ops, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ ops = ops.map(function (op) {
+ return {
+ key: op.key,
+ value: op.value,
+ prefix: op.prefix || prefix,
+ keyEncoding: op.keyEncoding, // *
+ valueEncoding: op.valueEncoding, // * (TODO: encodings on sublevel)
+ type: op.type
+ };
+ });
+
+ nut.apply(ops, mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('batch', ops);
+ cb(null);
+ });
+ };
+
+ emitter.get = function (key, opts, cb) {
+ /* istanbul ignore else */
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+ nut.get(key, prefix, mergeOpts(opts), function (err, value) {
+ if (err) {
+ cb(NOT_FOUND_ERROR);
+ } else {
+ cb(null, value);
+ }
+ });
+ };
+
+ emitter.sublevel = function (name, opts) {
+ return emitter.sublevels[name] =
+ emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts));
+ };
+
+ emitter.readStream = emitter.createReadStream = function (opts) {
+ opts = mergeOpts(opts);
+ opts.prefix = prefix;
+ var stream;
+ var it = nut.iterator(opts);
+
+ stream = createStream(opts, nut.createDecoder(opts));
+ stream.setIterator(it);
+
+ return stream;
+ };
+
+ emitter.close = function (cb) {
+ nut.close(cb);
+ };
+
+ emitter.isOpen = nut.isOpen;
+ emitter.isClosed = nut.isClosed;
+
+ return emitter;
+};
+
+/* Copyright (c) 2012-2014 LevelUP contributors
+ * See list at
+ * MIT License
+ */
+
+var Readable = ReadableStreamCore.Readable;
+
+function ReadStream(options, makeData) {
+ if (!(this instanceof ReadStream)) {
+ return new ReadStream(options, makeData);
+ }
+
+ Readable.call(this, { objectMode: true, highWaterMark: options.highWaterMark });
+
+ // purely to keep `db` around until we're done so it's not GCed if the user doesn't keep a ref
+
+ this._waiting = false;
+ this._options = options;
+ this._makeData = makeData;
+}
+
+inherits$5(ReadStream, Readable);
+
+ReadStream.prototype.setIterator = function (it) {
+ this._iterator = it;
+ /* istanbul ignore if */
+ if (this._destroyed) {
+ return it.end(function () {});
+ }
+ /* istanbul ignore if */
+ if (this._waiting) {
+ this._waiting = false;
+ return this._read();
+ }
+ return this;
+};
+
+ReadStream.prototype._read = function read() {
+ var self = this;
+ /* istanbul ignore if */
+ if (self._destroyed) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (!self._iterator) {
+ return this._waiting = true;
+ }
+
+ self._iterator.next(function (err, key, value) {
+ if (err || (key === undefined && value === undefined)) {
+ if (!err && !self._destroyed) {
+ self.push(null);
+ }
+ return self._cleanup(err);
+ }
+
+
+ value = self._makeData(key, value);
+ if (!self._destroyed) {
+ self.push(value);
+ }
+ });
+};
+
+ReadStream.prototype._cleanup = function (err) {
+ if (this._destroyed) {
+ return;
+ }
+
+ this._destroyed = true;
+
+ var self = this;
+ /* istanbul ignore if */
+ if (err && err.message !== 'iterator has ended') {
+ self.emit('error', err);
+ }
+
+ /* istanbul ignore else */
+ if (self._iterator) {
+ self._iterator.end(function () {
+ self._iterator = null;
+ self.emit('close');
+ });
+ } else {
+ self.emit('close');
+ }
+};
+
+ReadStream.prototype.destroy = function () {
+ this._cleanup();
+};
+
+var precodec = {
+ encode: function (decodedKey) {
+ return '\xff' + decodedKey[0] + '\xff' + decodedKey[1];
+ },
+ decode: function (encodedKeyAsBuffer) {
+ var str = encodedKeyAsBuffer.toString();
+ var idx = str.indexOf('\xff', 1);
+ return [str.substring(1, idx), str.substring(idx + 1)];
+ },
+ lowerBound: '\x00',
+ upperBound: '\xff'
+};
+
+var codec = new Codec$1();
+
+function sublevelPouch(db) {
+ return sublevel(nut(db, precodec, codec), [], ReadStream, db.options);
+}
+
+var through2$1 = {exports: {}};
+
+var readable = {exports: {}};
+
+var stream;
+var hasRequiredStream;
+
+function requireStream () {
+ if (hasRequiredStream) return stream;
+ hasRequiredStream = 1;
+ stream = Stream;
+ return stream;
+}
+
+var buffer_list;
+var hasRequiredBuffer_list;
+
+function requireBuffer_list () {
+ if (hasRequiredBuffer_list) return buffer_list;
+ hasRequiredBuffer_list = 1;
+
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var _require = require$$0,
+ Buffer = _require.Buffer;
+ var _require2 = require$$0$1,
+ inspect = _require2.inspect;
+ var custom = inspect && inspect.custom || 'inspect';
+ function copyBuffer(src, target, offset) {
+ Buffer.prototype.copy.call(src, target, offset);
+ }
+ buffer_list = /*#__PURE__*/function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+ _createClass(BufferList, [{
+ key: "push",
+ value: function push(v) {
+ var entry = {
+ data: v,
+ next: null
+ };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ }
+ }, {
+ key: "unshift",
+ value: function unshift(v) {
+ var entry = {
+ data: v,
+ next: this.head
+ };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ }
+ }, {
+ key: "shift",
+ value: function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ }
+ }, {
+ key: "join",
+ value: function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) ret += s + p.data;
+ return ret;
+ }
+ }, {
+ key: "concat",
+ value: function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes or characters from the buffered data.
+ }, {
+ key: "consume",
+ value: function consume(n, hasStrings) {
+ var ret;
+ if (n < this.head.data.length) {
+ // `slice` is the same for buffers and strings.
+ ret = this.head.data.slice(0, n);
+ this.head.data = this.head.data.slice(n);
+ } else if (n === this.head.data.length) {
+ // First chunk is a perfect match.
+ ret = this.shift();
+ } else {
+ // Result spans more than one buffer.
+ ret = hasStrings ? this._getString(n) : this._getBuffer(n);
+ }
+ return ret;
+ }
+ }, {
+ key: "first",
+ value: function first() {
+ return this.head.data;
+ }
+
+ // Consumes a specified amount of characters from the buffered data.
+ }, {
+ key: "_getString",
+ value: function _getString(n) {
+ var p = this.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes from the buffered data.
+ }, {
+ key: "_getBuffer",
+ value: function _getBuffer(n) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = this.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Make sure the linked list only shows the minimal necessary information.
+ }, {
+ key: custom,
+ value: function value(_, options) {
+ return inspect(this, _objectSpread(_objectSpread({}, options), {}, {
+ // Only inspect one level.
+ depth: 0,
+ // It should not recurse.
+ customInspect: false
+ }));
+ }
+ }]);
+ return BufferList;
+ }();
+ return buffer_list;
+}
+
+var destroy_1;
+var hasRequiredDestroy;
+
+function requireDestroy () {
+ if (hasRequiredDestroy) return destroy_1;
+ hasRequiredDestroy = 1;
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err) {
+ if (!this._writableState) {
+ process.nextTick(emitErrorNT, this, err);
+ } else if (!this._writableState.errorEmitted) {
+ this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorNT, this, err);
+ }
+ }
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ if (!_this._writableState) {
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else if (!_this._writableState.errorEmitted) {
+ _this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ } else if (cb) {
+ process.nextTick(emitCloseNT, _this);
+ cb(err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ });
+ return this;
+ }
+ function emitErrorAndCloseNT(self, err) {
+ emitErrorNT(self, err);
+ emitCloseNT(self);
+ }
+ function emitCloseNT(self) {
+ if (self._writableState && !self._writableState.emitClose) return;
+ if (self._readableState && !self._readableState.emitClose) return;
+ self.emit('close');
+ }
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finalCalled = false;
+ this._writableState.prefinished = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+ function errorOrDestroy(stream, err) {
+ // We have tests that rely on errors being emitted
+ // in the same tick, so changing this is semver major.
+ // For now when you opt-in to autoDestroy we allow
+ // the error to be emitted nextTick. In a future
+ // semver major update we should change the default to this.
+
+ var rState = stream._readableState;
+ var wState = stream._writableState;
+ if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
+ }
+ destroy_1 = {
+ destroy: destroy,
+ undestroy: undestroy,
+ errorOrDestroy: errorOrDestroy
+ };
+ return destroy_1;
+}
+
+var errors = {};
+
+var hasRequiredErrors;
+
+function requireErrors () {
+ if (hasRequiredErrors) return errors;
+ hasRequiredErrors = 1;
+
+ const codes = {};
+
+ function createErrorType(code, message, Base) {
+ if (!Base) {
+ Base = Error;
+ }
+
+ function getMessage (arg1, arg2, arg3) {
+ if (typeof message === 'string') {
+ return message
+ } else {
+ return message(arg1, arg2, arg3)
+ }
+ }
+
+ class NodeError extends Base {
+ constructor (arg1, arg2, arg3) {
+ super(getMessage(arg1, arg2, arg3));
+ }
+ }
+
+ NodeError.prototype.name = Base.name;
+ NodeError.prototype.code = code;
+
+ codes[code] = NodeError;
+ }
+
+ // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
+ function oneOf(expected, thing) {
+ if (Array.isArray(expected)) {
+ const len = expected.length;
+ expected = expected.map((i) => String(i));
+ if (len > 2) {
+ return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
+ expected[len - 1];
+ } else if (len === 2) {
+ return `one of ${thing} ${expected[0]} or ${expected[1]}`;
+ } else {
+ return `of ${thing} ${expected[0]}`;
+ }
+ } else {
+ return `of ${thing} ${String(expected)}`;
+ }
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
+ function startsWith(str, search, pos) {
+ return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
+ function endsWith(str, search, this_len) {
+ if (this_len === undefined || this_len > str.length) {
+ this_len = str.length;
+ }
+ return str.substring(this_len - search.length, this_len) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ function includes(str, search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > str.length) {
+ return false;
+ } else {
+ return str.indexOf(search, start) !== -1;
+ }
+ }
+
+ createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
+ return 'The value "' + value + '" is invalid for option "' + name + '"'
+ }, TypeError);
+ createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
+ // determiner: 'must be' or 'must not be'
+ let determiner;
+ if (typeof expected === 'string' && startsWith(expected, 'not ')) {
+ determiner = 'must not be';
+ expected = expected.replace(/^not /, '');
+ } else {
+ determiner = 'must be';
+ }
+
+ let msg;
+ if (endsWith(name, ' argument')) {
+ // For cases like 'first argument'
+ msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
+ } else {
+ const type = includes(name, '.') ? 'property' : 'argument';
+ msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
+ }
+
+ msg += `. Received type ${typeof actual}`;
+ return msg;
+ }, TypeError);
+ createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
+ createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
+ return 'The ' + name + ' method is not implemented'
+ });
+ createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
+ createErrorType('ERR_STREAM_DESTROYED', function (name) {
+ return 'Cannot call ' + name + ' after a stream was destroyed';
+ });
+ createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
+ createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
+ createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
+ createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
+ createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
+ return 'Unknown encoding: ' + arg
+ }, TypeError);
+ createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
+
+ errors.codes = codes;
+ return errors;
+}
+
+var state;
+var hasRequiredState;
+
+function requireState () {
+ if (hasRequiredState) return state;
+ hasRequiredState = 1;
+
+ var ERR_INVALID_OPT_VALUE = requireErrors().codes.ERR_INVALID_OPT_VALUE;
+ function highWaterMarkFrom(options, isDuplex, duplexKey) {
+ return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
+ }
+ function getHighWaterMark(state, options, duplexKey, isDuplex) {
+ var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
+ if (hwm != null) {
+ if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
+ var name = isDuplex ? duplexKey : 'highWaterMark';
+ throw new ERR_INVALID_OPT_VALUE(name, hwm);
+ }
+ return Math.floor(hwm);
+ }
+
+ // Default value
+ return state.objectMode ? 16 : 16 * 1024;
+ }
+ state = {
+ getHighWaterMark: getHighWaterMark
+ };
+ return state;
+}
+
+var _stream_writable;
+var hasRequired_stream_writable;
+
+function require_stream_writable () {
+ if (hasRequired_stream_writable) return _stream_writable;
+ hasRequired_stream_writable = 1;
+
+ _stream_writable = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ var Buffer = require$$0.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+ var destroyImpl = requireDestroy();
+ var _require = requireState(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
+ ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
+ ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
+ ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ inheritsExports(Writable, Stream);
+ function nop() {}
+ function WritableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream,
+ // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'finish' (and potentially 'end')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function writableStateBufferGetter() {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function value(object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function realHasInstance(object) {
+ return object instanceof this;
+ };
+ }
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the WritableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
+ this._writableState = new WritableState(options, this, isDuplex);
+
+ // legacy.
+ this.writable = true;
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+ if (typeof options.writev === 'function') this._writev = options.writev;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
+ };
+ function writeAfterEnd(stream, cb) {
+ var er = new ERR_STREAM_WRITE_AFTER_END();
+ // TODO: defer error events consistently everywhere, not just the cb
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var er;
+ if (chunk === null) {
+ er = new ERR_STREAM_NULL_VALUES();
+ } else if (typeof chunk !== 'string' && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
+ }
+ if (er) {
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ return false;
+ }
+ return true;
+ }
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+ if (typeof cb !== 'function') cb = nop;
+ if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+ return ret;
+ };
+ Writable.prototype.cork = function () {
+ this._writableState.corked++;
+ };
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+ if (state.corked) {
+ state.corked--;
+ if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+ state.length += len;
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+ return ret;
+ }
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ process.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ process.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+ if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
+ onwriteStateUpdate(state);
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state) || stream.destroyed;
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+ if (sync) {
+ process.nextTick(afterWrite, stream, state, finished, cb);
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
+ };
+ Writable.prototype._writev = null;
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending) endWritable(this, state, cb);
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ errorOrDestroy(stream, err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function' && !state.destroyed) {
+ state.pendingcb++;
+ state.finalCalled = true;
+ process.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the readable side is ready for autoDestroy as well
+ var rState = stream._readableState;
+ if (!rState || rState.autoDestroy && rState.endEmitted) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ return need;
+ }
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+
+ // reuse the free corkReq.
+ state.corkedRequestsFree.next = corkReq;
+ }
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+ return _stream_writable;
+}
+
+var _stream_duplex;
+var hasRequired_stream_duplex;
+
+function require_stream_duplex () {
+ if (hasRequired_stream_duplex) return _stream_duplex;
+ hasRequired_stream_duplex = 1;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+ _stream_duplex = Duplex;
+ var Readable = require_stream_readable();
+ var Writable = require_stream_writable();
+ inheritsExports(Duplex, Readable);
+ {
+ // Allow the keys array to be GC'ed.
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+ Readable.call(this, options);
+ Writable.call(this, options);
+ this.allowHalfOpen = true;
+ if (options) {
+ if (options.readable === false) this.readable = false;
+ if (options.writable === false) this.writable = false;
+ if (options.allowHalfOpen === false) {
+ this.allowHalfOpen = false;
+ this.once('end', onend);
+ }
+ }
+ }
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // If the writable side ended, then we're ok.
+ if (this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(onEndNT, this);
+ }
+ function onEndNT(self) {
+ self.end();
+ }
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+ return _stream_duplex;
+}
+
+var endOfStream;
+var hasRequiredEndOfStream;
+
+function requireEndOfStream () {
+ if (hasRequiredEndOfStream) return endOfStream;
+ hasRequiredEndOfStream = 1;
+
+ var ERR_STREAM_PREMATURE_CLOSE = requireErrors().codes.ERR_STREAM_PREMATURE_CLOSE;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ callback.apply(this, args);
+ };
+ }
+ function noop() {}
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function eos(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
+ callback = once(callback || noop);
+ var readable = opts.readable || opts.readable !== false && stream.readable;
+ var writable = opts.writable || opts.writable !== false && stream.writable;
+ var onlegacyfinish = function onlegacyfinish() {
+ if (!stream.writable) onfinish();
+ };
+ var writableEnded = stream._writableState && stream._writableState.finished;
+ var onfinish = function onfinish() {
+ writable = false;
+ writableEnded = true;
+ if (!readable) callback.call(stream);
+ };
+ var readableEnded = stream._readableState && stream._readableState.endEmitted;
+ var onend = function onend() {
+ readable = false;
+ readableEnded = true;
+ if (!writable) callback.call(stream);
+ };
+ var onerror = function onerror(err) {
+ callback.call(stream, err);
+ };
+ var onclose = function onclose() {
+ var err;
+ if (readable && !readableEnded) {
+ if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ if (writable && !writableEnded) {
+ if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ };
+ var onrequest = function onrequest() {
+ stream.req.on('finish', onfinish);
+ };
+ if (isRequest(stream)) {
+ stream.on('complete', onfinish);
+ stream.on('abort', onclose);
+ if (stream.req) onrequest();else stream.on('request', onrequest);
+ } else if (writable && !stream._writableState) {
+ // legacy streams
+ stream.on('end', onlegacyfinish);
+ stream.on('close', onlegacyfinish);
+ }
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+ return function () {
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+ }
+ endOfStream = eos;
+ return endOfStream;
+}
+
+var async_iterator;
+var hasRequiredAsync_iterator;
+
+function requireAsync_iterator () {
+ if (hasRequiredAsync_iterator) return async_iterator;
+ hasRequiredAsync_iterator = 1;
+
+ var _Object$setPrototypeO;
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var finished = requireEndOfStream();
+ var kLastResolve = Symbol('lastResolve');
+ var kLastReject = Symbol('lastReject');
+ var kError = Symbol('error');
+ var kEnded = Symbol('ended');
+ var kLastPromise = Symbol('lastPromise');
+ var kHandlePromise = Symbol('handlePromise');
+ var kStream = Symbol('stream');
+ function createIterResult(value, done) {
+ return {
+ value: value,
+ done: done
+ };
+ }
+ function readAndResolve(iter) {
+ var resolve = iter[kLastResolve];
+ if (resolve !== null) {
+ var data = iter[kStream].read();
+ // we defer if data is null
+ // we can be expecting either 'end' or
+ // 'error'
+ if (data !== null) {
+ iter[kLastPromise] = null;
+ iter[kLastResolve] = null;
+ iter[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ }
+ }
+ }
+ function onReadable(iter) {
+ // we wait for the next tick, because it might
+ // emit an error with process.nextTick
+ process.nextTick(readAndResolve, iter);
+ }
+ function wrapForNext(lastPromise, iter) {
+ return function (resolve, reject) {
+ lastPromise.then(function () {
+ if (iter[kEnded]) {
+ resolve(createIterResult(undefined, true));
+ return;
+ }
+ iter[kHandlePromise](resolve, reject);
+ }, reject);
+ };
+ }
+ var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
+ var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
+ get stream() {
+ return this[kStream];
+ },
+ next: function next() {
+ var _this = this;
+ // if we have detected an error in the meanwhile
+ // reject straight away
+ var error = this[kError];
+ if (error !== null) {
+ return Promise.reject(error);
+ }
+ if (this[kEnded]) {
+ return Promise.resolve(createIterResult(undefined, true));
+ }
+ if (this[kStream].destroyed) {
+ // We need to defer via nextTick because if .destroy(err) is
+ // called, the error will be emitted via nextTick, and
+ // we cannot guarantee that there is no error lingering around
+ // waiting to be emitted.
+ return new Promise(function (resolve, reject) {
+ process.nextTick(function () {
+ if (_this[kError]) {
+ reject(_this[kError]);
+ } else {
+ resolve(createIterResult(undefined, true));
+ }
+ });
+ });
+ }
+
+ // if we have multiple next() calls
+ // we will wait for the previous Promise to finish
+ // this logic is optimized to support for await loops,
+ // where next() is only called once at a time
+ var lastPromise = this[kLastPromise];
+ var promise;
+ if (lastPromise) {
+ promise = new Promise(wrapForNext(lastPromise, this));
+ } else {
+ // fast path needed to support multiple this.push()
+ // without triggering the next() queue
+ var data = this[kStream].read();
+ if (data !== null) {
+ return Promise.resolve(createIterResult(data, false));
+ }
+ promise = new Promise(this[kHandlePromise]);
+ }
+ this[kLastPromise] = promise;
+ return promise;
+ }
+ }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
+ return this;
+ }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
+ var _this2 = this;
+ // destroy(err, cb) is a private API
+ // we can guarantee we have that here, because we control the
+ // Readable class this is attached to
+ return new Promise(function (resolve, reject) {
+ _this2[kStream].destroy(null, function (err) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(createIterResult(undefined, true));
+ });
+ });
+ }), _Object$setPrototypeO), AsyncIteratorPrototype);
+ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
+ var _Object$create;
+ var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
+ value: stream,
+ writable: true
+ }), _defineProperty(_Object$create, kLastResolve, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kLastReject, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kError, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kEnded, {
+ value: stream._readableState.endEmitted,
+ writable: true
+ }), _defineProperty(_Object$create, kHandlePromise, {
+ value: function value(resolve, reject) {
+ var data = iterator[kStream].read();
+ if (data) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ } else {
+ iterator[kLastResolve] = resolve;
+ iterator[kLastReject] = reject;
+ }
+ },
+ writable: true
+ }), _Object$create));
+ iterator[kLastPromise] = null;
+ finished(stream, function (err) {
+ if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
+ var reject = iterator[kLastReject];
+ // reject if we are waiting for data in the Promise
+ // returned by next() and store the error
+ if (reject !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ reject(err);
+ }
+ iterator[kError] = err;
+ return;
+ }
+ var resolve = iterator[kLastResolve];
+ if (resolve !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(undefined, true));
+ }
+ iterator[kEnded] = true;
+ });
+ stream.on('readable', onReadable.bind(null, iterator));
+ return iterator;
+ };
+ async_iterator = createReadableStreamAsyncIterator;
+ return async_iterator;
+}
+
+var from_1;
+var hasRequiredFrom;
+
+function requireFrom () {
+ if (hasRequiredFrom) return from_1;
+ hasRequiredFrom = 1;
+
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var ERR_INVALID_ARG_TYPE = requireErrors().codes.ERR_INVALID_ARG_TYPE;
+ function from(Readable, iterable, opts) {
+ var iterator;
+ if (iterable && typeof iterable.next === 'function') {
+ iterator = iterable;
+ } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);
+ var readable = new Readable(_objectSpread({
+ objectMode: true
+ }, opts));
+ // Reading boolean to protect against _read
+ // being called before last iteration completion.
+ var reading = false;
+ readable._read = function () {
+ if (!reading) {
+ reading = true;
+ next();
+ }
+ };
+ function next() {
+ return _next2.apply(this, arguments);
+ }
+ function _next2() {
+ _next2 = _asyncToGenerator(function* () {
+ try {
+ var _yield$iterator$next = yield iterator.next(),
+ value = _yield$iterator$next.value,
+ done = _yield$iterator$next.done;
+ if (done) {
+ readable.push(null);
+ } else if (readable.push(yield value)) {
+ next();
+ } else {
+ reading = false;
+ }
+ } catch (err) {
+ readable.destroy(err);
+ }
+ });
+ return _next2.apply(this, arguments);
+ }
+ return readable;
+ }
+ from_1 = from;
+ return from_1;
+}
+
+var _stream_readable;
+var hasRequired_stream_readable;
+
+function require_stream_readable () {
+ if (hasRequired_stream_readable) return _stream_readable;
+ hasRequired_stream_readable = 1;
+
+ _stream_readable = Readable;
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$0$2.EventEmitter;
+ var EElistenerCount = function EElistenerCount(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ var Buffer = require$$0.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+ var debugUtil = require$$0$1;
+ var debug;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function debug() {};
+ }
+ /**/
+
+ var BufferList = requireBuffer_list();
+ var destroyImpl = requireDestroy();
+ var _require = requireState(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
+
+ // Lazy loaded to improve the startup performance.
+ var StringDecoder;
+ var createReadableStreamAsyncIterator;
+ var from;
+ inheritsExports(Readable, Stream);
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+ function ReadableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+ this.paused = true;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'end' (and potentially 'finish')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex();
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the ReadableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ this._readableState = new ReadableState(options, this, isDuplex);
+
+ // legacy
+ this.readable = true;
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+ Stream.call(this);
+ }
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ debug('readableAddChunk', chunk);
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ errorOrDestroy(stream, er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (addToFront) {
+ if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
+ } else if (state.destroyed) {
+ return false;
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ maybeReadMore(stream, state);
+ }
+ }
+
+ // We can push more data if we are below the highWaterMark.
+ // Also, if we have no data yet, we can stand some more bytes.
+ // This is to work around cases where hwm=0, such as the repl.
+ return !state.ended && (state.length < state.highWaterMark || state.length === 0);
+ }
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ state.awaitDrain = 0;
+ stream.emit('data', chunk);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
+ }
+ return er;
+ }
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ var decoder = new StringDecoder(enc);
+ this._readableState.decoder = decoder;
+ // If setEncoding(null), decoder.encoding equals utf8
+ this._readableState.encoding = this._readableState.decoder.encoding;
+
+ // Iterate over current buffer to convert already stored Buffers:
+ var p = this._readableState.buffer.head;
+ var content = '';
+ while (p !== null) {
+ content += decoder.write(p.data);
+ p = p.next;
+ }
+ this._readableState.buffer.clear();
+ if (content !== '') this._readableState.buffer.push(content);
+ this._readableState.length = content.length;
+ return this;
+ };
+
+ // Don't raise the hwm > 1GB
+ var MAX_HWM = 0x40000000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+ if (ret === null) {
+ state.needReadable = state.length <= state.highWaterMark;
+ n = 0;
+ } else {
+ state.length -= n;
+ state.awaitDrain = 0;
+ }
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+ if (ret !== null) this.emit('data', ret);
+ return ret;
+ };
+ function onEofChunk(stream, state) {
+ debug('onEofChunk');
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+ if (state.sync) {
+ // if we are sync, wait until next tick to emit the data.
+ // Otherwise we risk emitting data in the flow()
+ // the readable code triggers during a read() call
+ emitReadable(stream);
+ } else {
+ // emit 'readable' now to make sure it gets picked up.
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ state.emittedReadable = true;
+ emitReadable_(stream);
+ }
+ }
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ debug('emitReadable', state.needReadable, state.emittedReadable);
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ process.nextTick(emitReadable_, stream);
+ }
+ }
+ function emitReadable_(stream) {
+ var state = stream._readableState;
+ debug('emitReadable_', state.destroyed, state.length, state.ended);
+ if (!state.destroyed && (state.length || state.ended)) {
+ stream.emit('readable');
+ state.emittedReadable = false;
+ }
+
+ // The stream needs another readable event if
+ // 1. It is not flowing, as the flow mechanism will take
+ // care of it.
+ // 2. It is not ended.
+ // 3. It is below the highWaterMark, so we can schedule
+ // another readable later.
+ state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+ function maybeReadMore_(stream, state) {
+ // Attempt to read more data if we should.
+ //
+ // The conditions for reading more data are (one of):
+ // - Not enough data buffered (state.length < state.highWaterMark). The loop
+ // is responsible for filling the buffer with enough data if such data
+ // is available. If highWaterMark is 0 and we are not in the flowing mode
+ // we should _not_ attempt to buffer any extra data. We'll get more data
+ // when the stream consumer calls read() instead.
+ // - No data in the buffer, and the stream is in flowing mode. In this mode
+ // the loop below is responsible for ensuring read() is called. Failing to
+ // call read here would abort the flow and there's no other mechanism for
+ // continuing the flow if the stream consumer has just subscribed to the
+ // 'data' event.
+ //
+ // In addition to the above conditions to keep reading data, the following
+ // conditions prevent the data from being read:
+ // - The stream has ended (state.ended).
+ // - There is already a pending 'read' operation (state.reading). This is a
+ // case where the the stream has called the implementation defined _read()
+ // method, but they are processing the call asynchronously and have _not_
+ // called push() with new data. In this case we skip performing more
+ // read()s. The execution ends in this method again after the _read() ends
+ // up calling push() with more data.
+ while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
+ var len = state.length;
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
+ };
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ debug('dest.write', ret);
+ if (ret === false) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', state.awaitDrain);
+ state.awaitDrain++;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+ return dest;
+ };
+ function pipeOnDrain(src) {
+ return function pipeOnDrainFunctionResult() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = {
+ hasUnpiped: false
+ };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {
+ hasUnpiped: false
+ });
+ return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+ dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+ var state = this._readableState;
+ if (ev === 'data') {
+ // update readableListening so that resume() may be a no-op
+ // a few lines down. This is needed to support once('readable').
+ state.readableListening = this.listenerCount('readable') > 0;
+
+ // Try start flowing on next tick if stream isn't explicitly paused
+ if (state.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.flowing = false;
+ state.emittedReadable = false;
+ debug('on readable', state.length, state.reading);
+ if (state.length) {
+ emitReadable(this);
+ } else if (!state.reading) {
+ process.nextTick(nReadingNextTick, this);
+ }
+ }
+ }
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+ Readable.prototype.removeListener = function (ev, fn) {
+ var res = Stream.prototype.removeListener.call(this, ev, fn);
+ if (ev === 'readable') {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ Readable.prototype.removeAllListeners = function (ev) {
+ var res = Stream.prototype.removeAllListeners.apply(this, arguments);
+ if (ev === 'readable' || ev === undefined) {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ function updateReadableListening(self) {
+ var state = self._readableState;
+ state.readableListening = self.listenerCount('readable') > 0;
+ if (state.resumeScheduled && !state.paused) {
+ // flowing needs to be set to true now, otherwise
+ // the upcoming resume will not flow.
+ state.flowing = true;
+
+ // crude way to check if we should resume
+ } else if (self.listenerCount('data') > 0) {
+ self.resume();
+ }
+ }
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ // we flow only if there is no one listening
+ // for readable, but we still have to call
+ // resume()
+ state.flowing = !state.readableListening;
+ resume(this, state);
+ }
+ state.paused = false;
+ return this;
+ };
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(resume_, stream, state);
+ }
+ }
+ function resume_(stream, state) {
+ debug('resume', state.reading);
+ if (!state.reading) {
+ stream.read(0);
+ }
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (this._readableState.flowing !== false) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ this._readableState.paused = true;
+ return this;
+ };
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null);
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+ var state = this._readableState;
+ var paused = false;
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+ _this.push(null);
+ });
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function methodWrap(method) {
+ return function methodWrapReturnFunction() {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+ return this;
+ };
+ if (typeof Symbol === 'function') {
+ Readable.prototype[Symbol.asyncIterator] = function () {
+ if (createReadableStreamAsyncIterator === undefined) {
+ createReadableStreamAsyncIterator = requireAsync_iterator();
+ }
+ return createReadableStreamAsyncIterator(this);
+ };
+ }
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState && this._readableState.buffer;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableFlowing', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.flowing;
+ },
+ set: function set(state) {
+ if (this._readableState) {
+ this._readableState.flowing = state;
+ }
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+ Object.defineProperty(Readable.prototype, 'readableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.length;
+ }
+ });
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = state.buffer.consume(n, state.decoder);
+ }
+ return ret;
+ }
+ function endReadable(stream) {
+ var state = stream._readableState;
+ debug('endReadable', state.endEmitted);
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(endReadableNT, state, stream);
+ }
+ }
+ function endReadableNT(state, stream) {
+ debug('endReadableNT', state.endEmitted, state.length);
+
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the writable side is ready for autoDestroy as well
+ var wState = stream._writableState;
+ if (!wState || wState.autoDestroy && wState.finished) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ if (typeof Symbol === 'function') {
+ Readable.from = function (iterable, opts) {
+ if (from === undefined) {
+ from = requireFrom();
+ }
+ return from(Readable, iterable, opts);
+ };
+ }
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable;
+}
+
+var _stream_transform;
+var hasRequired_stream_transform;
+
+function require_stream_transform () {
+ if (hasRequired_stream_transform) return _stream_transform;
+ hasRequired_stream_transform = 1;
+
+ _stream_transform = Transform;
+ var _require$codes = requireErrors().codes,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
+ ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
+ var Duplex = require_stream_duplex();
+ inheritsExports(Transform, Duplex);
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+ var cb = ts.writecb;
+ if (cb === null) {
+ return this.emit('error', new ERR_MULTIPLE_CALLBACK());
+ }
+ ts.writechunk = null;
+ ts.writecb = null;
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ this.push(data);
+ cb(er);
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+ Duplex.call(this, options);
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+ function prefinish() {
+ var _this = this;
+ if (typeof this._flush === 'function' && !this._readableState.destroyed) {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
+ };
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+ if (ts.writechunk !== null && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+ Transform.prototype._destroy = function (err, cb) {
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ });
+ };
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // TODO(BridgeAR): Write a test for these two error cases
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
+ if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
+ return stream.push(null);
+ }
+ return _stream_transform;
+}
+
+var _stream_passthrough;
+var hasRequired_stream_passthrough;
+
+function require_stream_passthrough () {
+ if (hasRequired_stream_passthrough) return _stream_passthrough;
+ hasRequired_stream_passthrough = 1;
+
+ _stream_passthrough = PassThrough;
+ var Transform = require_stream_transform();
+ inheritsExports(PassThrough, Transform);
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+ Transform.call(this, options);
+ }
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough;
+}
+
+var pipeline_1;
+var hasRequiredPipeline;
+
+function requirePipeline () {
+ if (hasRequiredPipeline) return pipeline_1;
+ hasRequiredPipeline = 1;
+
+ var eos;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ callback.apply(void 0, arguments);
+ };
+ }
+ var _require$codes = requireErrors().codes,
+ ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
+ function noop(err) {
+ // Rethrow the error if it exists to avoid swallowing it
+ if (err) throw err;
+ }
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function destroyer(stream, reading, writing, callback) {
+ callback = once(callback);
+ var closed = false;
+ stream.on('close', function () {
+ closed = true;
+ });
+ if (eos === undefined) eos = requireEndOfStream();
+ eos(stream, {
+ readable: reading,
+ writable: writing
+ }, function (err) {
+ if (err) return callback(err);
+ closed = true;
+ callback();
+ });
+ var destroyed = false;
+ return function (err) {
+ if (closed) return;
+ if (destroyed) return;
+ destroyed = true;
+
+ // request.destroy just do .end - .abort is what we want
+ if (isRequest(stream)) return stream.abort();
+ if (typeof stream.destroy === 'function') return stream.destroy();
+ callback(err || new ERR_STREAM_DESTROYED('pipe'));
+ };
+ }
+ function call(fn) {
+ fn();
+ }
+ function pipe(from, to) {
+ return from.pipe(to);
+ }
+ function popCallback(streams) {
+ if (!streams.length) return noop;
+ if (typeof streams[streams.length - 1] !== 'function') return noop;
+ return streams.pop();
+ }
+ function pipeline() {
+ for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
+ streams[_key] = arguments[_key];
+ }
+ var callback = popCallback(streams);
+ if (Array.isArray(streams[0])) streams = streams[0];
+ if (streams.length < 2) {
+ throw new ERR_MISSING_ARGS('streams');
+ }
+ var error;
+ var destroys = streams.map(function (stream, i) {
+ var reading = i < streams.length - 1;
+ var writing = i > 0;
+ return destroyer(stream, reading, writing, function (err) {
+ if (!error) error = err;
+ if (err) destroys.forEach(call);
+ if (reading) return;
+ destroys.forEach(call);
+ callback(error);
+ });
+ });
+ return streams.reduce(pipe);
+ }
+ pipeline_1 = pipeline;
+ return pipeline_1;
+}
+
+readable.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1.Readable;
+ Object.assign(module.exports, Stream$1);
+ module.exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable();
+ exports.Duplex = require_stream_duplex();
+ exports.Transform = require_stream_transform();
+ exports.PassThrough = require_stream_passthrough();
+ exports.finished = requireEndOfStream();
+ exports.pipeline = requirePipeline();
+ }
+} (readable, readable.exports));
+
+var readableExports = readable.exports;
+
+var Transform = readableExports.Transform
+ , inherits = inheritsExports;
+
+function DestroyableTransform(opts) {
+ Transform.call(this, opts);
+ this._destroyed = false;
+}
+
+inherits(DestroyableTransform, Transform);
+
+DestroyableTransform.prototype.destroy = function(err) {
+ if (this._destroyed) return
+ this._destroyed = true;
+
+ var self = this;
+ process.nextTick(function() {
+ if (err)
+ self.emit('error', err);
+ self.emit('close');
+ });
+};
+
+// a noop _transform function
+function noop (chunk, enc, callback) {
+ callback(null, chunk);
+}
+
+
+// create a new export function, used by both the main export and
+// the .ctor export, contains common logic for dealing with arguments
+function through2 (construct) {
+ return function (options, transform, flush) {
+ if (typeof options == 'function') {
+ flush = transform;
+ transform = options;
+ options = {};
+ }
+
+ if (typeof transform != 'function')
+ transform = noop;
+
+ if (typeof flush != 'function')
+ flush = null;
+
+ return construct(options, transform, flush)
+ }
+}
+
+
+// main export, just make me a transform stream!
+through2$1.exports = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(options);
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+
+// make me a reusable prototype that I can `new`, or implicitly `new`
+// with a constructor call
+through2$1.exports.ctor = through2(function (options, transform, flush) {
+ function Through2 (override) {
+ if (!(this instanceof Through2))
+ return new Through2(override)
+
+ this.options = Object.assign({}, options, override);
+
+ DestroyableTransform.call(this, this.options);
+ }
+
+ inherits(Through2, DestroyableTransform);
+
+ Through2.prototype._transform = transform;
+
+ if (flush)
+ Through2.prototype._flush = flush;
+
+ return Through2
+});
+
+
+var obj = through2$1.exports.obj = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(Object.assign({ objectMode: true, highWaterMark: 16 }, options));
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+/**
+ * Copyright (c) 2013 Petka Antonov
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+function Deque(capacity) {
+ this._capacity = getCapacity(capacity);
+ this._length = 0;
+ this._front = 0;
+ if (isArray(capacity)) {
+ var len = capacity.length;
+ for (var i = 0; i < len; ++i) {
+ this[i] = capacity[i];
+ }
+ this._length = len;
+ }
+}
+
+Deque.prototype.toArray = function Deque$toArray() {
+ var len = this._length;
+ var ret = new Array(len);
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ ret[j] = this[(front + j) & (capacity - 1)];
+ }
+ return ret;
+};
+
+Deque.prototype.push = function Deque$push(item) {
+ var argsLength = arguments.length;
+ var length = this._length;
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = 0; i < argsLength; ++i) {
+ this._checkCapacity(length + 1);
+ var j = (this._front + length) & (this._capacity - 1);
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ }
+ return length;
+ }
+ else {
+ var j = this._front;
+ for (var i = 0; i < argsLength; ++i) {
+ this[(j + length) & (capacity - 1)] = arguments[i];
+ j++;
+ }
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var i = (this._front + length) & (this._capacity - 1);
+ this[i] = item;
+ this._length = length + 1;
+ return length + 1;
+};
+
+Deque.prototype.pop = function Deque$pop() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var i = (this._front + length - 1) & (this._capacity - 1);
+ var ret = this[i];
+ this[i] = void 0;
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.shift = function Deque$shift() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var front = this._front;
+ var ret = this[front];
+ this[front] = void 0;
+ this._front = (front + 1) & (this._capacity - 1);
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.unshift = function Deque$unshift(item) {
+ var length = this._length;
+ var argsLength = arguments.length;
+
+
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = argsLength - 1; i >= 0; i--) {
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var j = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ this._front = j;
+ }
+ return length;
+ }
+ else {
+ var front = this._front;
+ for (var i = argsLength - 1; i >= 0; i--) {
+ var j = (((( front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ front = j;
+ }
+ this._front = front;
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var i = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[i] = item;
+ this._length = length + 1;
+ this._front = i;
+ return length + 1;
+};
+
+Deque.prototype.peekBack = function Deque$peekBack() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var index = (this._front + length - 1) & (this._capacity - 1);
+ return this[index];
+};
+
+Deque.prototype.peekFront = function Deque$peekFront() {
+ if (this._length === 0) {
+ return void 0;
+ }
+ return this[this._front];
+};
+
+Deque.prototype.get = function Deque$get(index) {
+ var i = index;
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ var len = this._length;
+ if (i < 0) {
+ i = i + len;
+ }
+ if (i < 0 || i >= len) {
+ return void 0;
+ }
+ return this[(this._front + i) & (this._capacity - 1)];
+};
+
+Deque.prototype.isEmpty = function Deque$isEmpty() {
+ return this._length === 0;
+};
+
+Deque.prototype.clear = function Deque$clear() {
+ var len = this._length;
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ this[(front + j) & (capacity - 1)] = void 0;
+ }
+ this._length = 0;
+ this._front = 0;
+};
+
+Deque.prototype.toString = function Deque$toString() {
+ return this.toArray().toString();
+};
+
+Deque.prototype.valueOf = Deque.prototype.toString;
+Deque.prototype.removeFront = Deque.prototype.shift;
+Deque.prototype.removeBack = Deque.prototype.pop;
+Deque.prototype.insertFront = Deque.prototype.unshift;
+Deque.prototype.insertBack = Deque.prototype.push;
+Deque.prototype.enqueue = Deque.prototype.push;
+Deque.prototype.dequeue = Deque.prototype.shift;
+Deque.prototype.toJSON = Deque.prototype.toArray;
+
+Object.defineProperty(Deque.prototype, "length", {
+ get: function() {
+ return this._length;
+ },
+ set: function() {
+ throw new RangeError("");
+ }
+});
+
+Deque.prototype._checkCapacity = function Deque$_checkCapacity(size) {
+ if (this._capacity < size) {
+ this._resizeTo(getCapacity(this._capacity * 1.5 + 16));
+ }
+};
+
+Deque.prototype._resizeTo = function Deque$_resizeTo(capacity) {
+ var oldCapacity = this._capacity;
+ this._capacity = capacity;
+ var front = this._front;
+ var length = this._length;
+ if (front + length > oldCapacity) {
+ var moveItemsCount = (front + length) & (oldCapacity - 1);
+ arrayMove(this, 0, this, oldCapacity, moveItemsCount);
+ }
+};
+
+
+var isArray = Array.isArray;
+
+function arrayMove(src, srcIndex, dst, dstIndex, len) {
+ for (var j = 0; j < len; ++j) {
+ dst[j + dstIndex] = src[j + srcIndex];
+ src[j + srcIndex] = void 0;
+ }
+}
+
+function pow2AtLeast(n) {
+ n = n >>> 0;
+ n = n - 1;
+ n = n | (n >> 1);
+ n = n | (n >> 2);
+ n = n | (n >> 4);
+ n = n | (n >> 8);
+ n = n | (n >> 16);
+ return n + 1;
+}
+
+function getCapacity(capacity) {
+ if (typeof capacity !== "number") {
+ if (isArray(capacity)) {
+ capacity = capacity.length;
+ }
+ else {
+ return 16;
+ }
+ }
+ return pow2AtLeast(
+ Math.min(
+ Math.max(16, capacity), 1073741824)
+ );
+}
+
+var deque = Deque;
+
+var Deque$1 = /*@__PURE__*/getDefaultExportFromCjs(deque);
+
+function readAsBlobOrBuffer(storedObject, type) {
+ // In Node, we've stored a buffer
+ storedObject.type = type; // non-standard, but used for consistency
+ return storedObject;
+}
+
+// in Node, we store the buffer directly
+function prepareAttachmentForStorage(attData, cb) {
+ cb(attData);
+}
+
+function createEmptyBlobOrBuffer(type) {
+ return typedBuffer('', 'binary', type);
+}
+
+// similar to an idb or websql transaction object
+
+function getCacheFor(transaction, store) {
+ var prefix = store.prefix()[0];
+ var cache = transaction._cache;
+ var subCache = cache.get(prefix);
+ if (!subCache) {
+ subCache = new Map();
+ cache.set(prefix, subCache);
+ }
+ return subCache;
+}
+
+class LevelTransaction {
+ constructor() {
+ this._batch = [];
+ this._cache = new Map();
+ }
+
+ get(store, key, callback) {
+ var cache = getCacheFor(this, store);
+ var exists = cache.get(key);
+ if (exists) {
+ return nextTick$4(function () {
+ callback(null, exists);
+ });
+ } else if (exists === null) { // deleted marker
+ /* istanbul ignore next */
+ return nextTick$4(function () {
+ callback({name: 'NotFoundError'});
+ });
+ }
+ store.get(key, function (err, res) {
+ if (err) {
+ /* istanbul ignore else */
+ if (err.name === 'NotFoundError') {
+ cache.set(key, null);
+ }
+ return callback(err);
+ }
+ cache.set(key, res);
+ callback(null, res);
+ });
+ }
+
+ batch(batch) {
+ for (var i = 0, len = batch.length; i < len; i++) {
+ var operation = batch[i];
+
+ var cache = getCacheFor(this, operation.prefix);
+
+ if (operation.type === 'put') {
+ cache.set(operation.key, operation.value);
+ } else {
+ cache.set(operation.key, null);
+ }
+ }
+ this._batch = this._batch.concat(batch);
+ }
+
+ execute(db, callback) {
+ var keys = new Set();
+ var uniqBatches = [];
+
+ // remove duplicates; last one wins
+ for (var i = this._batch.length - 1; i >= 0; i--) {
+ var operation = this._batch[i];
+ var lookupKey = operation.prefix.prefix()[0] + '\xff' + operation.key;
+ if (keys.has(lookupKey)) {
+ continue;
+ }
+ keys.add(lookupKey);
+ uniqBatches.push(operation);
+ }
+
+ db.batch(uniqBatches, callback);
+ }
+}
+
+var DOC_STORE = 'document-store';
+var BY_SEQ_STORE = 'by-sequence';
+var ATTACHMENT_STORE = 'attach-store';
+var BINARY_STORE = 'attach-binary-store';
+var LOCAL_STORE = 'local-store';
+var META_STORE = 'meta-store';
+
+// leveldb barks if we try to open a db multiple times
+// so we cache opened connections here for initstore()
+var dbStores = new Map();
+
+// store the value of update_seq in the by-sequence store the key name will
+// never conflict, since the keys in the by-sequence store are integers
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var MD5_PREFIX = 'md5-';
+
+var safeJsonEncoding = {
+ encode: safeJsonStringify,
+ decode: safeJsonParse,
+ buffer: false,
+ type: 'cheap-json'
+};
+
+var levelChanges = new Changes();
+
+// winningRev and deleted are performance-killers, but
+// in newer versions of PouchDB, they are cached on the metadata
+function getWinningRev(metadata) {
+ return 'winningRev' in metadata ?
+ metadata.winningRev : winningRev(metadata);
+}
+
+function getIsDeleted(metadata, winningRev) {
+ return 'deleted' in metadata ?
+ metadata.deleted : isDeleted(metadata, winningRev);
+}
+
+function fetchAttachment(att, stores, opts) {
+ var type = att.content_type;
+ return new Promise(function (resolve, reject) {
+ stores.binaryStore.get(att.digest, function (err, buffer) {
+ var data;
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return reject(err);
+ } else {
+ // empty
+ if (!opts.binary) {
+ data = '';
+ } else {
+ data = binStringToBluffer('', type);
+ }
+ }
+ } else { // non-empty
+ if (opts.binary) {
+ data = readAsBlobOrBuffer(buffer, type);
+ } else {
+ data = buffer.toString('base64');
+ }
+ }
+ delete att.stub;
+ delete att.length;
+ att.data = data;
+ resolve();
+ });
+ });
+}
+
+function fetchAttachments(results, stores, opts) {
+ var atts = [];
+ results.forEach(function (row) {
+ if (!(row.doc && row.doc._attachments)) {
+ return;
+ }
+ var attNames = Object.keys(row.doc._attachments);
+ attNames.forEach(function (attName) {
+ var att = row.doc._attachments[attName];
+ if (!('data' in att)) {
+ atts.push(att);
+ }
+ });
+ });
+
+ return Promise.all(atts.map(function (att) {
+ return fetchAttachment(att, stores, opts);
+ }));
+}
+
+function LevelPouch(opts, callback) {
+ opts = clone$1(opts);
+ var api = this;
+ var instanceId;
+ var stores = {};
+ var revLimit = opts.revs_limit;
+ var db;
+ var name = opts.name;
+ // TODO: this is undocumented and unused probably
+ /* istanbul ignore else */
+ if (typeof opts.createIfMissing === 'undefined') {
+ opts.createIfMissing = true;
+ }
+
+ var leveldown = opts.db;
+
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ dbStore = new Map();
+ dbStores.set(leveldownName, dbStore);
+ }
+ if (dbStore.has(name)) {
+ db = dbStore.get(name);
+ afterDBCreated();
+ } else {
+ dbStore.set(name, sublevelPouch(levelup$1(leveldown(name), opts, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ dbStore.delete(name);
+ return callback(err);
+ }
+ db = dbStore.get(name);
+ db._docCount = -1;
+ db._queue = new Deque$1();
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationOne(name, db, afterDBCreated);
+ } else {
+ afterDBCreated();
+ }
+ })));
+ }
+
+ function afterDBCreated() {
+ stores.docStore = db.sublevel(DOC_STORE, {valueEncoding: safeJsonEncoding});
+ stores.bySeqStore = db.sublevel(BY_SEQ_STORE, {valueEncoding: 'json'});
+ stores.attachmentStore =
+ db.sublevel(ATTACHMENT_STORE, {valueEncoding: 'json'});
+ stores.binaryStore = db.sublevel(BINARY_STORE, {valueEncoding: 'binary'});
+ stores.localStore = db.sublevel(LOCAL_STORE, {valueEncoding: 'json'});
+ stores.metaStore = db.sublevel(META_STORE, {valueEncoding: 'json'});
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationTwo(db, stores, afterLastMigration);
+ } else {
+ afterLastMigration();
+ }
+ }
+
+ function afterLastMigration() {
+ stores.metaStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (typeof db._updateSeq === 'undefined') {
+ db._updateSeq = value || 0;
+ }
+ stores.metaStore.get(DOC_COUNT_KEY, function (err, value) {
+ db._docCount = !err ? value : 0;
+ stores.metaStore.get(UUID_KEY, function (err, value) {
+ instanceId = !err ? value : uuid();
+ stores.metaStore.put(UUID_KEY, instanceId, function () {
+ nextTick$4(function () {
+ callback(null, api);
+ });
+ });
+ });
+ });
+ });
+ }
+
+ function countDocs(callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(new Error('database is closed'));
+ }
+ return callback(null, db._docCount); // use cached value
+ }
+
+ api._remote = false;
+ /* istanbul ignore next */
+ api.type = function () {
+ return 'leveldb';
+ };
+
+ api._id = function (callback) {
+ callback(null, instanceId);
+ };
+
+ api._info = function (callback) {
+ var res = {
+ doc_count: db._docCount,
+ update_seq: db._updateSeq,
+ backend_adapter: functionName(leveldown)
+ };
+ return nextTick$4(function () {
+ callback(null, res);
+ });
+ };
+
+ function tryCode(fun, args) {
+ try {
+ fun.apply(null, args);
+ } catch (err) {
+ args[args.length - 1](err);
+ }
+ }
+
+ function executeNext() {
+ var firstTask = db._queue.peekFront();
+
+ if (firstTask.type === 'read') {
+ runReadOperation(firstTask);
+ } else { // write, only do one at a time
+ runWriteOperation(firstTask);
+ }
+ }
+
+ function runReadOperation(firstTask) {
+ // do multiple reads at once simultaneously, because it's safe
+
+ var readTasks = [firstTask];
+ var i = 1;
+ var nextTask = db._queue.get(i);
+ while (typeof nextTask !== 'undefined' && nextTask.type === 'read') {
+ readTasks.push(nextTask);
+ i++;
+ nextTask = db._queue.get(i);
+ }
+
+ var numDone = 0;
+
+ readTasks.forEach(function (readTask) {
+ var args = readTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ if (++numDone === readTasks.length) {
+ nextTick$4(function () {
+ // all read tasks have finished
+ readTasks.forEach(function () {
+ db._queue.shift();
+ });
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ }
+ };
+ tryCode(readTask.fun, args);
+ });
+ }
+
+ function runWriteOperation(firstTask) {
+ var args = firstTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ nextTick$4(function () {
+ db._queue.shift();
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ };
+ tryCode(firstTask.fun, args);
+ }
+
+ // all read/write operations to the database are done in a queue,
+ // similar to how websql/idb works. this avoids problems such
+ // as e.g. compaction needing to have a lock on the database while
+ // it updates stuff. in the future we can revisit this.
+ function writeLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'write'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$4(executeNext);
+ }
+ };
+ }
+
+ // same as the writelock, but multiple can run at once
+ function readLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'read'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$4(executeNext);
+ }
+ };
+ }
+
+ function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+ }
+
+ function parseSeq(s) {
+ return parseInt(s, 10);
+ }
+
+ api._get = readLock(function (id, opts, callback) {
+ opts = clone$1(opts);
+
+ stores.docStore.get(id, function (err, metadata) {
+
+ if (err || !metadata) {
+ return callback(createError$2(MISSING_DOC, 'missing'));
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, rev);
+ if (deleted) {
+ return callback(createError$2(MISSING_DOC, "deleted"));
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var seq = metadata.rev_map[rev];
+
+ stores.bySeqStore.get(formatSeq(seq), function (err, doc) {
+ if (!doc) {
+ return callback(createError$2(MISSING_DOC));
+ }
+ /* istanbul ignore if */
+ if ('_id' in doc && doc._id !== metadata.id) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ doc._id = metadata.id;
+ if ('_rev' in doc) {
+ /* istanbul ignore if */
+ if (doc._rev !== rev) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ } else {
+ // we didn't always store this
+ doc._rev = rev;
+ }
+ return callback(null, {doc: doc, metadata: metadata});
+ });
+ });
+ });
+
+ // not technically part of the spec, but if putAttachment has its own
+ // method...
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ stores.binaryStore.get(digest, function (err, attach) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ }
+ // Empty attachment
+ return callback(null, opts.binary ? createEmptyBlobOrBuffer(type) : '');
+ }
+
+ if (opts.binary) {
+ callback(null, readAsBlobOrBuffer(attach, type));
+ } else {
+ callback(null, attach.toString('base64'));
+ }
+ });
+ };
+
+ api._bulkDocs = writeLock(function (req, opts, callback) {
+ var newEdits = opts.new_edits;
+ var results = new Array(req.docs.length);
+ var fetchedDocs = new Map();
+ var stemmedRevs = new Map();
+
+ var txn = new LevelTransaction();
+ var docCountDelta = 0;
+ var newUpdateSeq = db._updateSeq;
+
+ // parse the docs and give each a sequence number
+ var userDocs = req.docs;
+ var docInfos = userDocs.map(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ return doc;
+ }
+ var newDoc = parseDoc(doc, newEdits, api.__opts);
+
+ if (newDoc.metadata && !newDoc.metadata.rev_map) {
+ newDoc.metadata.rev_map = {};
+ }
+
+ return newDoc;
+ });
+ var infoErrors = docInfos.filter(function (doc) {
+ return doc.error;
+ });
+
+ if (infoErrors.length) {
+ return callback(infoErrors[0]);
+ }
+
+ // verify any stub attachments as a precondition test
+
+ function verifyAttachment(digest, callback) {
+ txn.get(stores.attachmentStore, digest, function (levelErr) {
+ if (levelErr) {
+ var err = createError$2(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ callback(err);
+ } else {
+ callback();
+ }
+ });
+ }
+
+ function verifyAttachments(finish) {
+ var digests = [];
+ userDocs.forEach(function (doc) {
+ if (doc && doc._attachments) {
+ Object.keys(doc._attachments).forEach(function (filename) {
+ var att = doc._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ });
+ });
+ }
+
+ function fetchExistingDocs(finish) {
+ var numDone = 0;
+ var overallErr;
+ function checkDone() {
+ if (++numDone === userDocs.length) {
+ return finish(overallErr);
+ }
+ }
+
+ userDocs.forEach(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ // skip local docs
+ return checkDone();
+ }
+ txn.get(stores.docStore, doc._id, function (err, info) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ overallErr = err;
+ }
+ } else {
+ fetchedDocs.set(doc._id, info);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function compact(revsMap, callback) {
+ var promise = Promise.resolve();
+ revsMap.forEach(function (revs, docId) {
+ // TODO: parallelize, for now need to be sequential to
+ // pass orphaned attachment tests
+ promise = promise.then(function () {
+ return new Promise(function (resolve, reject) {
+ api._doCompactionNoLock(docId, revs, {ctx: txn}, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return reject(err);
+ }
+ resolve();
+ });
+ });
+ });
+ });
+
+ promise.then(function () {
+ callback();
+ }, callback);
+ }
+
+ function autoCompact(callback) {
+ var revsMap = new Map();
+ fetchedDocs.forEach(function (metadata, docId) {
+ revsMap.set(docId, compactTree(metadata));
+ });
+ compact(revsMap, callback);
+ }
+
+ function finish() {
+ compact(stemmedRevs, function (error) {
+ /* istanbul ignore if */
+ if (error) {
+ complete(error);
+ }
+ if (api.auto_compaction) {
+ return autoCompact(complete);
+ }
+ complete();
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback2) {
+ docCountDelta += delta;
+
+ var err = null;
+ var recv = 0;
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ docInfo.data._id = docInfo.metadata.id;
+ docInfo.data._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ docInfo.data._deleted = true;
+ }
+
+ if (docInfo.stemmedRevs.length) {
+ stemmedRevs.set(docInfo.metadata.id, docInfo.stemmedRevs);
+ }
+
+ var attachments = docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) :
+ [];
+
+ function attachmentSaved(attachmentErr) {
+ recv++;
+ if (!err) {
+ /* istanbul ignore if */
+ if (attachmentErr) {
+ err = attachmentErr;
+ callback2(err);
+ } else if (recv === attachments.length) {
+ finish();
+ }
+ }
+ }
+
+ function onMD5Load(doc, key, data, attachmentSaved) {
+ return function (result) {
+ saveAttachment(doc, MD5_PREFIX + result, key, data, attachmentSaved);
+ };
+ }
+
+ function doMD5(doc, key, attachmentSaved) {
+ return function (data) {
+ binaryMd5(data, onMD5Load(doc, key, data, attachmentSaved));
+ };
+ }
+
+ for (var i = 0; i < attachments.length; i++) {
+ var key = attachments[i];
+ var att = docInfo.data._attachments[key];
+
+ if (att.stub) {
+ // still need to update the refs mapping
+ var id = docInfo.data._id;
+ var rev = docInfo.data._rev;
+ saveAttachmentRefs(id, rev, att.digest, attachmentSaved);
+ continue;
+ }
+ var data;
+ if (typeof att.data === 'string') {
+ // input is assumed to be a base64 string
+ try {
+ data = atob(att.data);
+ } catch (e) {
+ callback(createError$2(BAD_ARG,
+ 'Attachment is not a valid base64 string'));
+ return;
+ }
+ doMD5(docInfo, key, attachmentSaved)(data);
+ } else {
+ prepareAttachmentForStorage(att.data,
+ doMD5(docInfo, key, attachmentSaved));
+ }
+ }
+
+ function finish() {
+ var seq = docInfo.metadata.rev_map[docInfo.metadata.rev];
+ /* istanbul ignore if */
+ if (seq) {
+ // check that there aren't any existing revisions with the same
+ // revision id, else we shouldn't do anything
+ return callback2();
+ }
+ seq = ++newUpdateSeq;
+ docInfo.metadata.rev_map[docInfo.metadata.rev] =
+ docInfo.metadata.seq = seq;
+ var seqKey = formatSeq(seq);
+ var batch = [{
+ key: seqKey,
+ value: docInfo.data,
+ prefix: stores.bySeqStore,
+ type: 'put'
+ }, {
+ key: docInfo.metadata.id,
+ value: docInfo.metadata,
+ prefix: stores.docStore,
+ type: 'put'
+ }];
+ txn.batch(batch);
+ results[resultsIdx] = {
+ ok: true,
+ id: docInfo.metadata.id,
+ rev: docInfo.metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ callback2();
+ }
+
+ if (!attachments.length) {
+ finish();
+ }
+ }
+
+ // attachments are queued per-digest, otherwise the refs could be
+ // overwritten by concurrent writes in the same bulkDocs session
+ var attachmentQueues = {};
+
+ function saveAttachmentRefs(id, rev, digest, callback) {
+
+ function fetchAtt() {
+ return new Promise(function (resolve, reject) {
+ txn.get(stores.attachmentStore, digest, function (err, oldAtt) {
+ /* istanbul ignore if */
+ if (err && err.name !== 'NotFoundError') {
+ return reject(err);
+ }
+ resolve(oldAtt);
+ });
+ });
+ }
+
+ function saveAtt(oldAtt) {
+ var ref = [id, rev].join('@');
+ var newAtt = {};
+
+ if (oldAtt) {
+ if (oldAtt.refs) {
+ // only update references if this attachment already has them
+ // since we cannot migrate old style attachments here without
+ // doing a full db scan for references
+ newAtt.refs = oldAtt.refs;
+ newAtt.refs[ref] = true;
+ }
+ } else {
+ newAtt.refs = {};
+ newAtt.refs[ref] = true;
+ }
+
+ return new Promise(function (resolve) {
+ txn.batch([{
+ type: 'put',
+ prefix: stores.attachmentStore,
+ key: digest,
+ value: newAtt
+ }]);
+ resolve(!oldAtt);
+ });
+ }
+
+ // put attachments in a per-digest queue, to avoid two docs with the same
+ // attachment overwriting each other
+ var queue = attachmentQueues[digest] || Promise.resolve();
+ attachmentQueues[digest] = queue.then(function () {
+ return fetchAtt().then(saveAtt).then(function (isNewAttachment) {
+ callback(null, isNewAttachment);
+ }, callback);
+ });
+ }
+
+ function saveAttachment(docInfo, digest, key, data, callback) {
+ var att = docInfo.data._attachments[key];
+ delete att.data;
+ att.digest = digest;
+ att.length = data.length;
+ var id = docInfo.metadata.id;
+ var rev = docInfo.metadata.rev;
+ att.revpos = parseInt(rev, 10);
+
+ saveAttachmentRefs(id, rev, digest, function (err, isNewAttachment) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ // do not try to store empty attachments
+ if (data.length === 0) {
+ return callback(err);
+ }
+ if (!isNewAttachment) {
+ // small optimization - don't bother writing it again
+ return callback(err);
+ }
+ txn.batch([{
+ type: 'put',
+ prefix: stores.binaryStore,
+ key: digest,
+ value: Buffer.from(data, 'binary')
+ }]);
+ callback();
+ });
+ }
+
+ function complete(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return nextTick$4(function () {
+ callback(err);
+ });
+ }
+ txn.batch([
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: UPDATE_SEQ_KEY,
+ value: newUpdateSeq
+ },
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: DOC_COUNT_KEY,
+ value: db._docCount + docCountDelta
+ }
+ ]);
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ db._docCount += docCountDelta;
+ db._updateSeq = newUpdateSeq;
+ levelChanges.notify(name);
+ nextTick$4(function () {
+ callback(null, results);
+ });
+ });
+ }
+
+ if (!docInfos.length) {
+ return callback(null, []);
+ }
+
+ verifyAttachments(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ fetchExistingDocs(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ processDocs(revLimit, docInfos, api, fetchedDocs, txn, results,
+ writeDoc, opts, finish);
+ });
+ });
+ });
+ api._allDocs = function (opts, callback) {
+ if ('keys' in opts) {
+ return allDocsKeysQuery(this, opts);
+ }
+ return readLock(function (opts, callback) {
+ opts = clone$1(opts);
+ countDocs(function (err, docCount) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var readstreamOpts = {};
+ var skip = opts.skip || 0;
+ if (opts.startkey) {
+ readstreamOpts.gte = opts.startkey;
+ }
+ if (opts.endkey) {
+ readstreamOpts.lte = opts.endkey;
+ }
+ if (opts.key) {
+ readstreamOpts.gte = readstreamOpts.lte = opts.key;
+ }
+ if (opts.descending) {
+ readstreamOpts.reverse = true;
+ // switch start and ends
+ var tmp = readstreamOpts.lte;
+ readstreamOpts.lte = readstreamOpts.gte;
+ readstreamOpts.gte = tmp;
+ }
+ var limit;
+ if (typeof opts.limit === 'number') {
+ limit = opts.limit;
+ }
+ if (limit === 0 ||
+ ('gte' in readstreamOpts && 'lte' in readstreamOpts &&
+ readstreamOpts.gte > readstreamOpts.lte)) {
+ // should return 0 results when start is greater than end.
+ // normally level would "fix" this for us by reversing the order,
+ // so short-circuit instead
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ return callback(null, returnVal);
+ }
+ var results = [];
+ var docstream = stores.docStore.readStream(readstreamOpts);
+
+ var throughStream = obj(function (entry, _, next) {
+ var metadata = entry.value;
+ // winningRev and deleted are performance-killers, but
+ // in newer versions of PouchDB, they are cached on the metadata
+ var winningRev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, winningRev);
+ if (!deleted) {
+ if (skip-- > 0) {
+ next();
+ return;
+ } else if (typeof limit === 'number' && limit-- <= 0) {
+ docstream.unpipe();
+ docstream.destroy();
+ next();
+ return;
+ }
+ } else if (opts.deleted !== 'ok') {
+ next();
+ return;
+ }
+ function allDocsInner(data) {
+ var doc = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ if (opts.include_docs) {
+ doc.doc = data;
+ doc.doc._rev = doc.value.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc.doc._conflicts = conflicts;
+ }
+ }
+ for (var att in doc.doc._attachments) {
+ if (Object.prototype.hasOwnProperty.call(doc.doc._attachments, att)) {
+ doc.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ if (opts.inclusive_end === false && metadata.id === opts.endkey) {
+ return next();
+ } else if (deleted) {
+ if (opts.deleted === 'ok') {
+ doc.value.deleted = true;
+ doc.doc = null;
+ } else {
+ /* istanbul ignore next */
+ return next();
+ }
+ }
+ results.push(doc);
+ next();
+ }
+ if (opts.include_docs) {
+ var seq = metadata.rev_map[winningRev];
+ stores.bySeqStore.get(formatSeq(seq), function (err, data) {
+ allDocsInner(data);
+ });
+ }
+ else {
+ allDocsInner();
+ }
+ }, function (next) {
+ Promise.resolve().then(function () {
+ if (opts.include_docs && opts.attachments) {
+ return fetchAttachments(results, stores, opts);
+ }
+ }).then(function () {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ callback(null, returnVal);
+ }, callback);
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ });
+
+ docstream.on('error', callback);
+
+ docstream.pipe(throughStream);
+ });
+ })(opts, callback);
+ };
+
+ api._changes = function (opts) {
+ opts = clone$1(opts);
+
+ if (opts.continuous) {
+ var id = name + ':' + uuid();
+ levelChanges.addListener(name, id, api, opts);
+ levelChanges.notify(name);
+ return {
+ cancel: function () {
+ levelChanges.removeListener(name, id);
+ }
+ };
+ }
+
+ var descending = opts.descending;
+ var results = [];
+ var lastSeq = opts.since || 0;
+ var called = 0;
+ var streamOpts = {
+ reverse: descending
+ };
+ var limit;
+ if ('limit' in opts && opts.limit > 0) {
+ limit = opts.limit;
+ }
+ if (!streamOpts.reverse) {
+ streamOpts.start = formatSeq(opts.since || 0);
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ function complete() {
+ opts.done = true;
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+ changeStream.unpipe(throughStream);
+ changeStream.destroy();
+ if (!opts.continuous && !opts.cancelled) {
+ if (opts.include_docs && opts.attachments && opts.return_docs) {
+ fetchAttachments(results, stores, opts).then(function () {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ });
+ } else {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ }
+ }
+ }
+ var changeStream = stores.bySeqStore.readStream(streamOpts);
+ var throughStream = obj(function (data, _, next) {
+ if (limit && called >= limit) {
+ complete();
+ return next();
+ }
+ if (opts.cancelled || opts.done) {
+ return next();
+ }
+
+ var seq = parseSeq(data.key);
+ var doc = data.value;
+
+ if (seq === opts.since && !descending) {
+ // couchdb ignores `since` if descending=true
+ return next();
+ }
+
+ if (docIds && !docIds.has(doc._id)) {
+ return next();
+ }
+
+ var metadata;
+
+ function onGetMetadata(metadata) {
+ var winningRev = getWinningRev(metadata);
+
+ function onGetWinningDoc(winningDoc) {
+
+ var change = opts.processChange(winningDoc, metadata, opts);
+ change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ called++;
+
+ if (opts.attachments && opts.include_docs) {
+ // fetch attachment immediately for the benefit
+ // of live listeners
+ fetchAttachments([change], stores, opts).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ }
+ next();
+ }
+
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return next();
+ }
+
+ lastSeq = seq;
+
+ if (winningRev === doc._rev) {
+ return onGetWinningDoc(doc);
+ }
+
+ // fetch the winner
+
+ var winningSeq = metadata.rev_map[winningRev];
+
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, doc) {
+ onGetWinningDoc(doc);
+ });
+ }
+
+ metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(metadata);
+ }
+ // metadata not cached, have to go fetch it
+ stores.docStore.get(doc._id, function (err, metadata) {
+ /* istanbul ignore if */
+ if (opts.cancelled || opts.done || db.isClosed() ||
+ isLocalId(metadata.id)) {
+ return next();
+ }
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(metadata);
+ });
+ }, function (next) {
+ if (opts.cancelled) {
+ return next();
+ }
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ complete();
+ });
+ changeStream.pipe(throughStream);
+ return {
+ cancel: function () {
+ opts.cancelled = true;
+ complete();
+ }
+ };
+ };
+
+ api._close = function (callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(createError$2(NOT_OPEN));
+ }
+ db.close(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ dbStore.delete(name);
+
+ var adapterName = functionName(leveldown);
+ var adapterStore = dbStores.get(adapterName);
+ var viewNamePrefix = PouchDB.prefix + name + "-mrview-";
+ var keys = [...adapterStore.keys()].filter(k => k.includes(viewNamePrefix));
+ keys.forEach(key => {
+ var eventEmitter = adapterStore.get(key);
+ eventEmitter.removeAllListeners();
+ eventEmitter.close();
+ adapterStore.delete(key);
+ });
+
+ callback();
+ }
+ });
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ stores.docStore.get(docId, function (err, metadata) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, metadata.rev_tree);
+ }
+ });
+ };
+
+ api._doCompaction = writeLock(function (docId, revs, opts, callback) {
+ api._doCompactionNoLock(docId, revs, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._doCompactionNoLock = function (docId, revs, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ if (!revs.length) {
+ return callback();
+ }
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.docStore, docId, function (err, metadata) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var seqs = revs.map(function (rev) {
+ var seq = metadata.rev_map[rev];
+ delete metadata.rev_map[rev];
+ return seq;
+ });
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var batch = [];
+ batch.push({
+ key: metadata.id,
+ value: metadata,
+ type: 'put',
+ prefix: stores.docStore
+ });
+
+ var digestMap = {};
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === revs.length) { // done
+ /* istanbul ignore if */
+ if (overallErr) {
+ return callback(overallErr);
+ }
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function finish(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ txn.batch(batch);
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback();
+ }
+ txn.execute(db, callback);
+ }
+
+ function deleteOrphanedAttachments() {
+ var possiblyOrphanedAttachments = Object.keys(digestMap);
+ if (!possiblyOrphanedAttachments.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === possiblyOrphanedAttachments.length) {
+ finish(overallErr);
+ }
+ }
+ var refsToDelete = new Map();
+ revs.forEach(function (rev) {
+ refsToDelete.set(docId + '@' + rev, true);
+ });
+ possiblyOrphanedAttachments.forEach(function (digest) {
+ txn.get(stores.attachmentStore, digest, function (err, attData) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var refs = Object.keys(attData.refs || {}).filter(function (ref) {
+ return !refsToDelete.has(ref);
+ });
+ var newRefs = {};
+ refs.forEach(function (ref) {
+ newRefs[ref] = true;
+ });
+ if (refs.length) { // not orphaned
+ batch.push({
+ key: digest,
+ type: 'put',
+ value: {refs: newRefs},
+ prefix: stores.attachmentStore
+ });
+ } else { // orphaned, can safely delete
+ batch = batch.concat([{
+ key: digest,
+ type: 'del',
+ prefix: stores.attachmentStore
+ }, {
+ key: digest,
+ type: 'del',
+ prefix: stores.binaryStore
+ }]);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ seqs.forEach(function (seq) {
+ batch.push({
+ key: formatSeq(seq),
+ type: 'del',
+ prefix: stores.bySeqStore
+ });
+ txn.get(stores.bySeqStore, formatSeq(seq), function (err, doc) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var atts = Object.keys(doc._attachments || {});
+ atts.forEach(function (attName) {
+ var digest = doc._attachments[attName].digest;
+ digestMap[digest] = true;
+ });
+ checkDone();
+ });
+ });
+ });
+ };
+
+ api._getLocal = function (id, callback) {
+ stores.localStore.get(id, function (err, doc) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, doc);
+ }
+ });
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._putLocalNoLock(doc, opts, callback);
+ } else {
+ api._putLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._putLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._putLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._putLocalNoLock = function (doc, opts, callback) {
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.localStore, id, function (err, resp) {
+ if (err && oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ if (resp && resp._rev !== oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ doc._rev =
+ oldRev ? '0-' + (parseInt(oldRev.split('-')[1], 10) + 1) : '0-1';
+ var batch = [
+ {
+ type: 'put',
+ prefix: stores.localStore,
+ key: id,
+ value: doc
+ }
+ ];
+
+ txn.batch(batch);
+ var ret = {ok: true, id: doc._id, rev: doc._rev};
+
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._removeLocalNoLock(doc, opts, callback);
+ } else {
+ api._removeLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._removeLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._removeLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._removeLocalNoLock = function (doc, opts, callback) {
+ var txn = opts.ctx || new LevelTransaction();
+ txn.get(stores.localStore, doc._id, function (err, resp) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ } else {
+ return callback(createError$2(MISSING_DOC));
+ }
+ }
+ if (resp._rev !== doc._rev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ txn.batch([{
+ prefix: stores.localStore,
+ type: 'del',
+ key: doc._id
+ }]);
+ var ret = {ok: true, id: doc._id, rev: '0-0'};
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ // close and delete open leveldb stores
+ api._destroy = function (opts, callback) {
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ /* istanbul ignore else */
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ return callDestroy(name, callback);
+ }
+
+ /* istanbul ignore else */
+ if (dbStore.has(name)) {
+ levelChanges.removeAllListeners(name);
+
+ dbStore.get(name).close(function () {
+ dbStore.delete(name);
+ callDestroy(name, callback);
+ });
+ } else {
+ callDestroy(name, callback);
+ }
+ };
+ function callDestroy(name, cb) {
+ // May not exist if leveldown is backed by memory adapter
+ /* istanbul ignore else */
+ if ('destroy' in leveldown) {
+ leveldown.destroy(name, cb);
+ } else {
+ cb(null);
+ }
+ }
+}
+
+export { LevelPouch as L, inheritsExports as a, levelup as b, ltgt$1 as c, errors$2 as e, immutable as i, levelCodec as l, mutable as m, obj as o };
diff --git a/packages/pouchdb-lib/lib/index.esm-9293e8de-9293e8de.js b/packages/pouchdb-lib/lib/index.esm-9293e8de-9293e8de.js
new file mode 100644
index 0000000000..46e054cac7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/index.esm-9293e8de-9293e8de.js
@@ -0,0 +1,2416 @@
+/*!
+ * hash-wasm (https://www.npmjs.com/package/hash-wasm)
+ * (c) Dani Biro
+ * @license MIT
+ */
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+class Mutex {
+ constructor() {
+ this.mutex = Promise.resolve();
+ }
+ lock() {
+ let begin = () => { };
+ this.mutex = this.mutex.then(() => new Promise(begin));
+ return new Promise((res) => {
+ begin = res;
+ });
+ }
+ dispatch(fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.lock();
+ try {
+ return yield Promise.resolve(fn());
+ }
+ finally {
+ unlock();
+ }
+ });
+ }
+}
+
+/* eslint-disable import/prefer-default-export */
+/* eslint-disable no-bitwise */
+var _a;
+function getGlobal() {
+ if (typeof globalThis !== 'undefined')
+ return globalThis;
+ // eslint-disable-next-line no-restricted-globals
+ if (typeof self !== 'undefined')
+ return self;
+ if (typeof window !== 'undefined')
+ return window;
+ return global;
+}
+const globalObject = getGlobal();
+const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
+const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
+function intArrayToString(arr, len) {
+ return String.fromCharCode(...arr.subarray(0, len));
+}
+function hexCharCodesToInt(a, b) {
+ return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
+}
+function writeHexToUInt8(buf, str) {
+ const size = str.length >> 1;
+ for (let i = 0; i < size; i++) {
+ const index = i << 1;
+ buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
+ }
+}
+function hexStringEqualsUInt8(str, buf) {
+ if (str.length !== buf.length * 2) {
+ return false;
+ }
+ for (let i = 0; i < buf.length; i++) {
+ const strIndex = i << 1;
+ if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
+ return false;
+ }
+ }
+ return true;
+}
+const alpha = 'a'.charCodeAt(0) - 10;
+const digit = '0'.charCodeAt(0);
+function getDigestHex(tmpBuffer, input, hashLength) {
+ let p = 0;
+ /* eslint-disable no-plusplus */
+ for (let i = 0; i < hashLength; i++) {
+ let nibble = input[i] >>> 4;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ nibble = input[i] & 0xF;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ }
+ /* eslint-enable no-plusplus */
+ return String.fromCharCode.apply(null, tmpBuffer);
+}
+const getUInt8Buffer = nodeBuffer !== null
+ ? (data) => {
+ if (typeof data === 'string') {
+ const buf = nodeBuffer.from(data, 'utf8');
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+ }
+ if (nodeBuffer.isBuffer(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.length);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ }
+ : (data) => {
+ if (typeof data === 'string') {
+ return textEncoder.encode(data);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ };
+const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+const base64Lookup = new Uint8Array(256);
+for (let i = 0; i < base64Chars.length; i++) {
+ base64Lookup[base64Chars.charCodeAt(i)] = i;
+}
+function encodeBase64(data, pad = true) {
+ const len = data.length;
+ const extraBytes = len % 3;
+ const parts = [];
+ const len2 = len - extraBytes;
+ for (let i = 0; i < len2; i += 3) {
+ const tmp = ((data[i] << 16) & 0xFF0000)
+ + ((data[i + 1] << 8) & 0xFF00)
+ + (data[i + 2] & 0xFF);
+ const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)
+ + base64Chars.charAt((tmp >> 12) & 0x3F)
+ + base64Chars.charAt((tmp >> 6) & 0x3F)
+ + base64Chars.charAt(tmp & 0x3F);
+ parts.push(triplet);
+ }
+ if (extraBytes === 1) {
+ const tmp = data[len - 1];
+ const a = base64Chars.charAt(tmp >> 2);
+ const b = base64Chars.charAt((tmp << 4) & 0x3F);
+ parts.push(`${a}${b}`);
+ if (pad) {
+ parts.push('==');
+ }
+ }
+ else if (extraBytes === 2) {
+ const tmp = (data[len - 2] << 8) + data[len - 1];
+ const a = base64Chars.charAt(tmp >> 10);
+ const b = base64Chars.charAt((tmp >> 4) & 0x3F);
+ const c = base64Chars.charAt((tmp << 2) & 0x3F);
+ parts.push(`${a}${b}${c}`);
+ if (pad) {
+ parts.push('=');
+ }
+ }
+ return parts.join('');
+}
+function getDecodeBase64Length(data) {
+ let bufferLength = Math.floor(data.length * 0.75);
+ const len = data.length;
+ if (data[len - 1] === '=') {
+ bufferLength -= 1;
+ if (data[len - 2] === '=') {
+ bufferLength -= 1;
+ }
+ }
+ return bufferLength;
+}
+function decodeBase64(data) {
+ const bufferLength = getDecodeBase64Length(data);
+ const len = data.length;
+ const bytes = new Uint8Array(bufferLength);
+ let p = 0;
+ for (let i = 0; i < len; i += 4) {
+ const encoded1 = base64Lookup[data.charCodeAt(i)];
+ const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
+ const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
+ const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
+ bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
+ p += 1;
+ bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
+ p += 1;
+ bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
+ p += 1;
+ }
+ return bytes;
+}
+
+const MAX_HEAP = 16 * 1024;
+const WASM_FUNC_HASH_LENGTH = 4;
+const wasmMutex = new Mutex();
+const wasmModuleCache = new Map();
+function WASMInterface(binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let wasmInstance = null;
+ let memoryView = null;
+ let initialized = false;
+ if (typeof WebAssembly === 'undefined') {
+ throw new Error('WebAssembly is not supported in this environment!');
+ }
+ const writeMemory = (data, offset = 0) => {
+ memoryView.set(data, offset);
+ };
+ const getMemory = () => memoryView;
+ const getExports = () => wasmInstance.exports;
+ const setMemorySize = (totalSize) => {
+ wasmInstance.exports.Hash_SetMemorySize(totalSize);
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
+ };
+ const getStateSize = () => {
+ const view = new DataView(wasmInstance.exports.memory.buffer);
+ const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
+ return stateSize;
+ };
+ const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmModuleCache.has(binary.name)) {
+ const asm = decodeBase64(binary.data);
+ const promise = WebAssembly.compile(asm);
+ wasmModuleCache.set(binary.name, promise);
+ }
+ const module = yield wasmModuleCache.get(binary.name);
+ wasmInstance = yield WebAssembly.instantiate(module, {
+ // env: {
+ // emscripten_memcpy_big: (dest, src, num) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // memView.set(memView.subarray(src, src + num), dest);
+ // },
+ // print_memory: (offset, len) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // console.log('print_int32', memView.subarray(offset, offset + len));
+ // },
+ // },
+ });
+ // wasmInstance.exports._start();
+ }));
+ const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmInstance) {
+ yield loadWASMPromise;
+ }
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
+ });
+ const init = (bits = null) => {
+ initialized = true;
+ wasmInstance.exports.Hash_Init(bits);
+ };
+ const updateUInt8Array = (data) => {
+ let read = 0;
+ while (read < data.length) {
+ const chunk = data.subarray(read, read + MAX_HEAP);
+ read += chunk.length;
+ memoryView.set(chunk);
+ wasmInstance.exports.Hash_Update(chunk.length);
+ }
+ };
+ const update = (data) => {
+ if (!initialized) {
+ throw new Error('update() called before init()');
+ }
+ const Uint8Buffer = getUInt8Buffer(data);
+ updateUInt8Array(Uint8Buffer);
+ };
+ const digestChars = new Uint8Array(hashLength * 2);
+ const digest = (outputType, padding = null) => {
+ if (!initialized) {
+ throw new Error('digest() called before init()');
+ }
+ initialized = false;
+ wasmInstance.exports.Hash_Final(padding);
+ if (outputType === 'binary') {
+ // the data is copied to allow GC of the original memory object
+ return memoryView.slice(0, hashLength);
+ }
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ const save = () => {
+ if (!initialized) {
+ throw new Error('save() can only be called after init() and before digest()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
+ // prefix is 4 bytes from SHA1 hash of the WASM binary
+ // it is used to detect incompatible internal states between different versions of hash-wasm
+ const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
+ writeHexToUInt8(prefixedState, binary.hash);
+ prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
+ return prefixedState;
+ };
+ const load = (state) => {
+ if (!(state instanceof Uint8Array)) {
+ throw new Error('load() expects an Uint8Array generated by save()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ if (state.length !== overallLength) {
+ throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
+ }
+ if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
+ throw new Error('This state was written by an incompatible hash implementation');
+ }
+ const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
+ new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
+ initialized = true;
+ };
+ const isDataShort = (data) => {
+ if (typeof data === 'string') {
+ // worst case is 4 bytes / char
+ return data.length < MAX_HEAP / 4;
+ }
+ return data.byteLength < MAX_HEAP;
+ };
+ let canSimplify = isDataShort;
+ switch (binary.name) {
+ case 'argon2':
+ case 'scrypt':
+ canSimplify = () => true;
+ break;
+ case 'blake2b':
+ case 'blake2s':
+ // if there is a key at blake2 then cannot simplify
+ canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
+ break;
+ case 'blake3':
+ // if there is a key at blake3 then cannot simplify
+ canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
+ break;
+ case 'xxhash64': // cannot simplify
+ case 'xxhash3':
+ case 'xxhash128':
+ canSimplify = () => false;
+ break;
+ }
+ // shorthand for (init + update + digest) for better performance
+ const calculate = (data, initParam = null, digestParam = null) => {
+ if (!canSimplify(data, initParam)) {
+ init(initParam);
+ update(data);
+ return digest('hex', digestParam);
+ }
+ const buffer = getUInt8Buffer(data);
+ memoryView.set(buffer);
+ wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ yield setupInterface();
+ return {
+ getMemory,
+ writeMemory,
+ getExports,
+ setMemorySize,
+ init,
+ update,
+ digest,
+ save,
+ load,
+ calculate,
+ hashLength,
+ };
+ });
+}
+
+var name$k = "adler32";
+var data$k = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgQFAXABAQEFBAEBAgIGDgJ/AUGAiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCoAIBgUAQYAJCwoAQQBBATYChAgL9gYBBn9BACgChAgiAUH//wNxIQIgAUEQdiEDAkACQCAAQQFHDQAgAkEALQCACWoiAUGPgHxqIAEgAUHw/wNLGyIBIANqIgRBEHQiBUGAgDxqIAUgBEHw/wNLGyABciEBDAELAkACQAJAAkACQCAAQRBJDQBBgAkhBiAAQbArSQ0BQYAJIQYDQEEAIQUDQCAGIAVqIgEoAgAiBEH/AXEgAmoiAiADaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEEaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiICaiACIAFBCGooAgAiBEH/AXFqIgJqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiBGogBCABQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBUEQaiIFQbArRw0ACyADQfH/A3AhAyACQfH/A3AhAiAGQbAraiEGIABB0FRqIgBBrytLDQALIABFDQQgAEEPSw0BDAILAkAgAEUNAEEAIQEDQCACIAFBgAlqLQAAaiICIANqIQMgACABQQFqIgFHDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCwNAIAIgBi0AAGoiAiADaiEDIAZBAWohBiAAQX9qIgANAAsLIANB8f8DcCEDIAJB8f8DcCECCyACIANBEHRyIQELQQAgATYChAgLMgEBf0EAQQAoAoQIIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBQBBhAgLPABBAEEBNgKECCAAEAJBAEEAKAKECCIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA";
+var hash$k = "321174b4";
+var wasmJson$k = {
+ name: name$k,
+ data: data$k,
+ hash: hash$k
+};
+
+function lockedCreate(mutex, binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield mutex.lock();
+ const wasm = yield WASMInterface(binary, hashLength);
+ unlock();
+ return wasm;
+ });
+}
+
+const mutex$l = new Mutex();
+let wasmCache$l = null;
+/**
+ * Calculates Adler-32 hash. The resulting 32-bit hash is stored in
+ * network byte order (big-endian).
+ *
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function adler32(data) {
+ if (wasmCache$l === null) {
+ return lockedCreate(mutex$l, wasmJson$k, 4)
+ .then((wasm) => {
+ wasmCache$l = wasm;
+ return wasmCache$l.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$l.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Adler-32 hash instance
+ */
+function createAdler32() {
+ return WASMInterface(wasmJson$k, 4).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$j = "blake2b";
+var data$j = "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";
+var hash$j = "68afc9cf";
+var wasmJson$j = {
+ name: name$j,
+ data: data$j,
+ hash: hash$j
+};
+
+const mutex$k = new Mutex();
+let wasmCache$k = null;
+function validateBits$4(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 512');
+ }
+ return null;
+}
+function getInitParam$1(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2b hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2b(data, bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {
+ return lockedCreate(mutex$k, wasmJson$j, hashLength)
+ .then((wasm) => {
+ wasmCache$k = wasm;
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ return wasmCache$k.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$k.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2b hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ */
+function createBLAKE2b(bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$j, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$i = "argon2";
+var data$i = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQEBQFwAQEBBQYBAQKAgAIGCAF/AUGQqAQLB0EEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEOSGFzaF9DYWxjdWxhdGUABArXMwVbAQF/QQAhAQJAIABBACgCgAhrIgBFDQACQCAAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wEhAQwBC0EAIQFBAEEAKQOACCAAQRB0rXw3A4AICyABQRh0QRh1C2oBAn8CQEEAKAKICCIADQBBAD8AQRB0IgA2AogIQYCAIEEAKAKACGsiAUUNAAJAIAFBEHYgAUGAgHxxIAFJaiIAQABBf0cNAEEADwtBAEEAKQOACCAAQRB0rXw3A4AIQQAoAogIIQALIAALnA8BA34gACAEKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgAiAGKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAyAHKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgASAGKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAiAHKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwALhxoBAX9BACEEQQAgAikDACABKQMAhTcDkAhBACACKQMIIAEpAwiFNwOYCEEAIAIpAxAgASkDEIU3A6AIQQAgAikDGCABKQMYhTcDqAhBACACKQMgIAEpAyCFNwOwCEEAIAIpAyggASkDKIU3A7gIQQAgAikDMCABKQMwhTcDwAhBACACKQM4IAEpAziFNwPICEEAIAIpA0AgASkDQIU3A9AIQQAgAikDSCABKQNIhTcD2AhBACACKQNQIAEpA1CFNwPgCEEAIAIpA1ggASkDWIU3A+gIQQAgAikDYCABKQNghTcD8AhBACACKQNoIAEpA2iFNwP4CEEAIAIpA3AgASkDcIU3A4AJQQAgAikDeCABKQN4hTcDiAlBACACKQOAASABKQOAAYU3A5AJQQAgAikDiAEgASkDiAGFNwOYCUEAIAIpA5ABIAEpA5ABhTcDoAlBACACKQOYASABKQOYAYU3A6gJQQAgAikDoAEgASkDoAGFNwOwCUEAIAIpA6gBIAEpA6gBhTcDuAlB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";
+var hash$i = "59aa4fb4";
+var wasmJson$i = {
+ name: name$i,
+ data: data$i,
+ hash: hash$i
+};
+
+function encodeResult(salt, options, res) {
+ const parameters = [
+ `m=${options.memorySize}`,
+ `t=${options.iterations}`,
+ `p=${options.parallelism}`,
+ ].join(',');
+ return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;
+}
+const uint32View = new DataView(new ArrayBuffer(4));
+function int32LE(x) {
+ uint32View.setInt32(0, x, true);
+ return new Uint8Array(uint32View.buffer);
+}
+function hashFunc(blake512, buf, len) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (len <= 64) {
+ const blake = yield createBLAKE2b(len * 8);
+ blake.update(int32LE(len));
+ blake.update(buf);
+ return blake.digest('binary');
+ }
+ const r = Math.ceil(len / 32) - 2;
+ const ret = new Uint8Array(len);
+ blake512.init();
+ blake512.update(int32LE(len));
+ blake512.update(buf);
+ let vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), 0);
+ for (let i = 1; i < r; i++) {
+ blake512.init();
+ blake512.update(vp);
+ vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), i * 32);
+ }
+ const partialBytesNeeded = len - 32 * r;
+ let blakeSmall;
+ if (partialBytesNeeded === 64) {
+ blakeSmall = blake512;
+ blakeSmall.init();
+ }
+ else {
+ blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);
+ }
+ blakeSmall.update(vp);
+ vp = blakeSmall.digest('binary');
+ ret.set(vp.subarray(0, partialBytesNeeded), r * 32);
+ return ret;
+ });
+}
+function getHashType(type) {
+ switch (type) {
+ case 'd':
+ return 0;
+ case 'i':
+ return 1;
+ default:
+ return 2;
+ }
+}
+function argon2Internal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { parallelism, iterations, hashLength } = options;
+ const password = getUInt8Buffer(options.password);
+ const salt = getUInt8Buffer(options.salt);
+ const version = 0x13;
+ const hashType = getHashType(options.hashType);
+ const { memorySize } = options; // in KB
+ const [argon2Interface, blake512] = yield Promise.all([
+ WASMInterface(wasmJson$i, 1024),
+ createBLAKE2b(512),
+ ]);
+ // last block is for storing the init vector
+ argon2Interface.setMemorySize(memorySize * 1024 + 1024);
+ const initVector = new Uint8Array(24);
+ const initVectorView = new DataView(initVector.buffer);
+ initVectorView.setInt32(0, parallelism, true);
+ initVectorView.setInt32(4, hashLength, true);
+ initVectorView.setInt32(8, memorySize, true);
+ initVectorView.setInt32(12, iterations, true);
+ initVectorView.setInt32(16, version, true);
+ initVectorView.setInt32(20, hashType, true);
+ argon2Interface.writeMemory(initVector, memorySize * 1024);
+ blake512.init();
+ blake512.update(initVector);
+ blake512.update(int32LE(password.length));
+ blake512.update(password);
+ blake512.update(int32LE(salt.length));
+ blake512.update(salt);
+ blake512.update(int32LE(0)); // key length + key
+ blake512.update(int32LE(0)); // associatedData length + associatedData
+ const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane
+ const lanes = segments * 4;
+ const param = new Uint8Array(72);
+ const H0 = blake512.digest('binary');
+ param.set(H0);
+ for (let lane = 0; lane < parallelism; lane++) {
+ param.set(int32LE(0), 64);
+ param.set(int32LE(lane), 68);
+ let position = lane * lanes;
+ let chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ position += 1;
+ param.set(int32LE(1), 64);
+ chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ }
+ const C = new Uint8Array(1024);
+ writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));
+ const res = yield hashFunc(blake512, C, hashLength);
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, res, hashLength);
+ }
+ if (options.outputType === 'encoded') {
+ return encodeResult(salt, options, res);
+ }
+ // return binary format
+ return res;
+ });
+}
+const validateOptions$3 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.password) {
+ throw new Error('Password must be specified');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password must be specified');
+ }
+ if (!options.salt) {
+ throw new Error('Salt must be specified');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length < 8) {
+ throw new Error('Salt should be at least 8 bytes long');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {
+ throw new Error('Hash length should be at least 4 bytes.');
+ }
+ if (!Number.isInteger(options.memorySize)) {
+ throw new Error('Memory size should be specified.');
+ }
+ if (options.memorySize < 8 * options.parallelism) {
+ throw new Error('Memory size should be at least 8 * parallelism.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the argon2i password-hashing function
+ * @returns Computed hash
+ */
+function argon2i(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));
+ });
+}
+/**
+ * Calculates hash using the argon2id password-hashing function
+ * @returns Computed hash
+ */
+function argon2id(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));
+ });
+}
+/**
+ * Calculates hash using the argon2d password-hashing function
+ * @returns Computed hash
+ */
+function argon2d(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));
+ });
+}
+const getHashParameters = (password, encoded) => {
+ const regex = /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/;
+ const match = encoded.match(regex);
+ if (!match) {
+ throw new Error('Invalid hash');
+ }
+ const [, hashType, version, parameters, salt, hash] = match;
+ if (version !== '19') {
+ throw new Error(`Unsupported version: ${version}`);
+ }
+ const parsedParameters = {};
+ const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };
+ parameters.split(',').forEach((x) => {
+ const [n, v] = x.split('=');
+ parsedParameters[paramMap[n]] = parseInt(v, 10);
+ });
+ return Object.assign(Object.assign({}, parsedParameters), { password, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });
+};
+const validateVerifyOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+};
+/**
+ * Verifies password using the argon2 password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function argon2Verify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions$1(options);
+ const params = getHashParameters(options.password, options.hash);
+ validateOptions$3(params);
+ const hashStart = options.hash.lastIndexOf('$') + 1;
+ const result = yield argon2Internal(params);
+ return result.substring(hashStart) === options.hash.substring(hashStart);
+ });
+}
+
+var name$h = "blake2s";
+var data$h = "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";
+var hash$h = "0f570f49";
+var wasmJson$h = {
+ name: name$h,
+ data: data$h,
+ hash: hash$h
+};
+
+const mutex$j = new Mutex();
+let wasmCache$j = null;
+function validateBits$3(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 256');
+ }
+ return null;
+}
+function getInitParam(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2s hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2s(data, bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {
+ return lockedCreate(mutex$j, wasmJson$h, hashLength)
+ .then((wasm) => {
+ wasmCache$j = wasm;
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ return wasmCache$j.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$j.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2s hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ */
+function createBLAKE2s(bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$h, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$g = "blake3";
+var data$g = "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FWogFCAfc0EZdyIVaiIUIBhqIB0gFHNBEHciFCAlaiIYIBVzQRR3IhVqIhkgFHNBGHciFCAYaiIYaiIdICBzQRR3Ih9qIiA2AgAgACAXICQgHHNBGHciHCAeaiIeIBtzQRl3IhtqIAFqIgEgFmogASAUc0EQdyIBICtqIhQgG3NBFHciFmoiFyABc0EYdyIBNgI4IAAgGCAVc0EZdyIVIC5qIANqIgMgE2ogAyAcc0EQdyIDIAIgImoiAmoiIiAVc0EUdyIVaiITNgIEIAAgASAUaiIBNgIkIAAgAiAFc0EZdyICIBlqICFqIgUgGmogBSAnc0EQdyIFIB5qIhQgAnNBFHciAmoiGjYCCCAAICAgEnNBGHciEiAdaiIhNgIoIAAgEyADc0EYdyIDNgIwIAAgASAWc0EZdzYCECAAIBogBXNBGHciATYCNCAAICEgH3NBGXc2AhQgACABIBRqIgE2AiAgACADICJqIgUgFXNBGXc2AhggACASNgI8IAAgASACc0EZdzYCHCAAIBc2AgwgACAFNgIsC7cDAwR/A34FfyMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NACABQShqIQQDQCABQQApA4CJASIANwMAIAFBACkDiIkBIgU3AwggAUEAKQOQiQEiBjcDECABQQApA5iJASIHNwMYIAEgA0EFdCIDQdGJAWoiCCkDADcDKCABIANB2YkBaiIJKQMANwMwIAEgA0HhiQFqIgopAwA3AzggASADQemJAWoiCykDADcDQEEALQCKigEhDCABQcAAOgBoIAEgDEEEciIMOgBpIAFCADcDICABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCABIANBiYoBaikDADcDYCABIAc3A4gBIAEgBjcDgAEgASAFNwN4IAEgADcDcCABQZABaiABQfAAaiAEQcAAQgAgDBADIAsgASkDyAEgASkDqAGFNwMAIAogASkDwAEgASkDoAGFNwMAIAkgASkDuAEgASkDmAGFNwMAIAggASkDsAEgASkDkAGFNwMAQQBBAC0AkIoBQX9qIgM6AJCKASACIANB/wFxIgNJDQALCyABQdABaiQAC/oLBAR/BH4GfwF+IwBB0AJrIgUkAAJAAkAgAUGACEsNAEEAIQYgASEHQQAhCAJAIAFB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IQwDQCABQbABaiABIAsgCUH/AXEgCCACQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASAGIAEpA+gBIg+FNwOoASABIAUgDoU3A6ABIAEgBCANhTcDmAEgASADIAEpA9ABIg2FNwOQASABIA8gASkDyAGFNwOIASAAQcAAIABBwABJGyIQQX9qIQkgASANIAEpA7ABhSINNwNwIA2nIREgCiEHIAwhAgJAA0AgAiAROgAAIAlFDQEgCUF/aiEJIAJBAWohAiAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQIgDCAQaiEMIAhCAXwhCCABKQMIIQQgASkDACEDIAEpAxghBiABKQMQIQUgAS0AaSECIAEtAGghCQwACwsCQAJAAkBBAC0AiYoBIglBBnRBAEEALQCIigEiDGtGDQAgAUHgAGpBACkDgIoBNwMAIAFB2ABqQQApA/iJATcDACABQdAAakEAKQPwiQE3AwAgAUHIAGpBACkD6IkBNwMAIAFBwABqQQApA+CJATcDACABQThqQQApA9iJATcDACABQTBqQQApA9CJATcDACABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIg03AxggAUEAKQOwiQEiDjcDECABQQApA6iJASIPNwMIIAFBACkDoIkBIgM3AwBBAC0AiooBIQcgAUHuAGogAUG0AWovAQA7AQAgASABKAGwATYBaiABIAw6AGggASAHIAlFckECciIJOgBpDAELIAFB4ABqIAJBfmoiAkEFdCIJQcmKAWopAwA3AwAgAUHYAGogCUHBigFqKQMANwMAIAFB0ABqIAlBuYoBaikDADcDACABQcgAaiAJQbGKAWopAwA3AwBBwAAhDCABQcAAaiAJQamKAWopAwA3AwAgAUE4aiAJQaGKAWopAwA3AwAgAUEwaiAJQZmKAWopAwA3AwBCACEIIAFCADcDICABQQApA5iJASINNwMYIAFBACkDkIkBIg43AxAgAUEAKQOIiQEiDzcDCCABQQApA4CJASIDNwMAIAEgCUGRigFqKQMANwMoQQAtAIqKASEJIAFB7gBqIAFBsAFqQQRqLwEAOwEAIAEgASgBsAE2AWogASAJQQRyIgk6AGkgAUHAADoAaCACRQ0BCyACQX9qIgdBBXQiEUGRigFqKQMAIQQgEUGZigFqKQMAIQUgEUGhigFqKQMAIQYgEUGpigFqKQMAIRIgASANNwOIASABIA43A4ABIAEgDzcDeCABIAM3A3AgAUGwAWogAUHwAGogAUEoaiIQIAwgCCAJQf8BcRADIAFBwAA6AGggASASNwNAIAEgBjcDOCABIAU3AzAgASAENwMoIAFCADcDICABQQApA5iJASIINwMYIAFBACkDkIkBIg03AxAgAUEAKQOIiQEiDjcDCCABQQApA4CJASIPNwMAIAFBAC0AiooBQQRyIgk6AGkgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAUHuAGogAUGwAWpBBGoiDC8BADsBACABIAEoAbABNgFqIAdFDQAgAUHqAGohESACQQV0QemJAWohAgNAIAJBaGopAwAhAyACQXBqKQMAIQQgAkF4aikDACEFIAIpAwAhBiABIAg3A4gBIAEgDTcDgAEgASAONwN4IAEgDzcDcCABQbABaiABQfAAaiAQQcAAQgAgCUH/AXEQAyABQcAAOgBoIAEgBjcDQCABIAU3AzggASAENwMwIAEgAzcDKCABQgA3AyAgAUEAKQOYiQEiCDcDGCABQQApA5CJASINNwMQIAFBACkDiIkBIg43AwggAUEAKQOAiQEiDzcDACABQQAtAIqKAUEEciIJOgBpIAEgASkD6AEgASkDyAGFNwNgIAEgASkD4AEgASkDwAGFNwNYIAEgASkD2AEgASkDuAGFNwNQIAEgASkD0AEgASkDsAGFNwNIIBFBBGogDC8BADsBACARIAEoAbABNgEAIAJBYGohAiAHQX9qIgcNAAsLIAFB8ABqQQFyIQogAUEoaiELQgAhCEGACSEMQcAAIQIDQCABQbABaiABIAsgAkH/AXEgCCAJQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASABKQPoASIPIAEpA8gBhTcDiAEgASABKQMAIAEpA9ABIgOFNwOQASABIA0gASkDCIU3A5gBIAEgDiABKQMQhTcDoAEgASADIAEpA7ABhSINNwNwIAEgDyABKQMYhTcDqAEgAEHAACAAQcAASRsiEEF/aiECIA2nIREgCiEHIAwhCQJAA0AgCSAROgAAIAJFDQEgAkF/aiECIAlBAWohCSAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQEgDCAQaiEMIAhCAXwhCCABLQBpIQkgAS0AaCECDAALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABABCwYAIAAQBgsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAEgAhAGCwsLAQBBgAgLBHgHAAA=";
+var hash$g = "e8655383";
+var wasmJson$g = {
+ name: name$g,
+ data: data$g,
+ hash: hash$g
+};
+
+const mutex$i = new Mutex();
+let wasmCache$i = null;
+function validateBits$2(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ...');
+ }
+ return null;
+}
+/**
+ * Calculates BLAKE3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake3(data, bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const hashLength = bits / 8;
+ const digestParam = hashLength;
+ if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {
+ return lockedCreate(mutex$i, wasmJson$g, hashLength)
+ .then((wasm) => {
+ wasmCache$i = wasm;
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ return wasmCache$i.calculate(data, initParam, digestParam);
+ });
+ }
+ try {
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$i.calculate(data, initParam, digestParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE3 hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ */
+function createBLAKE3(bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const outputSize = bits / 8;
+ const digestParam = outputSize;
+ return WASMInterface(wasmJson$g, outputSize).then((wasm) => {
+ if (initParam === 32) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam === 32
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, digestParam),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$f = "crc32";
+var data$f = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwQFAXABAQEFBAEBAgIGDgJ/AUGQyQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAILSGFzaF9VcGRhdGUAAwpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCq0HBwUAQYAJC8MDAQN/QYCJASEBQQAhAgNAIAFBAEEAQQBBAEEAQQBBAEEAIAJBAXFrIABxIAJBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzNgIAIAFBBGohASACQQFqIgJBgAJHDQALQQAhAANAIABBhJEBaiAAQYSJAWooAgAiAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhJkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEoQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYSpAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhLEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEuQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYTBAWogAkH/AXFBAnRBgIkBaigCACACQQh2czYCACAAQQRqIgBB/AdHDQALCycAAkBBACgCgMkBIABGDQAgABABQQAgADYCgMkBC0EAQQA2AoTJAQuhAgEDf0EAKAKEyQFBf3MhAUGACSECAkAgAEEISQ0AQYAJIQIDQCACQQRqKAIAIgNBDnZB/AdxQYCRAWooAgAgA0EWdkH8B3FBgIkBaigCAHMgA0EGdkH8B3FBgJkBaigCAHMgA0H/AXFBAnRBgKEBaigCAHMgAigCACABcyIBQRZ2QfwHcUGAqQFqKAIAcyABQQ52QfwHcUGAsQFqKAIAcyABQQZ2QfwHcUGAuQFqKAIAcyABQf8BcUECdEGAwQFqKAIAcyEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAANAIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiIADQALC0EAIAFBf3M2AoTJAQszAQF/QQBBACgChMkBIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBgBBhMkBC1oAAkBBACgCgMkBIAFGDQAgARABQQAgATYCgMkBC0EAQQA2AoTJASAAEANBAEEAKAKEyQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKACQsLCwEAQYAICwQEAAAA";
+var hash$f = "749723dc";
+var wasmJson$f = {
+ name: name$f,
+ data: data$f,
+ hash: hash$f
+};
+
+const mutex$h = new Mutex();
+let wasmCache$h = null;
+/**
+ * Calculates CRC-32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32(data) {
+ if (wasmCache$h === null) {
+ return lockedCreate(mutex$h, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$h = wasm;
+ return wasmCache$h.calculate(data, 0xEDB88320);
+ });
+ }
+ try {
+ const hash = wasmCache$h.calculate(data, 0xEDB88320);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32 hash instance
+ */
+function createCRC32() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0xEDB88320);
+ const obj = {
+ init: () => { wasm.init(0xEDB88320); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+const mutex$g = new Mutex();
+let wasmCache$g = null;
+/**
+ * Calculates CRC-32C hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32c(data) {
+ if (wasmCache$g === null) {
+ return lockedCreate(mutex$g, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$g = wasm;
+ return wasmCache$g.calculate(data, 0x82F63B78);
+ });
+ }
+ try {
+ const hash = wasmCache$g.calculate(data, 0x82F63B78);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32C hash instance
+ */
+function createCRC32C() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0x82F63B78);
+ const obj = {
+ init: () => { wasm.init(0x82F63B78); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$e = "md4";
+var data$e = "AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqXEQcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwuYCwEXf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBHGooAgAiBiAAQRRqKAIAIgcgAEEYaigCACIIIABBEGooAgAiCSAAQSxqKAIAIgogAEEoaigCACILIABBJGooAgAiDCAAQSBqKAIAIg0gCyAIIABBCGooAgAiDiADaiAAQQRqKAIAIg8gAmogBCADIAJzcSACcyAFaiAAKAIAIhBqQQN3IhEgBCADc3EgA3NqQQd3IhIgESAEc3EgBHNqQQt3IhNqIBIgB2ogESAJaiAAQQxqKAIAIhQgBGogEyASIBFzcSARc2pBE3ciESATIBJzcSASc2pBA3ciEiARIBNzcSATc2pBB3ciEyASIBFzcSARc2pBC3ciFWogEyAMaiASIA1qIBEgBmogFSATIBJzcSASc2pBE3ciESAVIBNzcSATc2pBA3ciEiARIBVzcSAVc2pBB3ciEyASIBFzcSARc2pBC3ciFSAAQThqKAIAIhZqIBMgAEE0aigCACIXaiASIABBMGooAgAiGGogESAKaiAVIBMgEnNxIBJzakETdyISIBUgE3NxIBNzakEDdyITIBIgFXNxIBVzakEHdyIVIBMgEnNxIBJzakELdyIRaiAJIBVqIBAgE2ogEiAAQTxqKAIAIglqIBEgFSATc3EgE3NqQRN3IhIgESAVcnEgESAVcXJqQZnzidQFakEDdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBBXciESATIBJycSATIBJxcmpBmfOJ1AVqQQl3IhVqIAcgEWogDyATaiAYIBJqIBUgESATcnEgESATcXJqQZnzidQFakENdyISIBUgEXJxIBUgEXFyakGZ84nUBWpBA3ciESASIBVycSASIBVxcmpBmfOJ1AVqQQV3IhMgESAScnEgESAScXJqQZnzidQFakEJdyIVaiAIIBNqIA4gEWogFyASaiAVIBMgEXJxIBMgEXFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogBiATaiAUIBJqIBYgEWogFSATIBJycSATIBJxcmpBmfOJ1AVqQQ13IhEgFSATcnEgFSATcXJqQZnzidQFakEDdyISIBEgFXJxIBEgFXFyakGZ84nUBWpBBXciEyASIBFycSASIBFxcmpBmfOJ1AVqQQl3IhVqIBAgEmogCSARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciBiAVcyISIBNzakGh1+f2BmpBA3ciESAGcyANIBNqIBIgEXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA4gEWogEyAScyAYIAZqIBIgEXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgCyASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAPIBVqIBMgEnMgFiARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAwgEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogFCAVaiATIBJzIBcgEWogEiAVcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyAKIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhMgA2ohAyAJIBFqIBIgFXMgE3NqQaHX5/YGakEPdyAEaiEEIBIgAmohAiAVIAVqIQUgAEHAAGohACABQUBqIgENAAtBACACNgKUiQFBACADNgKQiQFBACAENgKMiQFBACAFNgKIiQEgAAuhAgEDf0EAKAKAiQEiAEE/cSIBQZiJAWpBgAE6AAACQAJAAkAgAUE/cyICQQdLDQACQCACRQ0AIAFBmYkBaiEAA0AgAEEAOgAAIABBAWohACACQX9qIgINAAsLQcAAIQJBmIkBQcAAEAMaQQAhAAwBCyACQQhGDQEgAUEBaiEACyAAQY+JAWohAQNAIAEgAmpBADoAACACQXdqIQAgAkF/aiECIABBAEoNAAtBACgCgIkBIQALQQAgAEEVdjoA04kBQQAgAEENdjoA0okBQQAgAEEFdjoA0YkBQQAgAEEDdCICOgDQiQFBACACNgKAiQFBAEEAKAKEiQE2AtSJAUGYiQFBwAAQAxpBAEEAKQKIiQE3A4AJQQBBACkCkIkBNwOICQsGAEGAiQELMwBBAEL+uevF6Y6VmRA3ApCJAUEAQoHGlLqW8ermbzcCiIkBQQBCADcCgIkBIAAQAhAECwsLAQBBgAgLBJgAAAA=";
+var hash$e = "1bf01052";
+var wasmJson$e = {
+ name: name$e,
+ data: data$e,
+ hash: hash$e
+};
+
+const mutex$f = new Mutex();
+let wasmCache$f = null;
+/**
+ * Calculates MD4 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md4(data) {
+ if (wasmCache$f === null) {
+ return lockedCreate(mutex$f, wasmJson$e, 16)
+ .then((wasm) => {
+ wasmCache$f = wasm;
+ return wasmCache$f.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$f.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD4 hash instance
+ */
+function createMD4() {
+ return WASMInterface(wasmJson$e, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$d = "md5";
+var data$d = "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";
+var hash$d = "9b0fac7d";
+var wasmJson$d = {
+ name: name$d,
+ data: data$d,
+ hash: hash$d
+};
+
+const mutex$e = new Mutex();
+let wasmCache$e = null;
+/**
+ * Calculates MD5 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md5(data) {
+ if (wasmCache$e === null) {
+ return lockedCreate(mutex$e, wasmJson$d, 16)
+ .then((wasm) => {
+ wasmCache$e = wasm;
+ return wasmCache$e.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$e.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD5 hash instance
+ */
+function createMD5() {
+ return WASMInterface(wasmJson$d, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$c = "sha1";
+var data$c = "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";
+var hash$c = "40d92e5d";
+var wasmJson$c = {
+ name: name$c,
+ data: data$c,
+ hash: hash$c
+};
+
+const mutex$d = new Mutex();
+let wasmCache$d = null;
+/**
+ * Calculates SHA-1 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha1(data) {
+ if (wasmCache$d === null) {
+ return lockedCreate(mutex$d, wasmJson$c, 20)
+ .then((wasm) => {
+ wasmCache$d = wasm;
+ return wasmCache$d.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$d.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-1 hash instance
+ */
+function createSHA1() {
+ return WASMInterface(wasmJson$c, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+var name$b = "sha3";
+var data$b = "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";
+var hash$b = "ec266d91";
+var wasmJson$b = {
+ name: name$b,
+ data: data$b,
+ hash: hash$b
+};
+
+const mutex$c = new Mutex();
+let wasmCache$c = null;
+function validateBits$1(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates SHA-3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha3(data, bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {
+ return lockedCreate(mutex$c, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$c = wasm;
+ return wasmCache$c.calculate(data, bits, 0x06);
+ });
+ }
+ try {
+ const hash = wasmCache$c.calculate(data, bits, 0x06);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-3 hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createSHA3(bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x06),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+const mutex$b = new Mutex();
+let wasmCache$b = null;
+function validateBits(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates Keccak hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function keccak(data, bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {
+ return lockedCreate(mutex$b, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$b = wasm;
+ return wasmCache$b.calculate(data, bits, 0x01);
+ });
+ }
+ try {
+ const hash = wasmCache$b.calculate(data, bits, 0x01);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Keccak hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createKeccak(bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x01),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$a = "sha256";
+var data$a = "AGFzbQEAAAABEQRgAAF/YAF/AGACf38AYAAAAwgHAAEBAgMAAgQFAXABAQEFBAEBAgIGDgJ/AUHwiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCuJIBwUAQYAJC50BAEEAQgA3A8CJAUEAQRxBICAAQeABRiIAGzYC6IkBQQBCp5/mp8b0k/2+f0Krs4/8kaOz8NsAIAAbNwPgiQFBAEKxloD+n6KFrOgAQv+kuYjFkdqCm38gABs3A9iJAUEAQpe6w4OTp5aHd0Ly5rvjo6f9p6V/IAAbNwPQiQFBAELYvZaI/KC1vjZC58yn0NbQ67O7fyAAGzcDyIkBC4ACAgF+Bn9BAEEAKQPAiQEiASAArXw3A8CJAQJAAkACQCABp0E/cSICDQBBgAkhAgwBCwJAIABBwAAgAmsiAyADIABLIgQbIgVFDQAgAkGAiQFqIQZBACECQQAhBwNAIAYgAmogAkGACWotAAA6AAAgBSAHQQFqIgdB/wFxIgJLDQALCyAEDQFByIkBQYCJARADIAAgA2shACADQYAJaiECCwJAIABBwABJDQADQEHIiQEgAhADIAJBwABqIQIgAEFAaiIAQT9LDQALCyAARQ0AQQAhB0EAIQUDQCAHQYCJAWogAiAHai0AADoAACAAIAVBAWoiBUH/AXEiB0sNAAsLC5M+AUV/IAAgASgCPCICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiAkEOdyACQQN2cyACQRl3cyABKAI4IgNBGHQgA0EIdEGAgPwHcXIgA0EIdkGA/gNxIANBGHZyciIDaiABKAIgIgRBGHQgBEEIdEGAgPwHcXIgBEEIdkGA/gNxIARBGHZyciIFQQ53IAVBA3ZzIAVBGXdzIAEoAhwiBEEYdCAEQQh0QYCA/AdxciAEQQh2QYD+A3EgBEEYdnJyIgZqIAEoAgQiBEEYdCAEQQh0QYCA/AdxciAEQQh2QYD+A3EgBEEYdnJyIgdBDncgB0EDdnMgB0EZd3MgASgCACIEQRh0IARBCHRBgID8B3FyIARBCHZBgP4DcSAEQRh2cnIiCGogASgCJCIEQRh0IARBCHRBgID8B3FyIARBCHZBgP4DcSAEQRh2cnIiCWogA0ENdyADQQp2cyADQQ93c2oiBGogASgCGCIKQRh0IApBCHRBgID8B3FyIApBCHZBgP4DcSAKQRh2cnIiC0EOdyALQQN2cyALQRl3cyABKAIUIgpBGHQgCkEIdEGAgPwHcXIgCkEIdkGA/gNxIApBGHZyciIMaiADaiABKAIQIgpBGHQgCkEIdEGAgPwHcXIgCkEIdkGA/gNxIApBGHZyciINQQ53IA1BA3ZzIA1BGXdzIAEoAgwiCkEYdCAKQQh0QYCA/AdxciAKQQh2QYD+A3EgCkEYdnJyIg5qIAEoAjAiCkEYdCAKQQh0QYCA/AdxciAKQQh2QYD+A3EgCkEYdnJyIg9qIAEoAggiCkEYdCAKQQh0QYCA/AdxciAKQQh2QYD+A3EgCkEYdnJyIhBBDncgEEEDdnMgEEEZd3MgB2ogASgCKCIKQRh0IApBCHRBgID8B3FyIApBCHZBgP4DcSAKQRh2cnIiEWogAkENdyACQQp2cyACQQ93c2oiCkENdyAKQQp2cyAKQQ93c2oiEkENdyASQQp2cyASQQ93c2oiE0ENdyATQQp2cyATQQ93c2oiFGogASgCNCIVQRh0IBVBCHRBgID8B3FyIBVBCHZBgP4DcSAVQRh2cnIiFkEOdyAWQQN2cyAWQRl3cyAPaiATaiABKAIsIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZyciIXQQ53IBdBA3ZzIBdBGXdzIBFqIBJqIAlBDncgCUEDdnMgCUEZd3MgBWogCmogBkEOdyAGQQN2cyAGQRl3cyALaiACaiAMQQ53IAxBA3ZzIAxBGXdzIA1qIBZqIA5BDncgDkEDdnMgDkEZd3MgEGogF2ogBEENdyAEQQp2cyAEQQ93c2oiFUENdyAVQQp2cyAVQQ93c2oiGEENdyAYQQp2cyAYQQ93c2oiGUENdyAZQQp2cyAZQQ93c2oiGkENdyAaQQp2cyAaQQ93c2oiG0ENdyAbQQp2cyAbQQ93c2oiHEENdyAcQQp2cyAcQQ93c2oiHUEOdyAdQQN2cyAdQRl3cyADQQ53IANBA3ZzIANBGXdzIBZqIBlqIA9BDncgD0EDdnMgD0EZd3MgF2ogGGogEUEOdyARQQN2cyARQRl3cyAJaiAVaiAUQQ13IBRBCnZzIBRBD3dzaiIeQQ13IB5BCnZzIB5BD3dzaiIfQQ13IB9BCnZzIB9BD3dzaiIgaiAUQQ53IBRBA3ZzIBRBGXdzIBlqIARBDncgBEEDdnMgBEEZd3MgAmogGmogIEENdyAgQQp2cyAgQQ93c2oiIWogE0EOdyATQQN2cyATQRl3cyAYaiAgaiASQQ53IBJBA3ZzIBJBGXdzIBVqIB9qIApBDncgCkEDdnMgCkEZd3MgBGogHmogHUENdyAdQQp2cyAdQQ93c2oiIkENdyAiQQp2cyAiQQ93c2oiI0ENdyAjQQp2cyAjQQ93c2oiJEENdyAkQQp2cyAkQQ93c2oiJWogHEEOdyAcQQN2cyAcQRl3cyAfaiAkaiAbQQ53IBtBA3ZzIBtBGXdzIB5qICNqIBpBDncgGkEDdnMgGkEZd3MgFGogImogGUEOdyAZQQN2cyAZQRl3cyATaiAdaiAYQQ53IBhBA3ZzIBhBGXdzIBJqIBxqIBVBDncgFUEDdnMgFUEZd3MgCmogG2ogIUENdyAhQQp2cyAhQQ93c2oiJkENdyAmQQp2cyAmQQ93c2oiJ0ENdyAnQQp2cyAnQQ93c2oiKEENdyAoQQp2cyAoQQ93c2oiKUENdyApQQp2cyApQQ93c2oiKkENdyAqQQp2cyAqQQ93c2oiK0ENdyArQQp2cyArQQ93c2oiLEEOdyAsQQN2cyAsQRl3cyAgQQ53ICBBA3ZzICBBGXdzIBxqIChqIB9BDncgH0EDdnMgH0EZd3MgG2ogJ2ogHkEOdyAeQQN2cyAeQRl3cyAaaiAmaiAlQQ13ICVBCnZzICVBD3dzaiItQQ13IC1BCnZzIC1BD3dzaiIuQQ13IC5BCnZzIC5BD3dzaiIvaiAlQQ53ICVBA3ZzICVBGXdzIChqICFBDncgIUEDdnMgIUEZd3MgHWogKWogL0ENdyAvQQp2cyAvQQ93c2oiMGogJEEOdyAkQQN2cyAkQRl3cyAnaiAvaiAjQQ53ICNBA3ZzICNBGXdzICZqIC5qICJBDncgIkEDdnMgIkEZd3MgIWogLWogLEENdyAsQQp2cyAsQQ93c2oiMUENdyAxQQp2cyAxQQ93c2oiMkENdyAyQQp2cyAyQQ93c2oiM0ENdyAzQQp2cyAzQQ93c2oiNGogK0EOdyArQQN2cyArQRl3cyAuaiAzaiAqQQ53ICpBA3ZzICpBGXdzIC1qIDJqIClBDncgKUEDdnMgKUEZd3MgJWogMWogKEEOdyAoQQN2cyAoQRl3cyAkaiAsaiAnQQ53ICdBA3ZzICdBGXdzICNqICtqICZBDncgJkEDdnMgJkEZd3MgImogKmogMEENdyAwQQp2cyAwQQ93c2oiNUENdyA1QQp2cyA1QQ93c2oiNkENdyA2QQp2cyA2QQ93c2oiN0ENdyA3QQp2cyA3QQ93c2oiOEENdyA4QQp2cyA4QQ93c2oiOUENdyA5QQp2cyA5QQ93c2oiOkENdyA6QQp2cyA6QQ93c2oiOyA5IDEgKyApICcgISAfIBQgEiACIBcgBiAAKAIQIjwgDmogACgCFCI9IBBqIAAoAhgiPiAHaiAAKAIcIj8gPEEadyA8QRV3cyA8QQd3c2ogPiA9cyA8cSA+c2ogCGpBmN+olARqIkAgACgCDCJBaiIHID0gPHNxID1zaiAHQRp3IAdBFXdzIAdBB3dzakGRid2JB2oiQiAAKAIIIkNqIg4gByA8c3EgPHNqIA5BGncgDkEVd3MgDkEHd3NqQc/3g657aiJEIAAoAgQiRWoiECAOIAdzcSAHc2ogEEEadyAQQRV3cyAQQQd3c2pBpbfXzX5qIkYgACgCACIBaiIIaiALIBBqIAwgDmogByANaiAIIBAgDnNxIA5zaiAIQRp3IAhBFXdzIAhBB3dzakHbhNvKA2oiDSBDIEUgAXNxIEUgAXFzIAFBHncgAUETd3MgAUEKd3NqIEBqIgdqIgYgCCAQc3EgEHNqIAZBGncgBkEVd3MgBkEHd3NqQfGjxM8FaiJAIAdBHncgB0ETd3MgB0EKd3MgByABcyBFcSAHIAFxc2ogQmoiDmoiCyAGIAhzcSAIc2ogC0EadyALQRV3cyALQQd3c2pBpIX+kXlqIkIgDkEedyAOQRN3cyAOQQp3cyAOIAdzIAFxIA4gB3FzaiBEaiIQaiIIIAsgBnNxIAZzaiAIQRp3IAhBFXdzIAhBB3dzakHVvfHYemoiRCAQQR53IBBBE3dzIBBBCndzIBAgDnMgB3EgECAOcXNqIEZqIgdqIgxqIBEgCGogCSALaiAFIAZqIAwgCCALc3EgC3NqIAxBGncgDEEVd3MgDEEHd3NqQZjVnsB9aiIJIAdBHncgB0ETd3MgB0EKd3MgByAQcyAOcSAHIBBxc2ogDWoiDmoiBiAMIAhzcSAIc2ogBkEadyAGQRV3cyAGQQd3c2pBgbaNlAFqIhEgDkEedyAOQRN3cyAOQQp3cyAOIAdzIBBxIA4gB3FzaiBAaiIQaiIIIAYgDHNxIAxzaiAIQRp3IAhBFXdzIAhBB3dzakG+i8ahAmoiFyAQQR53IBBBE3dzIBBBCndzIBAgDnMgB3EgECAOcXNqIEJqIgdqIgsgCCAGc3EgBnNqIAtBGncgC0EVd3MgC0EHd3NqQcP7sagFaiIFIAdBHncgB0ETd3MgB0EKd3MgByAQcyAOcSAHIBBxc2ogRGoiDmoiDGogAyALaiAWIAhqIA8gBmogDCALIAhzcSAIc2ogDEEadyAMQRV3cyAMQQd3c2pB9Lr5lQdqIg8gDkEedyAOQRN3cyAOQQp3cyAOIAdzIBBxIA4gB3FzaiAJaiICaiIQIAwgC3NxIAtzaiAQQRp3IBBBFXdzIBBBB3dzakH+4/qGeGoiCyACQR53IAJBE3dzIAJBCndzIAIgDnMgB3EgAiAOcXNqIBFqIgNqIgggECAMc3EgDHNqIAhBGncgCEEVd3MgCEEHd3NqQaeN8N55aiIMIANBHncgA0ETd3MgA0EKd3MgAyACcyAOcSADIAJxc2ogF2oiB2oiDiAIIBBzcSAQc2ogDkEadyAOQRV3cyAOQQd3c2pB9OLvjHxqIgkgB0EedyAHQRN3cyAHQQp3cyAHIANzIAJxIAcgA3FzaiAFaiICaiIGaiAVIA5qIAogCGogBiAOIAhzcSAIcyAQaiAEaiAGQRp3IAZBFXdzIAZBB3dzakHB0+2kfmoiECACQR53IAJBE3dzIAJBCndzIAIgB3MgA3EgAiAHcXNqIA9qIgNqIgogBiAOc3EgDnNqIApBGncgCkEVd3MgCkEHd3NqQYaP+f1+aiIOIANBHncgA0ETd3MgA0EKd3MgAyACcyAHcSADIAJxc2ogC2oiBGoiEiAKIAZzcSAGc2ogEkEadyASQRV3cyASQQd3c2pBxruG/gBqIgggBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAMaiICaiIVIBIgCnNxIApzaiAVQRp3IBVBFXdzIBVBB3dzakHMw7KgAmoiBiACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIAlqIgNqIgdqIBkgFWogEyASaiAKIBhqIAcgFSASc3EgEnNqIAdBGncgB0EVd3MgB0EHd3NqQe/YpO8CaiIYIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogEGoiBGoiCiAHIBVzcSAVc2ogCkEadyAKQRV3cyAKQQd3c2pBqonS0wRqIhUgBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAOaiICaiISIAogB3NxIAdzaiASQRp3IBJBFXdzIBJBB3dzakHc08LlBWoiGSACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIAhqIgNqIhMgEiAKc3EgCnNqIBNBGncgE0EVd3MgE0EHd3NqQdqR5rcHaiIHIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogBmoiBGoiFGogGyATaiAeIBJqIBogCmogFCATIBJzcSASc2ogFEEadyAUQRV3cyAUQQd3c2pB0qL5wXlqIhogBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAYaiICaiIKIBQgE3NxIBNzaiAKQRp3IApBFXdzIApBB3dzakHtjMfBemoiGCACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBVqIgNqIhIgCiAUc3EgFHNqIBJBGncgEkEVd3MgEkEHd3NqQcjPjIB7aiIVIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogGWoiBGoiEyASIApzcSAKc2ogE0EadyATQRV3cyATQQd3c2pBx//l+ntqIhkgBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAHaiICaiIUaiAdIBNqICAgEmogHCAKaiAUIBMgEnNxIBJzaiAUQRp3IBRBFXdzIBRBB3dzakHzl4C3fGoiGyACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBpqIgNqIgogFCATc3EgE3NqIApBGncgCkEVd3MgCkEHd3NqQceinq19aiIaIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogGGoiBGoiEiAKIBRzcSAUc2ogEkEadyASQRV3cyASQQd3c2pB0capNmoiGCAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBVqIgJqIhMgEiAKc3EgCnNqIBNBGncgE0EVd3MgE0EHd3NqQefSpKEBaiIVIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogGWoiA2oiFGogIyATaiAmIBJqIBQgEyASc3EgEnMgCmogImogFEEadyAUQRV3cyAUQQd3c2pBhZXcvQJqIhkgA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAbaiIEaiIKIBQgE3NxIBNzaiAKQRp3IApBFXdzIApBB3dzakG4wuzwAmoiGyAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBpqIgJqIhIgCiAUc3EgFHNqIBJBGncgEkEVd3MgEkEHd3NqQfzbsekEaiIaIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogGGoiA2oiEyASIApzcSAKc2ogE0EadyATQRV3cyATQQd3c2pBk5rgmQVqIhggA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAVaiIEaiIUaiAlIBNqICggEmogCiAkaiAUIBMgEnNxIBJzaiAUQRp3IBRBFXdzIBRBB3dzakHU5qmoBmoiFSAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBlqIgJqIgogFCATc3EgE3NqIApBGncgCkEVd3MgCkEHd3NqQbuVqLMHaiIZIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogG2oiA2oiEiAKIBRzcSAUc2ogEkEadyASQRV3cyASQQd3c2pBrpKLjnhqIhsgA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAaaiIEaiITIBIgCnNxIApzaiATQRp3IBNBFXdzIBNBB3dzakGF2ciTeWoiGiAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBhqIgJqIhRqIC4gE2ogKiASaiAtIApqIBQgEyASc3EgEnNqIBRBGncgFEEVd3MgFEEHd3NqQaHR/5V6aiIYIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogFWoiA2oiCiAUIBNzcSATc2ogCkEadyAKQRV3cyAKQQd3c2pBy8zpwHpqIhUgA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAZaiIEaiISIAogFHNxIBRzaiASQRp3IBJBFXdzIBJBB3dzakHwlq6SfGoiGSAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBtqIgJqIhMgEiAKc3EgCnNqIBNBGncgE0EVd3MgE0EHd3NqQaOjsbt8aiIbIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogGmoiA2oiFGogMCATaiAsIBJqIC8gCmogFCATIBJzcSASc2ogFEEadyAUQRV3cyAUQQd3c2pBmdDLjH1qIhogA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAYaiIEaiIKIBQgE3NxIBNzaiAKQRp3IApBFXdzIApBB3dzakGkjOS0fWoiGCAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBVqIgJqIhIgCiAUc3EgFHNqIBJBGncgEkEVd3MgEkEHd3NqQYXruKB/aiIVIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogGWoiA2oiEyASIApzcSAKc2ogE0EadyATQRV3cyATQQd3c2pB8MCqgwFqIhkgA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAbaiIEaiIUIBMgEnNxIBJzIApqIDVqIBRBGncgFEEVd3MgFEEHd3NqQZaCk80BaiIbIARBHncgBEETd3MgBEEKd3MgBCADcyACcSAEIANxc2ogGmoiAmoiCiA3aiAzIBRqIDYgE2ogMiASaiAKIBQgE3NxIBNzaiAKQRp3IApBFXdzIApBB3dzakGI2N3xAWoiGiACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBhqIgNqIhIgCiAUc3EgFHNqIBJBGncgEkEVd3MgEkEHd3NqQczuoboCaiIcIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogFWoiBGoiEyASIApzcSAKc2ogE0EadyATQRV3cyATQQd3c2pBtfnCpQNqIhUgBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAZaiICaiIKIBMgEnNxIBJzaiAKQRp3IApBFXdzIApBB3dzakGzmfDIA2oiGSACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBtqIgNqIhRqIC1BDncgLUEDdnMgLUEZd3MgKWogNWogNEENdyA0QQp2cyA0QQ93c2oiGCAKaiA4IBNqIDQgEmogFCAKIBNzcSATc2ogFEEadyAUQRV3cyAUQQd3c2pBytTi9gRqIhsgA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAaaiIEaiISIBQgCnNxIApzaiASQRp3IBJBFXdzIBJBB3dzakHPlPPcBWoiGiAEQR53IARBE3dzIARBCndzIAQgA3MgAnEgBCADcXNqIBxqIgJqIgogEiAUc3EgFHNqIApBGncgCkEVd3MgCkEHd3NqQfPfucEGaiIcIAJBHncgAkETd3MgAkEKd3MgAiAEcyADcSACIARxc2ogFWoiA2oiEyAKIBJzcSASc2ogE0EadyATQRV3cyATQQd3c2pB7oW+pAdqIh0gA0EedyADQRN3cyADQQp3cyADIAJzIARxIAMgAnFzaiAZaiIEaiIUaiAvQQ53IC9BA3ZzIC9BGXdzICtqIDdqIC5BDncgLkEDdnMgLkEZd3MgKmogNmogGEENdyAYQQp2cyAYQQ93c2oiFUENdyAVQQp2cyAVQQ93c2oiGSATaiA6IApqIBUgEmogFCATIApzcSAKc2ogFEEadyAUQRV3cyAUQQd3c2pB78aVxQdqIgogBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAbaiICaiISIBQgE3NxIBNzaiASQRp3IBJBFXdzIBJBB3dzakGU8KGmeGoiGyACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBpqIgNqIhMgEiAUc3EgFHNqIBNBGncgE0EVd3MgE0EHd3NqQYiEnOZ4aiIaIANBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogHGoiBGoiFCATIBJzcSASc2ogFEEadyAUQRV3cyAUQQd3c2pB+v/7hXlqIhwgBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAdaiICaiIVID9qNgIcIAAgQSACQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIApqIgNBHncgA0ETd3MgA0EKd3MgAyACcyAEcSADIAJxc2ogG2oiBEEedyAEQRN3cyAEQQp3cyAEIANzIAJxIAQgA3FzaiAaaiICQR53IAJBE3dzIAJBCndzIAIgBHMgA3EgAiAEcXNqIBxqIgpqNgIMIAAgPiAwQQ53IDBBA3ZzIDBBGXdzICxqIDhqIBlBDXcgGUEKdnMgGUEPd3NqIhkgEmogFSAUIBNzcSATc2ogFUEadyAVQRV3cyAVQQd3c2pB69nBonpqIhogA2oiEmo2AhggACBDIApBHncgCkETd3MgCkEKd3MgCiACcyAEcSAKIAJxc2ogGmoiA2o2AgggACA9IDFBDncgMUEDdnMgMUEZd3MgMGogGGogO0ENdyA7QQp2cyA7QQ93c2ogE2ogEiAVIBRzcSAUc2ogEkEadyASQRV3cyASQQd3c2pB98fm93tqIhggBGoiE2o2AhQgACBFIANBHncgA0ETd3MgA0EKd3MgAyAKcyACcSADIApxc2ogGGoiBGo2AgQgACA8IDVBDncgNUEDdnMgNUEZd3MgMWogOWogGUENdyAZQQp2cyAZQQ93c2ogFGogEyASIBVzcSAVc2ogE0EadyATQRV3cyATQQd3c2pB8vHFs3xqIhIgAmpqNgIQIAAgASAEQR53IARBE3dzIARBCndzIAQgA3MgCnEgBCADcXNqIBJqajYCAAv3BQIBfgR/QQApA8CJASIApyIBQQJ2QQ9xIgJBAnRBgIkBaiIDIAMoAgBBfyABQQN0IgFBGHEiA3RBf3NxQYABIAN0czYCAAJAAkACQCACQQ5JDQACQCACQQ5HDQBBAEEANgK8iQELQciJAUGAiQEQA0EAIQEMAQsgAkENRg0BIAJBAWohAQsgAUECdCEBA0AgAUGAiQFqQQA2AgAgAUEEaiIBQThHDQALQQApA8CJASIAp0EDdCEBC0EAIAFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCvIkBQQAgAEIdiKciAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgK4iQFByIkBQYCJARADQQBBACgC5IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC5IkBQQBBACgC4IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC4IkBQQBBACgC3IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC3IkBQQBBACgC2IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC2IkBQQBBACgC1IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC1IkBQQBBACgC0IkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYC0IkBQQBBACgCzIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCzIkBQQBBACgCyIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZyciIBNgLIiQECQEEAKALoiQEiBEUNAEEAIAE6AIAJIARBAUYNACABQQh2IQNBASEBQQEhAgNAIAFBgAlqIAM6AAAgBCACQQFqIgJB/wFxIgFNDQEgAUHIiQFqLQAAIQMMAAsLCwYAQYCJAQujAQBBAEIANwPAiQFBAEEcQSAgAUHgAUYiARs2AuiJAUEAQqef5qfG9JP9vn9Cq7OP/JGjs/DbACABGzcD4IkBQQBCsZaA/p+ihazoAEL/pLmIxZHagpt/IAEbNwPYiQFBAEKXusODk6eWh3dC8ua746On/aelfyABGzcD0IkBQQBC2L2WiPygtb42QufMp9DW0Ouzu38gARs3A8iJASAAEAIQBAsLCwEAQYAICwRwAAAA";
+var hash$a = "817d957e";
+var wasmJson$a = {
+ name: name$a,
+ data: data$a,
+ hash: hash$a
+};
+
+const mutex$a = new Mutex();
+let wasmCache$a = null;
+/**
+ * Calculates SHA-2 (SHA-224) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha224(data) {
+ if (wasmCache$a === null) {
+ return lockedCreate(mutex$a, wasmJson$a, 28)
+ .then((wasm) => {
+ wasmCache$a = wasm;
+ return wasmCache$a.calculate(data, 224);
+ });
+ }
+ try {
+ const hash = wasmCache$a.calculate(data, 224);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-224) hash instance
+ */
+function createSHA224() {
+ return WASMInterface(wasmJson$a, 28).then((wasm) => {
+ wasm.init(224);
+ const obj = {
+ init: () => { wasm.init(224); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 28,
+ };
+ return obj;
+ });
+}
+
+const mutex$9 = new Mutex();
+let wasmCache$9 = null;
+/**
+ * Calculates SHA-2 (SHA-256) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha256(data) {
+ if (wasmCache$9 === null) {
+ return lockedCreate(mutex$9, wasmJson$a, 32)
+ .then((wasm) => {
+ wasmCache$9 = wasm;
+ return wasmCache$9.calculate(data, 256);
+ });
+ }
+ try {
+ const hash = wasmCache$9.calculate(data, 256);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-256) hash instance
+ */
+function createSHA256() {
+ return WASMInterface(wasmJson$a, 32).then((wasm) => {
+ wasm.init(256);
+ const obj = {
+ init: () => { wasm.init(256); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+var name$9 = "sha512";
+var data$9 = "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";
+var hash$9 = "a5d1ca7c";
+var wasmJson$9 = {
+ name: name$9,
+ data: data$9,
+ hash: hash$9
+};
+
+const mutex$8 = new Mutex();
+let wasmCache$8 = null;
+/**
+ * Calculates SHA-2 (SHA-384) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha384(data) {
+ if (wasmCache$8 === null) {
+ return lockedCreate(mutex$8, wasmJson$9, 48)
+ .then((wasm) => {
+ wasmCache$8 = wasm;
+ return wasmCache$8.calculate(data, 384);
+ });
+ }
+ try {
+ const hash = wasmCache$8.calculate(data, 384);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-384) hash instance
+ */
+function createSHA384() {
+ return WASMInterface(wasmJson$9, 48).then((wasm) => {
+ wasm.init(384);
+ const obj = {
+ init: () => { wasm.init(384); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 48,
+ };
+ return obj;
+ });
+}
+
+const mutex$7 = new Mutex();
+let wasmCache$7 = null;
+/**
+ * Calculates SHA-2 (SHA-512) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha512(data) {
+ if (wasmCache$7 === null) {
+ return lockedCreate(mutex$7, wasmJson$9, 64)
+ .then((wasm) => {
+ wasmCache$7 = wasm;
+ return wasmCache$7.calculate(data, 512);
+ });
+ }
+ try {
+ const hash = wasmCache$7.calculate(data, 512);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-512) hash instance
+ */
+function createSHA512() {
+ return WASMInterface(wasmJson$9, 64).then((wasm) => {
+ wasm.init(512);
+ const obj = {
+ init: () => { wasm.init(512); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name$8 = "xxhash32";
+var data$8 = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwcGAAEBAgADBAUBcAEBAQUEAQECAgYOAn8BQbCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKswkGBQBBgAkLTQBBAEIANwOoiQFBACAANgKIiQFBACAAQc+Moo4GajYCjIkBQQAgAEH3lK+veGo2AoSJAUEAIABBqIiNoQJqNgKAiQFBAEEANgKgiQELswUBBn8CQCAARQ0AQQBBACkDqIkBIACtfDcDqIkBAkBBACgCoIkBIgEgAGpBD0sNAEEAIAFBAWo2AqCJASABQZCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCoIkBIgFBAWo2AqCJASABQZCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB8AhqIQMCQAJAIAENAEEAKAKMiQEhAUEAKAKIiQEhBEEAKAKEiQEhBUEAKAKAiQEhBkGACSECDAELQYAJIQICQCABQQ9LDQBBgAkhAgNAIAItAAAhBEEAIAFBAWo2AqCJASABQZCJAWogBDoAACACQQFqIQJBACgCoIkBIgFBEEkNAAsLQQBBACgCkIkBQfeUr694bEEAKAKAiQFqQQ13QbHz3fF5bCIGNgKAiQFBAEEAKAKUiQFB95Svr3hsQQAoAoSJAWpBDXdBsfPd8XlsIgU2AoSJAUEAQQAoApiJAUH3lK+veGxBACgCiIkBakENd0Gx893xeWwiBDYCiIkBQQBBACgCnIkBQfeUr694bEEAKAKMiQFqQQ13QbHz3fF5bCIBNgKMiQELIABBgAlqIQACQCACIANLDQADQCACKAIAQfeUr694bCAGakENd0Gx893xeWwhBiACQQxqKAIAQfeUr694bCABakENd0Gx893xeWwhASACQQhqKAIAQfeUr694bCAEakENd0Gx893xeWwhBCACQQRqKAIAQfeUr694bCAFakENd0Gx893xeWwhBSACQRBqIgIgA00NAAsLQQAgATYCjIkBQQAgBDYCiIkBQQAgBTYChIkBQQAgBjYCgIkBQQAgACACayIBNgKgiQEgAUUNAEEAIQEDQCABQZCJAWogAiABai0AADoAACABQQFqIgFBACgCoIkBSQ0ACwsLzAICAX4Gf0EAKQOoiQEiAKchAQJAAkAgAEIQVA0AQQAoAoSJAUEHd0EAKAKAiQFBAXdqQQAoAoiJAUEMd2pBACgCjIkBQRJ3aiECDAELQQAoAoiJAUGxz9myAWohAgsgAiABaiECQZCJASEBQQAoAqCJASIDQZCJAWohBAJAIANBBEgNAEGQiQEhBQNAIAUoAgBBvdzKlXxsIAJqQRF3Qa/W074CbCECIAVBCGohBiAFQQRqIgEhBSAGIARNDQALCwJAIAEgBEYNACADQZCJAWohBQNAIAEtAABBsc/ZsgFsIAJqQQt3QbHz3fF5bCECIAUgAUEBaiIBRw0ACwtBACACQQ92IAJzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq03A4AJCwYAQYCJAQtTAEEAQgA3A6iJAUEAIAE2AoiJAUEAIAFBz4yijgZqNgKMiQFBACABQfeUr694ajYChIkBQQAgAUGoiI2hAmo2AoCJAUEAQQA2AqCJASAAEAIQAwsLCwEAQYAICwQwAAAA";
+var hash$8 = "5b6a5062";
+var wasmJson$8 = {
+ name: name$8,
+ data: data$8,
+ hash: hash$8
+};
+
+const mutex$6 = new Mutex();
+let wasmCache$6 = null;
+function validateSeed$3(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be a valid 32-bit long unsigned integer.');
+ }
+ return null;
+}
+/**
+ * Calculates xxHash32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash32(data, seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ if (wasmCache$6 === null) {
+ return lockedCreate(mutex$6, wasmJson$8, 4)
+ .then((wasm) => {
+ wasmCache$6 = wasm;
+ return wasmCache$6.calculate(data, seed);
+ });
+ }
+ try {
+ const hash = wasmCache$6.calculate(data, seed);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash32 hash instance
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash32(seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ return WASMInterface(wasmJson$8, 4).then((wasm) => {
+ wasm.init(seed);
+ const obj = {
+ init: () => { wasm.init(seed); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 16,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$7 = "xxhash64";
+var data$7 = "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";
+var hash$7 = "bc315b2a";
+var wasmJson$7 = {
+ name: name$7,
+ data: data$7,
+ hash: hash$7
+};
+
+const mutex$5 = new Mutex();
+let wasmCache$5 = null;
+const seedBuffer$2 = new ArrayBuffer(8);
+function validateSeed$2(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$2(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash64 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash64(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ if (wasmCache$5 === null) {
+ return lockedCreate(mutex$5, wasmJson$7, 8)
+ .then((wasm) => {
+ wasmCache$5 = wasm;
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ return wasmCache$5.calculate(data);
+ });
+ }
+ try {
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ const hash = wasmCache$5.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash64 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash64(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ return WASMInterface(wasmJson$7, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$2(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 32,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$6 = "xxhash3";
+var data$6 = "AGFzbQEAAAABJAZgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAAAYAF/AAMMCwABAgMDAwQFBAAEBAUBcAEBAQUEAQECAgYOAn8BQcCOBQt/AEHACQsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQABgtIYXNoX1VwZGF0ZQAHCkhhc2hfRmluYWwACA1IYXNoX0dldFN0YXRlAAkOSGFzaF9DYWxjdWxhdGUACgpTVEFURV9TSVpFAwEK+joLBQBBgAoL7wMBEH4CQCADRQ0AIAFBOGohASACQThqIQIgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAcgAUFoaikDACIMfCACQXBqKQMAIAFBcGopAwAiDYUiB0IgiCAHQv////8Pg358IQcgCSABQVhqKQMAIg58IAJBYGopAwAgAUFgaikDACIPhSIJQiCIIAlC/////w+DfnwhCSALIAFBSGopAwAiEHwgAkFQaikDACABQVBqKQMAIhGFIgtCIIggC0L/////D4N+fCELIAJBeGopAwAgAUF4aikDACIShSITQiCIIBNC/////w+DfiAEfCABKQMAIhN8IQQgAkFoaikDACAMhSIMQiCIIAxC/////w+DfiAGfCANfCEGIAJBWGopAwAgDoUiDEIgiCAMQv////8Pg34gCHwgD3whCCACQUhqKQMAIBCFIgxCIIggDEL/////D4N+IAp8IBF8IQogBSASfCACKQMAIBOFIgVCIIggBUL/////D4N+fCEFIAFBwABqIQEgAkEIaiECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgAiABKAIAIgdrIgIgBEsNACAAIAMgBSAHQQN0aiACEAEgACAAKQMAIgggBSAGaiIHKQMAhSAIQi+IhUKx893xCX43AwAgACAAKQMIIgggBykDCIUgCEIviIVCsfPd8Ql+NwMIIAAgACkDECIIIAcpAxCFIAhCL4iFQrHz3fEJfjcDECAAIAApAxgiCCAHKQMYhSAIQi+IhUKx893xCX43AxggACAAKQMgIgggBykDIIUgCEIviIVCsfPd8Ql+NwMgIAAgACkDKCIIIAcpAyiFIAhCL4iFQrHz3fEJfjcDKCAAIAApAzAiCCAHKQMwhSAIQi+IhUKx893xCX43AzAgACAAKQM4IgggBykDOIUgCEIviIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgAL3QQBBH4CQCAAQQlJDQBBACkDgIwBIAEpAyAgASkDGIUgAnyFIgNCOIYgA0IohkKAgICAgIDA/wCDhCADQhiGQoCAgICA4D+DIANCCIZCgICAgPAfg4SEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACABKQMQIAEpAwiFIAKnIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq1CIIYgAoV9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQhiJIAOFIANCMYmFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4UPCwJAIABFDQAgASgCBCABKAIAc60gAnwiA0EALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQ8LIAEpAzggAoUgASkDQIUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQuICwQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQgAEEQbSEJAkAgAEGQAUgNACAJQQkgCUEJShtBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iLAUEAIABCvNDI2pvysIBLfDcDgIsBQQBC4OvAtJ7QjpPMACAAfTcD+IoBQQAgAEK4kZii9/6Qko5/fDcD8IoBQQBCgrXB7sf5v7khIAB9NwPoigFBACAAQsvzmffEmfDy+AB8NwPgigFBAELygJGl+vbssx8gAH03A9iKAUEAIABC3qm3y76Q5MtbfDcD0IoBQQBC/IKE5PK+yNYcIAB9NwPIigFBACAAQrj9s8uzhOmlvn98NwPAigELQQBCADcDkI4BQQBCADcDiI4BQQBCADcDgI4BQQAgATYCsI4BQQAgADcDoI4BQQBCsfPd8Qk3A7iKAUEAQsXP2bLx5brqJzcDsIoBQQBC95Svrwg3A6iKAUEAQuPcypX8zvL1hX83A6CKAUEAQvnz3fGZ9pmrFjcDmIoBQQBCz9bTvtLHq9lCNwOQigFBAEKHla+vmLbem55/NwOIigFBAEK93MqVDDcDgIoBQQBCkICAgIAQNwOYjgELwAUBBX9BAEEAKQOQjgEgAK18NwOQjgECQAJAQQAoAoCOASIBIABqIgJBgAJLDQAgAUGAjAFqIQNBgAohBAJAAkAgAEEITw0AIAAhAQwBCyAAIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLIAFFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCABQX9qIgENAAtBACgCgI4BIABqIQIMAQtBgAohAyAAQYAKaiECQQAoArCOASIEQcCKASAEGyEAAkAgAUUNACABQYCMAWohA0GACiEEAkACQEGAAiABayIFQQhPDQAgBSEBDAELIAUhAQNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAFBeGoiAUEHSw0ACwsCQCABRQ0AA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAAQQAoApyOARACQQBBADYCgI4BIAVBgApqIQMLAkAgA0GAAmogAk8NACACQYB+aiEEA0BBgIoBQYiOAUEAKAKYjgEgA0EEIABBACgCnI4BEAIgA0GAAmoiAyAESQ0AC0EAIANBQGopAwA3A8CNAUEAIANBSGopAwA3A8iNAUEAIANBUGopAwA3A9CNAUEAIANBWGopAwA3A9iNAUEAIANBYGopAwA3A+CNAUEAIANBaGopAwA3A+iNAUEAIANBcGopAwA3A/CNAUEAIANBeGopAwA3A/iNAQtBgIwBIQQCQAJAIAIgA2siAkEITw0AIAIhAQwBCyACIQEDQCAEIAMpAwA3AwAgBEEIaiEEIANBCGohAyABQXhqIgFBB0sNAAsLIAFFDQADQCAEIAMtAAA6AAAgBEEBaiEEIANBAWohAyABQX9qIgENAAsLQQAgAjYCgI4BC6oQBQR/AX4Cfwp+An8jACIAIQEgAEGAAWtBQHEiAiQAQQAoArCOASIAQcCKASAAGyEDAkACQEEAKQOQjgEiBELxAVQNACACQQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKATcDMCACQQApA7iKATcDOAJAAkBBACgCgI4BIgVBwABJDQAgAkEAKAKIjgE2AkAgAiACQcAAakEAKAKYjgFBgIwBIAVBf2pBBnYgA0EAKAKcjgEQAiACIAIpAwhBACgCgI4BIgBBwIsBaikDACIEfCADQQAoApyOAWoiBkEBaikDACAAQciLAWopAwAiB4UiCEIgiCAIQv////8Pg358Igk3AwggAiACKQMYIABB0IsBaikDACIIfCAGQRFqKQMAIABB2IsBaikDACIKhSILQiCIIAtC/////w+DfnwiDDcDGCACIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiACKQMAfHwiDTcDACACIAogCCAGQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHwiDjcDECAGQRlqKQMAIQQgAikDICEHIAIgAikDKCAAQeCLAWopAwAiCHwgBkEhaikDACAAQeiLAWopAwAiCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IABB8IsBaikDACIEfCAGQTFqKQMAIABB+IsBaikDACIHhSIIQiCIIAhC/////w+Dfnw3AzggByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAIpAzB8fCEEDAELQcAAIAVrIRECQAJAAkAgBUE4TQ0AQYCOASARayEGIAJBwABqIQUgESEADAELQQAhEiARIQADQCACQcAAaiASaiAFIBJqQcCNAWopAwA3AwAgEkEIaiESIABBeGoiAEEHSw0ACyAFIBJqIgZBwABGDQEgBkHAjQFqIQYgAkHAAGogEmohBQsDQCAFIAYtAAA6AAAgBUEBaiEFIAZBAWohBiAAQX9qIgANAAtBACgCgI4BIQULIAJBwABqIBFqIQZBgIwBIQACQCAFQQhJDQBBgIwBIQADQCAGIAApAwA3AwAgBkEIaiEGIABBCGohACAFQXhqIgVBB0sNAAsLAkAgBUUNAANAIAYgAC0AADoAACAGQQFqIQYgAEEBaiEAIAVBf2oiBQ0ACwsgAiACKQMIIAIpA0AiBHwgA0EAKAKcjgFqIgBBAWopAwAgAikDSCIHhSIIQiCIIAhC/////w+DfnwiCTcDCCACIAIpAxggAikDUCIIfCAAQRFqKQMAIAIpA1giCoUiC0IgiCALQv////8Pg358Igw3AxggAiAHIAQgAEF5aikDAIUiBEIgiCAEQv////8Pg34gAikDAHx8Ig03AwAgAiAKIAggAEEJaikDAIUiBEIgiCAEQv////8Pg34gAikDEHx8Ig43AxAgAEEZaikDACEEIAIpAyAhByACIAIpAyggAikDYCIIfCAAQSFqKQMAIAIpA2giCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IAIpA3AiBHwgAEExaikDACACKQN4IgeFIghCIIggCEL/////D4N+fDcDOCAHIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8IQQLIAIgBDcDMCADKQNDIAIpAziFIgdC/////w+DIgggAykDOyAEhSIEQiCIIgp+IgtC/////w+DIAdCIIgiByAEQv////8PgyIEfnwgCCAEfiIEQiCIfCIIQiCGIARC/////w+DhCALQiCIIAcgCn58IAhCIIh8hSADKQMzIA+FIgRC/////w+DIgcgAykDKyAQhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMjIAyFIgRC/////w+DIgcgAykDGyAOhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMTIAmFIgRC/////w+DIgcgAykDCyANhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hUEAKQOQjgFCh5Wvr5i23puef358fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIABBgAggBBADIQQMAgsCQCAAQYABSw0AIABBgAggBBAEIQQMAgsgAEGACCAEEAUhBAwBCwJAIABBEEsNACAAIANCABADIQQMAQsCQCAAQYABSw0AIAAgA0IAEAQhBAwBCyAAIANCABAFIQQLQQAgBEI4hiAEQiiGQoCAgICAgMD/AIOEIARCGIZCgICAgIDgP4MgBEIIhkKAgICA8B+DhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4AKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA";
+var hash$6 = "187bc2c6";
+var wasmJson$6 = {
+ name: name$6,
+ data: data$6,
+ hash: hash$6
+};
+
+const mutex$4 = new Mutex();
+let wasmCache$4 = null;
+const seedBuffer$1 = new ArrayBuffer(8);
+function validateSeed$1(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$1(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash3(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ if (wasmCache$4 === null) {
+ return lockedCreate(mutex$4, wasmJson$6, 8)
+ .then((wasm) => {
+ wasmCache$4 = wasm;
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ return wasmCache$4.calculate(data);
+ });
+ }
+ try {
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ const hash = wasmCache$4.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash3 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash3(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ return WASMInterface(wasmJson$6, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$1(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$5 = "xxhash128";
+var data$5 = "AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUEBQFwAQEBBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAHC0hhc2hfVXBkYXRlAAgKSGFzaF9GaW5hbAAJDUhhc2hfR2V0U3RhdGUACg5IYXNoX0NhbGN1bGF0ZQALClNUQVRFX1NJWkUDAQrKRgwFAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAApAwAiCCAFIAZqIgcpAwCFIAhCL4iFQrHz3fEJfjcDACAAIAApAwgiCCAHKQMIhSAIQi+IhUKx893xCX43AwggACAAKQMQIgggBykDEIUgCEIviIVCsfPd8Ql+NwMQIAAgACkDGCIIIAcpAxiFIAhCL4iFQrHz3fEJfjcDGCAAIAApAyAiCCAHKQMghSAIQi+IhUKx893xCX43AyAgACAAKQMoIgggBykDKIUgCEIviIVCsfPd8Ql+NwMoIAAgACkDMCIIIAcpAzCFIAhCL4iFQrHz3fEJfjcDMCAAIAApAzgiCCAHKQM4hSAIQi+IhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQvCCAEFfgJAIAFBCUkNACAAQQApA4CMASACKQMoIAIpAyCFIAN9hSABQfiLAWopAwAiBIUiBUIgiCIGQoeVr68IfiIHQv////8PgyAFQv////8PgyIFQrHz3fEJfnwgBUKHla+vCH4iBUIgiHwiCEIghiAFQv////8Pg4QgAUF/aq1CNoZ8IAQgAikDOCACKQMwhSADfIUiA0L/////D4NC95Svrwh+IANCgICAgHCDfCAGQrHz3fEJfnwgB0IgiHwgCEIgiHwiA0I4hiADQiiGQoCAgICAgMD/AIOEIANCGIZCgICAgIDgP4MgA0IIhkKAgICA8B+DhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhISFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgdCIIh8IgRCBYhC////P4MgBEIghiAHQv////8Pg4SFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgBEIgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyrUIghiADhXwgAUH8iwFqNQIAQiCGQQA1AoCMAYSFIgNCIIgiBCABQQJ0QYeVr694aq0iBX4iBkIgiCAEQrHz3fEJfnwgBkL/////D4MgA0L/////D4MiA0Kx893xCX58IAMgBX4iA0IgiHwiBEIgiHwgBEIghiADQv////8Pg4QiBEIBhnwiA0IliCADhUL5893xmfKZqxZ+IgVCIIggBYU3AwggACADQgOIIASFIgNCI4ggA4VCpb7j9NGMh9mff34iA0IciCADhTcDAA8LAkAgAUUNACAAIAIoAgQgAigCAHOtIAN8IgRBAC0AgIwBQRB0IAFBCHRyIAFBAXZBgIwBai0AAEEYdHIgAUH/iwFqLQAAciIBrYUgBEIhiIVCz9bTvtLHq9lCfiIEQh2IIASFQvnz3fGZ9pmrFn4iBEIgiCAEhTcDACAAIAIoAgwgAigCCHOtIAN9IgMgAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyQQ13rYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCADhSACKQNYhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAOFIAIpA0iFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAunCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAIpA3ggA30gAUHIiwFqKQMAIgiFIgdC/////w+DIgkgAikDcCADfCABQcCLAWopAwAiCoUiC0IgiCIMfiINQiCIIAdCIIgiByAMfnwgDUL/////D4MgByALQv////8PgyILfnwgCSALfiIHQiCIfCIJQiCIfEEAKQO4jAEiC0EAKQOwjAEiDHyFIAlCIIYgB0L/////D4OEhSEHIAIpA2ggA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAIpA1ggA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAIpA0ggA30gCYUiCUL/////D4MiDCACKQNAIAN8IAqFIgpCIIgiDX4iBkL/////D4MgCUIgiCIJIApC/////w+DIgp+fCAMIAp+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggC3yFIQULIAIpAzggA30gAUHoiwFqKQMAIgiFIglC/////w+DIgogAikDMCADfCABQeCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDmIwBIgdBACkDkIwBIgl8hSEGIAIpAyggA30gB4UiB0L/////D4MiCiACKQMgIAN8IAmFIglCIIgiDH4iDUL/////D4MgB0IgiCIHIAlC/////w+DIgl+fCAKIAl+IglCIIh8IgpCIIYgCUL/////D4OEIA1CIIggByAMfnwgCkIgiHyFIAV8IAggC3yFIQULIAAgAikDGCADfSABQfiLAWopAwAiB4UiCEL/////D4MiCSACKQMQIAN8IAFB8IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfEEAKQOIjAEiCEEAKQOAjAEiCXyFIgsgAikDCCADfSAIhSIIQv////8PgyIMIAIpAwAgA3wgCYUiCUIgiCINfiIGQv////8PgyAIQiCIIgggCUL/////D4MiCX58IAwgCX4iCUIgiHwiDEIghiAJQv////8Pg4QgBkIgiCAIIA1+fCAMQiCIfIUgBXwgByAKfIUiBXwiB0IliCAHhUL5893xmfKZqxZ+IgdCIIggB4U3AwAgAEIAIAVCh5Wvr5i23puef34gBCADfULP1tO+0ser2UJ+fCALQuPcypX8zvL1hX9+fCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhX03AwgLiQ8DAX8UfgJ/QQAhBCACKQN4IAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAIpA1ggA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAikDOCADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACKQMYIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACKQNoIAN9IBSFIhRC/////w+DIhYgAikDYCADfCAVhSIVQiCIIhd+IhhC/////w+DIBRCIIgiFCAVQv////8PgyIVfnwgFiAVfiIVQiCIfCIWQiCGIBVC/////w+DhCAYQiCIIBQgF358IBZCIIh8hSACKQNIIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACKQMoIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACKQMIIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFIAFBIG0hGQJAIAFBoAFIDQAgGUEFIBlBBUobQXxqIRoDQCACIARqIhlBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGUETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBlBC2opAwAgA30gCIUiCEL/////D4MiCyAZQQNqKQMAIAN8IAmFIglCIIgi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QXBqKQMANwPwjQFBACADQXhqKQMANwP4jQELQYCMASEEAkACQCACIANrIgJBCE8NACACIQEMAQsgAiEBA0AgBCADKQMANwMAIARBCGohBCADQQhqIQMgAUF4aiIBQQdLDQALCyABRQ0AA0AgBCADLQAAOgAAIARBAWohBCADQQFqIQMgAUF/aiIBDQALC0EAIAI2AoCOAQvcDgUEfwF+An8EfgJ/IwAiACEBIABBgAFrQUBxIgAkAEEAKAKwjgEiAkHAigEgAhshAwJAAkBBACkDkI4BIgRC8QFUDQAgAEEAKQOAigE3AwAgAEEAKQOIigE3AwggAEEAKQOQigE3AxAgAEEAKQOYigE3AxggAEEAKQOgigE3AyAgAEEAKQOoigE3AyggAEEAKQOwigE3AzAgAEEAKQO4igE3AzgCQAJAQQAoAoCOASIFQcAASQ0AIABBACgCiI4BNgJAIAAgAEHAAGpBACgCmI4BQYCMASAFQX9qQQZ2IANBACgCnI4BEAIgACAAKQMIQQAoAoCOASICQcCLAWopAwAiBHwgA0EAKAKcjgFqIgZBAWopAwAgAkHIiwFqKQMAIgeFIghCIIggCEL/////D4N+fDcDCCAAIAApAxggAkHQiwFqKQMAIgh8IAZBEWopAwAgAkHYiwFqKQMAIgmFIgpCIIggCkL/////D4N+fDcDGCAAIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiAAKQMAfHw3AwAgACAJIAggBkEJaikDAIUiBEIgiCAEQv////8Pg34gACkDEHx8NwMQIAZBGWopAwAhBCAAKQMgIQcgACAAKQMoIAJB4IsBaikDACIIfCAGQSFqKQMAIAJB6IsBaikDACIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCACQfCLAWopAwAiBHwgBkExaikDACACQfiLAWopAwAiB4UiCEIgiCAIQv////8Pg358NwM4IAAgByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAApAzB8fDcDMAwBC0HAACAFayELAkACQAJAIAVBOE0NAEGAjgEgC2shBiAAQcAAaiEFIAshAgwBC0EAIQwgCyECA0AgAEHAAGogDGogBSAMakHAjQFqKQMANwMAIAxBCGohDCACQXhqIgJBB0sNAAsgBSAMaiIGQcAARg0BIAZBwI0BaiEGIABBwABqIAxqIQULA0AgBSAGLQAAOgAAIAVBAWohBSAGQQFqIQYgAkF/aiICDQALQQAoAoCOASEFCyAAQcAAaiALaiEGQYCMASECAkAgBUEISQ0AQYCMASECA0AgBiACKQMANwMAIAZBCGohBiACQQhqIQIgBUF4aiIFQQdLDQALCwJAIAVFDQADQCAGIAItAAA6AAAgBkEBaiEGIAJBAWohAiAFQX9qIgUNAAsLIAAgACkDCCAAKQNAIgR8IANBACgCnI4BaiICQQFqKQMAIAApA0giB4UiCEIgiCAIQv////8Pg358NwMIIAAgACkDGCAAKQNQIgh8IAJBEWopAwAgACkDWCIJhSIKQiCIIApC/////w+Dfnw3AxggACAHIAQgAkF5aikDAIUiBEIgiCAEQv////8Pg34gACkDAHx8NwMAIAAgCSAIIAJBCWopAwCFIgRCIIggBEL/////D4N+IAApAxB8fDcDECACQRlqKQMAIQQgACkDICEHIAAgACkDKCAAKQNgIgh8IAJBIWopAwAgACkDaCIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCAAKQNwIgR8IAJBMWopAwAgACkDeCIHhSIIQiCIIAhC/////w+Dfnw3AzggACAHIAQgAkEpaikDAIUiBEIgiCAEQv////8Pg34gACkDMHx8NwMwCyAAIAAgA0ELakEAKQOQjgEiBEKHla+vmLbem55/fhADNwNAIAAgACADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAgJAQQApA6COASIEUA0AAkAgAkEQSw0AIABBwABqIAJBgAggBBAEDAILAkAgAkGAAUsNACAAQcAAaiACQYAIIAQQBQwCCyAAQcAAaiACQYAIIAQQBgwBCwJAIAJBEEsNACAAQcAAaiACIANCABAEDAELAkAgAkGAAUsNACAAQcAAaiACIANCABAFDAELIABBwABqIAIgA0IAEAYLQQAgAEH4AGopAwA3A8AKQQAgAEHwAGopAwA3A7gKQQAgAEHoAGopAwA3A7AKQQAgAEHgAGopAwA3A6gKQQAgAEHYAGopAwA3A6AKQQAgAEHQAGopAwA3A5gKQQAgACkDSCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgACkDQCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhDcDiAogASQACwYAQYCKAQsCAAsLzAEBAEGACAvEAbj+bDkjpEu+fAGBLPchrRze1G3pg5CX23JApKS3s2cfy3nmTszA5XiCWtB9zP9yIbgIRnT3QySO4DWQ5oE6Jkw8KFK7kcMAy4jQZYsbUy6jcWRIl6IN+U44Ge9Gqd6s2Kj6dj/jnDQ/+dy7x8cLTx2KUeBLzbRZMciffsnZeHNk6sWsgzTT68PFgaD/+hNj6xcN3VG38NpJ0xZVJinUaJ4rFr5YfUeh/I/4uNF60DHORcs6j5UWBCiv1/vKu0tAfkACAAA=";
+var hash$5 = "e8e3fcf8";
+var wasmJson$5 = {
+ name: name$5,
+ data: data$5,
+ hash: hash$5
+};
+
+const mutex$3 = new Mutex();
+let wasmCache$3 = null;
+const seedBuffer = new ArrayBuffer(8);
+function validateSeed(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash128 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash128(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ if (wasmCache$3 === null) {
+ return lockedCreate(mutex$3, wasmJson$5, 16)
+ .then((wasm) => {
+ wasmCache$3 = wasm;
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ return wasmCache$3.calculate(data);
+ });
+ }
+ try {
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ const hash = wasmCache$3.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash128 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash128(seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ return WASMInterface(wasmJson$5, 16).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$4 = "ripemd160";
+var data$4 = "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";
+var hash$4 = "42f1de39";
+var wasmJson$4 = {
+ name: name$4,
+ data: data$4,
+ hash: hash$4
+};
+
+const mutex$2 = new Mutex();
+let wasmCache$2 = null;
+/**
+ * Calculates RIPEMD-160 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function ripemd160(data) {
+ if (wasmCache$2 === null) {
+ return lockedCreate(mutex$2, wasmJson$4, 20)
+ .then((wasm) => {
+ wasmCache$2 = wasm;
+ return wasmCache$2.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$2.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new RIPEMD-160 hash instance
+ */
+function createRIPEMD160() {
+ return WASMInterface(wasmJson$4, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+function calculateKeyBuffer(hasher, key) {
+ const { blockSize } = hasher;
+ const buf = getUInt8Buffer(key);
+ if (buf.length > blockSize) {
+ hasher.update(buf);
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ return uintArr;
+ }
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+}
+function calculateHmac(hasher, key) {
+ hasher.init();
+ const { blockSize } = hasher;
+ const keyBuf = calculateKeyBuffer(hasher, key);
+ const keyBuffer = new Uint8Array(blockSize);
+ keyBuffer.set(keyBuf);
+ const opad = new Uint8Array(blockSize);
+ for (let i = 0; i < blockSize; i++) {
+ const v = keyBuffer[i];
+ opad[i] = v ^ 0x5C;
+ keyBuffer[i] = v ^ 0x36;
+ }
+ hasher.update(keyBuffer);
+ const obj = {
+ init: () => {
+ hasher.init();
+ hasher.update(keyBuffer);
+ return obj;
+ },
+ update: (data) => {
+ hasher.update(data);
+ return obj;
+ },
+ digest: ((outputType) => {
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ hasher.update(opad);
+ hasher.update(uintArr);
+ return hasher.digest(outputType);
+ }),
+ save: () => {
+ throw new Error('save() not supported');
+ },
+ load: () => {
+ throw new Error('load() not supported');
+ },
+ blockSize: hasher.blockSize,
+ digestSize: hasher.digestSize,
+ };
+ return obj;
+}
+/**
+ * Calculates HMAC hash
+ * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
+ * @param key Key (string, Buffer or TypedArray)
+ */
+function createHMAC(hash, key) {
+ if (!hash || !hash.then) {
+ throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
+ }
+ return hash.then((hasher) => calculateHmac(hasher, key));
+}
+
+function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const DK = new Uint8Array(hashLength);
+ const block1 = new Uint8Array(salt.length + 4);
+ const block1View = new DataView(block1.buffer);
+ const saltBuffer = getUInt8Buffer(salt);
+ const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);
+ block1.set(saltUIntBuffer);
+ let destPos = 0;
+ const hLen = digest.digestSize;
+ const l = Math.ceil(hashLength / hLen);
+ let T = null;
+ let U = null;
+ for (let i = 1; i <= l; i++) {
+ block1View.setUint32(salt.length, i);
+ digest.init();
+ digest.update(block1);
+ T = digest.digest('binary');
+ U = T.slice();
+ for (let j = 1; j < iterations; j++) {
+ digest.init();
+ digest.update(U);
+ U = digest.digest('binary');
+ for (let k = 0; k < hLen; k++) {
+ T[k] ^= U[k];
+ }
+ }
+ DK.set(T.subarray(0, hashLength - destPos), destPos);
+ destPos += hLen;
+ }
+ if (outputType === 'binary') {
+ return DK;
+ }
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, DK, hashLength);
+ });
+}
+const validateOptions$2 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.hashFunction || !options.hashFunction.then) {
+ throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Generates a new PBKDF2 hash for the supplied password
+ */
+function pbkdf2(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$2(options);
+ const hmac = yield createHMAC(options.hashFunction, options.password);
+ return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);
+ });
+}
+
+var name$3 = "scrypt";
+var data$3 = "AGFzbQEAAAABIwZgAX8Bf2AAAX9gBX9/fn9/AGAEf39/fwBgAX8AYAN/f38AAwcGAAECAwQFBAUBcAEBAQUGAQECgIACBggBfwFBkIgECwc5BAZtZW1vcnkCABJIYXNoX1NldE1lbW9yeVNpemUAAA5IYXNoX0dldEJ1ZmZlcgABBnNjcnlwdAAFCpcmBlsBAX9BACEBAkAgAEEAKAKACGsiAEUNAAJAIABBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/ASEBDAELQQAhAUEAQQApA4AIIABBEHStfDcDgAgLIAFBGHRBGHULagECfwJAQQAoAogIIgANAEEAPwBBEHQiADYCiAhBgIAgQQAoAoAIayIBRQ0AAkAgAUEQdiABQYCAfHEgAUlqIgBAAEF/Rw0AQQAPC0EAQQApA4AIIABBEHStfDcDgAhBACgCiAghAAsgAAu5EAMMfwl+An8gAUEFdCEFIAQgAUEIdGohBiAEIAFBB3QiB2ohCAJAAkACQAJAIAFFDQBBACEJIAAhCiAEIQsDQCALIAooAgA2AgAgCkEEaiEKIAtBBGohCyAJQQFqIgkgBUkNAAsgAlANAiABQQh0IQxBACENIAMhDgNAQQAhCSABIQ8DQCAOIAlqIgogBCAJaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgDiEJIAQhDyABIRADQCAJIAdqIgogDyAHaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9BgAFqIQ8gEEF/aiIQDQALIAggBCAGIAEQAyAOIAxqIQ4gDUECaiINrSACVA0ADAILCyACUA0CIAhBQGoiCikDOCERIAopAzAhEiAKKQMoIRMgCikDICEUIAopAxghFSAKKQMQIRYgCikDCCEXIAopAwAhGEECIQoDQCAKrSEZIApBAmohCiAZIAJUDQALIAYgETcDOCAGIBI3AzAgBiATNwMoIAYgFDcDICAGIBU3AxggBiAWNwMQIAYgFzcDCCAGIBg3AwALAkAgAUUNACAHQUBqIgogCGohGiACp0F/aiEOIAogBGohGyABQQd0IQ1BACEMA0AgAyANIBsoAgAgDnFsaiEHQQAhCSABIQ8DQCAEIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgAyANIBooAgAgDnFsaiEHQQAhCSABIQ8DQCAIIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAIIAQgBiABEAMgDEECaiIMrSACVA0ADAILCyAIQUBqIgopAzghESAKKQMwIRIgCikDKCETIAopAyAhFCAKKQMYIRUgCikDECEWIAopAwghFyAKKQMAIRhBAiEKA0AgCq0hGSAKQQJqIQogGSACVA0ACyAGIBE3AzggBiASNwMwIAYgEzcDKCAGIBQ3AyAgBiAVNwMYIAYgFjcDECAGIBc3AwggBiAYNwMACyABRQ0AQQAhCgNAIAAgBCgCADYCACAAQQRqIQAgBEEEaiEEIApBAWoiCiAFSQ0ACwsL4wUDAX8IfgJ/IAIgA0EHdCAAakFAaiIEKQMAIgU3AwAgAiAEKQMIIgY3AwggAiAEKQMQIgc3AxAgAiAEKQMYIgg3AxggAiAEKQMgIgk3AyAgAiAEKQMoIgo3AyggAiAEKQMwIgs3AzAgAiAEKQM4Igw3AzgCQCADRQ0AIANBAXQhDSAAQfgAaiEEIANBBnQhDkECIQADQCACIAUgBEGIf2opAwCFNwMAIAIgBiAEQZB/aikDAIU3AwggAiAHIARBmH9qKQMAhTcDECACIAggBEGgf2opAwCFNwMYIAIgCSAEQah/aikDAIU3AyAgAiAKIARBsH9qKQMAhTcDKCACIAsgBEG4f2opAwCFNwMwIAIgDCAEQUBqKQMAhTcDOCACEAQgASACKQMANwMAIAFBCGogAikDCDcDACABQRBqIAIpAxA3AwAgAUEYaiACKQMYNwMAIAFBIGogAikDIDcDACABQShqIAIpAyg3AwAgAUEwaiACKQMwNwMAIAFBOGogAikDODcDACACIAIpAwAgBEFIaikDAIU3AwAgAiACKQMIIARBUGopAwCFNwMIIAIgAikDECAEQVhqKQMAhTcDECACIAIpAxggBEFgaikDAIU3AxggAiACKQMgIARBaGopAwCFNwMgIAIgAikDKCAEQXBqKQMAhTcDKCACIAIpAzAgBEF4aikDAIU3AzAgAiACKQM4IAQpAwCFNwM4IAIQBCABIA5qIgMgAikDADcDACADQQhqIAIpAwg3AwAgA0EQaiACKQMQNwMAIANBGGogAikDGDcDACADQSBqIAIpAyA3AwAgA0EoaiACKQMoNwMAIANBMGogAikDMDcDACADQThqIAIpAzg3AwAgACANTw0BIARBgAFqIQQgAUHAAGohASAAQQJqIQAgAikDOCEMIAIpAzAhCyACKQMoIQogAikDICEJIAIpAxghCCACKQMQIQcgAikDCCEGIAIpAwAhBQwACwsLug0IAX4BfwF+AX8BfgF/AX4SfyAAIAAoAgQgACkDKCIBQiCIpyICIAApAzgiA0IgiKciBGpBB3cgACkDCCIFQiCIp3MiBiAEakEJdyAAKQMYIgdCIIincyIIIAZqQQ13IAJzIgkgB6ciCiABpyILakEHdyADp3MiAiALakEJdyAFp3MiDCACakENdyAKcyINIAxqQRJ3IAtzIg4gACkDACIBQiCIpyIPIAApAxAiA0IgiKciEGpBB3cgACkDICIFQiCIp3MiC2pBB3dzIgogCSAIakESdyAEcyIRIAJqQQd3IAApAzAiB6ciCSABpyISakEHdyADp3MiBCASakEJdyAFp3MiEyAEakENdyAJcyIUcyIJIBFqQQl3IAsgEGpBCXcgB0IgiKdzIhVzIhYgCWpBDXcgAnMiFyAWakESdyARcyIRakEHdyAGIBQgE2pBEncgEnMiEmpBB3cgFSALakENdyAPcyIUcyICIBJqQQl3IAxzIg8gAmpBDXcgBnMiGHMiBiARakEJdyAIIA0gFCAVakESdyAQcyIQIARqQQd3cyIMIBBqQQl3cyIIcyIVIAZqQQ13IApzIhQgDCAKIA5qQQl3IBNzIhMgCmpBDXcgC3MiGSATakESdyAOcyIKakEHdyAXcyILIApqQQl3IA9zIg4gC2pBDXcgDHMiFyAOakESdyAKcyINIAIgCCAMakENdyAEcyIMIAhqQRJ3IBBzIghqQQd3IBlzIgpqQQd3cyIEIBQgFWpBEncgEXMiECALakEHdyAJIBggD2pBEncgEnMiEWpBB3cgDHMiDCARakEJdyATcyISIAxqQQ13IAlzIg9zIgkgEGpBCXcgCiAIakEJdyAWcyITcyIWIAlqQQ13IAtzIhQgFmpBEncgEHMiEGpBB3cgBiAPIBJqQRJ3IBFzIhFqQQd3IBMgCmpBDXcgAnMiC3MiAiARakEJdyAOcyIOIAJqQQ13IAZzIhhzIgYgEGpBCXcgFSAXIAsgE2pBEncgCHMiCCAMakEHd3MiCyAIakEJd3MiE3MiFSAGakENdyAEcyIXIAsgBCANakEJdyAScyISIARqQQ13IApzIhkgEmpBEncgDXMiBGpBB3cgFHMiCiAEakEJdyAOcyIPIApqQQ13IAtzIhQgD2pBEncgBHMiDSACIBMgC2pBDXcgDHMiDCATakESdyAIcyIIakEHdyAZcyILakEHd3MiBCAXIBVqQRJ3IBBzIhAgCmpBB3cgCSAYIA5qQRJ3IBFzIg5qQQd3IAxzIgwgDmpBCXcgEnMiESAMakENdyAJcyIXcyIJIBBqQQl3IAsgCGpBCXcgFnMiEnMiEyAJakENdyAKcyIYIBNqQRJ3IBBzIhBqQQd3IAYgFyARakESdyAOcyIKakEHdyASIAtqQQ13IAJzIhdzIgIgCmpBCXcgD3MiDiACakENdyAGcyIWcyIGIAkgFiAOakESdyAKcyIWakEHdyAVIBQgFyASakESdyAIcyIIIAxqQQd3cyIKIAhqQQl3cyISIApqQQ13IAxzIg9zIgwgFmpBCXcgBCANakEJdyARcyIRcyIVIAxqQQ13IAlzIhQgFWpBEncgFnMiCWpBB3cgAiAPIBJqQRJ3IAhzIghqQQd3IBEgBGpBDXcgC3MiD3MiCyAIakEJdyATcyITIAtqQQ13IAJzIhdzIhZqNgIEIAAgACgCCCAWIAlqQQl3IAogDyARakESdyANcyIRakEHdyAYcyICIBFqQQl3IA5zIg5zIg9qNgIIIAAgACgCDCAPIBZqQQ13IAZzIg1qNgIMIAAgACgCECAGIBBqQQl3IBJzIhIgDiACakENdyAKcyIYIBcgE2pBEncgCHMiCiAMakEHd3MiCCAKakEJd3MiFiAIakENdyAMcyIMajYCECAAIAAoAgAgDSAPakESdyAJc2o2AgAgACAAKAIUIAwgFmpBEncgCnNqNgIUIAAgACgCGCAIajYCGCAAIAAoAhwgFmo2AhwgACAAKAIgIBIgBmpBDXcgBHMiCSAYIA5qQRJ3IBFzIgYgC2pBB3dzIgogBmpBCXcgFXMiBGo2AiAgACAAKAIkIAQgCmpBDXcgC3MiC2o2AiQgACAAKAIoIAsgBGpBEncgBnNqNgIoIAAgACgCLCAKajYCLCAAIAAoAjAgCSASakESdyAQcyIGIAJqQQd3IBRzIgtqNgIwIAAgACgCNCALIAZqQQl3IBNzIgpqNgI0IAAgACgCOCAKIAtqQQ13IAJzIgJqNgI4IAAgACgCPCACIApqQRJ3IAZzajYCPAtyAwF/AX4CfwJAIAJFDQBBACgCiAgiAyAAIAGtIgQgAyAAQQd0IgUgAmxqIgMgAyAFIAFsaiIGEAIgAkEBRg0AIAJBf2ohASAFIQIDQEEAKAKICCACaiAAIAQgAyAGEAIgAiAFaiECIAFBf2oiAQ0ACwsL";
+var hash$3 = "d96fb75f";
+var wasmJson$3 = {
+ name: name$3,
+ data: data$3,
+ hash: hash$3
+};
+
+function scryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, blockSize, parallelism, hashLength, } = options;
+ const SHA256Hasher = createSHA256();
+ const blockData = yield pbkdf2({
+ password: options.password,
+ salt: options.salt,
+ iterations: 1,
+ hashLength: 128 * blockSize * parallelism,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ const scryptInterface = yield WASMInterface(wasmJson$3, 0);
+ // last block is for storing the temporary vectors
+ const VSize = 128 * blockSize * costFactor;
+ const XYSize = 256 * blockSize;
+ scryptInterface.setMemorySize(blockData.length + VSize + XYSize);
+ scryptInterface.writeMemory(blockData, 0);
+ // mix blocks
+ scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);
+ const expensiveSalt = scryptInterface
+ .getMemory()
+ .subarray(0, 128 * blockSize * parallelism);
+ const outputData = yield pbkdf2({
+ password: options.password,
+ salt: expensiveSalt,
+ iterations: 1,
+ hashLength,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, outputData, hashLength);
+ }
+ // return binary format
+ return outputData;
+ });
+}
+// eslint-disable-next-line no-bitwise
+const isPowerOfTwo = (v) => v && !(v & (v - 1));
+const validateOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {
+ throw new Error('Block size should be a positive number');
+ }
+ if (!Number.isInteger(options.costFactor)
+ || options.costFactor < 2
+ || !isPowerOfTwo(options.costFactor)) {
+ throw new Error('Cost factor should be a power of 2, greater than 1');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Calculates hash using the scrypt password-based key derivation function
+ * @returns Computed hash as a hexadecimal string or as
+ * Uint8Array depending on the outputType option
+ */
+function scrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$1(options);
+ return scryptInternal(options);
+ });
+}
+
+var name$2 = "bcrypt";
+var data$2 = "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";
+var hash$2 = "9f4c7b9e";
+var wasmJson$2 = {
+ name: name$2,
+ data: data$2,
+ hash: hash$2
+};
+
+function bcryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, password, salt } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 16);
+ const shouldEncode = options.outputType === 'encoded' ? 1 : 0;
+ bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);
+ const memory = bcryptInterface.getMemory();
+ if (options.outputType === 'encoded') {
+ return intArrayToString(memory, 60);
+ }
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(24 * 2);
+ return getDigestHex(digestChars, memory, 24);
+ }
+ // return binary format
+ // the data is copied to allow GC of the original memory buffer
+ return memory.slice(0, 24);
+ });
+}
+const validateOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {
+ throw new Error('Cost factor should be a number between 4 and 31');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length !== 16) {
+ throw new Error('Salt should be 16 bytes long');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'encoded';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the bcrypt password-hashing function
+ * @returns Computed hash
+ */
+function bcrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions(options);
+ return bcryptInternal(options);
+ });
+}
+const validateHashCharacters = (hash) => {
+ if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) {
+ return false;
+ }
+ if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {
+ return false;
+ }
+ if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {
+ return false;
+ }
+ return true;
+};
+const validateVerifyOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+ if (options.hash.length !== 60) {
+ throw new Error('Hash should be 60 bytes long');
+ }
+ if (!validateHashCharacters(options.hash)) {
+ throw new Error('Invalid hash');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+};
+/**
+ * Verifies password using bcrypt password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function bcryptVerify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions(options);
+ const { hash, password } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 60);
+ return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);
+ });
+}
+
+var name$1 = "whirlpool";
+var data$1 = "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";
+var hash$1 = "358808f8";
+var wasmJson$1 = {
+ name: name$1,
+ data: data$1,
+ hash: hash$1
+};
+
+const mutex$1 = new Mutex();
+let wasmCache$1 = null;
+/**
+ * Calculates Whirlpool hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function whirlpool(data) {
+ if (wasmCache$1 === null) {
+ return lockedCreate(mutex$1, wasmJson$1, 64)
+ .then((wasm) => {
+ wasmCache$1 = wasm;
+ return wasmCache$1.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$1.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Whirlpool hash instance
+ */
+function createWhirlpool() {
+ return WASMInterface(wasmJson$1, 64).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name = "sm3";
+var data = "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";
+var hash = "6e6f46ad";
+var wasmJson = {
+ name: name,
+ data: data,
+ hash: hash
+};
+
+const mutex = new Mutex();
+let wasmCache = null;
+/**
+ * Calculates SM3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sm3(data) {
+ if (wasmCache === null) {
+ return lockedCreate(mutex, wasmJson, 32)
+ .then((wasm) => {
+ wasmCache = wasm;
+ return wasmCache.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SM3 hash instance
+ */
+function createSM3() {
+ return WASMInterface(wasmJson, 32).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+export { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc32c, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC32C, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 };
diff --git a/packages/pouchdb-lib/lib/index.esm-9293e8de.js b/packages/pouchdb-lib/lib/index.esm-9293e8de.js
new file mode 100644
index 0000000000..46e054cac7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/index.esm-9293e8de.js
@@ -0,0 +1,2416 @@
+/*!
+ * hash-wasm (https://www.npmjs.com/package/hash-wasm)
+ * (c) Dani Biro
+ * @license MIT
+ */
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+class Mutex {
+ constructor() {
+ this.mutex = Promise.resolve();
+ }
+ lock() {
+ let begin = () => { };
+ this.mutex = this.mutex.then(() => new Promise(begin));
+ return new Promise((res) => {
+ begin = res;
+ });
+ }
+ dispatch(fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.lock();
+ try {
+ return yield Promise.resolve(fn());
+ }
+ finally {
+ unlock();
+ }
+ });
+ }
+}
+
+/* eslint-disable import/prefer-default-export */
+/* eslint-disable no-bitwise */
+var _a;
+function getGlobal() {
+ if (typeof globalThis !== 'undefined')
+ return globalThis;
+ // eslint-disable-next-line no-restricted-globals
+ if (typeof self !== 'undefined')
+ return self;
+ if (typeof window !== 'undefined')
+ return window;
+ return global;
+}
+const globalObject = getGlobal();
+const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
+const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
+function intArrayToString(arr, len) {
+ return String.fromCharCode(...arr.subarray(0, len));
+}
+function hexCharCodesToInt(a, b) {
+ return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
+}
+function writeHexToUInt8(buf, str) {
+ const size = str.length >> 1;
+ for (let i = 0; i < size; i++) {
+ const index = i << 1;
+ buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
+ }
+}
+function hexStringEqualsUInt8(str, buf) {
+ if (str.length !== buf.length * 2) {
+ return false;
+ }
+ for (let i = 0; i < buf.length; i++) {
+ const strIndex = i << 1;
+ if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
+ return false;
+ }
+ }
+ return true;
+}
+const alpha = 'a'.charCodeAt(0) - 10;
+const digit = '0'.charCodeAt(0);
+function getDigestHex(tmpBuffer, input, hashLength) {
+ let p = 0;
+ /* eslint-disable no-plusplus */
+ for (let i = 0; i < hashLength; i++) {
+ let nibble = input[i] >>> 4;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ nibble = input[i] & 0xF;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ }
+ /* eslint-enable no-plusplus */
+ return String.fromCharCode.apply(null, tmpBuffer);
+}
+const getUInt8Buffer = nodeBuffer !== null
+ ? (data) => {
+ if (typeof data === 'string') {
+ const buf = nodeBuffer.from(data, 'utf8');
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+ }
+ if (nodeBuffer.isBuffer(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.length);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ }
+ : (data) => {
+ if (typeof data === 'string') {
+ return textEncoder.encode(data);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ };
+const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+const base64Lookup = new Uint8Array(256);
+for (let i = 0; i < base64Chars.length; i++) {
+ base64Lookup[base64Chars.charCodeAt(i)] = i;
+}
+function encodeBase64(data, pad = true) {
+ const len = data.length;
+ const extraBytes = len % 3;
+ const parts = [];
+ const len2 = len - extraBytes;
+ for (let i = 0; i < len2; i += 3) {
+ const tmp = ((data[i] << 16) & 0xFF0000)
+ + ((data[i + 1] << 8) & 0xFF00)
+ + (data[i + 2] & 0xFF);
+ const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)
+ + base64Chars.charAt((tmp >> 12) & 0x3F)
+ + base64Chars.charAt((tmp >> 6) & 0x3F)
+ + base64Chars.charAt(tmp & 0x3F);
+ parts.push(triplet);
+ }
+ if (extraBytes === 1) {
+ const tmp = data[len - 1];
+ const a = base64Chars.charAt(tmp >> 2);
+ const b = base64Chars.charAt((tmp << 4) & 0x3F);
+ parts.push(`${a}${b}`);
+ if (pad) {
+ parts.push('==');
+ }
+ }
+ else if (extraBytes === 2) {
+ const tmp = (data[len - 2] << 8) + data[len - 1];
+ const a = base64Chars.charAt(tmp >> 10);
+ const b = base64Chars.charAt((tmp >> 4) & 0x3F);
+ const c = base64Chars.charAt((tmp << 2) & 0x3F);
+ parts.push(`${a}${b}${c}`);
+ if (pad) {
+ parts.push('=');
+ }
+ }
+ return parts.join('');
+}
+function getDecodeBase64Length(data) {
+ let bufferLength = Math.floor(data.length * 0.75);
+ const len = data.length;
+ if (data[len - 1] === '=') {
+ bufferLength -= 1;
+ if (data[len - 2] === '=') {
+ bufferLength -= 1;
+ }
+ }
+ return bufferLength;
+}
+function decodeBase64(data) {
+ const bufferLength = getDecodeBase64Length(data);
+ const len = data.length;
+ const bytes = new Uint8Array(bufferLength);
+ let p = 0;
+ for (let i = 0; i < len; i += 4) {
+ const encoded1 = base64Lookup[data.charCodeAt(i)];
+ const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
+ const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
+ const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
+ bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
+ p += 1;
+ bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
+ p += 1;
+ bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
+ p += 1;
+ }
+ return bytes;
+}
+
+const MAX_HEAP = 16 * 1024;
+const WASM_FUNC_HASH_LENGTH = 4;
+const wasmMutex = new Mutex();
+const wasmModuleCache = new Map();
+function WASMInterface(binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let wasmInstance = null;
+ let memoryView = null;
+ let initialized = false;
+ if (typeof WebAssembly === 'undefined') {
+ throw new Error('WebAssembly is not supported in this environment!');
+ }
+ const writeMemory = (data, offset = 0) => {
+ memoryView.set(data, offset);
+ };
+ const getMemory = () => memoryView;
+ const getExports = () => wasmInstance.exports;
+ const setMemorySize = (totalSize) => {
+ wasmInstance.exports.Hash_SetMemorySize(totalSize);
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
+ };
+ const getStateSize = () => {
+ const view = new DataView(wasmInstance.exports.memory.buffer);
+ const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
+ return stateSize;
+ };
+ const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmModuleCache.has(binary.name)) {
+ const asm = decodeBase64(binary.data);
+ const promise = WebAssembly.compile(asm);
+ wasmModuleCache.set(binary.name, promise);
+ }
+ const module = yield wasmModuleCache.get(binary.name);
+ wasmInstance = yield WebAssembly.instantiate(module, {
+ // env: {
+ // emscripten_memcpy_big: (dest, src, num) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // memView.set(memView.subarray(src, src + num), dest);
+ // },
+ // print_memory: (offset, len) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // console.log('print_int32', memView.subarray(offset, offset + len));
+ // },
+ // },
+ });
+ // wasmInstance.exports._start();
+ }));
+ const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmInstance) {
+ yield loadWASMPromise;
+ }
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
+ });
+ const init = (bits = null) => {
+ initialized = true;
+ wasmInstance.exports.Hash_Init(bits);
+ };
+ const updateUInt8Array = (data) => {
+ let read = 0;
+ while (read < data.length) {
+ const chunk = data.subarray(read, read + MAX_HEAP);
+ read += chunk.length;
+ memoryView.set(chunk);
+ wasmInstance.exports.Hash_Update(chunk.length);
+ }
+ };
+ const update = (data) => {
+ if (!initialized) {
+ throw new Error('update() called before init()');
+ }
+ const Uint8Buffer = getUInt8Buffer(data);
+ updateUInt8Array(Uint8Buffer);
+ };
+ const digestChars = new Uint8Array(hashLength * 2);
+ const digest = (outputType, padding = null) => {
+ if (!initialized) {
+ throw new Error('digest() called before init()');
+ }
+ initialized = false;
+ wasmInstance.exports.Hash_Final(padding);
+ if (outputType === 'binary') {
+ // the data is copied to allow GC of the original memory object
+ return memoryView.slice(0, hashLength);
+ }
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ const save = () => {
+ if (!initialized) {
+ throw new Error('save() can only be called after init() and before digest()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
+ // prefix is 4 bytes from SHA1 hash of the WASM binary
+ // it is used to detect incompatible internal states between different versions of hash-wasm
+ const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
+ writeHexToUInt8(prefixedState, binary.hash);
+ prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
+ return prefixedState;
+ };
+ const load = (state) => {
+ if (!(state instanceof Uint8Array)) {
+ throw new Error('load() expects an Uint8Array generated by save()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ if (state.length !== overallLength) {
+ throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
+ }
+ if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
+ throw new Error('This state was written by an incompatible hash implementation');
+ }
+ const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
+ new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
+ initialized = true;
+ };
+ const isDataShort = (data) => {
+ if (typeof data === 'string') {
+ // worst case is 4 bytes / char
+ return data.length < MAX_HEAP / 4;
+ }
+ return data.byteLength < MAX_HEAP;
+ };
+ let canSimplify = isDataShort;
+ switch (binary.name) {
+ case 'argon2':
+ case 'scrypt':
+ canSimplify = () => true;
+ break;
+ case 'blake2b':
+ case 'blake2s':
+ // if there is a key at blake2 then cannot simplify
+ canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
+ break;
+ case 'blake3':
+ // if there is a key at blake3 then cannot simplify
+ canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
+ break;
+ case 'xxhash64': // cannot simplify
+ case 'xxhash3':
+ case 'xxhash128':
+ canSimplify = () => false;
+ break;
+ }
+ // shorthand for (init + update + digest) for better performance
+ const calculate = (data, initParam = null, digestParam = null) => {
+ if (!canSimplify(data, initParam)) {
+ init(initParam);
+ update(data);
+ return digest('hex', digestParam);
+ }
+ const buffer = getUInt8Buffer(data);
+ memoryView.set(buffer);
+ wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ yield setupInterface();
+ return {
+ getMemory,
+ writeMemory,
+ getExports,
+ setMemorySize,
+ init,
+ update,
+ digest,
+ save,
+ load,
+ calculate,
+ hashLength,
+ };
+ });
+}
+
+var name$k = "adler32";
+var data$k = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgQFAXABAQEFBAEBAgIGDgJ/AUGAiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCoAIBgUAQYAJCwoAQQBBATYChAgL9gYBBn9BACgChAgiAUH//wNxIQIgAUEQdiEDAkACQCAAQQFHDQAgAkEALQCACWoiAUGPgHxqIAEgAUHw/wNLGyIBIANqIgRBEHQiBUGAgDxqIAUgBEHw/wNLGyABciEBDAELAkACQAJAAkACQCAAQRBJDQBBgAkhBiAAQbArSQ0BQYAJIQYDQEEAIQUDQCAGIAVqIgEoAgAiBEH/AXEgAmoiAiADaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEEaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiICaiACIAFBCGooAgAiBEH/AXFqIgJqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiBGogBCABQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBUEQaiIFQbArRw0ACyADQfH/A3AhAyACQfH/A3AhAiAGQbAraiEGIABB0FRqIgBBrytLDQALIABFDQQgAEEPSw0BDAILAkAgAEUNAEEAIQEDQCACIAFBgAlqLQAAaiICIANqIQMgACABQQFqIgFHDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCwNAIAIgBi0AAGoiAiADaiEDIAZBAWohBiAAQX9qIgANAAsLIANB8f8DcCEDIAJB8f8DcCECCyACIANBEHRyIQELQQAgATYChAgLMgEBf0EAQQAoAoQIIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBQBBhAgLPABBAEEBNgKECCAAEAJBAEEAKAKECCIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA";
+var hash$k = "321174b4";
+var wasmJson$k = {
+ name: name$k,
+ data: data$k,
+ hash: hash$k
+};
+
+function lockedCreate(mutex, binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield mutex.lock();
+ const wasm = yield WASMInterface(binary, hashLength);
+ unlock();
+ return wasm;
+ });
+}
+
+const mutex$l = new Mutex();
+let wasmCache$l = null;
+/**
+ * Calculates Adler-32 hash. The resulting 32-bit hash is stored in
+ * network byte order (big-endian).
+ *
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function adler32(data) {
+ if (wasmCache$l === null) {
+ return lockedCreate(mutex$l, wasmJson$k, 4)
+ .then((wasm) => {
+ wasmCache$l = wasm;
+ return wasmCache$l.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$l.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Adler-32 hash instance
+ */
+function createAdler32() {
+ return WASMInterface(wasmJson$k, 4).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$j = "blake2b";
+var data$j = "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";
+var hash$j = "68afc9cf";
+var wasmJson$j = {
+ name: name$j,
+ data: data$j,
+ hash: hash$j
+};
+
+const mutex$k = new Mutex();
+let wasmCache$k = null;
+function validateBits$4(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 512');
+ }
+ return null;
+}
+function getInitParam$1(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2b hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2b(data, bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {
+ return lockedCreate(mutex$k, wasmJson$j, hashLength)
+ .then((wasm) => {
+ wasmCache$k = wasm;
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ return wasmCache$k.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$k.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2b hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ */
+function createBLAKE2b(bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$j, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$i = "argon2";
+var data$i = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQEBQFwAQEBBQYBAQKAgAIGCAF/AUGQqAQLB0EEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEOSGFzaF9DYWxjdWxhdGUABArXMwVbAQF/QQAhAQJAIABBACgCgAhrIgBFDQACQCAAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wEhAQwBC0EAIQFBAEEAKQOACCAAQRB0rXw3A4AICyABQRh0QRh1C2oBAn8CQEEAKAKICCIADQBBAD8AQRB0IgA2AogIQYCAIEEAKAKACGsiAUUNAAJAIAFBEHYgAUGAgHxxIAFJaiIAQABBf0cNAEEADwtBAEEAKQOACCAAQRB0rXw3A4AIQQAoAogIIQALIAALnA8BA34gACAEKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgAiAGKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAyAHKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgASAGKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAiAHKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwALhxoBAX9BACEEQQAgAikDACABKQMAhTcDkAhBACACKQMIIAEpAwiFNwOYCEEAIAIpAxAgASkDEIU3A6AIQQAgAikDGCABKQMYhTcDqAhBACACKQMgIAEpAyCFNwOwCEEAIAIpAyggASkDKIU3A7gIQQAgAikDMCABKQMwhTcDwAhBACACKQM4IAEpAziFNwPICEEAIAIpA0AgASkDQIU3A9AIQQAgAikDSCABKQNIhTcD2AhBACACKQNQIAEpA1CFNwPgCEEAIAIpA1ggASkDWIU3A+gIQQAgAikDYCABKQNghTcD8AhBACACKQNoIAEpA2iFNwP4CEEAIAIpA3AgASkDcIU3A4AJQQAgAikDeCABKQN4hTcDiAlBACACKQOAASABKQOAAYU3A5AJQQAgAikDiAEgASkDiAGFNwOYCUEAIAIpA5ABIAEpA5ABhTcDoAlBACACKQOYASABKQOYAYU3A6gJQQAgAikDoAEgASkDoAGFNwOwCUEAIAIpA6gBIAEpA6gBhTcDuAlB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";
+var hash$i = "59aa4fb4";
+var wasmJson$i = {
+ name: name$i,
+ data: data$i,
+ hash: hash$i
+};
+
+function encodeResult(salt, options, res) {
+ const parameters = [
+ `m=${options.memorySize}`,
+ `t=${options.iterations}`,
+ `p=${options.parallelism}`,
+ ].join(',');
+ return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;
+}
+const uint32View = new DataView(new ArrayBuffer(4));
+function int32LE(x) {
+ uint32View.setInt32(0, x, true);
+ return new Uint8Array(uint32View.buffer);
+}
+function hashFunc(blake512, buf, len) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (len <= 64) {
+ const blake = yield createBLAKE2b(len * 8);
+ blake.update(int32LE(len));
+ blake.update(buf);
+ return blake.digest('binary');
+ }
+ const r = Math.ceil(len / 32) - 2;
+ const ret = new Uint8Array(len);
+ blake512.init();
+ blake512.update(int32LE(len));
+ blake512.update(buf);
+ let vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), 0);
+ for (let i = 1; i < r; i++) {
+ blake512.init();
+ blake512.update(vp);
+ vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), i * 32);
+ }
+ const partialBytesNeeded = len - 32 * r;
+ let blakeSmall;
+ if (partialBytesNeeded === 64) {
+ blakeSmall = blake512;
+ blakeSmall.init();
+ }
+ else {
+ blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);
+ }
+ blakeSmall.update(vp);
+ vp = blakeSmall.digest('binary');
+ ret.set(vp.subarray(0, partialBytesNeeded), r * 32);
+ return ret;
+ });
+}
+function getHashType(type) {
+ switch (type) {
+ case 'd':
+ return 0;
+ case 'i':
+ return 1;
+ default:
+ return 2;
+ }
+}
+function argon2Internal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { parallelism, iterations, hashLength } = options;
+ const password = getUInt8Buffer(options.password);
+ const salt = getUInt8Buffer(options.salt);
+ const version = 0x13;
+ const hashType = getHashType(options.hashType);
+ const { memorySize } = options; // in KB
+ const [argon2Interface, blake512] = yield Promise.all([
+ WASMInterface(wasmJson$i, 1024),
+ createBLAKE2b(512),
+ ]);
+ // last block is for storing the init vector
+ argon2Interface.setMemorySize(memorySize * 1024 + 1024);
+ const initVector = new Uint8Array(24);
+ const initVectorView = new DataView(initVector.buffer);
+ initVectorView.setInt32(0, parallelism, true);
+ initVectorView.setInt32(4, hashLength, true);
+ initVectorView.setInt32(8, memorySize, true);
+ initVectorView.setInt32(12, iterations, true);
+ initVectorView.setInt32(16, version, true);
+ initVectorView.setInt32(20, hashType, true);
+ argon2Interface.writeMemory(initVector, memorySize * 1024);
+ blake512.init();
+ blake512.update(initVector);
+ blake512.update(int32LE(password.length));
+ blake512.update(password);
+ blake512.update(int32LE(salt.length));
+ blake512.update(salt);
+ blake512.update(int32LE(0)); // key length + key
+ blake512.update(int32LE(0)); // associatedData length + associatedData
+ const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane
+ const lanes = segments * 4;
+ const param = new Uint8Array(72);
+ const H0 = blake512.digest('binary');
+ param.set(H0);
+ for (let lane = 0; lane < parallelism; lane++) {
+ param.set(int32LE(0), 64);
+ param.set(int32LE(lane), 68);
+ let position = lane * lanes;
+ let chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ position += 1;
+ param.set(int32LE(1), 64);
+ chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ }
+ const C = new Uint8Array(1024);
+ writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));
+ const res = yield hashFunc(blake512, C, hashLength);
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, res, hashLength);
+ }
+ if (options.outputType === 'encoded') {
+ return encodeResult(salt, options, res);
+ }
+ // return binary format
+ return res;
+ });
+}
+const validateOptions$3 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.password) {
+ throw new Error('Password must be specified');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password must be specified');
+ }
+ if (!options.salt) {
+ throw new Error('Salt must be specified');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length < 8) {
+ throw new Error('Salt should be at least 8 bytes long');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {
+ throw new Error('Hash length should be at least 4 bytes.');
+ }
+ if (!Number.isInteger(options.memorySize)) {
+ throw new Error('Memory size should be specified.');
+ }
+ if (options.memorySize < 8 * options.parallelism) {
+ throw new Error('Memory size should be at least 8 * parallelism.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the argon2i password-hashing function
+ * @returns Computed hash
+ */
+function argon2i(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));
+ });
+}
+/**
+ * Calculates hash using the argon2id password-hashing function
+ * @returns Computed hash
+ */
+function argon2id(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));
+ });
+}
+/**
+ * Calculates hash using the argon2d password-hashing function
+ * @returns Computed hash
+ */
+function argon2d(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));
+ });
+}
+const getHashParameters = (password, encoded) => {
+ const regex = /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/;
+ const match = encoded.match(regex);
+ if (!match) {
+ throw new Error('Invalid hash');
+ }
+ const [, hashType, version, parameters, salt, hash] = match;
+ if (version !== '19') {
+ throw new Error(`Unsupported version: ${version}`);
+ }
+ const parsedParameters = {};
+ const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };
+ parameters.split(',').forEach((x) => {
+ const [n, v] = x.split('=');
+ parsedParameters[paramMap[n]] = parseInt(v, 10);
+ });
+ return Object.assign(Object.assign({}, parsedParameters), { password, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });
+};
+const validateVerifyOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+};
+/**
+ * Verifies password using the argon2 password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function argon2Verify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions$1(options);
+ const params = getHashParameters(options.password, options.hash);
+ validateOptions$3(params);
+ const hashStart = options.hash.lastIndexOf('$') + 1;
+ const result = yield argon2Internal(params);
+ return result.substring(hashStart) === options.hash.substring(hashStart);
+ });
+}
+
+var name$h = "blake2s";
+var data$h = "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";
+var hash$h = "0f570f49";
+var wasmJson$h = {
+ name: name$h,
+ data: data$h,
+ hash: hash$h
+};
+
+const mutex$j = new Mutex();
+let wasmCache$j = null;
+function validateBits$3(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 256');
+ }
+ return null;
+}
+function getInitParam(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2s hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2s(data, bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {
+ return lockedCreate(mutex$j, wasmJson$h, hashLength)
+ .then((wasm) => {
+ wasmCache$j = wasm;
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ return wasmCache$j.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$j.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2s hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ */
+function createBLAKE2s(bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$h, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$g = "blake3";
+var data$g = "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FWogFCAfc0EZdyIVaiIUIBhqIB0gFHNBEHciFCAlaiIYIBVzQRR3IhVqIhkgFHNBGHciFCAYaiIYaiIdICBzQRR3Ih9qIiA2AgAgACAXICQgHHNBGHciHCAeaiIeIBtzQRl3IhtqIAFqIgEgFmogASAUc0EQdyIBICtqIhQgG3NBFHciFmoiFyABc0EYdyIBNgI4IAAgGCAVc0EZdyIVIC5qIANqIgMgE2ogAyAcc0EQdyIDIAIgImoiAmoiIiAVc0EUdyIVaiITNgIEIAAgASAUaiIBNgIkIAAgAiAFc0EZdyICIBlqICFqIgUgGmogBSAnc0EQdyIFIB5qIhQgAnNBFHciAmoiGjYCCCAAICAgEnNBGHciEiAdaiIhNgIoIAAgEyADc0EYdyIDNgIwIAAgASAWc0EZdzYCECAAIBogBXNBGHciATYCNCAAICEgH3NBGXc2AhQgACABIBRqIgE2AiAgACADICJqIgUgFXNBGXc2AhggACASNgI8IAAgASACc0EZdzYCHCAAIBc2AgwgACAFNgIsC7cDAwR/A34FfyMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NACABQShqIQQDQCABQQApA4CJASIANwMAIAFBACkDiIkBIgU3AwggAUEAKQOQiQEiBjcDECABQQApA5iJASIHNwMYIAEgA0EFdCIDQdGJAWoiCCkDADcDKCABIANB2YkBaiIJKQMANwMwIAEgA0HhiQFqIgopAwA3AzggASADQemJAWoiCykDADcDQEEALQCKigEhDCABQcAAOgBoIAEgDEEEciIMOgBpIAFCADcDICABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCABIANBiYoBaikDADcDYCABIAc3A4gBIAEgBjcDgAEgASAFNwN4IAEgADcDcCABQZABaiABQfAAaiAEQcAAQgAgDBADIAsgASkDyAEgASkDqAGFNwMAIAogASkDwAEgASkDoAGFNwMAIAkgASkDuAEgASkDmAGFNwMAIAggASkDsAEgASkDkAGFNwMAQQBBAC0AkIoBQX9qIgM6AJCKASACIANB/wFxIgNJDQALCyABQdABaiQAC/oLBAR/BH4GfwF+IwBB0AJrIgUkAAJAAkAgAUGACEsNAEEAIQYgASEHQQAhCAJAIAFB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IQwDQCABQbABaiABIAsgCUH/AXEgCCACQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASAGIAEpA+gBIg+FNwOoASABIAUgDoU3A6ABIAEgBCANhTcDmAEgASADIAEpA9ABIg2FNwOQASABIA8gASkDyAGFNwOIASAAQcAAIABBwABJGyIQQX9qIQkgASANIAEpA7ABhSINNwNwIA2nIREgCiEHIAwhAgJAA0AgAiAROgAAIAlFDQEgCUF/aiEJIAJBAWohAiAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQIgDCAQaiEMIAhCAXwhCCABKQMIIQQgASkDACEDIAEpAxghBiABKQMQIQUgAS0AaSECIAEtAGghCQwACwsCQAJAAkBBAC0AiYoBIglBBnRBAEEALQCIigEiDGtGDQAgAUHgAGpBACkDgIoBNwMAIAFB2ABqQQApA/iJATcDACABQdAAakEAKQPwiQE3AwAgAUHIAGpBACkD6IkBNwMAIAFBwABqQQApA+CJATcDACABQThqQQApA9iJATcDACABQTBqQQApA9CJATcDACABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIg03AxggAUEAKQOwiQEiDjcDECABQQApA6iJASIPNwMIIAFBACkDoIkBIgM3AwBBAC0AiooBIQcgAUHuAGogAUG0AWovAQA7AQAgASABKAGwATYBaiABIAw6AGggASAHIAlFckECciIJOgBpDAELIAFB4ABqIAJBfmoiAkEFdCIJQcmKAWopAwA3AwAgAUHYAGogCUHBigFqKQMANwMAIAFB0ABqIAlBuYoBaikDADcDACABQcgAaiAJQbGKAWopAwA3AwBBwAAhDCABQcAAaiAJQamKAWopAwA3AwAgAUE4aiAJQaGKAWopAwA3AwAgAUEwaiAJQZmKAWopAwA3AwBCACEIIAFCADcDICABQQApA5iJASINNwMYIAFBACkDkIkBIg43AxAgAUEAKQOIiQEiDzcDCCABQQApA4CJASIDNwMAIAEgCUGRigFqKQMANwMoQQAtAIqKASEJIAFB7gBqIAFBsAFqQQRqLwEAOwEAIAEgASgBsAE2AWogASAJQQRyIgk6AGkgAUHAADoAaCACRQ0BCyACQX9qIgdBBXQiEUGRigFqKQMAIQQgEUGZigFqKQMAIQUgEUGhigFqKQMAIQYgEUGpigFqKQMAIRIgASANNwOIASABIA43A4ABIAEgDzcDeCABIAM3A3AgAUGwAWogAUHwAGogAUEoaiIQIAwgCCAJQf8BcRADIAFBwAA6AGggASASNwNAIAEgBjcDOCABIAU3AzAgASAENwMoIAFCADcDICABQQApA5iJASIINwMYIAFBACkDkIkBIg03AxAgAUEAKQOIiQEiDjcDCCABQQApA4CJASIPNwMAIAFBAC0AiooBQQRyIgk6AGkgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAUHuAGogAUGwAWpBBGoiDC8BADsBACABIAEoAbABNgFqIAdFDQAgAUHqAGohESACQQV0QemJAWohAgNAIAJBaGopAwAhAyACQXBqKQMAIQQgAkF4aikDACEFIAIpAwAhBiABIAg3A4gBIAEgDTcDgAEgASAONwN4IAEgDzcDcCABQbABaiABQfAAaiAQQcAAQgAgCUH/AXEQAyABQcAAOgBoIAEgBjcDQCABIAU3AzggASAENwMwIAEgAzcDKCABQgA3AyAgAUEAKQOYiQEiCDcDGCABQQApA5CJASINNwMQIAFBACkDiIkBIg43AwggAUEAKQOAiQEiDzcDACABQQAtAIqKAUEEciIJOgBpIAEgASkD6AEgASkDyAGFNwNgIAEgASkD4AEgASkDwAGFNwNYIAEgASkD2AEgASkDuAGFNwNQIAEgASkD0AEgASkDsAGFNwNIIBFBBGogDC8BADsBACARIAEoAbABNgEAIAJBYGohAiAHQX9qIgcNAAsLIAFB8ABqQQFyIQogAUEoaiELQgAhCEGACSEMQcAAIQIDQCABQbABaiABIAsgAkH/AXEgCCAJQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASABKQPoASIPIAEpA8gBhTcDiAEgASABKQMAIAEpA9ABIgOFNwOQASABIA0gASkDCIU3A5gBIAEgDiABKQMQhTcDoAEgASADIAEpA7ABhSINNwNwIAEgDyABKQMYhTcDqAEgAEHAACAAQcAASRsiEEF/aiECIA2nIREgCiEHIAwhCQJAA0AgCSAROgAAIAJFDQEgAkF/aiECIAlBAWohCSAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQEgDCAQaiEMIAhCAXwhCCABLQBpIQkgAS0AaCECDAALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABABCwYAIAAQBgsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAEgAhAGCwsLAQBBgAgLBHgHAAA=";
+var hash$g = "e8655383";
+var wasmJson$g = {
+ name: name$g,
+ data: data$g,
+ hash: hash$g
+};
+
+const mutex$i = new Mutex();
+let wasmCache$i = null;
+function validateBits$2(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ...');
+ }
+ return null;
+}
+/**
+ * Calculates BLAKE3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake3(data, bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const hashLength = bits / 8;
+ const digestParam = hashLength;
+ if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {
+ return lockedCreate(mutex$i, wasmJson$g, hashLength)
+ .then((wasm) => {
+ wasmCache$i = wasm;
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ return wasmCache$i.calculate(data, initParam, digestParam);
+ });
+ }
+ try {
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$i.calculate(data, initParam, digestParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE3 hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ */
+function createBLAKE3(bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const outputSize = bits / 8;
+ const digestParam = outputSize;
+ return WASMInterface(wasmJson$g, outputSize).then((wasm) => {
+ if (initParam === 32) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam === 32
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, digestParam),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$f = "crc32";
+var data$f = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwQFAXABAQEFBAEBAgIGDgJ/AUGQyQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAILSGFzaF9VcGRhdGUAAwpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCq0HBwUAQYAJC8MDAQN/QYCJASEBQQAhAgNAIAFBAEEAQQBBAEEAQQBBAEEAIAJBAXFrIABxIAJBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzNgIAIAFBBGohASACQQFqIgJBgAJHDQALQQAhAANAIABBhJEBaiAAQYSJAWooAgAiAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhJkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEoQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYSpAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhLEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEuQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYTBAWogAkH/AXFBAnRBgIkBaigCACACQQh2czYCACAAQQRqIgBB/AdHDQALCycAAkBBACgCgMkBIABGDQAgABABQQAgADYCgMkBC0EAQQA2AoTJAQuhAgEDf0EAKAKEyQFBf3MhAUGACSECAkAgAEEISQ0AQYAJIQIDQCACQQRqKAIAIgNBDnZB/AdxQYCRAWooAgAgA0EWdkH8B3FBgIkBaigCAHMgA0EGdkH8B3FBgJkBaigCAHMgA0H/AXFBAnRBgKEBaigCAHMgAigCACABcyIBQRZ2QfwHcUGAqQFqKAIAcyABQQ52QfwHcUGAsQFqKAIAcyABQQZ2QfwHcUGAuQFqKAIAcyABQf8BcUECdEGAwQFqKAIAcyEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAANAIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiIADQALC0EAIAFBf3M2AoTJAQszAQF/QQBBACgChMkBIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBgBBhMkBC1oAAkBBACgCgMkBIAFGDQAgARABQQAgATYCgMkBC0EAQQA2AoTJASAAEANBAEEAKAKEyQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKACQsLCwEAQYAICwQEAAAA";
+var hash$f = "749723dc";
+var wasmJson$f = {
+ name: name$f,
+ data: data$f,
+ hash: hash$f
+};
+
+const mutex$h = new Mutex();
+let wasmCache$h = null;
+/**
+ * Calculates CRC-32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32(data) {
+ if (wasmCache$h === null) {
+ return lockedCreate(mutex$h, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$h = wasm;
+ return wasmCache$h.calculate(data, 0xEDB88320);
+ });
+ }
+ try {
+ const hash = wasmCache$h.calculate(data, 0xEDB88320);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32 hash instance
+ */
+function createCRC32() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0xEDB88320);
+ const obj = {
+ init: () => { wasm.init(0xEDB88320); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+const mutex$g = new Mutex();
+let wasmCache$g = null;
+/**
+ * Calculates CRC-32C hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32c(data) {
+ if (wasmCache$g === null) {
+ return lockedCreate(mutex$g, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$g = wasm;
+ return wasmCache$g.calculate(data, 0x82F63B78);
+ });
+ }
+ try {
+ const hash = wasmCache$g.calculate(data, 0x82F63B78);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32C hash instance
+ */
+function createCRC32C() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0x82F63B78);
+ const obj = {
+ init: () => { wasm.init(0x82F63B78); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$e = "md4";
+var data$e = "AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqXEQcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwuYCwEXf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBHGooAgAiBiAAQRRqKAIAIgcgAEEYaigCACIIIABBEGooAgAiCSAAQSxqKAIAIgogAEEoaigCACILIABBJGooAgAiDCAAQSBqKAIAIg0gCyAIIABBCGooAgAiDiADaiAAQQRqKAIAIg8gAmogBCADIAJzcSACcyAFaiAAKAIAIhBqQQN3IhEgBCADc3EgA3NqQQd3IhIgESAEc3EgBHNqQQt3IhNqIBIgB2ogESAJaiAAQQxqKAIAIhQgBGogEyASIBFzcSARc2pBE3ciESATIBJzcSASc2pBA3ciEiARIBNzcSATc2pBB3ciEyASIBFzcSARc2pBC3ciFWogEyAMaiASIA1qIBEgBmogFSATIBJzcSASc2pBE3ciESAVIBNzcSATc2pBA3ciEiARIBVzcSAVc2pBB3ciEyASIBFzcSARc2pBC3ciFSAAQThqKAIAIhZqIBMgAEE0aigCACIXaiASIABBMGooAgAiGGogESAKaiAVIBMgEnNxIBJzakETdyISIBUgE3NxIBNzakEDdyITIBIgFXNxIBVzakEHdyIVIBMgEnNxIBJzakELdyIRaiAJIBVqIBAgE2ogEiAAQTxqKAIAIglqIBEgFSATc3EgE3NqQRN3IhIgESAVcnEgESAVcXJqQZnzidQFakEDdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBBXciESATIBJycSATIBJxcmpBmfOJ1AVqQQl3IhVqIAcgEWogDyATaiAYIBJqIBUgESATcnEgESATcXJqQZnzidQFakENdyISIBUgEXJxIBUgEXFyakGZ84nUBWpBA3ciESASIBVycSASIBVxcmpBmfOJ1AVqQQV3IhMgESAScnEgESAScXJqQZnzidQFakEJdyIVaiAIIBNqIA4gEWogFyASaiAVIBMgEXJxIBMgEXFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogBiATaiAUIBJqIBYgEWogFSATIBJycSATIBJxcmpBmfOJ1AVqQQ13IhEgFSATcnEgFSATcXJqQZnzidQFakEDdyISIBEgFXJxIBEgFXFyakGZ84nUBWpBBXciEyASIBFycSASIBFxcmpBmfOJ1AVqQQl3IhVqIBAgEmogCSARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciBiAVcyISIBNzakGh1+f2BmpBA3ciESAGcyANIBNqIBIgEXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA4gEWogEyAScyAYIAZqIBIgEXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgCyASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAPIBVqIBMgEnMgFiARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAwgEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogFCAVaiATIBJzIBcgEWogEiAVcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyAKIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhMgA2ohAyAJIBFqIBIgFXMgE3NqQaHX5/YGakEPdyAEaiEEIBIgAmohAiAVIAVqIQUgAEHAAGohACABQUBqIgENAAtBACACNgKUiQFBACADNgKQiQFBACAENgKMiQFBACAFNgKIiQEgAAuhAgEDf0EAKAKAiQEiAEE/cSIBQZiJAWpBgAE6AAACQAJAAkAgAUE/cyICQQdLDQACQCACRQ0AIAFBmYkBaiEAA0AgAEEAOgAAIABBAWohACACQX9qIgINAAsLQcAAIQJBmIkBQcAAEAMaQQAhAAwBCyACQQhGDQEgAUEBaiEACyAAQY+JAWohAQNAIAEgAmpBADoAACACQXdqIQAgAkF/aiECIABBAEoNAAtBACgCgIkBIQALQQAgAEEVdjoA04kBQQAgAEENdjoA0okBQQAgAEEFdjoA0YkBQQAgAEEDdCICOgDQiQFBACACNgKAiQFBAEEAKAKEiQE2AtSJAUGYiQFBwAAQAxpBAEEAKQKIiQE3A4AJQQBBACkCkIkBNwOICQsGAEGAiQELMwBBAEL+uevF6Y6VmRA3ApCJAUEAQoHGlLqW8ermbzcCiIkBQQBCADcCgIkBIAAQAhAECwsLAQBBgAgLBJgAAAA=";
+var hash$e = "1bf01052";
+var wasmJson$e = {
+ name: name$e,
+ data: data$e,
+ hash: hash$e
+};
+
+const mutex$f = new Mutex();
+let wasmCache$f = null;
+/**
+ * Calculates MD4 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md4(data) {
+ if (wasmCache$f === null) {
+ return lockedCreate(mutex$f, wasmJson$e, 16)
+ .then((wasm) => {
+ wasmCache$f = wasm;
+ return wasmCache$f.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$f.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD4 hash instance
+ */
+function createMD4() {
+ return WASMInterface(wasmJson$e, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$d = "md5";
+var data$d = "AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqzFgcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwu0EAEZf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBCGooAgAiBiAAQRhqKAIAIgcgAEEoaigCACIIIABBOGooAgAiCSAAQTxqKAIAIgogAEEMaigCACILIABBHGooAgAiDCAAQSxqKAIAIg0gDCALIAogDSAJIAggByADIAZqIAIgAEEEaigCACIOaiAFIAQgAiADc3EgAnNqIAAoAgAiD2pB+Miqu31qQQd3IARqIhAgBCADc3EgA3NqQdbunsZ+akEMdyAQaiIRIBAgBHNxIARzakHb4YGhAmpBEXcgEWoiEmogAEEUaigCACITIBFqIABBEGooAgAiFCAQaiAEIAtqIBIgESAQc3EgEHNqQe6d9418akEWdyASaiIQIBIgEXNxIBFzakGvn/Crf2pBB3cgEGoiESAQIBJzcSASc2pBqoyfvARqQQx3IBFqIhIgESAQc3EgEHNqQZOMwcF6akERdyASaiIVaiAAQSRqKAIAIhYgEmogAEEgaigCACIXIBFqIAwgEGogFSASIBFzcSARc2pBgaqaampBFncgFWoiECAVIBJzcSASc2pB2LGCzAZqQQd3IBBqIhEgECAVc3EgFXNqQa/vk9p4akEMdyARaiISIBEgEHNxIBBzakGxt31qQRF3IBJqIhVqIABBNGooAgAiGCASaiAAQTBqKAIAIhkgEWogDSAQaiAVIBIgEXNxIBFzakG+r/PKeGpBFncgFWoiECAVIBJzcSASc2pBoqLA3AZqQQd3IBBqIhEgECAVc3EgFXNqQZPj4WxqQQx3IBFqIhUgESAQc3EgEHNqQY6H5bN6akERdyAVaiISaiAHIBVqIA4gEWogCiAQaiASIBUgEXNxIBFzakGhkNDNBGpBFncgEmoiECAScyAVcSASc2pB4sr4sH9qQQV3IBBqIhEgEHMgEnEgEHNqQcDmgoJ8akEJdyARaiISIBFzIBBxIBFzakHRtPmyAmpBDncgEmoiFWogCCASaiATIBFqIA8gEGogFSAScyARcSASc2pBqo/bzX5qQRR3IBVqIhAgFXMgEnEgFXNqQd2gvLF9akEFdyAQaiIRIBBzIBVxIBBzakHTqJASakEJdyARaiISIBFzIBBxIBFzakGBzYfFfWpBDncgEmoiFWogCSASaiAWIBFqIBQgEGogFSAScyARcSASc2pByPfPvn5qQRR3IBVqIhAgFXMgEnEgFXNqQeabh48CakEFdyAQaiIRIBBzIBVxIBBzakHWj9yZfGpBCXcgEWoiEiARcyAQcSARc2pBh5vUpn9qQQ53IBJqIhVqIAYgEmogGCARaiAXIBBqIBUgEnMgEXEgEnNqQe2p6KoEakEUdyAVaiIQIBVzIBJxIBVzakGF0o/PempBBXcgEGoiESAQcyAVcSAQc2pB+Me+Z2pBCXcgEWoiEiARcyAQcSARc2pB2YW8uwZqQQ53IBJqIhVqIBcgEmogEyARaiAZIBBqIBUgEnMgEXEgEnNqQYqZqel4akEUdyAVaiIQIBVzIhUgEnNqQcLyaGpBBHcgEGoiESAVc2pBge3Hu3hqQQt3IBFqIhIgEXMiGiAQc2pBosL17AZqQRB3IBJqIhVqIBQgEmogDiARaiAJIBBqIBUgGnNqQYzwlG9qQRd3IBVqIhAgFXMiFSASc2pBxNT7pXpqQQR3IBBqIhEgFXNqQamf+94EakELdyARaiISIBFzIgkgEHNqQeCW7bV/akEQdyASaiIVaiAPIBJqIBggEWogCCAQaiAVIAlzakHw+P71e2pBF3cgFWoiECAVcyIVIBJzakHG/e3EAmpBBHcgEGoiESAVc2pB+s+E1X5qQQt3IBFqIhIgEXMiCCAQc2pBheG8p31qQRB3IBJqIhVqIBkgEmogFiARaiAHIBBqIBUgCHNqQYW6oCRqQRd3IBVqIhEgFXMiECASc2pBuaDTzn1qQQR3IBFqIhIgEHNqQeWz7rZ+akELdyASaiIVIBJzIgcgEXNqQfj5if0BakEQdyAVaiIQaiAMIBVqIA8gEmogBiARaiAQIAdzakHlrLGlfGpBF3cgEGoiESAVQX9zciAQc2pBxMSkoX9qQQZ3IBFqIhIgEEF/c3IgEXNqQZf/q5kEakEKdyASaiIQIBFBf3NyIBJzakGnx9DcempBD3cgEGoiFWogCyAQaiAZIBJqIBMgEWogFSASQX9zciAQc2pBucDOZGpBFXcgFWoiESAQQX9zciAVc2pBw7PtqgZqQQZ3IBFqIhAgFUF/c3IgEXNqQZKZs/h4akEKdyAQaiISIBFBf3NyIBBzakH96L9/akEPdyASaiIVaiAKIBJqIBcgEGogDiARaiAVIBBBf3NyIBJzakHRu5GseGpBFXcgFWoiECASQX9zciAVc2pBz/yh/QZqQQZ3IBBqIhEgFUF/c3IgEHNqQeDNs3FqQQp3IBFqIhIgEEF/c3IgEXNqQZSGhZh6akEPdyASaiIVaiANIBJqIBQgEWogGCAQaiAVIBFBf3NyIBJzakGho6DwBGpBFXcgFWoiECASQX9zciAVc2pBgv3Nun9qQQZ3IBBqIhEgFUF/c3IgEHNqQbXk6+l7akEKdyARaiISIBBBf3NyIBFzakG7pd/WAmpBD3cgEmoiFSAEaiAWIBBqIBUgEUF/c3IgEnNqQZGnm9x+akEVd2ohBCAVIANqIQMgEiACaiECIBEgBWohBSAAQcAAaiEAIAFBQGoiAQ0AC0EAIAI2ApSJAUEAIAM2ApCJAUEAIAQ2AoyJAUEAIAU2AoiJASAAC6ECAQN/QQAoAoCJASIAQT9xIgFBmIkBakGAAToAAAJAAkACQCABQT9zIgJBB0sNAAJAIAJFDQAgAUGZiQFqIQADQCAAQQA6AAAgAEEBaiEAIAJBf2oiAg0ACwtBwAAhAkGYiQFBwAAQAxpBACEADAELIAJBCEYNASABQQFqIQALIABBj4kBaiEBA0AgASACakEAOgAAIAJBd2ohACACQX9qIQIgAEEASg0AC0EAKAKAiQEhAAtBACAAQRV2OgDTiQFBACAAQQ12OgDSiQFBACAAQQV2OgDRiQFBACAAQQN0IgI6ANCJAUEAIAI2AoCJAUEAQQAoAoSJATYC1IkBQZiJAUHAABADGkEAQQApAoiJATcDgAlBAEEAKQKQiQE3A4gJCwYAQYCJAQszAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEgABACEAQLCwsBAEGACAsEmAAAAA==";
+var hash$d = "9b0fac7d";
+var wasmJson$d = {
+ name: name$d,
+ data: data$d,
+ hash: hash$d
+};
+
+const mutex$e = new Mutex();
+let wasmCache$e = null;
+/**
+ * Calculates MD5 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md5(data) {
+ if (wasmCache$e === null) {
+ return lockedCreate(mutex$e, wasmJson$d, 16)
+ .then((wasm) => {
+ wasmCache$e = wasm;
+ return wasmCache$e.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$e.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD5 hash instance
+ */
+function createMD5() {
+ return WASMInterface(wasmJson$d, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$c = "sha1";
+var data$c = "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";
+var hash$c = "40d92e5d";
+var wasmJson$c = {
+ name: name$c,
+ data: data$c,
+ hash: hash$c
+};
+
+const mutex$d = new Mutex();
+let wasmCache$d = null;
+/**
+ * Calculates SHA-1 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha1(data) {
+ if (wasmCache$d === null) {
+ return lockedCreate(mutex$d, wasmJson$c, 20)
+ .then((wasm) => {
+ wasmCache$d = wasm;
+ return wasmCache$d.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$d.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-1 hash instance
+ */
+function createSHA1() {
+ return WASMInterface(wasmJson$c, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+var name$b = "sha3";
+var data$b = "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";
+var hash$b = "ec266d91";
+var wasmJson$b = {
+ name: name$b,
+ data: data$b,
+ hash: hash$b
+};
+
+const mutex$c = new Mutex();
+let wasmCache$c = null;
+function validateBits$1(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates SHA-3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha3(data, bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {
+ return lockedCreate(mutex$c, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$c = wasm;
+ return wasmCache$c.calculate(data, bits, 0x06);
+ });
+ }
+ try {
+ const hash = wasmCache$c.calculate(data, bits, 0x06);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-3 hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createSHA3(bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x06),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+const mutex$b = new Mutex();
+let wasmCache$b = null;
+function validateBits(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates Keccak hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function keccak(data, bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {
+ return lockedCreate(mutex$b, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$b = wasm;
+ return wasmCache$b.calculate(data, bits, 0x01);
+ });
+ }
+ try {
+ const hash = wasmCache$b.calculate(data, bits, 0x01);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Keccak hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createKeccak(bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x01),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$a = "sha256";
+var data$a = "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";
+var hash$a = "817d957e";
+var wasmJson$a = {
+ name: name$a,
+ data: data$a,
+ hash: hash$a
+};
+
+const mutex$a = new Mutex();
+let wasmCache$a = null;
+/**
+ * Calculates SHA-2 (SHA-224) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha224(data) {
+ if (wasmCache$a === null) {
+ return lockedCreate(mutex$a, wasmJson$a, 28)
+ .then((wasm) => {
+ wasmCache$a = wasm;
+ return wasmCache$a.calculate(data, 224);
+ });
+ }
+ try {
+ const hash = wasmCache$a.calculate(data, 224);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-224) hash instance
+ */
+function createSHA224() {
+ return WASMInterface(wasmJson$a, 28).then((wasm) => {
+ wasm.init(224);
+ const obj = {
+ init: () => { wasm.init(224); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 28,
+ };
+ return obj;
+ });
+}
+
+const mutex$9 = new Mutex();
+let wasmCache$9 = null;
+/**
+ * Calculates SHA-2 (SHA-256) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha256(data) {
+ if (wasmCache$9 === null) {
+ return lockedCreate(mutex$9, wasmJson$a, 32)
+ .then((wasm) => {
+ wasmCache$9 = wasm;
+ return wasmCache$9.calculate(data, 256);
+ });
+ }
+ try {
+ const hash = wasmCache$9.calculate(data, 256);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-256) hash instance
+ */
+function createSHA256() {
+ return WASMInterface(wasmJson$a, 32).then((wasm) => {
+ wasm.init(256);
+ const obj = {
+ init: () => { wasm.init(256); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+var name$9 = "sha512";
+var data$9 = "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";
+var hash$9 = "a5d1ca7c";
+var wasmJson$9 = {
+ name: name$9,
+ data: data$9,
+ hash: hash$9
+};
+
+const mutex$8 = new Mutex();
+let wasmCache$8 = null;
+/**
+ * Calculates SHA-2 (SHA-384) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha384(data) {
+ if (wasmCache$8 === null) {
+ return lockedCreate(mutex$8, wasmJson$9, 48)
+ .then((wasm) => {
+ wasmCache$8 = wasm;
+ return wasmCache$8.calculate(data, 384);
+ });
+ }
+ try {
+ const hash = wasmCache$8.calculate(data, 384);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-384) hash instance
+ */
+function createSHA384() {
+ return WASMInterface(wasmJson$9, 48).then((wasm) => {
+ wasm.init(384);
+ const obj = {
+ init: () => { wasm.init(384); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 48,
+ };
+ return obj;
+ });
+}
+
+const mutex$7 = new Mutex();
+let wasmCache$7 = null;
+/**
+ * Calculates SHA-2 (SHA-512) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha512(data) {
+ if (wasmCache$7 === null) {
+ return lockedCreate(mutex$7, wasmJson$9, 64)
+ .then((wasm) => {
+ wasmCache$7 = wasm;
+ return wasmCache$7.calculate(data, 512);
+ });
+ }
+ try {
+ const hash = wasmCache$7.calculate(data, 512);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-512) hash instance
+ */
+function createSHA512() {
+ return WASMInterface(wasmJson$9, 64).then((wasm) => {
+ wasm.init(512);
+ const obj = {
+ init: () => { wasm.init(512); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name$8 = "xxhash32";
+var data$8 = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwcGAAEBAgADBAUBcAEBAQUEAQECAgYOAn8BQbCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKswkGBQBBgAkLTQBBAEIANwOoiQFBACAANgKIiQFBACAAQc+Moo4GajYCjIkBQQAgAEH3lK+veGo2AoSJAUEAIABBqIiNoQJqNgKAiQFBAEEANgKgiQELswUBBn8CQCAARQ0AQQBBACkDqIkBIACtfDcDqIkBAkBBACgCoIkBIgEgAGpBD0sNAEEAIAFBAWo2AqCJASABQZCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCoIkBIgFBAWo2AqCJASABQZCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB8AhqIQMCQAJAIAENAEEAKAKMiQEhAUEAKAKIiQEhBEEAKAKEiQEhBUEAKAKAiQEhBkGACSECDAELQYAJIQICQCABQQ9LDQBBgAkhAgNAIAItAAAhBEEAIAFBAWo2AqCJASABQZCJAWogBDoAACACQQFqIQJBACgCoIkBIgFBEEkNAAsLQQBBACgCkIkBQfeUr694bEEAKAKAiQFqQQ13QbHz3fF5bCIGNgKAiQFBAEEAKAKUiQFB95Svr3hsQQAoAoSJAWpBDXdBsfPd8XlsIgU2AoSJAUEAQQAoApiJAUH3lK+veGxBACgCiIkBakENd0Gx893xeWwiBDYCiIkBQQBBACgCnIkBQfeUr694bEEAKAKMiQFqQQ13QbHz3fF5bCIBNgKMiQELIABBgAlqIQACQCACIANLDQADQCACKAIAQfeUr694bCAGakENd0Gx893xeWwhBiACQQxqKAIAQfeUr694bCABakENd0Gx893xeWwhASACQQhqKAIAQfeUr694bCAEakENd0Gx893xeWwhBCACQQRqKAIAQfeUr694bCAFakENd0Gx893xeWwhBSACQRBqIgIgA00NAAsLQQAgATYCjIkBQQAgBDYCiIkBQQAgBTYChIkBQQAgBjYCgIkBQQAgACACayIBNgKgiQEgAUUNAEEAIQEDQCABQZCJAWogAiABai0AADoAACABQQFqIgFBACgCoIkBSQ0ACwsLzAICAX4Gf0EAKQOoiQEiAKchAQJAAkAgAEIQVA0AQQAoAoSJAUEHd0EAKAKAiQFBAXdqQQAoAoiJAUEMd2pBACgCjIkBQRJ3aiECDAELQQAoAoiJAUGxz9myAWohAgsgAiABaiECQZCJASEBQQAoAqCJASIDQZCJAWohBAJAIANBBEgNAEGQiQEhBQNAIAUoAgBBvdzKlXxsIAJqQRF3Qa/W074CbCECIAVBCGohBiAFQQRqIgEhBSAGIARNDQALCwJAIAEgBEYNACADQZCJAWohBQNAIAEtAABBsc/ZsgFsIAJqQQt3QbHz3fF5bCECIAUgAUEBaiIBRw0ACwtBACACQQ92IAJzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq03A4AJCwYAQYCJAQtTAEEAQgA3A6iJAUEAIAE2AoiJAUEAIAFBz4yijgZqNgKMiQFBACABQfeUr694ajYChIkBQQAgAUGoiI2hAmo2AoCJAUEAQQA2AqCJASAAEAIQAwsLCwEAQYAICwQwAAAA";
+var hash$8 = "5b6a5062";
+var wasmJson$8 = {
+ name: name$8,
+ data: data$8,
+ hash: hash$8
+};
+
+const mutex$6 = new Mutex();
+let wasmCache$6 = null;
+function validateSeed$3(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be a valid 32-bit long unsigned integer.');
+ }
+ return null;
+}
+/**
+ * Calculates xxHash32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash32(data, seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ if (wasmCache$6 === null) {
+ return lockedCreate(mutex$6, wasmJson$8, 4)
+ .then((wasm) => {
+ wasmCache$6 = wasm;
+ return wasmCache$6.calculate(data, seed);
+ });
+ }
+ try {
+ const hash = wasmCache$6.calculate(data, seed);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash32 hash instance
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash32(seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ return WASMInterface(wasmJson$8, 4).then((wasm) => {
+ wasm.init(seed);
+ const obj = {
+ init: () => { wasm.init(seed); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 16,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$7 = "xxhash64";
+var data$7 = "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";
+var hash$7 = "bc315b2a";
+var wasmJson$7 = {
+ name: name$7,
+ data: data$7,
+ hash: hash$7
+};
+
+const mutex$5 = new Mutex();
+let wasmCache$5 = null;
+const seedBuffer$2 = new ArrayBuffer(8);
+function validateSeed$2(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$2(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash64 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash64(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ if (wasmCache$5 === null) {
+ return lockedCreate(mutex$5, wasmJson$7, 8)
+ .then((wasm) => {
+ wasmCache$5 = wasm;
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ return wasmCache$5.calculate(data);
+ });
+ }
+ try {
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ const hash = wasmCache$5.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash64 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash64(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ return WASMInterface(wasmJson$7, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$2(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 32,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$6 = "xxhash3";
+var data$6 = "AGFzbQEAAAABJAZgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAAAYAF/AAMMCwABAgMDAwQFBAAEBAUBcAEBAQUEAQECAgYOAn8BQcCOBQt/AEHACQsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQABgtIYXNoX1VwZGF0ZQAHCkhhc2hfRmluYWwACA1IYXNoX0dldFN0YXRlAAkOSGFzaF9DYWxjdWxhdGUACgpTVEFURV9TSVpFAwEK+joLBQBBgAoL7wMBEH4CQCADRQ0AIAFBOGohASACQThqIQIgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAcgAUFoaikDACIMfCACQXBqKQMAIAFBcGopAwAiDYUiB0IgiCAHQv////8Pg358IQcgCSABQVhqKQMAIg58IAJBYGopAwAgAUFgaikDACIPhSIJQiCIIAlC/////w+DfnwhCSALIAFBSGopAwAiEHwgAkFQaikDACABQVBqKQMAIhGFIgtCIIggC0L/////D4N+fCELIAJBeGopAwAgAUF4aikDACIShSITQiCIIBNC/////w+DfiAEfCABKQMAIhN8IQQgAkFoaikDACAMhSIMQiCIIAxC/////w+DfiAGfCANfCEGIAJBWGopAwAgDoUiDEIgiCAMQv////8Pg34gCHwgD3whCCACQUhqKQMAIBCFIgxCIIggDEL/////D4N+IAp8IBF8IQogBSASfCACKQMAIBOFIgVCIIggBUL/////D4N+fCEFIAFBwABqIQEgAkEIaiECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgAiABKAIAIgdrIgIgBEsNACAAIAMgBSAHQQN0aiACEAEgACAAKQMAIgggBSAGaiIHKQMAhSAIQi+IhUKx893xCX43AwAgACAAKQMIIgggBykDCIUgCEIviIVCsfPd8Ql+NwMIIAAgACkDECIIIAcpAxCFIAhCL4iFQrHz3fEJfjcDECAAIAApAxgiCCAHKQMYhSAIQi+IhUKx893xCX43AxggACAAKQMgIgggBykDIIUgCEIviIVCsfPd8Ql+NwMgIAAgACkDKCIIIAcpAyiFIAhCL4iFQrHz3fEJfjcDKCAAIAApAzAiCCAHKQMwhSAIQi+IhUKx893xCX43AzAgACAAKQM4IgggBykDOIUgCEIviIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgAL3QQBBH4CQCAAQQlJDQBBACkDgIwBIAEpAyAgASkDGIUgAnyFIgNCOIYgA0IohkKAgICAgIDA/wCDhCADQhiGQoCAgICA4D+DIANCCIZCgICAgPAfg4SEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACABKQMQIAEpAwiFIAKnIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq1CIIYgAoV9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQhiJIAOFIANCMYmFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4UPCwJAIABFDQAgASgCBCABKAIAc60gAnwiA0EALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQ8LIAEpAzggAoUgASkDQIUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQuICwQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQgAEEQbSEJAkAgAEGQAUgNACAJQQkgCUEJShtBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iLAUEAIABCvNDI2pvysIBLfDcDgIsBQQBC4OvAtJ7QjpPMACAAfTcD+IoBQQAgAEK4kZii9/6Qko5/fDcD8IoBQQBCgrXB7sf5v7khIAB9NwPoigFBACAAQsvzmffEmfDy+AB8NwPgigFBAELygJGl+vbssx8gAH03A9iKAUEAIABC3qm3y76Q5MtbfDcD0IoBQQBC/IKE5PK+yNYcIAB9NwPIigFBACAAQrj9s8uzhOmlvn98NwPAigELQQBCADcDkI4BQQBCADcDiI4BQQBCADcDgI4BQQAgATYCsI4BQQAgADcDoI4BQQBCsfPd8Qk3A7iKAUEAQsXP2bLx5brqJzcDsIoBQQBC95Svrwg3A6iKAUEAQuPcypX8zvL1hX83A6CKAUEAQvnz3fGZ9pmrFjcDmIoBQQBCz9bTvtLHq9lCNwOQigFBAEKHla+vmLbem55/NwOIigFBAEK93MqVDDcDgIoBQQBCkICAgIAQNwOYjgELwAUBBX9BAEEAKQOQjgEgAK18NwOQjgECQAJAQQAoAoCOASIBIABqIgJBgAJLDQAgAUGAjAFqIQNBgAohBAJAAkAgAEEITw0AIAAhAQwBCyAAIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLIAFFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCABQX9qIgENAAtBACgCgI4BIABqIQIMAQtBgAohAyAAQYAKaiECQQAoArCOASIEQcCKASAEGyEAAkAgAUUNACABQYCMAWohA0GACiEEAkACQEGAAiABayIFQQhPDQAgBSEBDAELIAUhAQNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAFBeGoiAUEHSw0ACwsCQCABRQ0AA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAAQQAoApyOARACQQBBADYCgI4BIAVBgApqIQMLAkAgA0GAAmogAk8NACACQYB+aiEEA0BBgIoBQYiOAUEAKAKYjgEgA0EEIABBACgCnI4BEAIgA0GAAmoiAyAESQ0AC0EAIANBQGopAwA3A8CNAUEAIANBSGopAwA3A8iNAUEAIANBUGopAwA3A9CNAUEAIANBWGopAwA3A9iNAUEAIANBYGopAwA3A+CNAUEAIANBaGopAwA3A+iNAUEAIANBcGopAwA3A/CNAUEAIANBeGopAwA3A/iNAQtBgIwBIQQCQAJAIAIgA2siAkEITw0AIAIhAQwBCyACIQEDQCAEIAMpAwA3AwAgBEEIaiEEIANBCGohAyABQXhqIgFBB0sNAAsLIAFFDQADQCAEIAMtAAA6AAAgBEEBaiEEIANBAWohAyABQX9qIgENAAsLQQAgAjYCgI4BC6oQBQR/AX4Cfwp+An8jACIAIQEgAEGAAWtBQHEiAiQAQQAoArCOASIAQcCKASAAGyEDAkACQEEAKQOQjgEiBELxAVQNACACQQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKATcDMCACQQApA7iKATcDOAJAAkBBACgCgI4BIgVBwABJDQAgAkEAKAKIjgE2AkAgAiACQcAAakEAKAKYjgFBgIwBIAVBf2pBBnYgA0EAKAKcjgEQAiACIAIpAwhBACgCgI4BIgBBwIsBaikDACIEfCADQQAoApyOAWoiBkEBaikDACAAQciLAWopAwAiB4UiCEIgiCAIQv////8Pg358Igk3AwggAiACKQMYIABB0IsBaikDACIIfCAGQRFqKQMAIABB2IsBaikDACIKhSILQiCIIAtC/////w+DfnwiDDcDGCACIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiACKQMAfHwiDTcDACACIAogCCAGQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHwiDjcDECAGQRlqKQMAIQQgAikDICEHIAIgAikDKCAAQeCLAWopAwAiCHwgBkEhaikDACAAQeiLAWopAwAiCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IABB8IsBaikDACIEfCAGQTFqKQMAIABB+IsBaikDACIHhSIIQiCIIAhC/////w+Dfnw3AzggByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAIpAzB8fCEEDAELQcAAIAVrIRECQAJAAkAgBUE4TQ0AQYCOASARayEGIAJBwABqIQUgESEADAELQQAhEiARIQADQCACQcAAaiASaiAFIBJqQcCNAWopAwA3AwAgEkEIaiESIABBeGoiAEEHSw0ACyAFIBJqIgZBwABGDQEgBkHAjQFqIQYgAkHAAGogEmohBQsDQCAFIAYtAAA6AAAgBUEBaiEFIAZBAWohBiAAQX9qIgANAAtBACgCgI4BIQULIAJBwABqIBFqIQZBgIwBIQACQCAFQQhJDQBBgIwBIQADQCAGIAApAwA3AwAgBkEIaiEGIABBCGohACAFQXhqIgVBB0sNAAsLAkAgBUUNAANAIAYgAC0AADoAACAGQQFqIQYgAEEBaiEAIAVBf2oiBQ0ACwsgAiACKQMIIAIpA0AiBHwgA0EAKAKcjgFqIgBBAWopAwAgAikDSCIHhSIIQiCIIAhC/////w+DfnwiCTcDCCACIAIpAxggAikDUCIIfCAAQRFqKQMAIAIpA1giCoUiC0IgiCALQv////8Pg358Igw3AxggAiAHIAQgAEF5aikDAIUiBEIgiCAEQv////8Pg34gAikDAHx8Ig03AwAgAiAKIAggAEEJaikDAIUiBEIgiCAEQv////8Pg34gAikDEHx8Ig43AxAgAEEZaikDACEEIAIpAyAhByACIAIpAyggAikDYCIIfCAAQSFqKQMAIAIpA2giCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IAIpA3AiBHwgAEExaikDACACKQN4IgeFIghCIIggCEL/////D4N+fDcDOCAHIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8IQQLIAIgBDcDMCADKQNDIAIpAziFIgdC/////w+DIgggAykDOyAEhSIEQiCIIgp+IgtC/////w+DIAdCIIgiByAEQv////8PgyIEfnwgCCAEfiIEQiCIfCIIQiCGIARC/////w+DhCALQiCIIAcgCn58IAhCIIh8hSADKQMzIA+FIgRC/////w+DIgcgAykDKyAQhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMjIAyFIgRC/////w+DIgcgAykDGyAOhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMTIAmFIgRC/////w+DIgcgAykDCyANhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hUEAKQOQjgFCh5Wvr5i23puef358fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIABBgAggBBADIQQMAgsCQCAAQYABSw0AIABBgAggBBAEIQQMAgsgAEGACCAEEAUhBAwBCwJAIABBEEsNACAAIANCABADIQQMAQsCQCAAQYABSw0AIAAgA0IAEAQhBAwBCyAAIANCABAFIQQLQQAgBEI4hiAEQiiGQoCAgICAgMD/AIOEIARCGIZCgICAgIDgP4MgBEIIhkKAgICA8B+DhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4AKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA";
+var hash$6 = "187bc2c6";
+var wasmJson$6 = {
+ name: name$6,
+ data: data$6,
+ hash: hash$6
+};
+
+const mutex$4 = new Mutex();
+let wasmCache$4 = null;
+const seedBuffer$1 = new ArrayBuffer(8);
+function validateSeed$1(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$1(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash3(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ if (wasmCache$4 === null) {
+ return lockedCreate(mutex$4, wasmJson$6, 8)
+ .then((wasm) => {
+ wasmCache$4 = wasm;
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ return wasmCache$4.calculate(data);
+ });
+ }
+ try {
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ const hash = wasmCache$4.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash3 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash3(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ return WASMInterface(wasmJson$6, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$1(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$5 = "xxhash128";
+var data$5 = "AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUEBQFwAQEBBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAHC0hhc2hfVXBkYXRlAAgKSGFzaF9GaW5hbAAJDUhhc2hfR2V0U3RhdGUACg5IYXNoX0NhbGN1bGF0ZQALClNUQVRFX1NJWkUDAQrKRgwFAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAApAwAiCCAFIAZqIgcpAwCFIAhCL4iFQrHz3fEJfjcDACAAIAApAwgiCCAHKQMIhSAIQi+IhUKx893xCX43AwggACAAKQMQIgggBykDEIUgCEIviIVCsfPd8Ql+NwMQIAAgACkDGCIIIAcpAxiFIAhCL4iFQrHz3fEJfjcDGCAAIAApAyAiCCAHKQMghSAIQi+IhUKx893xCX43AyAgACAAKQMoIgggBykDKIUgCEIviIVCsfPd8Ql+NwMoIAAgACkDMCIIIAcpAzCFIAhCL4iFQrHz3fEJfjcDMCAAIAApAzgiCCAHKQM4hSAIQi+IhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQvCCAEFfgJAIAFBCUkNACAAQQApA4CMASACKQMoIAIpAyCFIAN9hSABQfiLAWopAwAiBIUiBUIgiCIGQoeVr68IfiIHQv////8PgyAFQv////8PgyIFQrHz3fEJfnwgBUKHla+vCH4iBUIgiHwiCEIghiAFQv////8Pg4QgAUF/aq1CNoZ8IAQgAikDOCACKQMwhSADfIUiA0L/////D4NC95Svrwh+IANCgICAgHCDfCAGQrHz3fEJfnwgB0IgiHwgCEIgiHwiA0I4hiADQiiGQoCAgICAgMD/AIOEIANCGIZCgICAgIDgP4MgA0IIhkKAgICA8B+DhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhISFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgdCIIh8IgRCBYhC////P4MgBEIghiAHQv////8Pg4SFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgBEIgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyrUIghiADhXwgAUH8iwFqNQIAQiCGQQA1AoCMAYSFIgNCIIgiBCABQQJ0QYeVr694aq0iBX4iBkIgiCAEQrHz3fEJfnwgBkL/////D4MgA0L/////D4MiA0Kx893xCX58IAMgBX4iA0IgiHwiBEIgiHwgBEIghiADQv////8Pg4QiBEIBhnwiA0IliCADhUL5893xmfKZqxZ+IgVCIIggBYU3AwggACADQgOIIASFIgNCI4ggA4VCpb7j9NGMh9mff34iA0IciCADhTcDAA8LAkAgAUUNACAAIAIoAgQgAigCAHOtIAN8IgRBAC0AgIwBQRB0IAFBCHRyIAFBAXZBgIwBai0AAEEYdHIgAUH/iwFqLQAAciIBrYUgBEIhiIVCz9bTvtLHq9lCfiIEQh2IIASFQvnz3fGZ9pmrFn4iBEIgiCAEhTcDACAAIAIoAgwgAigCCHOtIAN9IgMgAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyQQ13rYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCADhSACKQNYhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAOFIAIpA0iFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAunCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAIpA3ggA30gAUHIiwFqKQMAIgiFIgdC/////w+DIgkgAikDcCADfCABQcCLAWopAwAiCoUiC0IgiCIMfiINQiCIIAdCIIgiByAMfnwgDUL/////D4MgByALQv////8PgyILfnwgCSALfiIHQiCIfCIJQiCIfEEAKQO4jAEiC0EAKQOwjAEiDHyFIAlCIIYgB0L/////D4OEhSEHIAIpA2ggA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAIpA1ggA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAIpA0ggA30gCYUiCUL/////D4MiDCACKQNAIAN8IAqFIgpCIIgiDX4iBkL/////D4MgCUIgiCIJIApC/////w+DIgp+fCAMIAp+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggC3yFIQULIAIpAzggA30gAUHoiwFqKQMAIgiFIglC/////w+DIgogAikDMCADfCABQeCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDmIwBIgdBACkDkIwBIgl8hSEGIAIpAyggA30gB4UiB0L/////D4MiCiACKQMgIAN8IAmFIglCIIgiDH4iDUL/////D4MgB0IgiCIHIAlC/////w+DIgl+fCAKIAl+IglCIIh8IgpCIIYgCUL/////D4OEIA1CIIggByAMfnwgCkIgiHyFIAV8IAggC3yFIQULIAAgAikDGCADfSABQfiLAWopAwAiB4UiCEL/////D4MiCSACKQMQIAN8IAFB8IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfEEAKQOIjAEiCEEAKQOAjAEiCXyFIgsgAikDCCADfSAIhSIIQv////8PgyIMIAIpAwAgA3wgCYUiCUIgiCINfiIGQv////8PgyAIQiCIIgggCUL/////D4MiCX58IAwgCX4iCUIgiHwiDEIghiAJQv////8Pg4QgBkIgiCAIIA1+fCAMQiCIfIUgBXwgByAKfIUiBXwiB0IliCAHhUL5893xmfKZqxZ+IgdCIIggB4U3AwAgAEIAIAVCh5Wvr5i23puef34gBCADfULP1tO+0ser2UJ+fCALQuPcypX8zvL1hX9+fCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhX03AwgLiQ8DAX8UfgJ/QQAhBCACKQN4IAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAIpA1ggA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAikDOCADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACKQMYIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACKQNoIAN9IBSFIhRC/////w+DIhYgAikDYCADfCAVhSIVQiCIIhd+IhhC/////w+DIBRCIIgiFCAVQv////8PgyIVfnwgFiAVfiIVQiCIfCIWQiCGIBVC/////w+DhCAYQiCIIBQgF358IBZCIIh8hSACKQNIIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACKQMoIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACKQMIIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFIAFBIG0hGQJAIAFBoAFIDQAgGUEFIBlBBUobQXxqIRoDQCACIARqIhlBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGUETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBlBC2opAwAgA30gCIUiCEL/////D4MiCyAZQQNqKQMAIAN8IAmFIglCIIgi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QXBqKQMANwPwjQFBACADQXhqKQMANwP4jQELQYCMASEEAkACQCACIANrIgJBCE8NACACIQEMAQsgAiEBA0AgBCADKQMANwMAIARBCGohBCADQQhqIQMgAUF4aiIBQQdLDQALCyABRQ0AA0AgBCADLQAAOgAAIARBAWohBCADQQFqIQMgAUF/aiIBDQALC0EAIAI2AoCOAQvcDgUEfwF+An8EfgJ/IwAiACEBIABBgAFrQUBxIgAkAEEAKAKwjgEiAkHAigEgAhshAwJAAkBBACkDkI4BIgRC8QFUDQAgAEEAKQOAigE3AwAgAEEAKQOIigE3AwggAEEAKQOQigE3AxAgAEEAKQOYigE3AxggAEEAKQOgigE3AyAgAEEAKQOoigE3AyggAEEAKQOwigE3AzAgAEEAKQO4igE3AzgCQAJAQQAoAoCOASIFQcAASQ0AIABBACgCiI4BNgJAIAAgAEHAAGpBACgCmI4BQYCMASAFQX9qQQZ2IANBACgCnI4BEAIgACAAKQMIQQAoAoCOASICQcCLAWopAwAiBHwgA0EAKAKcjgFqIgZBAWopAwAgAkHIiwFqKQMAIgeFIghCIIggCEL/////D4N+fDcDCCAAIAApAxggAkHQiwFqKQMAIgh8IAZBEWopAwAgAkHYiwFqKQMAIgmFIgpCIIggCkL/////D4N+fDcDGCAAIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiAAKQMAfHw3AwAgACAJIAggBkEJaikDAIUiBEIgiCAEQv////8Pg34gACkDEHx8NwMQIAZBGWopAwAhBCAAKQMgIQcgACAAKQMoIAJB4IsBaikDACIIfCAGQSFqKQMAIAJB6IsBaikDACIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCACQfCLAWopAwAiBHwgBkExaikDACACQfiLAWopAwAiB4UiCEIgiCAIQv////8Pg358NwM4IAAgByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAApAzB8fDcDMAwBC0HAACAFayELAkACQAJAIAVBOE0NAEGAjgEgC2shBiAAQcAAaiEFIAshAgwBC0EAIQwgCyECA0AgAEHAAGogDGogBSAMakHAjQFqKQMANwMAIAxBCGohDCACQXhqIgJBB0sNAAsgBSAMaiIGQcAARg0BIAZBwI0BaiEGIABBwABqIAxqIQULA0AgBSAGLQAAOgAAIAVBAWohBSAGQQFqIQYgAkF/aiICDQALQQAoAoCOASEFCyAAQcAAaiALaiEGQYCMASECAkAgBUEISQ0AQYCMASECA0AgBiACKQMANwMAIAZBCGohBiACQQhqIQIgBUF4aiIFQQdLDQALCwJAIAVFDQADQCAGIAItAAA6AAAgBkEBaiEGIAJBAWohAiAFQX9qIgUNAAsLIAAgACkDCCAAKQNAIgR8IANBACgCnI4BaiICQQFqKQMAIAApA0giB4UiCEIgiCAIQv////8Pg358NwMIIAAgACkDGCAAKQNQIgh8IAJBEWopAwAgACkDWCIJhSIKQiCIIApC/////w+Dfnw3AxggACAHIAQgAkF5aikDAIUiBEIgiCAEQv////8Pg34gACkDAHx8NwMAIAAgCSAIIAJBCWopAwCFIgRCIIggBEL/////D4N+IAApAxB8fDcDECACQRlqKQMAIQQgACkDICEHIAAgACkDKCAAKQNgIgh8IAJBIWopAwAgACkDaCIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCAAKQNwIgR8IAJBMWopAwAgACkDeCIHhSIIQiCIIAhC/////w+Dfnw3AzggACAHIAQgAkEpaikDAIUiBEIgiCAEQv////8Pg34gACkDMHx8NwMwCyAAIAAgA0ELakEAKQOQjgEiBEKHla+vmLbem55/fhADNwNAIAAgACADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAgJAQQApA6COASIEUA0AAkAgAkEQSw0AIABBwABqIAJBgAggBBAEDAILAkAgAkGAAUsNACAAQcAAaiACQYAIIAQQBQwCCyAAQcAAaiACQYAIIAQQBgwBCwJAIAJBEEsNACAAQcAAaiACIANCABAEDAELAkAgAkGAAUsNACAAQcAAaiACIANCABAFDAELIABBwABqIAIgA0IAEAYLQQAgAEH4AGopAwA3A8AKQQAgAEHwAGopAwA3A7gKQQAgAEHoAGopAwA3A7AKQQAgAEHgAGopAwA3A6gKQQAgAEHYAGopAwA3A6AKQQAgAEHQAGopAwA3A5gKQQAgACkDSCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgACkDQCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhDcDiAogASQACwYAQYCKAQsCAAsLzAEBAEGACAvEAbj+bDkjpEu+fAGBLPchrRze1G3pg5CX23JApKS3s2cfy3nmTszA5XiCWtB9zP9yIbgIRnT3QySO4DWQ5oE6Jkw8KFK7kcMAy4jQZYsbUy6jcWRIl6IN+U44Ge9Gqd6s2Kj6dj/jnDQ/+dy7x8cLTx2KUeBLzbRZMciffsnZeHNk6sWsgzTT68PFgaD/+hNj6xcN3VG38NpJ0xZVJinUaJ4rFr5YfUeh/I/4uNF60DHORcs6j5UWBCiv1/vKu0tAfkACAAA=";
+var hash$5 = "e8e3fcf8";
+var wasmJson$5 = {
+ name: name$5,
+ data: data$5,
+ hash: hash$5
+};
+
+const mutex$3 = new Mutex();
+let wasmCache$3 = null;
+const seedBuffer = new ArrayBuffer(8);
+function validateSeed(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash128 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash128(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ if (wasmCache$3 === null) {
+ return lockedCreate(mutex$3, wasmJson$5, 16)
+ .then((wasm) => {
+ wasmCache$3 = wasm;
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ return wasmCache$3.calculate(data);
+ });
+ }
+ try {
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ const hash = wasmCache$3.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash128 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash128(seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ return WASMInterface(wasmJson$5, 16).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$4 = "ripemd160";
+var data$4 = "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";
+var hash$4 = "42f1de39";
+var wasmJson$4 = {
+ name: name$4,
+ data: data$4,
+ hash: hash$4
+};
+
+const mutex$2 = new Mutex();
+let wasmCache$2 = null;
+/**
+ * Calculates RIPEMD-160 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function ripemd160(data) {
+ if (wasmCache$2 === null) {
+ return lockedCreate(mutex$2, wasmJson$4, 20)
+ .then((wasm) => {
+ wasmCache$2 = wasm;
+ return wasmCache$2.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$2.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new RIPEMD-160 hash instance
+ */
+function createRIPEMD160() {
+ return WASMInterface(wasmJson$4, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+function calculateKeyBuffer(hasher, key) {
+ const { blockSize } = hasher;
+ const buf = getUInt8Buffer(key);
+ if (buf.length > blockSize) {
+ hasher.update(buf);
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ return uintArr;
+ }
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+}
+function calculateHmac(hasher, key) {
+ hasher.init();
+ const { blockSize } = hasher;
+ const keyBuf = calculateKeyBuffer(hasher, key);
+ const keyBuffer = new Uint8Array(blockSize);
+ keyBuffer.set(keyBuf);
+ const opad = new Uint8Array(blockSize);
+ for (let i = 0; i < blockSize; i++) {
+ const v = keyBuffer[i];
+ opad[i] = v ^ 0x5C;
+ keyBuffer[i] = v ^ 0x36;
+ }
+ hasher.update(keyBuffer);
+ const obj = {
+ init: () => {
+ hasher.init();
+ hasher.update(keyBuffer);
+ return obj;
+ },
+ update: (data) => {
+ hasher.update(data);
+ return obj;
+ },
+ digest: ((outputType) => {
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ hasher.update(opad);
+ hasher.update(uintArr);
+ return hasher.digest(outputType);
+ }),
+ save: () => {
+ throw new Error('save() not supported');
+ },
+ load: () => {
+ throw new Error('load() not supported');
+ },
+ blockSize: hasher.blockSize,
+ digestSize: hasher.digestSize,
+ };
+ return obj;
+}
+/**
+ * Calculates HMAC hash
+ * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
+ * @param key Key (string, Buffer or TypedArray)
+ */
+function createHMAC(hash, key) {
+ if (!hash || !hash.then) {
+ throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
+ }
+ return hash.then((hasher) => calculateHmac(hasher, key));
+}
+
+function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const DK = new Uint8Array(hashLength);
+ const block1 = new Uint8Array(salt.length + 4);
+ const block1View = new DataView(block1.buffer);
+ const saltBuffer = getUInt8Buffer(salt);
+ const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);
+ block1.set(saltUIntBuffer);
+ let destPos = 0;
+ const hLen = digest.digestSize;
+ const l = Math.ceil(hashLength / hLen);
+ let T = null;
+ let U = null;
+ for (let i = 1; i <= l; i++) {
+ block1View.setUint32(salt.length, i);
+ digest.init();
+ digest.update(block1);
+ T = digest.digest('binary');
+ U = T.slice();
+ for (let j = 1; j < iterations; j++) {
+ digest.init();
+ digest.update(U);
+ U = digest.digest('binary');
+ for (let k = 0; k < hLen; k++) {
+ T[k] ^= U[k];
+ }
+ }
+ DK.set(T.subarray(0, hashLength - destPos), destPos);
+ destPos += hLen;
+ }
+ if (outputType === 'binary') {
+ return DK;
+ }
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, DK, hashLength);
+ });
+}
+const validateOptions$2 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.hashFunction || !options.hashFunction.then) {
+ throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Generates a new PBKDF2 hash for the supplied password
+ */
+function pbkdf2(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$2(options);
+ const hmac = yield createHMAC(options.hashFunction, options.password);
+ return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);
+ });
+}
+
+var name$3 = "scrypt";
+var data$3 = "AGFzbQEAAAABIwZgAX8Bf2AAAX9gBX9/fn9/AGAEf39/fwBgAX8AYAN/f38AAwcGAAECAwQFBAUBcAEBAQUGAQECgIACBggBfwFBkIgECwc5BAZtZW1vcnkCABJIYXNoX1NldE1lbW9yeVNpemUAAA5IYXNoX0dldEJ1ZmZlcgABBnNjcnlwdAAFCpcmBlsBAX9BACEBAkAgAEEAKAKACGsiAEUNAAJAIABBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/ASEBDAELQQAhAUEAQQApA4AIIABBEHStfDcDgAgLIAFBGHRBGHULagECfwJAQQAoAogIIgANAEEAPwBBEHQiADYCiAhBgIAgQQAoAoAIayIBRQ0AAkAgAUEQdiABQYCAfHEgAUlqIgBAAEF/Rw0AQQAPC0EAQQApA4AIIABBEHStfDcDgAhBACgCiAghAAsgAAu5EAMMfwl+An8gAUEFdCEFIAQgAUEIdGohBiAEIAFBB3QiB2ohCAJAAkACQAJAIAFFDQBBACEJIAAhCiAEIQsDQCALIAooAgA2AgAgCkEEaiEKIAtBBGohCyAJQQFqIgkgBUkNAAsgAlANAiABQQh0IQxBACENIAMhDgNAQQAhCSABIQ8DQCAOIAlqIgogBCAJaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgDiEJIAQhDyABIRADQCAJIAdqIgogDyAHaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9BgAFqIQ8gEEF/aiIQDQALIAggBCAGIAEQAyAOIAxqIQ4gDUECaiINrSACVA0ADAILCyACUA0CIAhBQGoiCikDOCERIAopAzAhEiAKKQMoIRMgCikDICEUIAopAxghFSAKKQMQIRYgCikDCCEXIAopAwAhGEECIQoDQCAKrSEZIApBAmohCiAZIAJUDQALIAYgETcDOCAGIBI3AzAgBiATNwMoIAYgFDcDICAGIBU3AxggBiAWNwMQIAYgFzcDCCAGIBg3AwALAkAgAUUNACAHQUBqIgogCGohGiACp0F/aiEOIAogBGohGyABQQd0IQ1BACEMA0AgAyANIBsoAgAgDnFsaiEHQQAhCSABIQ8DQCAEIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgAyANIBooAgAgDnFsaiEHQQAhCSABIQ8DQCAIIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAIIAQgBiABEAMgDEECaiIMrSACVA0ADAILCyAIQUBqIgopAzghESAKKQMwIRIgCikDKCETIAopAyAhFCAKKQMYIRUgCikDECEWIAopAwghFyAKKQMAIRhBAiEKA0AgCq0hGSAKQQJqIQogGSACVA0ACyAGIBE3AzggBiASNwMwIAYgEzcDKCAGIBQ3AyAgBiAVNwMYIAYgFjcDECAGIBc3AwggBiAYNwMACyABRQ0AQQAhCgNAIAAgBCgCADYCACAAQQRqIQAgBEEEaiEEIApBAWoiCiAFSQ0ACwsL4wUDAX8IfgJ/IAIgA0EHdCAAakFAaiIEKQMAIgU3AwAgAiAEKQMIIgY3AwggAiAEKQMQIgc3AxAgAiAEKQMYIgg3AxggAiAEKQMgIgk3AyAgAiAEKQMoIgo3AyggAiAEKQMwIgs3AzAgAiAEKQM4Igw3AzgCQCADRQ0AIANBAXQhDSAAQfgAaiEEIANBBnQhDkECIQADQCACIAUgBEGIf2opAwCFNwMAIAIgBiAEQZB/aikDAIU3AwggAiAHIARBmH9qKQMAhTcDECACIAggBEGgf2opAwCFNwMYIAIgCSAEQah/aikDAIU3AyAgAiAKIARBsH9qKQMAhTcDKCACIAsgBEG4f2opAwCFNwMwIAIgDCAEQUBqKQMAhTcDOCACEAQgASACKQMANwMAIAFBCGogAikDCDcDACABQRBqIAIpAxA3AwAgAUEYaiACKQMYNwMAIAFBIGogAikDIDcDACABQShqIAIpAyg3AwAgAUEwaiACKQMwNwMAIAFBOGogAikDODcDACACIAIpAwAgBEFIaikDAIU3AwAgAiACKQMIIARBUGopAwCFNwMIIAIgAikDECAEQVhqKQMAhTcDECACIAIpAxggBEFgaikDAIU3AxggAiACKQMgIARBaGopAwCFNwMgIAIgAikDKCAEQXBqKQMAhTcDKCACIAIpAzAgBEF4aikDAIU3AzAgAiACKQM4IAQpAwCFNwM4IAIQBCABIA5qIgMgAikDADcDACADQQhqIAIpAwg3AwAgA0EQaiACKQMQNwMAIANBGGogAikDGDcDACADQSBqIAIpAyA3AwAgA0EoaiACKQMoNwMAIANBMGogAikDMDcDACADQThqIAIpAzg3AwAgACANTw0BIARBgAFqIQQgAUHAAGohASAAQQJqIQAgAikDOCEMIAIpAzAhCyACKQMoIQogAikDICEJIAIpAxghCCACKQMQIQcgAikDCCEGIAIpAwAhBQwACwsLug0IAX4BfwF+AX8BfgF/AX4SfyAAIAAoAgQgACkDKCIBQiCIpyICIAApAzgiA0IgiKciBGpBB3cgACkDCCIFQiCIp3MiBiAEakEJdyAAKQMYIgdCIIincyIIIAZqQQ13IAJzIgkgB6ciCiABpyILakEHdyADp3MiAiALakEJdyAFp3MiDCACakENdyAKcyINIAxqQRJ3IAtzIg4gACkDACIBQiCIpyIPIAApAxAiA0IgiKciEGpBB3cgACkDICIFQiCIp3MiC2pBB3dzIgogCSAIakESdyAEcyIRIAJqQQd3IAApAzAiB6ciCSABpyISakEHdyADp3MiBCASakEJdyAFp3MiEyAEakENdyAJcyIUcyIJIBFqQQl3IAsgEGpBCXcgB0IgiKdzIhVzIhYgCWpBDXcgAnMiFyAWakESdyARcyIRakEHdyAGIBQgE2pBEncgEnMiEmpBB3cgFSALakENdyAPcyIUcyICIBJqQQl3IAxzIg8gAmpBDXcgBnMiGHMiBiARakEJdyAIIA0gFCAVakESdyAQcyIQIARqQQd3cyIMIBBqQQl3cyIIcyIVIAZqQQ13IApzIhQgDCAKIA5qQQl3IBNzIhMgCmpBDXcgC3MiGSATakESdyAOcyIKakEHdyAXcyILIApqQQl3IA9zIg4gC2pBDXcgDHMiFyAOakESdyAKcyINIAIgCCAMakENdyAEcyIMIAhqQRJ3IBBzIghqQQd3IBlzIgpqQQd3cyIEIBQgFWpBEncgEXMiECALakEHdyAJIBggD2pBEncgEnMiEWpBB3cgDHMiDCARakEJdyATcyISIAxqQQ13IAlzIg9zIgkgEGpBCXcgCiAIakEJdyAWcyITcyIWIAlqQQ13IAtzIhQgFmpBEncgEHMiEGpBB3cgBiAPIBJqQRJ3IBFzIhFqQQd3IBMgCmpBDXcgAnMiC3MiAiARakEJdyAOcyIOIAJqQQ13IAZzIhhzIgYgEGpBCXcgFSAXIAsgE2pBEncgCHMiCCAMakEHd3MiCyAIakEJd3MiE3MiFSAGakENdyAEcyIXIAsgBCANakEJdyAScyISIARqQQ13IApzIhkgEmpBEncgDXMiBGpBB3cgFHMiCiAEakEJdyAOcyIPIApqQQ13IAtzIhQgD2pBEncgBHMiDSACIBMgC2pBDXcgDHMiDCATakESdyAIcyIIakEHdyAZcyILakEHd3MiBCAXIBVqQRJ3IBBzIhAgCmpBB3cgCSAYIA5qQRJ3IBFzIg5qQQd3IAxzIgwgDmpBCXcgEnMiESAMakENdyAJcyIXcyIJIBBqQQl3IAsgCGpBCXcgFnMiEnMiEyAJakENdyAKcyIYIBNqQRJ3IBBzIhBqQQd3IAYgFyARakESdyAOcyIKakEHdyASIAtqQQ13IAJzIhdzIgIgCmpBCXcgD3MiDiACakENdyAGcyIWcyIGIAkgFiAOakESdyAKcyIWakEHdyAVIBQgFyASakESdyAIcyIIIAxqQQd3cyIKIAhqQQl3cyISIApqQQ13IAxzIg9zIgwgFmpBCXcgBCANakEJdyARcyIRcyIVIAxqQQ13IAlzIhQgFWpBEncgFnMiCWpBB3cgAiAPIBJqQRJ3IAhzIghqQQd3IBEgBGpBDXcgC3MiD3MiCyAIakEJdyATcyITIAtqQQ13IAJzIhdzIhZqNgIEIAAgACgCCCAWIAlqQQl3IAogDyARakESdyANcyIRakEHdyAYcyICIBFqQQl3IA5zIg5zIg9qNgIIIAAgACgCDCAPIBZqQQ13IAZzIg1qNgIMIAAgACgCECAGIBBqQQl3IBJzIhIgDiACakENdyAKcyIYIBcgE2pBEncgCHMiCiAMakEHd3MiCCAKakEJd3MiFiAIakENdyAMcyIMajYCECAAIAAoAgAgDSAPakESdyAJc2o2AgAgACAAKAIUIAwgFmpBEncgCnNqNgIUIAAgACgCGCAIajYCGCAAIAAoAhwgFmo2AhwgACAAKAIgIBIgBmpBDXcgBHMiCSAYIA5qQRJ3IBFzIgYgC2pBB3dzIgogBmpBCXcgFXMiBGo2AiAgACAAKAIkIAQgCmpBDXcgC3MiC2o2AiQgACAAKAIoIAsgBGpBEncgBnNqNgIoIAAgACgCLCAKajYCLCAAIAAoAjAgCSASakESdyAQcyIGIAJqQQd3IBRzIgtqNgIwIAAgACgCNCALIAZqQQl3IBNzIgpqNgI0IAAgACgCOCAKIAtqQQ13IAJzIgJqNgI4IAAgACgCPCACIApqQRJ3IAZzajYCPAtyAwF/AX4CfwJAIAJFDQBBACgCiAgiAyAAIAGtIgQgAyAAQQd0IgUgAmxqIgMgAyAFIAFsaiIGEAIgAkEBRg0AIAJBf2ohASAFIQIDQEEAKAKICCACaiAAIAQgAyAGEAIgAiAFaiECIAFBf2oiAQ0ACwsL";
+var hash$3 = "d96fb75f";
+var wasmJson$3 = {
+ name: name$3,
+ data: data$3,
+ hash: hash$3
+};
+
+function scryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, blockSize, parallelism, hashLength, } = options;
+ const SHA256Hasher = createSHA256();
+ const blockData = yield pbkdf2({
+ password: options.password,
+ salt: options.salt,
+ iterations: 1,
+ hashLength: 128 * blockSize * parallelism,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ const scryptInterface = yield WASMInterface(wasmJson$3, 0);
+ // last block is for storing the temporary vectors
+ const VSize = 128 * blockSize * costFactor;
+ const XYSize = 256 * blockSize;
+ scryptInterface.setMemorySize(blockData.length + VSize + XYSize);
+ scryptInterface.writeMemory(blockData, 0);
+ // mix blocks
+ scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);
+ const expensiveSalt = scryptInterface
+ .getMemory()
+ .subarray(0, 128 * blockSize * parallelism);
+ const outputData = yield pbkdf2({
+ password: options.password,
+ salt: expensiveSalt,
+ iterations: 1,
+ hashLength,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, outputData, hashLength);
+ }
+ // return binary format
+ return outputData;
+ });
+}
+// eslint-disable-next-line no-bitwise
+const isPowerOfTwo = (v) => v && !(v & (v - 1));
+const validateOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {
+ throw new Error('Block size should be a positive number');
+ }
+ if (!Number.isInteger(options.costFactor)
+ || options.costFactor < 2
+ || !isPowerOfTwo(options.costFactor)) {
+ throw new Error('Cost factor should be a power of 2, greater than 1');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Calculates hash using the scrypt password-based key derivation function
+ * @returns Computed hash as a hexadecimal string or as
+ * Uint8Array depending on the outputType option
+ */
+function scrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$1(options);
+ return scryptInternal(options);
+ });
+}
+
+var name$2 = "bcrypt";
+var data$2 = "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";
+var hash$2 = "9f4c7b9e";
+var wasmJson$2 = {
+ name: name$2,
+ data: data$2,
+ hash: hash$2
+};
+
+function bcryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, password, salt } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 16);
+ const shouldEncode = options.outputType === 'encoded' ? 1 : 0;
+ bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);
+ const memory = bcryptInterface.getMemory();
+ if (options.outputType === 'encoded') {
+ return intArrayToString(memory, 60);
+ }
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(24 * 2);
+ return getDigestHex(digestChars, memory, 24);
+ }
+ // return binary format
+ // the data is copied to allow GC of the original memory buffer
+ return memory.slice(0, 24);
+ });
+}
+const validateOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {
+ throw new Error('Cost factor should be a number between 4 and 31');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length !== 16) {
+ throw new Error('Salt should be 16 bytes long');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'encoded';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the bcrypt password-hashing function
+ * @returns Computed hash
+ */
+function bcrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions(options);
+ return bcryptInternal(options);
+ });
+}
+const validateHashCharacters = (hash) => {
+ if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) {
+ return false;
+ }
+ if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {
+ return false;
+ }
+ if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {
+ return false;
+ }
+ return true;
+};
+const validateVerifyOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+ if (options.hash.length !== 60) {
+ throw new Error('Hash should be 60 bytes long');
+ }
+ if (!validateHashCharacters(options.hash)) {
+ throw new Error('Invalid hash');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+};
+/**
+ * Verifies password using bcrypt password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function bcryptVerify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions(options);
+ const { hash, password } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 60);
+ return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);
+ });
+}
+
+var name$1 = "whirlpool";
+var data$1 = "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";
+var hash$1 = "358808f8";
+var wasmJson$1 = {
+ name: name$1,
+ data: data$1,
+ hash: hash$1
+};
+
+const mutex$1 = new Mutex();
+let wasmCache$1 = null;
+/**
+ * Calculates Whirlpool hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function whirlpool(data) {
+ if (wasmCache$1 === null) {
+ return lockedCreate(mutex$1, wasmJson$1, 64)
+ .then((wasm) => {
+ wasmCache$1 = wasm;
+ return wasmCache$1.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$1.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Whirlpool hash instance
+ */
+function createWhirlpool() {
+ return WASMInterface(wasmJson$1, 64).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name = "sm3";
+var data = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMIBwABAgIBAAIEBQFwAQEBBQQBAQICBg4CfwFB8IkFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQq4GAcFAEGACQtRAEEAQs3ct5zuycP9sH83AqCJAUEAQrzhvMuqlc6YFjcCmIkBQQBC14WRuYHAgcVaNwKQiQFBAELvrICcl9esiskANwKIiQFBAEIANwKAiQELiAIBBH8CQCAARQ0AQQAhAUEAQQAoAoCJASICIABqIgM2AoCJASACQT9xIQQCQCADIAJPDQBBAEEAKAKEiQFBAWo2AoSJAQtBgAkhAgJAIARFDQACQEHAACAEayIBIABNDQAgBCEBDAELQQAhAgNAIAQgAmpBqIkBaiACQYAJai0AADoAACAEIAJBAWoiAmpBwABHDQALQaiJARADIAFBgAlqIQIgACABayEAQQAhAQsCQCAAQcAASQ0AA0AgAhADIAJBwABqIQIgAEFAaiIAQT9LDQALCyAARQ0AIAFBqIkBaiEEA0AgBCACLQAAOgAAIARBAWohBCACQQFqIQIgAEF/aiIADQALCwuDDAEZfyMAQZACayIBJAAgASAAKAIIIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZycjYCCCABIAAoAhQiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyNgIUIAEgACgCGCICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnI2AhggASAAKAIcIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZyciIDNgIcIAEgACgCACICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiBDYCACABIAAoAhAiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgU2AhAgASAAKAIEIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZyciIGNgIEIAEgACgCICICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiBzYCICABIAAoAgwiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgg2AgwgACgCJCECIAEgACgCNCIJQRh0IAlBCHRBgID8B3FyIAlBCHZBgP4DcSAJQRh2cnIiCjYCNCABIAAoAigiCUEYdCAJQQh0QYCA/AdxciAJQQh2QYD+A3EgCUEYdnJyIgs2AiggASADIARzIApBD3dzIgkgC3MgCEEHd3MgCUEPd3MgCUEXd3MiDDYCQCABIAAoAjgiCUEYdCAJQQh0QYCA/AdxciAJQQh2QYD+A3EgCUEYdnJyIgM2AjggASAAKAIsIglBGHQgCUEIdEGAgPwHcXIgCUEIdkGA/gNxIAlBGHZyciIENgIsIAEgByAGcyADQQ93cyIJIARzIAVBB3dzIAlBD3dzIAlBF3dzNgJEIAEgAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgk2AiQgASgCCCEDIAEgACgCPCICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiAjYCPCABIAAoAjAiAEEYdCAAQQh0QYCA/AdxciAAQQh2QYD+A3EgAEEYdnJyIgQ2AjAgASAJIANzIAJBD3dzIgAgBHMgASgCFEEHd3MgAEEPd3MgAEEXd3M2AkggASAIIAtzIAxBD3dzIgAgCnMgAEEPd3MgAEEXd3MgASgCGEEHd3M2AkxBACEGQSAhByABIQlBACgCiIkBIg0hCEEAKAKkiQEiDiEPQQAoAqCJASIQIQpBACgCnIkBIhEhEkEAKAKYiQEiEyELQQAoApSJASIUIRVBACgCkIkBIhYhA0EAKAKMiQEiFyEYA0AgEiALIgJzIAoiBHMgD2ogCCIAQQx3IgogAmpBmYqxzgcgB3ZBmYqxzgcgBnRyakEHdyIPaiAJKAIAIhlqIghBCXcgCHMgCEERd3MhCyADIgUgGHMgAHMgFWogDyAKc2ogCUEQaigCACAZc2ohCCAJQQRqIQkgB0F/aiEHIBJBE3chCiAYQQl3IQMgBCEPIAIhEiAFIRUgACEYIAZBAWoiBkEQRw0AC0EAIQZBECEHA0AgASAGaiIJQdAAaiAJQSxqKAIAIAlBEGooAgBzIAlBxABqKAIAIhVBD3dzIhIgCUE4aigCAHMgCUEcaigCAEEHd3MgEkEPd3MgEkEXd3MiGTYCACAKIg8gCyIJQX9zcSACIAlxciAEaiAIIhJBDHciCiAJakGKu57UByAHd2pBB3ciBGogDGoiCEEJdyAIcyAIQRF3cyELIBIgAyIYIABycSAYIABxciAFaiAEIApzaiAZIAxzaiEIIAJBE3chCiAAQQl3IQMgB0EBaiEHIBUhDCAPIQQgCSECIBghBSASIQAgBkEEaiIGQcABRw0AC0EAIA8gDnM2AqSJAUEAIAogEHM2AqCJAUEAIAkgEXM2ApyJAUEAIAsgE3M2ApiJAUEAIBggFHM2ApSJAUEAIAMgFnM2ApCJAUEAIBIgF3M2AoyJAUEAIAggDXM2AoiJASABQZACaiQAC4UIAQd/IwBBEGsiACQAIABBACgCgIkBIgFBG3QgAUELdEGAgPwHcXIgAUEFdkGA/gNxIAFBA3RBGHZycjYCDCAAQQAoAoSJASICQQN0IAFBHXZyIgNBGHQgA0EIdEGAgPwHcXIgA0EIdkGA/gNxIANBGHZyciIENgIIAkBBOEH4ACABQT9xIgVBOEkbIAVrIgNFDQBBACADIAFqIgE2AoCJAQJAIAEgA08NAEEAIAJBAWo2AoSJAQtBkAghAQJAAkAgBUUNACADQcAAIAVrIgJJDQFBACEBA0AgBSABakGoiQFqIAFBkAhqLQAAOgAAIAUgAUEBaiIBakHAAEcNAAtBqIkBEAMgAkGQCGohASADIAJrIQMLQQAhBQsCQCADQcAASQ0AA0AgARADIAFBwABqIQEgA0FAaiIDQT9LDQALCyADRQ0AIAVBqIkBaiEFA0AgBSABLQAAOgAAIAVBAWohBSABQQFqIQEgA0F/aiIDDQALC0EAQQAoAoCJASIBQQhqNgKAiQEgAUE/cSECAkAgAUF4SQ0AQQBBACgChIkBQQFqNgKEiQELQQAhBkEIIQUgAEEIaiEBAkACQCACRQ0AAkAgAkE4Tw0AIAIhBgwBCyACQaiJAWogBDoAAAJAIAJBP0YNACACQamJAWogBEEIdjoAACACQT9zQX9qIgVFDQAgAkGqiQFqIQEgAEEIakECciEDA0AgASADLQAAOgAAIAFBAWohASADQQFqIQMgBUF/aiIFDQALC0GoiQEQAyACQUhqIgVFDQEgAEEIakHAACACa2ohAQsgBkGoiQFqIQMDQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASAFQX9qIgUNAAsLQQBBACgCiIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCgAlBAEEAKAKMiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKECUEAQQAoApCJASIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnI2AogJQQBBACgClIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCjAlBAEEAKAKYiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKQCUEAQQAoApyJASIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnI2ApQJQQBBACgCoIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCmAlBAEEAKAKkiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKcCSAAQRBqJAALBgBBgIkBC8ABAQJ/QQBCzdy3nO7Jw/2wfzcCoIkBQQBCvOG8y6qVzpgWNwKYiQFBAELXhZG5gcCBxVo3ApCJAUEAQu+sgJyX16yKyQA3AoiJAUEAQgA3AoCJAQJAIABFDQBBACAANgKAiQFBgAkhAQJAIABBwABJDQBBgAkhAQNAIAEQAyABQcAAaiEBIABBQGoiAEE/Sw0ACyAARQ0BC0EAIQIDQCACQaiJAWogASACai0AADoAACAAIAJBAWoiAkcNAAsLEAQLC1ECAEGACAsEaAAAAABBkAgLQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
+var hash = "6e6f46ad";
+var wasmJson = {
+ name: name,
+ data: data,
+ hash: hash
+};
+
+const mutex = new Mutex();
+let wasmCache = null;
+/**
+ * Calculates SM3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sm3(data) {
+ if (wasmCache === null) {
+ return lockedCreate(mutex, wasmJson, 32)
+ .then((wasm) => {
+ wasmCache = wasm;
+ return wasmCache.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SM3 hash instance
+ */
+function createSM3() {
+ return WASMInterface(wasmJson, 32).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+export { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc32c, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC32C, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 };
diff --git a/packages/pouchdb-lib/lib/isLocalId-d067de54.js b/packages/pouchdb-lib/lib/isLocalId-d067de54.js
new file mode 100644
index 0000000000..0e15259d3c
--- /dev/null
+++ b/packages/pouchdb-lib/lib/isLocalId-d067de54.js
@@ -0,0 +1,30 @@
+import { w as winningRev } from './rootToLeaf-f8d0e78a.js';
+
+function getTrees(node) {
+ return node.ids;
+}
+
+// check if a specific revision of a doc has been deleted
+// - metadata: the metadata object from the doc store
+// - rev: (optional) the revision to check. defaults to winning revision
+function isDeleted(metadata, rev) {
+ if (!rev) {
+ rev = winningRev(metadata);
+ }
+ var id = rev.substring(rev.indexOf('-') + 1);
+ var toVisit = metadata.rev_tree.map(getTrees);
+
+ var tree;
+ while ((tree = toVisit.pop())) {
+ if (tree[0] === id) {
+ return !!tree[1].deleted;
+ }
+ toVisit = toVisit.concat(tree[2]);
+ }
+}
+
+function isLocalId(id) {
+ return typeof id === 'string' && id.startsWith('_local/');
+}
+
+export { isLocalId as a, isDeleted as i };
diff --git a/packages/pouchdb-lib/lib/isRemote-2533b7cb.js b/packages/pouchdb-lib/lib/isRemote-2533b7cb.js
new file mode 100644
index 0000000000..3b6c37a77b
--- /dev/null
+++ b/packages/pouchdb-lib/lib/isRemote-2533b7cb.js
@@ -0,0 +1,20 @@
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+
+// Checks if a PouchDB object is "remote" or not. This is
+
+function isRemote(db) {
+ if (typeof db._remote === 'boolean') {
+ return db._remote;
+ }
+ /* istanbul ignore next */
+ if (typeof db.type === 'function') {
+ guardedConsole('warn',
+ 'db.type() is deprecated and will be removed in ' +
+ 'a future version of PouchDB');
+ return db.type() === 'http';
+ }
+ /* istanbul ignore next */
+ return false;
+}
+
+export { isRemote as i };
diff --git a/packages/pouchdb-lib/lib/latest-0521537f.js b/packages/pouchdb-lib/lib/latest-0521537f.js
new file mode 100644
index 0000000000..55240f41e1
--- /dev/null
+++ b/packages/pouchdb-lib/lib/latest-0521537f.js
@@ -0,0 +1,53 @@
+import { t as traverseRevTree } from './rootToLeaf-f8d0e78a.js';
+
+// compact a tree by marking its non-leafs as missing,
+// and return a list of revs to delete
+function compactTree(metadata) {
+ var revs = [];
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ if (opts.status === 'available' && !isLeaf) {
+ revs.push(pos + '-' + revHash);
+ opts.status = 'missing';
+ }
+ });
+ return revs;
+}
+
+// returns the current leaf node for a given revision
+function latest(rev, metadata) {
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, pos: pos, opts: opts});
+
+ if (isLeaf) {
+ for (var i = 0, len = history.length; i < len; i++) {
+ var historyNode = history[i];
+ var historyRev = historyNode.pos + '-' + historyNode.id;
+
+ if (historyRev === rev) {
+ // return the rev of this leaf
+ return pos + '-' + id;
+ }
+ }
+ }
+
+ for (var j = 0, l = branches.length; j < l; j++) {
+ toVisit.push({pos: pos + 1, ids: branches[j], history: history});
+ }
+ }
+
+ /* istanbul ignore next */
+ throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);
+}
+
+export { compactTree as c, latest as l };
diff --git a/packages/pouchdb-lib/lib/matches-selector-87ab4d5f.js b/packages/pouchdb-lib/lib/matches-selector-87ab4d5f.js
new file mode 100644
index 0000000000..cf0ccb0416
--- /dev/null
+++ b/packages/pouchdb-lib/lib/matches-selector-87ab4d5f.js
@@ -0,0 +1,677 @@
+import 'node:events';
+import { c as clone } from './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import { collate } from './pouchdb-collate.js';
+
+// this would just be "return doc[field]", but fields
+// can be "deep" due to dot notation
+function getFieldFromDoc(doc, parsedField) {
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (!value) {
+ break;
+ }
+ }
+ return value;
+}
+
+function setFieldInDoc(doc, parsedField, value) {
+ for (var i = 0, len = parsedField.length; i < len-1; i++) {
+ var elem = parsedField[i];
+ doc = doc[elem] = doc[elem] || {};
+ }
+ doc[parsedField[len-1]] = value;
+}
+
+function compare(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Converts a string in dot notation to an array of its components, with backslash escaping
+function parseField(fieldName) {
+ // fields may be deep (e.g. "foo.bar.baz"), so parse
+ var fields = [];
+ var current = '';
+ for (var i = 0, len = fieldName.length; i < len; i++) {
+ var ch = fieldName[i];
+ if (i > 0 && fieldName[i - 1] === '\\' && (ch === '$' || ch === '.')) {
+ // escaped delimiter
+ current = current.substring(0, current.length - 1) + ch;
+ } else if (ch === '.') {
+ // When `.` is not escaped (above), it is a field delimiter
+ fields.push(current);
+ current = '';
+ } else { // normal character
+ current += ch;
+ }
+ }
+ fields.push(current);
+ return fields;
+}
+
+var combinationFields = ['$or', '$nor', '$not'];
+function isCombinationalField(field) {
+ return combinationFields.indexOf(field) > -1;
+}
+
+function getKey(obj) {
+ return Object.keys(obj)[0];
+}
+
+function getValue(obj) {
+ return obj[getKey(obj)];
+}
+
+
+// flatten an array of selectors joined by an $and operator
+function mergeAndedSelectors(selectors) {
+
+ // sort to ensure that e.g. if the user specified
+ // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into
+ // just {$gt: 'b'}
+ var res = {};
+ var first = {$or: true, $nor: true};
+
+ selectors.forEach(function (selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ if (typeof matcher !== 'object') {
+ matcher = {$eq: matcher};
+ }
+
+ if (isCombinationalField(field)) {
+ // or, nor
+ if (matcher instanceof Array) {
+ if (first[field]) {
+ first[field] = false;
+ res[field] = matcher;
+ return;
+ }
+
+ var entries = [];
+ res[field].forEach(function (existing) {
+ Object.keys(matcher).forEach(function (key) {
+ var m = matcher[key];
+ var longest = Math.max(Object.keys(existing).length, Object.keys(m).length);
+ var merged = mergeAndedSelectors([existing, m]);
+ if (Object.keys(merged).length <= longest) {
+ // we have a situation like: (a :{$eq :1} || ...) && (a {$eq: 2} || ...)
+ // merging would produce a $eq 2 when actually we shouldn't ever match against these merged conditions
+ // merged should always contain more values to be valid
+ return;
+ }
+ entries.push(merged);
+ });
+ });
+ res[field] = entries;
+ } else {
+ // not
+ res[field] = mergeAndedSelectors([matcher]);
+ }
+ } else {
+ var fieldMatchers = res[field] = res[field] || {};
+ Object.keys(matcher).forEach(function (operator) {
+ var value = matcher[operator];
+
+ if (operator === '$gt' || operator === '$gte') {
+ return mergeGtGte(operator, value, fieldMatchers);
+ } else if (operator === '$lt' || operator === '$lte') {
+ return mergeLtLte(operator, value, fieldMatchers);
+ } else if (operator === '$ne') {
+ return mergeNe(value, fieldMatchers);
+ } else if (operator === '$eq') {
+ return mergeEq(value, fieldMatchers);
+ } else if (operator === "$regex") {
+ return mergeRegex(value, fieldMatchers);
+ }
+ fieldMatchers[operator] = value;
+ });
+ }
+ });
+ });
+
+ return res;
+}
+
+
+
+// collapse logically equivalent gt/gte values
+function mergeGtGte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$gte !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gte) { // more specificity
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value >= fieldMatchers.$gte) { // more specificity
+ delete fieldMatchers.$gte;
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$gt !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gt) { // more specificity
+ delete fieldMatchers.$gt;
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value > fieldMatchers.$gt) { // more specificity
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// collapse logically equivalent lt/lte values
+function mergeLtLte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$lte !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lte) { // more specificity
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value <= fieldMatchers.$lte) { // more specificity
+ delete fieldMatchers.$lte;
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$lt !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lt) { // more specificity
+ delete fieldMatchers.$lt;
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value < fieldMatchers.$lt) { // more specificity
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// combine $ne values into one array
+function mergeNe(value, fieldMatchers) {
+ if ('$ne' in fieldMatchers) {
+ // there are many things this could "not" be
+ fieldMatchers.$ne.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$ne = [value];
+ }
+}
+
+// add $eq into the mix
+function mergeEq(value, fieldMatchers) {
+ // these all have less specificity than the $eq
+ // TODO: check for user errors here
+ delete fieldMatchers.$gt;
+ delete fieldMatchers.$gte;
+ delete fieldMatchers.$lt;
+ delete fieldMatchers.$lte;
+ delete fieldMatchers.$ne;
+ fieldMatchers.$eq = value;
+}
+
+// combine $regex values into one array
+function mergeRegex(value, fieldMatchers) {
+ if ('$regex' in fieldMatchers) {
+ // a value could match multiple regexes
+ fieldMatchers.$regex.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$regex = [value];
+ }
+}
+
+//#7458: execute function mergeAndedSelectors on nested $and
+function mergeAndedSelectorsNested(obj) {
+ for (var prop in obj) {
+ if (Array.isArray(obj)) {
+ for (var i in obj) {
+ if (obj[i]['$and']) {
+ obj[i] = mergeAndedSelectors(obj[i]['$and']);
+ }
+ }
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ mergeAndedSelectorsNested(value); // <- recursive call
+ }
+ }
+ return obj;
+}
+
+//#7458: determine id $and is present in selector (at any level)
+function isAndInSelector(obj, isAnd) {
+ for (var prop in obj) {
+ if (prop === '$and') {
+ isAnd = true;
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ isAnd = isAndInSelector(value, isAnd); // <- recursive call
+ }
+ }
+ return isAnd;
+}
+
+//
+// normalize the selector
+//
+function massageSelector(input) {
+ var result = clone(input);
+
+ //#7458: if $and is present in selector (at any level) merge nested $and
+ if (isAndInSelector(result, false)) {
+ result = mergeAndedSelectorsNested(result);
+ if ('$and' in result) {
+ result = mergeAndedSelectors(result['$and']);
+ }
+ }
+
+ ['$or', '$nor'].forEach(function (orOrNor) {
+ if (orOrNor in result) {
+ // message each individual selector
+ // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}
+ result[orOrNor].forEach(function (subSelector) {
+ var fields = Object.keys(subSelector);
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = subSelector[field];
+ if (typeof matcher !== 'object' || matcher === null) {
+ subSelector[field] = {$eq: matcher};
+ }
+ }
+ });
+ }
+ });
+
+ if ('$not' in result) {
+ //This feels a little like forcing, but it will work for now,
+ //I would like to come back to this and make the merging of selectors a little more generic
+ result['$not'] = mergeAndedSelectors([result['$not']]);
+ }
+
+ var fields = Object.keys(result);
+
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = result[field];
+
+ if (typeof matcher !== 'object' || matcher === null) {
+ matcher = {$eq: matcher};
+ }
+ result[field] = matcher;
+ }
+
+ normalizeArrayOperators(result);
+
+ return result;
+}
+
+//
+// The $ne and $regex values must be placed in an array because these operators can be used multiple times on the same field.
+// When $and is used, mergeAndedSelectors takes care of putting some of them into arrays, otherwise it's done here.
+//
+function normalizeArrayOperators(selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+
+ if (Array.isArray(matcher)) {
+ matcher.forEach(function (matcherItem) {
+ if (matcherItem && typeof matcherItem === 'object') {
+ normalizeArrayOperators(matcherItem);
+ }
+ });
+ } else if (field === '$ne') {
+ selector.$ne = [matcher];
+ } else if (field === '$regex') {
+ selector.$regex = [matcher];
+ } else if (matcher && typeof matcher === 'object') {
+ normalizeArrayOperators(matcher);
+ }
+ });
+}
+
+// create a comparator based on the sort object
+function createFieldSorter(sort) {
+
+ function getFieldValuesAsArray(doc) {
+ return sort.map(function (sorting) {
+ var fieldName = getKey(sorting);
+ var parsedField = parseField(fieldName);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ return docFieldValue;
+ });
+ }
+
+ return function (aRow, bRow) {
+ var aFieldValues = getFieldValuesAsArray(aRow.doc);
+ var bFieldValues = getFieldValuesAsArray(bRow.doc);
+ var collation = collate(aFieldValues, bFieldValues);
+ if (collation !== 0) {
+ return collation;
+ }
+ // this is what mango seems to do
+ return compare(aRow.doc._id, bRow.doc._id);
+ };
+}
+
+function filterInMemoryFields(rows, requestDef, inMemoryFields) {
+ rows = rows.filter(function (row) {
+ return rowFilter(row.doc, requestDef.selector, inMemoryFields);
+ });
+
+ if (requestDef.sort) {
+ // in-memory sort
+ var fieldSorter = createFieldSorter(requestDef.sort);
+ rows = rows.sort(fieldSorter);
+ if (typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc') {
+ rows = rows.reverse();
+ }
+ }
+
+ if ('limit' in requestDef || 'skip' in requestDef) {
+ // have to do the limit in-memory
+ var skip = requestDef.skip || 0;
+ var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;
+ rows = rows.slice(skip, limit);
+ }
+ return rows;
+}
+
+function rowFilter(doc, selector, inMemoryFields) {
+ return inMemoryFields.every(function (field) {
+ var matcher = selector[field];
+ var parsedField = parseField(field);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ if (isCombinationalField(field)) {
+ return matchCominationalSelector(field, matcher, doc);
+ }
+
+ return matchSelector(matcher, doc, parsedField, docFieldValue);
+ });
+}
+
+function matchSelector(matcher, doc, parsedField, docFieldValue) {
+ if (!matcher) {
+ // no filtering necessary; this field is just needed for sorting
+ return true;
+ }
+
+ // is matcher an object, if so continue recursion
+ if (typeof matcher === 'object') {
+ return Object.keys(matcher).every(function (maybeUserOperator) {
+ var userValue = matcher[ maybeUserOperator ];
+ // explicit operator
+ if (maybeUserOperator.indexOf("$") === 0) {
+ return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue);
+ } else {
+ var subParsedField = parseField(maybeUserOperator);
+
+ if (
+ docFieldValue === undefined &&
+ typeof userValue !== "object" &&
+ subParsedField.length > 0
+ ) {
+ // the field does not exist, return or getFieldFromDoc will throw
+ return false;
+ }
+
+ var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField);
+
+ if (typeof userValue === "object") {
+ // field value is an object that might contain more operators
+ return matchSelector(userValue, doc, parsedField, subDocFieldValue);
+ }
+
+ // implicit operator
+ return match("$eq", doc, userValue, subParsedField, subDocFieldValue);
+ }
+ });
+ }
+
+ // no more depth, No need to recurse further
+ return matcher === docFieldValue;
+}
+
+function matchCominationalSelector(field, matcher, doc) {
+
+ if (field === '$or') {
+ return matcher.some(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+ }
+
+ if (field === '$not') {
+ return !rowFilter(doc, matcher, Object.keys(matcher));
+ }
+
+ //`$nor`
+ return !matcher.find(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+
+}
+
+function match(userOperator, doc, userValue, parsedField, docFieldValue) {
+ if (!matchers[userOperator]) {
+ /* istanbul ignore next */
+ throw new Error('unknown operator "' + userOperator +
+ '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +
+ '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');
+ }
+ return matchers[userOperator](doc, userValue, parsedField, docFieldValue);
+}
+
+function fieldExists(docFieldValue) {
+ return typeof docFieldValue !== 'undefined' && docFieldValue !== null;
+}
+
+function fieldIsNotUndefined(docFieldValue) {
+ return typeof docFieldValue !== 'undefined';
+}
+
+function modField(docFieldValue, userValue) {
+ if (typeof docFieldValue !== "number" ||
+ parseInt(docFieldValue, 10) !== docFieldValue) {
+ return false;
+ }
+
+ var divisor = userValue[0];
+ var mod = userValue[1];
+
+ return docFieldValue % divisor === mod;
+}
+
+function arrayContainsValue(docFieldValue, userValue) {
+ return userValue.some(function (val) {
+ if (docFieldValue instanceof Array) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ }
+
+ return collate(val, docFieldValue) === 0;
+ });
+}
+
+function arrayContainsAllValues(docFieldValue, userValue) {
+ return userValue.every(function (val) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ });
+}
+
+function arraySize(docFieldValue, userValue) {
+ return docFieldValue.length === userValue;
+}
+
+function regexMatch(docFieldValue, userValue) {
+ var re = new RegExp(userValue);
+
+ return re.test(docFieldValue);
+}
+
+function typeMatch(docFieldValue, userValue) {
+
+ switch (userValue) {
+ case 'null':
+ return docFieldValue === null;
+ case 'boolean':
+ return typeof (docFieldValue) === 'boolean';
+ case 'number':
+ return typeof (docFieldValue) === 'number';
+ case 'string':
+ return typeof (docFieldValue) === 'string';
+ case 'array':
+ return docFieldValue instanceof Array;
+ case 'object':
+ return ({}).toString.call(docFieldValue) === '[object Object]';
+ }
+}
+
+var matchers = {
+
+ '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.some(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.some(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$allMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ /* istanbul ignore next */
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.every(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.every(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$eq': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;
+ },
+
+ '$gte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;
+ },
+
+ '$gt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;
+ },
+
+ '$lte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;
+ },
+
+ '$lt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;
+ },
+
+ '$exists': function (doc, userValue, parsedField, docFieldValue) {
+ //a field that is null is still considered to exist
+ if (userValue) {
+ return fieldIsNotUndefined(docFieldValue);
+ }
+
+ return !fieldIsNotUndefined(docFieldValue);
+ },
+
+ '$mod': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && modField(docFieldValue, userValue);
+ },
+
+ '$ne': function (doc, userValue, parsedField, docFieldValue) {
+ return userValue.every(function (neValue) {
+ return collate(docFieldValue, neValue) !== 0;
+ });
+ },
+ '$in': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$nin': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$size': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ Array.isArray(docFieldValue) &&
+ arraySize(docFieldValue, userValue);
+ },
+
+ '$all': function (doc, userValue, parsedField, docFieldValue) {
+ return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);
+ },
+
+ '$regex': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ typeof docFieldValue == "string" &&
+ userValue.every(function (regexValue) {
+ return regexMatch(docFieldValue, regexValue);
+ });
+ },
+
+ '$type': function (doc, userValue, parsedField, docFieldValue) {
+ return typeMatch(docFieldValue, userValue);
+ }
+};
+
+// return true if the given doc matches the supplied selector
+function matchesSelector(doc, selector) {
+ /* istanbul ignore if */
+ if (typeof selector !== 'object') {
+ // match the CouchDB error message
+ throw new Error('Selector error: expected a JSON object');
+ }
+
+ selector = massageSelector(selector);
+ var row = {
+ 'doc': doc
+ };
+
+ var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));
+ return rowsMatched && rowsMatched.length === 1;
+}
+
+export { massageSelector as a, getValue as b, getKey as c, compare as d, createFieldSorter as e, filterInMemoryFields as f, getFieldFromDoc as g, isCombinationalField as i, matchesSelector as m, parseField as p, rowFilter as r, setFieldInDoc as s };
diff --git a/packages/pouchdb-lib/lib/merge-1e46cced.js b/packages/pouchdb-lib/lib/merge-1e46cced.js
new file mode 100644
index 0000000000..a2797ab1e7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/merge-1e46cced.js
@@ -0,0 +1,243 @@
+import { r as rootToLeaf, t as traverseRevTree } from './rootToLeaf-f8d0e78a.js';
+
+// for a better overview of what this is doing, read:
+
+function sortByPos(a, b) {
+ return a.pos - b.pos;
+}
+
+// classic binary search
+function binarySearch(arr, item, comparator) {
+ var low = 0;
+ var high = arr.length;
+ var mid;
+ while (low < high) {
+ mid = (low + high) >>> 1;
+ if (comparator(arr[mid], item) < 0) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return low;
+}
+
+// assuming the arr is sorted, insert the item in the proper place
+function insertSorted(arr, item, comparator) {
+ var idx = binarySearch(arr, item, comparator);
+ arr.splice(idx, 0, item);
+}
+
+// Turn a path as a flat array into a tree with a single branch.
+// If any should be stemmed from the beginning of the array, that's passed
+// in as the second argument
+function pathToTree(path, numStemmed) {
+ var root;
+ var leaf;
+ for (var i = numStemmed, len = path.length; i < len; i++) {
+ var node = path[i];
+ var currentLeaf = [node.id, node.opts, []];
+ if (leaf) {
+ leaf[2].push(currentLeaf);
+ leaf = currentLeaf;
+ } else {
+ root = leaf = currentLeaf;
+ }
+ }
+ return root;
+}
+
+// compare the IDs of two trees
+function compareTree(a, b) {
+ return a[0] < b[0] ? -1 : 1;
+}
+
+// Merge two trees together
+// The roots of tree1 and tree2 must be the same revision
+function mergeTree(in_tree1, in_tree2) {
+ var queue = [{tree1: in_tree1, tree2: in_tree2}];
+ var conflicts = false;
+ while (queue.length > 0) {
+ var item = queue.pop();
+ var tree1 = item.tree1;
+ var tree2 = item.tree2;
+
+ if (tree1[1].status || tree2[1].status) {
+ tree1[1].status =
+ (tree1[1].status === 'available' ||
+ tree2[1].status === 'available') ? 'available' : 'missing';
+ }
+
+ for (var i = 0; i < tree2[2].length; i++) {
+ if (!tree1[2][0]) {
+ conflicts = 'new_leaf';
+ tree1[2][0] = tree2[2][i];
+ continue;
+ }
+
+ var merged = false;
+ for (var j = 0; j < tree1[2].length; j++) {
+ if (tree1[2][j][0] === tree2[2][i][0]) {
+ queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});
+ merged = true;
+ }
+ }
+ if (!merged) {
+ conflicts = 'new_branch';
+ insertSorted(tree1[2], tree2[2][i], compareTree);
+ }
+ }
+ }
+ return {conflicts: conflicts, tree: in_tree1};
+}
+
+function doMerge(tree, path, dontExpand) {
+ var restree = [];
+ var conflicts = false;
+ var merged = false;
+ var res;
+
+ if (!tree.length) {
+ return {tree: [path], conflicts: 'new_leaf'};
+ }
+
+ for (var i = 0, len = tree.length; i < len; i++) {
+ var branch = tree[i];
+ if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {
+ // Paths start at the same position and have the same root, so they need
+ // merged
+ res = mergeTree(branch.ids, path.ids);
+ restree.push({pos: branch.pos, ids: res.tree});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ } else if (dontExpand !== true) {
+ // The paths start at a different position, take the earliest path and
+ // traverse up until it as at the same point from root as the path we
+ // want to merge. If the keys match we return the longer path with the
+ // other merged After stemming we dont want to expand the trees
+
+ var t1 = branch.pos < path.pos ? branch : path;
+ var t2 = branch.pos < path.pos ? path : branch;
+ var diff = t2.pos - t1.pos;
+
+ var candidateParents = [];
+
+ var trees = [];
+ trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});
+ while (trees.length > 0) {
+ var item = trees.pop();
+ if (item.diff === 0) {
+ if (item.ids[0] === t2.ids[0]) {
+ candidateParents.push(item);
+ }
+ continue;
+ }
+ var elements = item.ids[2];
+ for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {
+ trees.push({
+ ids: elements[j],
+ diff: item.diff - 1,
+ parent: item.ids,
+ parentIdx: j
+ });
+ }
+ }
+
+ var el = candidateParents[0];
+
+ if (!el) {
+ restree.push(branch);
+ } else {
+ res = mergeTree(el.ids, t2.ids);
+ el.parent[2][el.parentIdx] = res.tree;
+ restree.push({pos: t1.pos, ids: t1.ids});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ }
+ } else {
+ restree.push(branch);
+ }
+ }
+
+ // We didnt find
+ if (!merged) {
+ restree.push(path);
+ }
+
+ restree.sort(sortByPos);
+
+ return {
+ tree: restree,
+ conflicts: conflicts || 'internal_node'
+ };
+}
+
+// To ensure we dont grow the revision tree infinitely, we stem old revisions
+function stem(tree, depth) {
+ // First we break out the tree into a complete list of root to leaf paths
+ var paths = rootToLeaf(tree);
+ var stemmedRevs;
+
+ var result;
+ for (var i = 0, len = paths.length; i < len; i++) {
+ // Then for each path, we cut off the start of the path based on the
+ // `depth` to stem to, and generate a new set of flat trees
+ var path = paths[i];
+ var stemmed = path.ids;
+ var node;
+ if (stemmed.length > depth) {
+ // only do the stemming work if we actually need to stem
+ if (!stemmedRevs) {
+ stemmedRevs = {}; // avoid allocating this object unnecessarily
+ }
+ var numStemmed = stemmed.length - depth;
+ node = {
+ pos: path.pos + numStemmed,
+ ids: pathToTree(stemmed, numStemmed)
+ };
+
+ for (var s = 0; s < numStemmed; s++) {
+ var rev = (path.pos + s) + '-' + stemmed[s].id;
+ stemmedRevs[rev] = true;
+ }
+ } else { // no need to actually stem
+ node = {
+ pos: path.pos,
+ ids: pathToTree(stemmed, 0)
+ };
+ }
+
+ // Then we remerge all those flat trees together, ensuring that we dont
+ // connect trees that would go beyond the depth limit
+ if (result) {
+ result = doMerge(result, node, true).tree;
+ } else {
+ result = [node];
+ }
+ }
+
+ // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed
+ if (stemmedRevs) {
+ traverseRevTree(result, function (isLeaf, pos, revHash) {
+ // some revisions may have been removed in a branch but not in another
+ delete stemmedRevs[pos + '-' + revHash];
+ });
+ }
+
+ return {
+ tree: result,
+ revs: stemmedRevs ? Object.keys(stemmedRevs) : []
+ };
+}
+
+function merge(tree, path, depth) {
+ var newTree = doMerge(tree, path);
+ var stemmed = stem(newTree.tree, depth);
+ return {
+ tree: stemmed.tree,
+ stemmedRevs: stemmed.revs,
+ conflicts: newTree.conflicts
+ };
+}
+
+export { merge as m };
diff --git a/packages/pouchdb-lib/lib/nextTick-ea093886.js b/packages/pouchdb-lib/lib/nextTick-ea093886.js
new file mode 100644
index 0000000000..d51ae5b686
--- /dev/null
+++ b/packages/pouchdb-lib/lib/nextTick-ea093886.js
@@ -0,0 +1,5 @@
+function nextTick(fn) {
+ process.nextTick(fn);
+}
+
+export { nextTick as n };
diff --git a/packages/pouchdb-lib/lib/normalizeDdocFunctionName-ea3481cf.js b/packages/pouchdb-lib/lib/normalizeDdocFunctionName-ea3481cf.js
new file mode 100644
index 0000000000..f32f2571c6
--- /dev/null
+++ b/packages/pouchdb-lib/lib/normalizeDdocFunctionName-ea3481cf.js
@@ -0,0 +1,20 @@
+function parseDesignDocFunctionName(s) {
+ if (!s) {
+ return null;
+ }
+ var parts = s.split('/');
+ if (parts.length === 2) {
+ return parts;
+ }
+ if (parts.length === 1) {
+ return [s, s];
+ }
+ return null;
+}
+
+function normalizeDesignDocFunctionName(s) {
+ var normalized = parseDesignDocFunctionName(s);
+ return normalized ? normalized.join('/') : null;
+}
+
+export { normalizeDesignDocFunctionName as n, parseDesignDocFunctionName as p };
diff --git a/packages/pouchdb-lib/lib/once-de8350b9.js b/packages/pouchdb-lib/lib/once-de8350b9.js
new file mode 100644
index 0000000000..2a4da15523
--- /dev/null
+++ b/packages/pouchdb-lib/lib/once-de8350b9.js
@@ -0,0 +1,15 @@
+function once(fun) {
+ var called = false;
+ return function (...args) {
+ /* istanbul ignore if */
+ if (called) {
+ // this is a smoke test and should never actually happen
+ throw new Error('once called more than once');
+ } else {
+ called = true;
+ fun.apply(this, args);
+ }
+ };
+}
+
+export { once as o };
diff --git a/packages/pouchdb-lib/lib/package.json b/packages/pouchdb-lib/lib/package.json
new file mode 100644
index 0000000000..7c34deb583
--- /dev/null
+++ b/packages/pouchdb-lib/lib/package.json
@@ -0,0 +1 @@
+{"type":"module"}
\ No newline at end of file
diff --git a/packages/pouchdb-lib/lib/parseDoc-71681539.js b/packages/pouchdb-lib/lib/parseDoc-71681539.js
new file mode 100644
index 0000000000..8221022bd1
--- /dev/null
+++ b/packages/pouchdb-lib/lib/parseDoc-71681539.js
@@ -0,0 +1,157 @@
+import { uuid } from './pouchdb-utils.js';
+import { createError, DOC_VALIDATION, INVALID_REV } from './pouchdb-errors.js';
+import { r as rev, i as invalidIdError } from './rev-48662a2a.js';
+
+function toObject(array) {
+ return array.reduce(function (obj, item) {
+ obj[item] = true;
+ return obj;
+ }, {});
+}
+// List of top level reserved words for doc
+var reservedWords = toObject([
+ '_id',
+ '_rev',
+ '_access',
+ '_attachments',
+ '_deleted',
+ '_revisions',
+ '_revs_info',
+ '_conflicts',
+ '_deleted_conflicts',
+ '_local_seq',
+ '_rev_tree',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats',
+ // Specific to Couchbase Sync Gateway
+ '_removed'
+]);
+
+// List of reserved words that should end up in the document
+var dataWords = toObject([
+ '_access',
+ '_attachments',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats'
+]);
+
+function parseRevisionInfo(rev) {
+ if (!/^\d+-/.test(rev)) {
+ return createError(INVALID_REV);
+ }
+ var idx = rev.indexOf('-');
+ var left = rev.substring(0, idx);
+ var right = rev.substring(idx + 1);
+ return {
+ prefix: parseInt(left, 10),
+ id: right
+ };
+}
+
+function makeRevTreeFromRevisions(revisions, opts) {
+ var pos = revisions.start - revisions.ids.length + 1;
+
+ var revisionIds = revisions.ids;
+ var ids = [revisionIds[0], opts, []];
+
+ for (var i = 1, len = revisionIds.length; i < len; i++) {
+ ids = [revisionIds[i], {status: 'missing'}, [ids]];
+ }
+
+ return [{
+ pos: pos,
+ ids: ids
+ }];
+}
+
+// Preprocess documents, parse their revisions, assign an id and a
+// revision for new writes that are missing them, etc
+function parseDoc(doc, newEdits, dbOpts) {
+ if (!dbOpts) {
+ dbOpts = {
+ deterministic_revs: true
+ };
+ }
+
+ var nRevNum;
+ var newRevId;
+ var revInfo;
+ var opts = {status: 'available'};
+ if (doc._deleted) {
+ opts.deleted = true;
+ }
+
+ if (newEdits) {
+ if (!doc._id) {
+ doc._id = uuid();
+ }
+ newRevId = rev(doc, dbOpts.deterministic_revs);
+ if (doc._rev) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ doc._rev_tree = [{
+ pos: revInfo.prefix,
+ ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]
+ }];
+ nRevNum = revInfo.prefix + 1;
+ } else {
+ doc._rev_tree = [{
+ pos: 1,
+ ids : [newRevId, opts, []]
+ }];
+ nRevNum = 1;
+ }
+ } else {
+ if (doc._revisions) {
+ doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);
+ nRevNum = doc._revisions.start;
+ newRevId = doc._revisions.ids[0];
+ }
+ if (!doc._rev_tree) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ nRevNum = revInfo.prefix;
+ newRevId = revInfo.id;
+ doc._rev_tree = [{
+ pos: nRevNum,
+ ids: [newRevId, opts, []]
+ }];
+ }
+ }
+
+ invalidIdError(doc._id);
+
+ doc._rev = nRevNum + '-' + newRevId;
+
+ var result = {metadata : {}, data : {}};
+ for (var key in doc) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc, key)) {
+ var specialKey = key[0] === '_';
+ if (specialKey && !reservedWords[key]) {
+ var error = createError(DOC_VALIDATION, key);
+ error.message = DOC_VALIDATION.message + ': ' + key;
+ throw error;
+ } else if (specialKey && !dataWords[key]) {
+ result.metadata[key.slice(1)] = doc[key];
+ } else {
+ result.data[key] = doc[key];
+ }
+ }
+ }
+ return result;
+}
+
+export { parseDoc as p };
diff --git a/packages/pouchdb-lib/lib/pouchdb-abstract-mapreduce.js b/packages/pouchdb-lib/lib/pouchdb-abstract-mapreduce.js
new file mode 100644
index 0000000000..8985f24a8a
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-abstract-mapreduce.js
@@ -0,0 +1,1228 @@
+import 'node:events';
+import { n as nextTick } from './nextTick-ea093886.js';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import { generateErrorFromResponse } from './pouchdb-errors.js';
+import { f as flatten } from './flatten-994f45c6.js';
+import { i as isRemote } from './isRemote-2533b7cb.js';
+import 'crypto';
+import { b as b64ToBluffer } from './base64StringToBlobOrBuffer-3fd03be6.js';
+import { collate, toIndexableString, normalizeKey, parseIndexableString } from './pouchdb-collate.js';
+import { H as Headers } from './fetch-f2310cb2.js';
+import { u as upsert } from './upsert-331b6913.js';
+import { stringMd5 } from './pouchdb-crypto.js';
+import { promisedCallback, callbackify, mapToKeysArray, sequentialize, fin, NotFoundError, QueryParseError, uniq, BuiltInError } from './pouchdb-mapreduce-utils.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './typedBuffer-a8220a49.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import 'util';
+
+/*
+ * Simple task queue to sequentialize actions. Assumes
+ * callbacks will eventually fire (once).
+ */
+
+
+class TaskQueue {
+ constructor() {
+ this.promise = new Promise(function (fulfill) {fulfill(); });
+ }
+
+ add(promiseFactory) {
+ this.promise = this.promise.catch(function () {
+ // just recover
+ }).then(function () {
+ return promiseFactory();
+ });
+ return this.promise;
+ }
+
+ finish() {
+ return this.promise;
+ }
+}
+
+function stringify(input) {
+ if (!input) {
+ return 'undefined'; // backwards compat for empty reduce
+ }
+ // for backwards compat with mapreduce, functions/strings are stringified
+ // as-is. everything else is JSON-stringified.
+ switch (typeof input) {
+ case 'function':
+ // e.g. a mapreduce map
+ return input.toString();
+ case 'string':
+ // e.g. a mapreduce built-in _reduce function
+ return input.toString();
+ default:
+ // e.g. a JSON object in the case of mango queries
+ return JSON.stringify(input);
+ }
+}
+
+/* create a string signature for a view so we can cache it and uniq it */
+function createViewSignature(mapFun, reduceFun) {
+ // the "undefined" part is for backwards compatibility
+ return stringify(mapFun) + stringify(reduceFun) + 'undefined';
+}
+
+async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {
+ const viewSignature = createViewSignature(mapFun, reduceFun);
+
+ let cachedViews;
+ if (!temporary) {
+ // cache this to ensure we don't try to update the same view twice
+ cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};
+ if (cachedViews[viewSignature]) {
+ return cachedViews[viewSignature];
+ }
+ }
+
+ const promiseForView = sourceDB.info().then(async function (info) {
+ const depDbName = info.db_name + '-mrview-' +
+ (temporary ? 'temp' : await stringMd5(viewSignature));
+
+ // save the view name in the source db so it can be cleaned up if necessary
+ // (e.g. when the _design doc is deleted, remove all associated view data)
+ function diffFunction(doc) {
+ doc.views = doc.views || {};
+ let fullViewName = viewName;
+ if (fullViewName.indexOf('/') === -1) {
+ fullViewName = viewName + '/' + viewName;
+ }
+ const depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};
+ /* istanbul ignore if */
+ if (depDbs[depDbName]) {
+ return; // no update necessary
+ }
+ depDbs[depDbName] = true;
+ return doc;
+ }
+ await upsert(sourceDB, '_local/' + localDocName, diffFunction);
+ const res = await sourceDB.registerDependentDatabase(depDbName);
+ const db = res.db;
+ db.auto_compaction = true;
+ const view = {
+ name: depDbName,
+ db: db,
+ sourceDB: sourceDB,
+ adapter: sourceDB.adapter,
+ mapFun: mapFun,
+ reduceFun: reduceFun
+ };
+
+ let lastSeqDoc;
+ try {
+ lastSeqDoc = await view.db.get('_local/lastSeq');
+ } catch (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ }
+
+ view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;
+ if (cachedViews) {
+ view.db.once('destroyed', function () {
+ delete cachedViews[viewSignature];
+ });
+ }
+ return view;
+ });
+
+ if (cachedViews) {
+ cachedViews[viewSignature] = promiseForView;
+ }
+ return promiseForView;
+}
+
+var persistentQueues = {};
+var tempViewQueue = new TaskQueue();
+var CHANGES_BATCH_SIZE = 50;
+
+function parseViewName(name) {
+ // can be either 'ddocname/viewname' or just 'viewname'
+ // (where the ddoc name is the same)
+ return name.indexOf('/') === -1 ? [name, name] : name.split('/');
+}
+
+function isGenOne(changes) {
+ // only return true if the current change is 1-
+ // and there are no other leafs
+ return changes.length === 1 && /^1-/.test(changes[0].rev);
+}
+
+function emitError(db, e, data) {
+ try {
+ db.emit('error', e);
+ } catch (err) {
+ guardedConsole('error',
+ 'The user\'s map/reduce function threw an uncaught error.\n' +
+ 'You can debug this error by doing:\n' +
+ 'myDatabase.on(\'error\', function (err) { debugger; });\n' +
+ 'Please double-check your map/reduce function.');
+ guardedConsole('error', e, data);
+ }
+}
+
+/**
+ * Returns an "abstract" mapreduce object of the form:
+ *
+ * {
+ * query: queryFun,
+ * viewCleanup: viewCleanupFun
+ * }
+ *
+ * Arguments are:
+ *
+ * localDoc: string
+ * This is for the local doc that gets saved in order to track the
+ * "dependent" DBs and clean them up for viewCleanup. It should be
+ * unique, so that indexer plugins don't collide with each other.
+ * mapper: function (mapFunDef, emit)
+ * Returns a map function based on the mapFunDef, which in the case of
+ * normal map/reduce is just the de-stringified function, but may be
+ * something else, such as an object in the case of pouchdb-find.
+ * reducer: function (reduceFunDef)
+ * Ditto, but for reducing. Modules don't have to support reducing
+ * (e.g. pouchdb-find).
+ * ddocValidator: function (ddoc, viewName)
+ * Throws an error if the ddoc or viewName is not valid.
+ * This could be a way to communicate to the user that the configuration for the
+ * indexer is invalid.
+ */
+function createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {
+
+ function tryMap(db, fun, doc) {
+ // emit an event if there was an error thrown by a map function.
+ // putting try/catches in a single function also avoids deoptimizations.
+ try {
+ fun(doc);
+ } catch (e) {
+ emitError(db, e, {fun: fun, doc: doc});
+ }
+ }
+
+ function tryReduce(db, fun, keys, values, rereduce) {
+ // same as above, but returning the result or an error. there are two separate
+ // functions to avoid extra memory allocations since the tryCode() case is used
+ // for custom map functions (common) vs this function, which is only used for
+ // custom reduce functions (rare)
+ try {
+ return {output : fun(keys, values, rereduce)};
+ } catch (e) {
+ emitError(db, e, {fun: fun, keys: keys, values: values, rereduce: rereduce});
+ return {error: e};
+ }
+ }
+
+ function sortByKeyThenValue(x, y) {
+ const keyCompare = collate(x.key, y.key);
+ return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);
+ }
+
+ function sliceResults(results, limit, skip) {
+ skip = skip || 0;
+ if (typeof limit === 'number') {
+ return results.slice(skip, limit + skip);
+ } else if (skip > 0) {
+ return results.slice(skip);
+ }
+ return results;
+ }
+
+ function rowToDocId(row) {
+ const val = row.value;
+ // Users can explicitly specify a joined doc _id, or it
+ // defaults to the doc _id that emitted the key/value.
+ const docId = (val && typeof val === 'object' && val._id) || row.id;
+ return docId;
+ }
+
+ function readAttachmentsAsBlobOrBuffer(res) {
+ res.rows.forEach(function (row) {
+ const atts = row.doc && row.doc._attachments;
+ if (!atts) {
+ return;
+ }
+ Object.keys(atts).forEach(function (filename) {
+ const att = atts[filename];
+ atts[filename].data = b64ToBluffer(att.data, att.content_type);
+ });
+ });
+ }
+
+ function postprocessAttachments(opts) {
+ return function (res) {
+ if (opts.include_docs && opts.attachments && opts.binary) {
+ readAttachmentsAsBlobOrBuffer(res);
+ }
+ return res;
+ };
+ }
+
+ function addHttpParam(paramName, opts, params, asJson) {
+ // add an http param from opts to params, optionally json-encoded
+ let val = opts[paramName];
+ if (typeof val !== 'undefined') {
+ if (asJson) {
+ val = encodeURIComponent(JSON.stringify(val));
+ }
+ params.push(paramName + '=' + val);
+ }
+ }
+
+ function coerceInteger(integerCandidate) {
+ if (typeof integerCandidate !== 'undefined') {
+ const asNumber = Number(integerCandidate);
+ // prevents e.g. '1foo' or '1.1' being coerced to 1
+ if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {
+ return asNumber;
+ } else {
+ return integerCandidate;
+ }
+ }
+ }
+
+ function coerceOptions(opts) {
+ opts.group_level = coerceInteger(opts.group_level);
+ opts.limit = coerceInteger(opts.limit);
+ opts.skip = coerceInteger(opts.skip);
+ return opts;
+ }
+
+ function checkPositiveInteger(number) {
+ if (number) {
+ if (typeof number !== 'number') {
+ return new QueryParseError(`Invalid value for integer: "${number}"`);
+ }
+ if (number < 0) {
+ return new QueryParseError(`Invalid value for positive integer: "${number}"`);
+ }
+ }
+ }
+
+ function checkQueryParseError(options, fun) {
+ const startkeyName = options.descending ? 'endkey' : 'startkey';
+ const endkeyName = options.descending ? 'startkey' : 'endkey';
+
+ if (typeof options[startkeyName] !== 'undefined' &&
+ typeof options[endkeyName] !== 'undefined' &&
+ collate(options[startkeyName], options[endkeyName]) > 0) {
+ throw new QueryParseError('No rows can match your key range, ' +
+ 'reverse your start_key and end_key or set {descending : true}');
+ } else if (fun.reduce && options.reduce !== false) {
+ if (options.include_docs) {
+ throw new QueryParseError('{include_docs:true} is invalid for reduce');
+ } else if (options.keys && options.keys.length > 1 &&
+ !options.group && !options.group_level) {
+ throw new QueryParseError('Multi-key fetches for reduce views must use ' +
+ '{group: true}');
+ }
+ }
+ ['group_level', 'limit', 'skip'].forEach(function (optionName) {
+ const error = checkPositiveInteger(options[optionName]);
+ if (error) {
+ throw error;
+ }
+ });
+ }
+
+ async function httpQuery(db, fun, opts) {
+ // List of parameters to add to the PUT request
+ let params = [];
+ let body;
+ let method = 'GET';
+ let ok;
+
+ // If opts.reduce exists and is defined, then add it to the list
+ // of parameters.
+ // If reduce=false then the results are that of only the map function
+ // not the final result of map and reduce.
+ addHttpParam('reduce', opts, params);
+ addHttpParam('include_docs', opts, params);
+ addHttpParam('attachments', opts, params);
+ addHttpParam('limit', opts, params);
+ addHttpParam('descending', opts, params);
+ addHttpParam('group', opts, params);
+ addHttpParam('group_level', opts, params);
+ addHttpParam('skip', opts, params);
+ addHttpParam('stale', opts, params);
+ addHttpParam('conflicts', opts, params);
+ addHttpParam('startkey', opts, params, true);
+ addHttpParam('start_key', opts, params, true);
+ addHttpParam('endkey', opts, params, true);
+ addHttpParam('end_key', opts, params, true);
+ addHttpParam('inclusive_end', opts, params);
+ addHttpParam('key', opts, params, true);
+ addHttpParam('update_seq', opts, params);
+
+ // Format the list of parameters into a valid URI query string
+ params = params.join('&');
+ params = params === '' ? '' : '?' + params;
+
+ // If keys are supplied, issue a POST to circumvent GET query string limits
+ // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
+ if (typeof opts.keys !== 'undefined') {
+ const MAX_URL_LENGTH = 2000;
+ // according to http://stackoverflow.com/a/417184/680742,
+ // the de facto URL length limit is 2000 characters
+
+ const keysAsString = `keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;
+ if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {
+ // If the keys are short enough, do a GET. we do this to work around
+ // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)
+ params += (params[0] === '?' ? '&' : '?') + keysAsString;
+ } else {
+ method = 'POST';
+ if (typeof fun === 'string') {
+ body = {keys: opts.keys};
+ } else { // fun is {map : mapfun}, so append to this
+ fun.keys = opts.keys;
+ }
+ }
+ }
+
+ // We are referencing a query defined in the design doc
+ if (typeof fun === 'string') {
+ const parts = parseViewName(fun);
+
+ const response = await db.fetch('_design/' + parts[0] + '/_view/' + parts[1] + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: method,
+ body: JSON.stringify(body)
+ });
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ // fail the entire request if the result contains an error
+ result.rows.forEach(function (row) {
+ /* istanbul ignore if */
+ if (row.value && row.value.error && row.value.error === "builtin_reduce_error") {
+ throw new Error(row.reason);
+ }
+ });
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // We are using a temporary view, terrible for performance, good for testing
+ body = body || {};
+ Object.keys(fun).forEach(function (key) {
+ if (Array.isArray(fun[key])) {
+ body[key] = fun[key];
+ } else {
+ body[key] = fun[key].toString();
+ }
+ });
+
+ const response = await db.fetch('_temp_view' + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST',
+ body: JSON.stringify(body)
+ });
+
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // custom adapters can define their own api._query
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customQuery(db, fun, opts) {
+ return new Promise(function (resolve, reject) {
+ db._query(fun, opts, function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ // custom adapters can define their own api._viewCleanup
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customViewCleanup(db) {
+ return new Promise(function (resolve, reject) {
+ db._viewCleanup(function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ function defaultsTo(value) {
+ return function (reason) {
+ /* istanbul ignore else */
+ if (reason.status === 404) {
+ return value;
+ } else {
+ throw reason;
+ }
+ };
+ }
+
+ // returns a promise for a list of docs to update, based on the input docId.
+ // the order doesn't matter, because post-3.2.0, bulkDocs
+ // is an atomic operation in all three adapters.
+ async function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {
+ const metaDocId = '_local/doc_' + docId;
+ const defaultMetaDoc = {_id: metaDocId, keys: []};
+ const docData = docIdsToChangesAndEmits.get(docId);
+ const indexableKeysToKeyValues = docData[0];
+ const changes = docData[1];
+
+ function getMetaDoc() {
+ if (isGenOne(changes)) {
+ // generation 1, so we can safely assume initial state
+ // for performance reasons (avoids unnecessary GETs)
+ return Promise.resolve(defaultMetaDoc);
+ }
+ return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));
+ }
+
+ function getKeyValueDocs(metaDoc) {
+ if (!metaDoc.keys.length) {
+ // no keys, no need for a lookup
+ return Promise.resolve({rows: []});
+ }
+ return view.db.allDocs({
+ keys: metaDoc.keys,
+ include_docs: true
+ });
+ }
+
+ function processKeyValueDocs(metaDoc, kvDocsRes) {
+ const kvDocs = [];
+ const oldKeys = new Set();
+
+ for (let i = 0, len = kvDocsRes.rows.length; i < len; i++) {
+ const row = kvDocsRes.rows[i];
+ const doc = row.doc;
+ if (!doc) { // deleted
+ continue;
+ }
+ kvDocs.push(doc);
+ oldKeys.add(doc._id);
+ doc._deleted = !indexableKeysToKeyValues.has(doc._id);
+ if (!doc._deleted) {
+ const keyValue = indexableKeysToKeyValues.get(doc._id);
+ if ('value' in keyValue) {
+ doc.value = keyValue.value;
+ }
+ }
+ }
+ const newKeys = mapToKeysArray(indexableKeysToKeyValues);
+ newKeys.forEach(function (key) {
+ if (!oldKeys.has(key)) {
+ // new doc
+ const kvDoc = {
+ _id: key
+ };
+ const keyValue = indexableKeysToKeyValues.get(key);
+ if ('value' in keyValue) {
+ kvDoc.value = keyValue.value;
+ }
+ kvDocs.push(kvDoc);
+ }
+ });
+ metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));
+ kvDocs.push(metaDoc);
+
+ return kvDocs;
+ }
+
+ const metaDoc = await getMetaDoc();
+ const keyValueDocs = await getKeyValueDocs(metaDoc);
+ return processKeyValueDocs(metaDoc, keyValueDocs);
+ }
+
+ function updatePurgeSeq(view) {
+ // with this approach, we just assume to have processed all missing purges and write the latest
+ // purgeSeq into the _local/purgeSeq doc.
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const purgeSeq = res.purgeSeq;
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res._rev;
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return undefined;
+ }).then(function (rev) {
+ return view.db.put({
+ _id: '_local/purgeSeq',
+ _rev: rev,
+ purgeSeq,
+ });
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ });
+ }
+
+ // updates all emitted key/value docs and metaDocs in the mrview database
+ // for the given batch of documents from the source database
+ function saveKeyValues(view, docIdsToChangesAndEmits, seq) {
+ var seqDocId = '_local/lastSeq';
+ return view.db.get(seqDocId)
+ .catch(defaultsTo({_id: seqDocId, seq: 0}))
+ .then(function (lastSeqDoc) {
+ var docIds = mapToKeysArray(docIdsToChangesAndEmits);
+ return Promise.all(docIds.map(function (docId) {
+ return getDocsToPersist(docId, view, docIdsToChangesAndEmits);
+ })).then(function (listOfDocsToPersist) {
+ var docsToPersist = flatten(listOfDocsToPersist);
+ lastSeqDoc.seq = seq;
+ docsToPersist.push(lastSeqDoc);
+ // write all docs in a single operation, update the seq once
+ return view.db.bulkDocs({docs : docsToPersist});
+ })
+ // TODO: this should be placed somewhere else, probably? we're querying both docs twice
+ // (first time when getting the actual purges).
+ .then(() => updatePurgeSeq(view));
+ });
+ }
+
+ function getQueue(view) {
+ const viewName = typeof view === 'string' ? view : view.name;
+ let queue = persistentQueues[viewName];
+ if (!queue) {
+ queue = persistentQueues[viewName] = new TaskQueue();
+ }
+ return queue;
+ }
+
+ async function updateView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return updateViewInQueue(view, opts);
+ })();
+ }
+
+ async function updateViewInQueue(view, opts) {
+ // bind the emit function once
+ let mapResults;
+ let doc;
+ let taskId;
+
+ function emit(key, value) {
+ const output = {id: doc._id, key: normalizeKey(key)};
+ // Don't explicitly store the value unless it's defined and non-null.
+ // This saves on storage space, because often people don't use it.
+ if (typeof value !== 'undefined' && value !== null) {
+ output.value = normalizeKey(value);
+ }
+ mapResults.push(output);
+ }
+
+ const mapFun = mapper(view.mapFun, emit);
+
+ let currentSeq = view.seq || 0;
+
+ function createTask() {
+ return view.sourceDB.info().then(function (info) {
+ taskId = view.sourceDB.activeTasks.add({
+ name: 'view_indexing',
+ total_items: info.update_seq - currentSeq,
+ });
+ });
+ }
+
+ function processChange(docIdsToChangesAndEmits, seq) {
+ return function () {
+ return saveKeyValues(view, docIdsToChangesAndEmits, seq);
+ };
+ }
+
+ let indexed_docs = 0;
+ const progress = {
+ view: view.name,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+
+ const queue = new TaskQueue();
+
+ async function processNextBatch() {
+ const response = await view.sourceDB.changes({
+ return_docs: true,
+ conflicts: true,
+ include_docs: true,
+ style: 'all_docs',
+ since: currentSeq,
+ limit: opts.changes_batch_size
+ });
+ const purges = await getRecentPurges();
+ return processBatch(response, purges);
+ }
+
+ function getRecentPurges() {
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res.purgeSeq;
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return -1;
+ }).then(function (purgeSeq) {
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const recentPurges = res.purges.filter(function (purge, index) {
+ return index > purgeSeq;
+ }).map((purge) => purge.docId);
+
+ const uniquePurges = recentPurges.filter(function (docId, index) {
+ return recentPurges.indexOf(docId) === index;
+ });
+
+ return Promise.all(uniquePurges.map(function (docId) {
+ return view.sourceDB.get(docId).then(function (doc) {
+ return { docId, doc };
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return { docId };
+ });
+ }));
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return [];
+ });
+ });
+ }
+
+ function processBatch(response, purges) {
+ var results = response.results;
+ if (!results.length && !purges.length) {
+ return;
+ }
+
+ for (let purge of purges) {
+ const index = results.findIndex(function (change) {
+ return change.id === purge.docId;
+ });
+ if (index < 0) {
+ // mimic a db.remove() on the changes feed
+ const entry = {
+ _id: purge.docId,
+ doc: {
+ _id: purge.docId,
+ _deleted: 1,
+ },
+ changes: [],
+ };
+
+ if (purge.doc) {
+ // update with new winning rev after purge
+ entry.doc = purge.doc;
+ entry.changes.push({ rev: purge.doc._rev });
+ }
+
+ results.push(entry);
+ }
+ }
+
+ var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);
+
+ queue.add(processChange(docIdsToChangesAndEmits, currentSeq));
+
+ indexed_docs = indexed_docs + results.length;
+ const progress = {
+ view: view.name,
+ last_seq: response.last_seq,
+ results_count: results.length,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+ view.sourceDB.activeTasks.update(taskId, {completed_items: indexed_docs});
+
+ if (results.length < opts.changes_batch_size) {
+ return;
+ }
+ return processNextBatch();
+ }
+
+ function createDocIdsToChangesAndEmits(results) {
+ const docIdsToChangesAndEmits = new Map();
+ for (let i = 0, len = results.length; i < len; i++) {
+ const change = results[i];
+ if (change.doc._id[0] !== '_') {
+ mapResults = [];
+ doc = change.doc;
+
+ if (!doc._deleted) {
+ tryMap(view.sourceDB, mapFun, doc);
+ }
+ mapResults.sort(sortByKeyThenValue);
+
+ const indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);
+ docIdsToChangesAndEmits.set(change.doc._id, [
+ indexableKeysToKeyValues,
+ change.changes
+ ]);
+ }
+ currentSeq = change.seq;
+ }
+ return docIdsToChangesAndEmits;
+ }
+
+ function createIndexableKeysToKeyValues(mapResults) {
+ const indexableKeysToKeyValues = new Map();
+ let lastKey;
+ for (let i = 0, len = mapResults.length; i < len; i++) {
+ const emittedKeyValue = mapResults[i];
+ const complexKey = [emittedKeyValue.key, emittedKeyValue.id];
+ if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {
+ complexKey.push(i); // dup key+id, so make it unique
+ }
+ indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);
+ lastKey = emittedKeyValue.key;
+ }
+ return indexableKeysToKeyValues;
+ }
+
+ try {
+ await createTask();
+ await processNextBatch();
+ await queue.finish();
+ view.seq = currentSeq;
+ view.sourceDB.activeTasks.remove(taskId);
+ } catch (error) {
+ view.sourceDB.activeTasks.remove(taskId, error);
+ }
+ }
+
+ function reduceView(view, results, options) {
+ if (options.group_level === 0) {
+ delete options.group_level;
+ }
+
+ const shouldGroup = options.group || options.group_level;
+
+ const reduceFun = reducer(view.reduceFun);
+
+ const groups = [];
+ const lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :
+ options.group_level;
+ results.forEach(function (e) {
+ const last = groups[groups.length - 1];
+ let groupKey = shouldGroup ? e.key : null;
+
+ // only set group_level for array keys
+ if (shouldGroup && Array.isArray(groupKey)) {
+ groupKey = groupKey.slice(0, lvl);
+ }
+
+ if (last && collate(last.groupKey, groupKey) === 0) {
+ last.keys.push([e.key, e.id]);
+ last.values.push(e.value);
+ return;
+ }
+ groups.push({
+ keys: [[e.key, e.id]],
+ values: [e.value],
+ groupKey: groupKey
+ });
+ });
+ results = [];
+ for (let i = 0, len = groups.length; i < len; i++) {
+ const e = groups[i];
+ const reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);
+ if (reduceTry.error && reduceTry.error instanceof BuiltInError) {
+ // CouchDB returns an error if a built-in errors out
+ throw reduceTry.error;
+ }
+ results.push({
+ // CouchDB just sets the value to null if a non-built-in errors out
+ value: reduceTry.error ? null : reduceTry.output,
+ key: e.groupKey
+ });
+ }
+ // no total_rows/offset when reducing
+ return {rows: sliceResults(results, options.limit, options.skip)};
+ }
+
+ function queryView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return queryViewInQueue(view, opts);
+ })();
+ }
+
+ async function queryViewInQueue(view, opts) {
+ let totalRows;
+ const shouldReduce = view.reduceFun && opts.reduce !== false;
+ const skip = opts.skip || 0;
+ if (typeof opts.keys !== 'undefined' && !opts.keys.length) {
+ // equivalent query
+ opts.limit = 0;
+ delete opts.keys;
+ }
+
+ async function fetchFromView(viewOpts) {
+ viewOpts.include_docs = true;
+ const res = await view.db.allDocs(viewOpts);
+ totalRows = res.total_rows;
+
+ return res.rows.map(function (result) {
+ // implicit migration - in older versions of PouchDB,
+ // we explicitly stored the doc as {id: ..., key: ..., value: ...}
+ // this is tested in a migration test
+ /* istanbul ignore next */
+ if ('value' in result.doc && typeof result.doc.value === 'object' &&
+ result.doc.value !== null) {
+ const keys = Object.keys(result.doc.value).sort();
+ // this detection method is not perfect, but it's unlikely the user
+ // emitted a value which was an object with these 3 exact keys
+ const expectedKeys = ['id', 'key', 'value'];
+ if (!(keys < expectedKeys || keys > expectedKeys)) {
+ return result.doc.value;
+ }
+ }
+
+ const parsedKeyAndDocId = parseIndexableString(result.doc._id);
+ return {
+ key: parsedKeyAndDocId[0],
+ id: parsedKeyAndDocId[1],
+ value: ('value' in result.doc ? result.doc.value : null)
+ };
+ });
+ }
+
+ async function onMapResultsReady(rows) {
+ let finalResults;
+ if (shouldReduce) {
+ finalResults = reduceView(view, rows, opts);
+ } else if (typeof opts.keys === 'undefined') {
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: rows
+ };
+ } else {
+ // support limit, skip for keys query
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: sliceResults(rows,opts.limit,opts.skip)
+ };
+ }
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ finalResults.update_seq = view.seq;
+ }
+ if (opts.include_docs) {
+ const docIds = uniq(rows.map(rowToDocId));
+
+ const allDocsRes = await view.sourceDB.allDocs({
+ keys: docIds,
+ include_docs: true,
+ conflicts: opts.conflicts,
+ attachments: opts.attachments,
+ binary: opts.binary
+ });
+ var docIdsToDocs = new Map();
+ allDocsRes.rows.forEach(function (row) {
+ docIdsToDocs.set(row.id, row.doc);
+ });
+ rows.forEach(function (row) {
+ var docId = rowToDocId(row);
+ var doc = docIdsToDocs.get(docId);
+ if (doc) {
+ row.doc = doc;
+ }
+ });
+ return finalResults;
+ } else {
+ return finalResults;
+ }
+ }
+
+ if (typeof opts.keys !== 'undefined') {
+ const keys = opts.keys;
+ const fetchPromises = keys.map(function (key) {
+ const viewOpts = {
+ startkey : toIndexableString([key]),
+ endkey : toIndexableString([key, {}])
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ return fetchFromView(viewOpts);
+ });
+ const result = await Promise.all(fetchPromises);
+ const flattenedResult = flatten(result);
+ return onMapResultsReady(flattenedResult);
+ } else { // normal query, no 'keys'
+ const viewOpts = {
+ descending : opts.descending
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ let startkey;
+ let endkey;
+ if ('start_key' in opts) {
+ startkey = opts.start_key;
+ }
+ if ('startkey' in opts) {
+ startkey = opts.startkey;
+ }
+ if ('end_key' in opts) {
+ endkey = opts.end_key;
+ }
+ if ('endkey' in opts) {
+ endkey = opts.endkey;
+ }
+ if (typeof startkey !== 'undefined') {
+ viewOpts.startkey = opts.descending ?
+ toIndexableString([startkey, {}]) :
+ toIndexableString([startkey]);
+ }
+ if (typeof endkey !== 'undefined') {
+ let inclusiveEnd = opts.inclusive_end !== false;
+ if (opts.descending) {
+ inclusiveEnd = !inclusiveEnd;
+ }
+
+ viewOpts.endkey = toIndexableString(
+ inclusiveEnd ? [endkey, {}] : [endkey]);
+ }
+ if (typeof opts.key !== 'undefined') {
+ const keyStart = toIndexableString([opts.key]);
+ const keyEnd = toIndexableString([opts.key, {}]);
+ if (viewOpts.descending) {
+ viewOpts.endkey = keyStart;
+ viewOpts.startkey = keyEnd;
+ } else {
+ viewOpts.startkey = keyStart;
+ viewOpts.endkey = keyEnd;
+ }
+ }
+ if (!shouldReduce) {
+ if (typeof opts.limit === 'number') {
+ viewOpts.limit = opts.limit;
+ }
+ viewOpts.skip = skip;
+ }
+
+ const result = await fetchFromView(viewOpts);
+ return onMapResultsReady(result);
+ }
+ }
+
+ async function httpViewCleanup(db) {
+ const response = await db.fetch('_view_cleanup', {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST'
+ });
+ return response.json();
+ }
+
+ async function localViewCleanup(db) {
+ try {
+ const metaDoc = await db.get('_local/' + localDocName);
+ const docsToViews = new Map();
+
+ Object.keys(metaDoc.views).forEach(function (fullViewName) {
+ const parts = parseViewName(fullViewName);
+ const designDocName = '_design/' + parts[0];
+ const viewName = parts[1];
+ let views = docsToViews.get(designDocName);
+ if (!views) {
+ views = new Set();
+ docsToViews.set(designDocName, views);
+ }
+ views.add(viewName);
+ });
+ const opts = {
+ keys : mapToKeysArray(docsToViews),
+ include_docs : true
+ };
+
+ const res = await db.allDocs(opts);
+ const viewsToStatus = {};
+ res.rows.forEach(function (row) {
+ const ddocName = row.key.substring(8); // cuts off '_design/'
+ docsToViews.get(row.key).forEach(function (viewName) {
+ let fullViewName = ddocName + '/' + viewName;
+ /* istanbul ignore if */
+ if (!metaDoc.views[fullViewName]) {
+ // new format, without slashes, to support PouchDB 2.2.0
+ // migration test in pouchdb's browser.migration.js verifies this
+ fullViewName = viewName;
+ }
+ const viewDBNames = Object.keys(metaDoc.views[fullViewName]);
+ // design doc deleted, or view function nonexistent
+ const statusIsGood = row.doc && row.doc.views &&
+ row.doc.views[viewName];
+ viewDBNames.forEach(function (viewDBName) {
+ viewsToStatus[viewDBName] =
+ viewsToStatus[viewDBName] || statusIsGood;
+ });
+ });
+ });
+
+ const dbsToDelete = Object.keys(viewsToStatus)
+ .filter(function (viewDBName) { return !viewsToStatus[viewDBName]; });
+
+ const destroyPromises = dbsToDelete.map(function (viewDBName) {
+ return sequentialize(getQueue(viewDBName), function () {
+ return new db.constructor(viewDBName, db.__opts).destroy();
+ })();
+ });
+
+ return Promise.all(destroyPromises).then(function () {
+ return {ok: true};
+ });
+ } catch (err) {
+ if (err.status === 404) {
+ return {ok: true};
+ } else {
+ throw err;
+ }
+ }
+ }
+
+ async function queryPromised(db, fun, opts) {
+ /* istanbul ignore next */
+ if (typeof db._query === 'function') {
+ return customQuery(db, fun, opts);
+ }
+ if (isRemote(db)) {
+ return httpQuery(db, fun, opts);
+ }
+
+ const updateViewOpts = {
+ changes_batch_size: db.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE
+ };
+
+ if (typeof fun !== 'string') {
+ // temp_view
+ checkQueryParseError(opts, fun);
+
+ tempViewQueue.add(async function () {
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ 'temp_view/temp_view',
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ true,
+ /* localDocName */ localDocName);
+
+ return fin(updateView(view, updateViewOpts).then(
+ function () { return queryView(view, opts); }),
+ function () { return view.db.destroy(); }
+ );
+ });
+ return tempViewQueue.finish();
+ } else {
+ // persistent view
+ const fullViewName = fun;
+ const parts = parseViewName(fullViewName);
+ const designDocName = parts[0];
+ const viewName = parts[1];
+
+ const doc = await db.get('_design/' + designDocName);
+ fun = doc.views && doc.views[viewName];
+
+ if (!fun) {
+ // basic validator; it's assumed that every subclass would want this
+ throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);
+ }
+
+ ddocValidator(doc, viewName);
+ checkQueryParseError(opts, fun);
+
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ fullViewName,
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ false,
+ /* localDocName */ localDocName);
+
+ if (opts.stale === 'ok' || opts.stale === 'update_after') {
+ if (opts.stale === 'update_after') {
+ nextTick(function () {
+ updateView(view, updateViewOpts);
+ });
+ }
+ return queryView(view, opts);
+ } else { // stale not ok
+ await updateView(view, updateViewOpts);
+ return queryView(view, opts);
+ }
+ }
+ }
+
+ function abstractQuery(fun, opts, callback) {
+ const db = this;
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts = opts ? coerceOptions(opts) : {};
+
+ if (typeof fun === 'function') {
+ fun = {map : fun};
+ }
+
+ const promise = Promise.resolve().then(function () {
+ return queryPromised(db, fun, opts);
+ });
+ promisedCallback(promise, callback);
+ return promise;
+ }
+
+ const abstractViewCleanup = callbackify(function () {
+ const db = this;
+ /* istanbul ignore next */
+ if (typeof db._viewCleanup === 'function') {
+ return customViewCleanup(db);
+ }
+ if (isRemote(db)) {
+ return httpViewCleanup(db);
+ }
+ return localViewCleanup(db);
+ });
+
+ return {
+ query: abstractQuery,
+ viewCleanup: abstractViewCleanup
+ };
+}
+
+export { createAbstractMapReduce as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-http.js b/packages/pouchdb-lib/lib/pouchdb-adapter-http.js
new file mode 100644
index 0000000000..84379ca2f7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-http.js
@@ -0,0 +1,1127 @@
+// // 'use strict'; is default when ESM
+
+// import pool from './promise-pool';
+// import {toBase64} from 'pouchdb-crypto';
+// import { fetch, Headers, AbortController } from 'pouchdb-fetch';
+
+// import {
+// createError,
+// BAD_ARG,
+// generateErrorFromResponse
+// } from 'pouchdb-errors';
+
+// import {
+// pick,
+// filterChange,
+// adapterFun as coreAdapterFun,
+// explainError,
+// clone,
+// parseUri,
+// bulkGetShim,
+// flatten,
+// nextTick
+// } from 'pouchdb-utils';
+
+// import {
+// binaryStringToBlobOrBuffer as binStringToBuffer,
+// base64StringToBlobOrBuffer as b64StringToBuffer,
+// blobOrBufferToBase64 as blufferToBase64
+// } from 'pouchdb-binary-utils';
+
+// const CHANGES_BATCH_SIZE = 25;
+// const MAX_SIMULTANEOUS_REVS = 50;
+// const CHANGES_TIMEOUT_BUFFER = 5000;
+// const DEFAULT_HEARTBEAT = 10000;
+
+// const supportsBulkGetMap = {};
+
+// function readAttachmentsAsBlobOrBuffer(row) {
+// const doc = row.doc || row.ok;
+// const atts = doc && doc._attachments;
+// if (!atts) {
+// return;
+// }
+// Object.keys(atts).forEach(function (filename) {
+// const att = atts[filename];
+// att.data = b64StringToBuffer(att.data, att.content_type);
+// });
+// }
+
+// function encodeDocId(id) {
+// if (/^_design/.test(id)) {
+// return '_design/' + encodeURIComponent(id.slice(8));
+// }
+// if (id.startsWith('_local/')) {
+// return '_local/' + encodeURIComponent(id.slice(7));
+// }
+// return encodeURIComponent(id);
+// }
+
+// function preprocessAttachments(doc) {
+// if (!doc._attachments || !Object.keys(doc._attachments)) {
+// return Promise.resolve();
+// }
+
+// return Promise.all(Object.keys(doc._attachments).map(function (key) {
+// const attachment = doc._attachments[key];
+// if (attachment.data && typeof attachment.data !== 'string') {
+// return new Promise(function (resolve) {
+// blufferToBase64(attachment.data, resolve);
+// }).then(function (b64) {
+// attachment.data = b64;
+// });
+// }
+// }));
+// }
+
+// function hasUrlPrefix(opts) {
+// if (!opts.prefix) {
+// return false;
+// }
+// const protocol = parseUri(opts.prefix).protocol;
+// return protocol === 'http' || protocol === 'https';
+// }
+
+// // Get all the information you possibly can about the URI given by name and
+// // return it as a suitable object.
+// function getHost(name, opts) {
+// // encode db name if opts.prefix is a url (#5574)
+// if (hasUrlPrefix(opts)) {
+// const dbName = opts.name.substr(opts.prefix.length);
+// // Ensure prefix has a trailing slash
+// const prefix = opts.prefix.replace(/\/?$/, '/');
+// name = prefix + encodeURIComponent(dbName);
+// }
+
+// const uri = parseUri(name);
+// if (uri.user || uri.password) {
+// uri.auth = {username: uri.user, password: uri.password};
+// }
+
+// // Split the path part of the URI into parts using '/' as the delimiter
+// // after removing any leading '/' and any trailing '/'
+// const parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
+
+// uri.db = parts.pop();
+// // Prevent double encoding of URI component
+// if (uri.db.indexOf('%') === -1) {
+// uri.db = encodeURIComponent(uri.db);
+// }
+
+// uri.path = parts.join('/');
+
+// return uri;
+// }
+
+// // Generate a URL with the host data given by opts and the given path
+// function genDBUrl(opts, path) {
+// return new URL({...opts, pathname: opts.db + '/' + path });
+// }
+
+// function paramsToStr(params) {
+// const paramKeys = Object.keys(params);
+// if (paramKeys.length === 0) {
+// return '';
+// }
+
+// return '?' + paramKeys.map(key => key + '=' + encodeURIComponent(params[key])).join('&');
+// }
+
+// function shouldCacheBust(opts) {
+// const ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?
+// navigator.userAgent.toLowerCase() : '';
+// const isIE = ua.indexOf('msie') !== -1;
+// const isTrident = ua.indexOf('trident') !== -1;
+// const isEdge = ua.indexOf('edge') !== -1;
+// const isGET = !('method' in opts) || opts.method === 'GET';
+// return (isIE || isTrident || isEdge) && isGET;
+// }
+
+// // Implements the PouchDB API for dealing with CouchDB instances over HTTP
+// function HttpPouch(opts, callback) {
+
+// // The functions that will be publicly available for HttpPouch
+// const api = this;
+
+// const host = getHost(opts.name, opts);
+// const dbUrl = genDBUrl(host, '');
+
+// opts = clone(opts);
+
+// const ourFetch = async function (url, options) {
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// options.credentials = 'include';
+
+// if (opts.auth || host.auth) {
+// const nAuth = opts.auth || host.auth;
+// const str = nAuth.username + ':' + nAuth.password;
+
+// const token = await toBase64(str);
+// //btoa(unescape(encodeURIComponent(str)));
+// options.headers.set('Authorization', 'Basic ' + token);
+// }
+
+// const headers = opts.headers || {};
+// Object.keys(headers).forEach(function (key) {
+// options.headers.append(key, headers[key]);
+// });
+
+// /* istanbul ignore if */
+// if (shouldCacheBust(options)) {
+// url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();
+// }
+
+// const fetchFun = opts.fetch || fetch;
+// return await fetchFun(url, options);
+// };
+
+// function adapterFun(name, fun) {
+// return (function (...args) {
+// setup().then(function () {
+// return fun.apply(this, args);
+// }).catch((e)=>args.pop()(e));
+// }).bind(api);
+// }
+
+// async function fetchJSON(url, options) {
+
+// const result = {};
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// if (!options.headers.get('Content-Type')) {
+// options.headers.set('Content-Type', 'application/json');
+// }
+// if (!options.headers.get('Accept')) {
+// options.headers.set('Accept', 'application/json');
+// }
+
+// const response = await ourFetch(url, options);
+// result.ok = response.ok;
+// result.status = response.status;
+// const json = await response.json();
+
+// result.data = json;
+// if (!result.ok) {
+// result.data.status = result.status;
+// const err = generateErrorFromResponse(result.data);
+// throw err;
+// }
+
+// if (Array.isArray(result.data)) {
+// result.data = result.data.map(function (v) {
+// if (v.error || v.missing) {
+// return generateErrorFromResponse(v);
+// } else {
+// return v;
+// }
+// });
+// }
+
+// return result;
+// }
+
+// let setupPromise;
+
+// async function setup() {
+// if (opts.skip_setup) {
+// return Promise.resolve();
+// }
+
+// // If there is a setup in process or previous successful setup
+// // done then we will use that
+// // If previous setups have been rejected we will try again
+// if (setupPromise) {
+// return setupPromise;
+// }
+
+// setupPromise = fetchJSON(dbUrl).catch(function (err) {
+// if (err && err.status && err.status === 404) {
+// // Doesnt exist, create it
+// explainError(404, 'PouchDB is just detecting if the remote exists.');
+// return fetchJSON(dbUrl, {method: 'PUT'});
+// } else {
+// return Promise.reject(err);
+// }
+// }).catch(function (err) {
+// // If we try to create a database that already exists, skipped in
+// // istanbul since its catching a race condition.
+// /* istanbul ignore if */
+// if (err && err.status && err.status === 412) {
+// return true;
+// }
+// return Promise.reject(err);
+// });
+
+// setupPromise.catch(function () {
+// setupPromise = null;
+// });
+
+// return setupPromise;
+// }
+
+// nextTick(function () {
+// callback(null, api);
+// });
+
+// api._remote = true;
+
+// /* istanbul ignore next */
+// api.type = function () {
+// return 'http';
+// };
+
+// api.id = adapterFun('id', async function (callback) {
+// let result;
+// try {
+// const response = await ourFetch(new URL(host));
+// result = await response.json();
+// } catch (err) {
+// result = {};
+// }
+
+// // Bad response or missing `uuid` should not prevent ID generation.
+// const uuid = (result && result.uuid) ? (result.uuid + host.db) : genDBUrl(host, '');
+// callback(null, uuid);
+// });
+
+// // Sends a POST request to the host calling the couchdb _compact function
+// // version: The version of CouchDB it is running
+// api.compact = adapterFun('compact', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// await fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'});
+
+// function ping() {
+// api.info(function (err, res) {
+// // CouchDB may send a "compact_running:true" if it's
+// // already compacting. PouchDB Server doesn't.
+// /* istanbul ignore else */
+// if (res && !res.compact_running) {
+// callback(null, {ok: true});
+// } else {
+// setTimeout(ping, opts.interval || 200);
+// }
+// });
+// }
+// // Ping the http if it's finished compaction
+// ping();
+// });
+
+// api.bulkGet = coreAdapterFun('bulkGet', function (opts, callback) {
+// const self = this;
+
+// async function doBulkGet(cb) {
+// const params = {};
+// if (opts.revs) {
+// params.revs = true;
+// }
+// if (opts.attachments) {
+// /* istanbul ignore next */
+// params.attachments = true;
+// }
+// if (opts.latest) {
+// params.latest = true;
+// }
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {
+// method: 'POST',
+// body: JSON.stringify({ docs: opts.docs})
+// });
+
+// if (opts.attachments && opts.binary) {
+// result.data.results.forEach(function (res) {
+// res.docs.forEach(readAttachmentsAsBlobOrBuffer);
+// });
+// }
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// }
+
+// /* istanbul ignore next */
+// function doBulkGetShim() {
+// // avoid "url too long error" by splitting up into multiple requests
+// const batchSize = MAX_SIMULTANEOUS_REVS;
+// const numBatches = Math.ceil(opts.docs.length / batchSize);
+// let numDone = 0;
+// const results = new Array(numBatches);
+
+// function onResult(batchNum) {
+// return function (err, res) {
+// // err is impossible because shim returns a list of errs in that case
+// results[batchNum] = res.results;
+// if (++numDone === numBatches) {
+// callback(null, {results: flatten(results)});
+// }
+// };
+// }
+
+// for (let i = 0; i < numBatches; i++) {
+// const subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);
+// subOpts.docs = opts.docs.slice(i * batchSize,
+// Math.min(opts.docs.length, (i + 1) * batchSize));
+// bulkGetShim(self, subOpts, onResult(i));
+// }
+// }
+
+// // mark the whole database as either supporting or not supporting _bulk_get
+// const dbUrl = new URL(host);
+// const supportsBulkGet = supportsBulkGetMap[dbUrl];
+
+// /* istanbul ignore next */
+// if (typeof supportsBulkGet !== 'boolean') {
+// // check if this database supports _bulk_get
+// doBulkGet(function (err, res) {
+// if (err) {
+// supportsBulkGetMap[dbUrl] = false;
+// explainError(
+// err.status,
+// 'PouchDB is just detecting if the remote ' +
+// 'supports the _bulk_get API.'
+// );
+// doBulkGetShim();
+// } else {
+// supportsBulkGetMap[dbUrl] = true;
+// callback(null, res);
+// }
+// });
+// } else if (supportsBulkGet) {
+// doBulkGet(callback);
+// } else {
+// doBulkGetShim();
+// }
+// });
+
+// // Calls GET on the host, which gets back a JSON string containing
+// // couchdb: A welcome string
+// // version: The version of CouchDB it is running
+// api._info = async function (callback) {
+// try {
+// await setup();
+// const response = await ourFetch(genDBUrl(host, ''));
+// const info = await response.json();
+// info.host = genDBUrl(host, '');
+// callback(null, info);
+// } catch (err) {
+// callback(err);
+// }
+// };
+
+// api.fetch = async function (path, options) {
+// await setup();
+// const url = path.substring(0, 1) === '/' ?
+// new URL(path.substring(1), new URL(host)) :
+// genDBUrl(host, path);
+// return ourFetch(url, options);
+// };
+
+// // Get the document with the given id from the database given by host.
+// // The id could be solely the _id in the database, or it may be a
+// // _design/ID or _local/ID path
+// api.get = adapterFun('get', async function (id, opts, callback) {
+// // If no options were given, set the callback to the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+
+// if (opts.revs) {
+// params.revs = true;
+// }
+
+// if (opts.revs_info) {
+// params.revs_info = true;
+// }
+
+// if (opts.latest) {
+// params.latest = true;
+// }
+
+// if (opts.open_revs) {
+// if (opts.open_revs !== "all") {
+// opts.open_revs = JSON.stringify(opts.open_revs);
+// }
+// params.open_revs = opts.open_revs;
+// }
+
+// if (opts.rev) {
+// params.rev = opts.rev;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = opts.conflicts;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = opts.update_seq;
+// }
+
+// id = encodeDocId(id);
+
+// function fetchAttachments(doc) {
+// const atts = doc._attachments;
+// const filenames = atts && Object.keys(atts);
+// if (!atts || !filenames.length) {
+// return;
+// }
+// // we fetch these manually in separate XHRs, because
+// // Sync Gateway would normally send it back as multipart/mixed,
+// // which we cannot parse. Also, this is more efficient than
+// // receiving attachments as base64-encoded strings.
+// async function fetchData(filename) {
+// const att = atts[filename];
+// const path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +
+// '?rev=' + doc._rev;
+
+// const response = await ourFetch(genDBUrl(host, path));
+
+// let blob;
+// if ('buffer' in response) {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// let data;
+// if (opts.binary) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = att.content_type;
+// }
+// data = blob;
+// } else {
+// data = await toBase64(blob);
+// // await new Promise(function (resolve) {
+// // blufferToBase64(blob, resolve);
+// // });
+// }
+
+// delete att.stub;
+// delete att.length;
+// att.data = data;
+// }
+
+// const promiseFactories = filenames.map(function (filename) {
+// return function () {
+// return fetchData(filename);
+// };
+// });
+
+// // This limits the number of parallel xhr requests to 5 any time
+// // to avoid issues with maximum browser request limits
+// return pool(promiseFactories, 5);
+// }
+
+// function fetchAllAttachments(docOrDocs) {
+// if (Array.isArray(docOrDocs)) {
+// return Promise.all(docOrDocs.map(function (doc) {
+// if (doc.ok) {
+// return fetchAttachments(doc.ok);
+// }
+// }));
+// }
+// return fetchAttachments(docOrDocs);
+// }
+
+// const url = genDBUrl(host, id + paramsToStr(params));
+// try {
+// const res = await fetchJSON(url);
+// if (opts.attachments) {
+// await fetchAllAttachments(res.data);
+// }
+// callback(null, res.data);
+// } catch (error) {
+// error.docId = id;
+// callback(error);
+// }
+// });
+
+
+// // Delete the document given by doc from the database given by host.
+// api.remove = adapterFun('remove', async function (docOrId, optsOrRev, opts, cb) {
+// let doc;
+// if (typeof optsOrRev === 'string') {
+// // id, rev, opts, callback style
+// doc = {
+// _id: docOrId,
+// _rev: optsOrRev
+// };
+// if (typeof opts === 'function') {
+// cb = opts;
+// opts = {};
+// }
+// } else {
+// // doc, opts, callback style
+// doc = docOrId;
+// if (typeof optsOrRev === 'function') {
+// cb = optsOrRev;
+// opts = {};
+// } else {
+// cb = opts;
+// opts = optsOrRev;
+// }
+// }
+
+// const rev = (doc._rev || opts.rev);
+// const url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// });
+
+// function encodeAttachmentId(attachmentId) {
+// return attachmentId.split("/").map(encodeURIComponent).join("/");
+// }
+
+// // Get the attachment
+// api.getAttachment = adapterFun('getAttachment', async function (docId, attachmentId,
+// opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// const params = opts.rev ? ('?rev=' + opts.rev) : '';
+// const url = genDBUrl(host, encodeDocId(docId)) + '/' +
+// encodeAttachmentId(attachmentId) + params;
+// let contentType;
+// try {
+// const response = await ourFetch(url, {method: 'GET'});
+
+// if (!response.ok) {
+// throw response;
+// }
+
+// contentType = response.headers.get('content-type');
+// let blob;
+// if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// // TODO: also remove
+// if (typeof process !== 'undefined' && !process.browser) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = contentType;
+// }
+// }
+// callback(null, blob);
+// } catch (err) {
+// callback(err);
+// }
+// });
+
+// // Remove the attachment given by the id and rev
+// api.removeAttachment = adapterFun('removeAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// callback,
+// ) {
+// const url = genDBUrl(host, encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Add the attachment given by blob and its contentType property
+// // to the document with the given id, the revision given by rev, and
+// // add it to the database given by host.
+// api.putAttachment = adapterFun('putAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// blob,
+// type,
+// callback,
+// ) {
+// if (typeof type === 'function') {
+// callback = type;
+// type = blob;
+// blob = rev;
+// rev = null;
+// }
+// const id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);
+// let url = genDBUrl(host, id);
+// if (rev) {
+// url += '?rev=' + rev;
+// }
+
+// if (typeof blob === 'string') {
+// // input is assumed to be a base64 string
+// let binary;
+// try {
+// binary = atob(blob);
+// } catch (err) {
+// return callback(createError(BAD_ARG,
+// 'Attachment is not a valid base64 string'));
+// }
+// blob = binary ? binStringToBuffer(binary, type) : '';
+// }
+
+// try {
+// // Add the attachment
+// const result = await fetchJSON(url, {
+// headers: new Headers({'Content-Type': type}),
+// method: 'PUT',
+// body: blob
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Update/create multiple documents given by req in the database
+// // given by host.
+// api._bulkDocs = async function (req, opts, callback) {
+// // If new_edits=false then it prevents the database from creating
+// // new revision numbers for the documents. Instead it just uses
+// // the old ones. This is used in database replication.
+// req.new_edits = opts.new_edits;
+
+// try {
+// await setup();
+// await Promise.all(req.docs.map(preprocessAttachments));
+
+// // Update/create the documents
+// const result = await fetchJSON(genDBUrl(host, '_bulk_docs'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // Update/create document
+// api._put = async function (doc, opts, callback) {
+// try {
+// await setup();
+// await preprocessAttachments(doc);
+
+// const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
+// method: 'PUT',
+// body: JSON.stringify(doc)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// error.docId = doc && doc._id;
+// callback(error);
+// }
+// };
+
+
+// // Get a listing of the documents in the database given
+// // by host and ordered by increasing id.
+// api.allDocs = adapterFun('allDocs', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+// let body;
+// let method = 'GET';
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// if (opts.include_docs) {
+// params.include_docs = true;
+// }
+
+// // added in CouchDB 1.6.0
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.key) {
+// params.key = JSON.stringify(opts.key);
+// }
+
+// if (opts.start_key) {
+// opts.startkey = opts.start_key;
+// }
+
+// if (opts.startkey) {
+// params.startkey = JSON.stringify(opts.startkey);
+// }
+
+// if (opts.end_key) {
+// opts.endkey = opts.end_key;
+// }
+
+// if (opts.endkey) {
+// params.endkey = JSON.stringify(opts.endkey);
+// }
+
+// if (typeof opts.inclusive_end !== 'undefined') {
+// params.inclusive_end = !!opts.inclusive_end;
+// }
+
+// if (typeof opts.limit !== 'undefined') {
+// params.limit = opts.limit;
+// }
+
+// if (typeof opts.skip !== 'undefined') {
+// params.skip = opts.skip;
+// }
+
+// const paramStr = paramsToStr(params);
+
+// if (typeof opts.keys !== 'undefined') {
+// method = 'POST';
+// body = {keys: opts.keys};
+// }
+
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {
+// method: method,
+// body: JSON.stringify(body)
+// });
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
+// }
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Get a list of changes made to documents in the database given by host.
+// // TODO According to the README, there should be two other methods here,
+// // api.changes.addListener and api.changes.removeListener.
+// api._changes = function (opts) {
+
+// // We internally page the results of a changes request, this means
+// // if there is a large set of changes to be returned we can start
+// // processing them quicker instead of waiting on the entire
+// // set of changes to return and attempting to process them at once
+// const batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;
+
+// opts = clone(opts);
+
+// if (opts.continuous && !('heartbeat' in opts)) {
+// opts.heartbeat = DEFAULT_HEARTBEAT;
+// }
+
+// let requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;
+
+// // ensure CHANGES_TIMEOUT_BUFFER applies
+// if ('timeout' in opts && opts.timeout &&
+// (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// /* istanbul ignore if */
+// if ('heartbeat' in opts && opts.heartbeat &&
+// (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// const params = {};
+// if ('timeout' in opts && opts.timeout) {
+// params.timeout = opts.timeout;
+// }
+
+// const limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;
+// let leftToFetch = limit;
+
+// if (opts.style) {
+// params.style = opts.style;
+// }
+
+// if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {
+// params.include_docs = true;
+// }
+
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.continuous) {
+// params.feed = 'longpoll';
+// }
+
+// if (opts.seq_interval) {
+// params.seq_interval = opts.seq_interval;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if ('heartbeat' in opts) {
+// // If the heartbeat value is false, it disables the default heartbeat
+// if (opts.heartbeat) {
+// params.heartbeat = opts.heartbeat;
+// }
+// }
+
+// if (opts.filter && typeof opts.filter === 'string') {
+// params.filter = opts.filter;
+// }
+
+// if (opts.view && typeof opts.view === 'string') {
+// params.filter = '_view';
+// params.view = opts.view;
+// }
+
+// // If opts.query_params exists, pass it through to the changes request.
+// // These parameters may be used by the filter on the source database.
+// if (opts.query_params && typeof opts.query_params === 'object') {
+// for (const param_name in opts.query_params) {
+// /* istanbul ignore else */
+// if (Object.prototype.hasOwnProperty.call(opts.query_params, param_name)) {
+// params[param_name] = opts.query_params[param_name];
+// }
+// }
+// }
+
+// let method = 'GET';
+// let body;
+
+// if (opts.doc_ids) {
+// // set this automagically for the user; it's annoying that couchdb
+// // requires both a "filter" and a "doc_ids" param.
+// params.filter = '_doc_ids';
+// method = 'POST';
+// body = {doc_ids: opts.doc_ids };
+// }
+// /* istanbul ignore next */
+// else if (opts.selector) {
+// // set this automagically for the user, similar to above
+// params.filter = '_selector';
+// method = 'POST';
+// body = {selector: opts.selector };
+// }
+
+// const controller = new AbortController();
+// let lastFetchedSeq;
+
+// // Get all the changes starting wtih the one immediately after the
+// // sequence number given by since.
+// const fetchData = async function (since, callback) {
+// if (opts.aborted) {
+// return;
+// }
+// params.since = since;
+// // "since" can be any kind of json object in Cloudant/CouchDB 2.x
+// /* istanbul ignore next */
+// if (typeof params.since === "object") {
+// params.since = JSON.stringify(params.since);
+// }
+
+// if (opts.descending) {
+// if (limit) {
+// params.limit = leftToFetch;
+// }
+// } else {
+// params.limit = (!limit || leftToFetch > batchSize) ?
+// batchSize : leftToFetch;
+// }
+
+// // Set the options for the ajax call
+// const url = genDBUrl(host, '_changes' + paramsToStr(params));
+// const fetchOpts = {
+// signal: controller.signal,
+// method: method,
+// body: JSON.stringify(body)
+// };
+// lastFetchedSeq = since;
+
+// /* istanbul ignore if */
+// if (opts.aborted) {
+// return;
+// }
+
+// // Get the changes
+// try {
+// await setup();
+// const result = await fetchJSON(url, fetchOpts);
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // If opts.since exists, get all the changes from the sequence
+// // number given by opts.since. Otherwise, get all the changes
+// // from the sequence number 0.
+// const results = {results: []};
+
+// const fetched = function (err, res) {
+// if (opts.aborted) {
+// return;
+// }
+// let raw_results_length = 0;
+// // If the result of the ajax call (res) contains changes (res.results)
+// if (res && res.results) {
+// raw_results_length = res.results.length;
+// results.last_seq = res.last_seq;
+// let pending = null;
+// let lastSeq = null;
+// // Attach 'pending' property if server supports it (CouchDB 2.0+)
+// /* istanbul ignore if */
+// if (typeof res.pending === 'number') {
+// pending = res.pending;
+// }
+// if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {
+// lastSeq = results.last_seq;
+// }
+// // For each change
+// const req = {};
+// req.query = opts.query_params;
+// res.results = res.results.filter(function (c) {
+// leftToFetch--;
+// const ret = filterChange(opts)(c);
+// if (ret) {
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// readAttachmentsAsBlobOrBuffer(c);
+// }
+// if (opts.return_docs) {
+// results.results.push(c);
+// }
+// opts.onChange(c, pending, lastSeq);
+// }
+// return ret;
+// });
+// } else if (err) {
+// // In case of an error, stop listening for changes and call
+// // opts.complete
+// opts.aborted = true;
+// opts.complete(err);
+// return;
+// }
+
+// // The changes feed may have timed out with no results
+// // if so reuse last update sequence
+// if (res && res.last_seq) {
+// lastFetchedSeq = res.last_seq;
+// }
+
+// const finished = (limit && leftToFetch <= 0) ||
+// (res && raw_results_length < batchSize) ||
+// (opts.descending);
+
+// if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {
+// // Queue a call to fetch again with the newest sequence number
+// nextTick(function () { fetchData(lastFetchedSeq, fetched); });
+// } else {
+// // We're done, call the callback
+// opts.complete(null, results);
+// }
+// };
+
+// fetchData(opts.since || 0, fetched);
+
+// // Return a method to cancel this method from processing any more
+// return {
+// cancel: function () {
+// opts.aborted = true;
+// controller.abort();
+// }
+// };
+// };
+
+// // Given a set of document/revision IDs (given by req), tets the subset of
+// // those that do NOT correspond to revisions stored in the database.
+// // See http://wiki.apache.org/couchdb/HttpPostRevsDiff
+// api.revsDiff = adapterFun('revsDiff', async function (req, opts, callback) {
+// // If no options were given, set the callback to be the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+
+// try {
+// // Get the missing document/revision IDs
+// const result = await fetchJSON(genDBUrl(host, '_revs_diff'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// api._close = function (callback) {
+// callback();
+// };
+
+// api._destroy = async function (options, callback) {
+// try {
+// const json = await fetchJSON(genDBUrl(host, ''), {method: 'DELETE'});
+// callback(null, json);
+// } catch (error) {
+// if (error.status === 404) {
+// callback(null, {ok: true});
+// } else {
+// callback(error);
+// }
+// }
+// };
+// }
+
+// // HttpPouch is a valid adapter.
+// HttpPouch.valid = function () {
+// return true;
+// };
+
+// export default function (PouchDB) {
+// PouchDB.adapter('http', HttpPouch, false);
+// PouchDB.adapter('https', HttpPouch, false);
+// }
+var HttpPouch = {};
+
+export { HttpPouch as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-idb.js b/packages/pouchdb-lib/lib/pouchdb-adapter-idb.js
new file mode 100644
index 0000000000..656af3067b
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-idb.js
@@ -0,0 +1,2041 @@
+import { changesHandler as Changes, uuid, filterChange } from './pouchdb-utils.js';
+import { t as traverseRevTree, w as winningRev } from './rootToLeaf-f8d0e78a.js';
+import { a as isLocalId, i as isDeleted } from './isLocalId-d067de54.js';
+import { c as compactTree, l as latest } from './latest-0521537f.js';
+import { createError, IDB_ERROR, MISSING_STUB, MISSING_DOC, REV_CONFLICT } from './pouchdb-errors.js';
+import { p as parseDoc } from './parseDoc-71681539.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import 'crypto';
+import { p as preprocessAttachments } from './preprocessAttachments-0457f2a2.js';
+import { p as processDocs } from './processDocs-7c802567.js';
+import { p as pick } from './rev-48662a2a.js';
+import { s as safeJsonStringify, a as safeJsonParse } from './safeJsonStringify-6520e306.js';
+import { b as b64ToBluffer } from './base64StringToBlobOrBuffer-3fd03be6.js';
+import { r as readAsBinaryString } from './readAsBinaryString-06e911ba.js';
+import { a as collectConflicts } from './collectConflicts-ad0b7c70.js';
+import { n as nextTick } from './nextTick-ea093886.js';
+import { c as clone } from './clone-7eeb6295.js';
+import { t as toPromise } from './toPromise-f6e385ee.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './upsert-331b6913.js';
+import './stringMd5-15f53eba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './blobOrBufferToBinaryString-56930128.js';
+import './binaryMd5-601b2421.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+
+// IndexedDB requires a versioned database structure, so we use the
+// version here to manage migrations.
+var ADAPTER_VERSION = 5;
+
+// The object stores created for each database
+// DOC_STORE stores the document meta data, its revision history and state
+// Keyed by document id
+var DOC_STORE = 'document-store';
+// BY_SEQ_STORE stores a particular version of a document, keyed by its
+// sequence id
+var BY_SEQ_STORE = 'by-sequence';
+// Where we store attachments
+var ATTACH_STORE = 'attach-store';
+// Where we store many-to-many relations
+// between attachment digests and seqs
+var ATTACH_AND_SEQ_STORE = 'attach-seq-store';
+
+// Where we store database-wide meta data in a single record
+// keyed by id: META_STORE
+var META_STORE = 'meta-store';
+// Where we store local documents
+var LOCAL_STORE = 'local-store';
+// Where we detect blob support
+var DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';
+
+function idbError(callback) {
+ return function (evt) {
+ var message = 'unknown_error';
+ if (evt.target && evt.target.error) {
+ message = evt.target.error.name || evt.target.error.message;
+ }
+ callback(createError(IDB_ERROR, message, evt.type));
+ };
+}
+
+// Unfortunately, the metadata has to be stringified
+// when it is put into the database, because otherwise
+// IndexedDB can throw errors for deeply-nested objects.
+// Originally we just used JSON.parse/JSON.stringify; now
+// we use this custom vuvuzela library that avoids recursion.
+// If we could do it all over again, we'd probably use a
+// format for the revision trees other than JSON.
+function encodeMetadata(metadata, winningRev, deleted) {
+ return {
+ data: safeJsonStringify(metadata),
+ winningRev: winningRev,
+ deletedOrLocal: deleted ? '1' : '0',
+ seq: metadata.seq, // highest seq for this doc
+ id: metadata.id
+ };
+}
+
+function decodeMetadata(storedObject) {
+ if (!storedObject) {
+ return null;
+ }
+ var metadata = safeJsonParse(storedObject.data);
+ metadata.winningRev = storedObject.winningRev;
+ metadata.deleted = storedObject.deletedOrLocal === '1';
+ metadata.seq = storedObject.seq;
+ return metadata;
+}
+
+// read the doc back out from the database. we don't store the
+// _id or _rev because we already have _doc_id_rev.
+function decodeDoc(doc) {
+ if (!doc) {
+ return doc;
+ }
+ var idx = doc._doc_id_rev.lastIndexOf(':');
+ doc._id = doc._doc_id_rev.substring(0, idx - 1);
+ doc._rev = doc._doc_id_rev.substring(idx + 1);
+ delete doc._doc_id_rev;
+ return doc;
+}
+
+// Read a blob from the database, encoding as necessary
+// and translating from base64 if the IDB doesn't support
+// native Blobs
+function readBlobData(body, type, asBlob, callback) {
+ if (asBlob) {
+ if (!body) {
+ callback(new Blob([''], {type: type}));
+ } else if (typeof body !== 'string') { // we have blob support
+ callback(body);
+ } else { // no blob support
+ callback(b64ToBluffer(body, type));
+ }
+ } else { // as base64 string
+ if (!body) {
+ callback('');
+ } else if (typeof body !== 'string') { // we have blob support
+ readAsBinaryString(body, function (binary) {
+ callback(btoa(binary));
+ });
+ } else { // no blob support
+ callback(body);
+ }
+ }
+}
+
+function fetchAttachmentsIfNecessary(doc, opts, txn, cb) {
+ var attachments = Object.keys(doc._attachments || {});
+ if (!attachments.length) {
+ return cb && cb();
+ }
+ var numDone = 0;
+
+ function checkDone() {
+ if (++numDone === attachments.length && cb) {
+ cb();
+ }
+ }
+
+ function fetchAttachment(doc, att) {
+ var attObj = doc._attachments[att];
+ var digest = attObj.digest;
+ var req = txn.objectStore(ATTACH_STORE).get(digest);
+ req.onsuccess = function (e) {
+ attObj.body = e.target.result.body;
+ checkDone();
+ };
+ }
+
+ attachments.forEach(function (att) {
+ if (opts.attachments && opts.include_docs) {
+ fetchAttachment(doc, att);
+ } else {
+ doc._attachments[att].stub = true;
+ checkDone();
+ }
+ });
+}
+
+// IDB-specific postprocessing necessary because
+// we don't know whether we stored a true Blob or
+// a base64-encoded string, and if it's a Blob it
+// needs to be read outside of the transaction context
+function postProcessAttachments(results, asBlob) {
+ return Promise.all(results.map(function (row) {
+ if (row.doc && row.doc._attachments) {
+ var attNames = Object.keys(row.doc._attachments);
+ return Promise.all(attNames.map(function (att) {
+ var attObj = row.doc._attachments[att];
+ if (!('body' in attObj)) { // already processed
+ return;
+ }
+ var body = attObj.body;
+ var type = attObj.content_type;
+ return new Promise(function (resolve) {
+ readBlobData(body, type, asBlob, function (data) {
+ row.doc._attachments[att] = Object.assign(
+ pick(attObj, ['digest', 'content_type']),
+ {data: data}
+ );
+ resolve();
+ });
+ });
+ }));
+ }
+ }));
+}
+
+function compactRevs(revs, docId, txn) {
+
+ var possiblyOrphanedDigests = [];
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var attStore = txn.objectStore(ATTACH_STORE);
+ var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+ var count = revs.length;
+
+ function checkDone() {
+ count--;
+ if (!count) { // done processing all revs
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function deleteOrphanedAttachments() {
+ if (!possiblyOrphanedDigests.length) {
+ return;
+ }
+ possiblyOrphanedDigests.forEach(function (digest) {
+ var countReq = attAndSeqStore.index('digestSeq').count(
+ IDBKeyRange.bound(
+ digest + '::', digest + '::\uffff', false, false));
+ countReq.onsuccess = function (e) {
+ var count = e.target.result;
+ if (!count) {
+ // orphaned
+ attStore.delete(digest);
+ }
+ };
+ });
+ }
+
+ revs.forEach(function (rev) {
+ var index = seqStore.index('_doc_id_rev');
+ var key = docId + "::" + rev;
+ index.getKey(key).onsuccess = function (e) {
+ var seq = e.target.result;
+ if (typeof seq !== 'number') {
+ return checkDone();
+ }
+ seqStore.delete(seq);
+
+ var cursor = attAndSeqStore.index('seq')
+ .openCursor(IDBKeyRange.only(seq));
+
+ cursor.onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var digest = cursor.value.digestSeq.split('::')[0];
+ possiblyOrphanedDigests.push(digest);
+ attAndSeqStore.delete(cursor.primaryKey);
+ cursor.continue();
+ } else { // done
+ checkDone();
+ }
+ };
+ };
+ });
+}
+
+function openTransactionSafely(idb, stores, mode) {
+ try {
+ return {
+ txn: idb.transaction(stores, mode)
+ };
+ } catch (err) {
+ return {
+ error: err
+ };
+ }
+}
+
+var changesHandler = new Changes();
+
+function idbBulkDocs(dbOpts, req, opts, api, idb, callback) {
+ var docInfos = req.docs;
+ var txn;
+ var docStore;
+ var bySeqStore;
+ var attachStore;
+ var attachAndSeqStore;
+ var metaStore;
+ var docInfoError;
+ var metaDoc;
+
+ for (var i = 0, len = docInfos.length; i < len; i++) {
+ var doc = docInfos[i];
+ if (doc._id && isLocalId(doc._id)) {
+ continue;
+ }
+ doc = docInfos[i] = parseDoc(doc, opts.new_edits, dbOpts);
+ if (doc.error && !docInfoError) {
+ docInfoError = doc;
+ }
+ }
+
+ if (docInfoError) {
+ return callback(docInfoError);
+ }
+
+ var allDocsProcessed = false;
+ var docCountDelta = 0;
+ var results = new Array(docInfos.length);
+ var fetchedDocs = new Map();
+ var preconditionErrored = false;
+ var blobType = api._meta.blobSupport ? 'blob' : 'base64';
+
+ preprocessAttachments(docInfos, blobType, function (err) {
+ if (err) {
+ return callback(err);
+ }
+ startTransaction();
+ });
+
+ function startTransaction() {
+
+ var stores = [
+ DOC_STORE, BY_SEQ_STORE,
+ ATTACH_STORE,
+ LOCAL_STORE, ATTACH_AND_SEQ_STORE,
+ META_STORE
+ ];
+ var txnResult = openTransactionSafely(idb, stores, 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ txn.onabort = idbError(callback);
+ txn.ontimeout = idbError(callback);
+ txn.oncomplete = complete;
+ docStore = txn.objectStore(DOC_STORE);
+ bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ attachStore = txn.objectStore(ATTACH_STORE);
+ attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+ metaStore = txn.objectStore(META_STORE);
+
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ metaDoc = e.target.result;
+ updateDocCountIfReady();
+ };
+
+ verifyAttachments(function (err) {
+ if (err) {
+ preconditionErrored = true;
+ return callback(err);
+ }
+ fetchExistingDocs();
+ });
+ }
+
+ function onAllDocsProcessed() {
+ allDocsProcessed = true;
+ updateDocCountIfReady();
+ }
+
+ function idbProcessDocs() {
+ processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,
+ txn, results, writeDoc, opts, onAllDocsProcessed);
+ }
+
+ function updateDocCountIfReady() {
+ if (!metaDoc || !allDocsProcessed) {
+ return;
+ }
+ // caching the docCount saves a lot of time in allDocs() and
+ // info(), which is why we go to all the trouble of doing this
+ metaDoc.docCount += docCountDelta;
+ metaStore.put(metaDoc);
+ }
+
+ function fetchExistingDocs() {
+
+ if (!docInfos.length) {
+ return;
+ }
+
+ var numFetched = 0;
+
+ function checkDone() {
+ if (++numFetched === docInfos.length) {
+ idbProcessDocs();
+ }
+ }
+
+ function readMetadata(event) {
+ var metadata = decodeMetadata(event.target.result);
+
+ if (metadata) {
+ fetchedDocs.set(metadata.id, metadata);
+ }
+ checkDone();
+ }
+
+ for (var i = 0, len = docInfos.length; i < len; i++) {
+ var docInfo = docInfos[i];
+ if (docInfo._id && isLocalId(docInfo._id)) {
+ checkDone(); // skip local docs
+ continue;
+ }
+ var req = docStore.get(docInfo.metadata.id);
+ req.onsuccess = readMetadata;
+ }
+ }
+
+ function complete() {
+ if (preconditionErrored) {
+ return;
+ }
+
+ changesHandler.notify(api._meta.name);
+ callback(null, results);
+ }
+
+ function verifyAttachment(digest, callback) {
+
+ var req = attachStore.get(digest);
+ req.onsuccess = function (e) {
+ if (!e.target.result) {
+ var err = createError(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ err.status = 412;
+ callback(err);
+ } else {
+ callback();
+ }
+ };
+ }
+
+ function verifyAttachments(finish) {
+
+
+ var digests = [];
+ docInfos.forEach(function (docInfo) {
+ if (docInfo.data && docInfo.data._attachments) {
+ Object.keys(docInfo.data._attachments).forEach(function (filename) {
+ var att = docInfo.data._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ function checkDone() {
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ }
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback) {
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ var doc = docInfo.data;
+ doc._id = docInfo.metadata.id;
+ doc._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ doc._deleted = true;
+ }
+
+ var hasAttachments = doc._attachments &&
+ Object.keys(doc._attachments).length;
+ if (hasAttachments) {
+ return writeAttachments(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+
+ docCountDelta += delta;
+ updateDocCountIfReady();
+
+ finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+
+ function finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback) {
+
+ var doc = docInfo.data;
+ var metadata = docInfo.metadata;
+
+ doc._doc_id_rev = metadata.id + '::' + metadata.rev;
+ delete doc._id;
+ delete doc._rev;
+
+ function afterPutDoc(e) {
+ var revsToDelete = docInfo.stemmedRevs || [];
+
+ if (isUpdate && api.auto_compaction) {
+ revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));
+ }
+
+ if (revsToDelete && revsToDelete.length) {
+ compactRevs(revsToDelete, docInfo.metadata.id, txn);
+ }
+
+ metadata.seq = e.target.result;
+ // Current _rev is calculated from _rev_tree on read
+ // delete metadata.rev;
+ var metadataToStore = encodeMetadata(metadata, winningRev,
+ winningRevIsDeleted);
+ var metaDataReq = docStore.put(metadataToStore);
+ metaDataReq.onsuccess = afterPutMetadata;
+ }
+
+ function afterPutDocError(e) {
+ // ConstraintError, need to update, not put (see #1638 for details)
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ var index = bySeqStore.index('_doc_id_rev');
+ var getKeyReq = index.getKey(doc._doc_id_rev);
+ getKeyReq.onsuccess = function (e) {
+ var putReq = bySeqStore.put(doc, e.target.result);
+ putReq.onsuccess = afterPutDoc;
+ };
+ }
+
+ function afterPutMetadata() {
+ results[resultsIdx] = {
+ ok: true,
+ id: metadata.id,
+ rev: metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ insertAttachmentMappings(docInfo, metadata.seq, callback);
+ }
+
+ var putReq = bySeqStore.put(doc);
+
+ putReq.onsuccess = afterPutDoc;
+ putReq.onerror = afterPutDocError;
+ }
+
+ function writeAttachments(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback) {
+
+
+ var doc = docInfo.data;
+
+ var numDone = 0;
+ var attachments = Object.keys(doc._attachments);
+
+ function collectResults() {
+ if (numDone === attachments.length) {
+ finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+ }
+
+ function attachmentSaved() {
+ numDone++;
+ collectResults();
+ }
+
+ attachments.forEach(function (key) {
+ var att = docInfo.data._attachments[key];
+ if (!att.stub) {
+ var data = att.data;
+ delete att.data;
+ att.revpos = parseInt(winningRev, 10);
+ var digest = att.digest;
+ saveAttachment(digest, data, attachmentSaved);
+ } else {
+ numDone++;
+ collectResults();
+ }
+ });
+ }
+
+ // map seqs to attachment digests, which
+ // we will need later during compaction
+ function insertAttachmentMappings(docInfo, seq, callback) {
+
+ var attsAdded = 0;
+ var attsToAdd = Object.keys(docInfo.data._attachments || {});
+
+ if (!attsToAdd.length) {
+ return callback();
+ }
+
+ function checkDone() {
+ if (++attsAdded === attsToAdd.length) {
+ callback();
+ }
+ }
+
+ function add(att) {
+ var digest = docInfo.data._attachments[att].digest;
+ var req = attachAndSeqStore.put({
+ seq: seq,
+ digestSeq: digest + '::' + seq
+ });
+
+ req.onsuccess = checkDone;
+ req.onerror = function (e) {
+ // this callback is for a constaint error, which we ignore
+ // because this docid/rev has already been associated with
+ // the digest (e.g. when new_edits == false)
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ checkDone();
+ };
+ }
+ for (var i = 0; i < attsToAdd.length; i++) {
+ add(attsToAdd[i]); // do in parallel
+ }
+ }
+
+ function saveAttachment(digest, data, callback) {
+
+
+ var getKeyReq = attachStore.count(digest);
+ getKeyReq.onsuccess = function (e) {
+ var count = e.target.result;
+ if (count) {
+ return callback(); // already exists
+ }
+ var newAtt = {
+ digest: digest,
+ body: data
+ };
+ var putReq = attachStore.put(newAtt);
+ putReq.onsuccess = callback;
+ };
+ }
+}
+
+// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations
+// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or
+// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because
+// we're not processing each document one-at-a-time.
+function runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {
+
+ if (batchSize === -1) {
+ batchSize = 1000;
+ }
+
+ // Bail out of getAll()/getAllKeys() in the following cases:
+ // 1) either method is unsupported - we need both
+ // 2) batchSize is 1 (might as well use IDBCursor)
+ // 3) descending – no real way to do this via getAll()/getAllKeys()
+
+ var useGetAll = typeof objectStore.getAll === 'function' &&
+ typeof objectStore.getAllKeys === 'function' &&
+ batchSize > 1 && !descending;
+
+ var keysBatch;
+ var valuesBatch;
+ var pseudoCursor;
+
+ function onGetAll(e) {
+ valuesBatch = e.target.result;
+ if (keysBatch) {
+ onBatch(keysBatch, valuesBatch, pseudoCursor);
+ }
+ }
+
+ function onGetAllKeys(e) {
+ keysBatch = e.target.result;
+ if (valuesBatch) {
+ onBatch(keysBatch, valuesBatch, pseudoCursor);
+ }
+ }
+
+ function continuePseudoCursor() {
+ if (!keysBatch.length) { // no more results
+ return onBatch();
+ }
+ // fetch next batch, exclusive start
+ var lastKey = keysBatch[keysBatch.length - 1];
+ var newKeyRange;
+ if (keyRange && keyRange.upper) {
+ try {
+ newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,
+ true, keyRange.upperOpen);
+ } catch (e) {
+ if (e.name === "DataError" && e.code === 0) {
+ return onBatch(); // we're done, startkey and endkey are equal
+ }
+ }
+ } else {
+ newKeyRange = IDBKeyRange.lowerBound(lastKey, true);
+ }
+ keyRange = newKeyRange;
+ keysBatch = null;
+ valuesBatch = null;
+ objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
+ objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
+ }
+
+ function onCursor(e) {
+ var cursor = e.target.result;
+ if (!cursor) { // done
+ return onBatch();
+ }
+ // regular IDBCursor acts like a batch where batch size is always 1
+ onBatch([cursor.key], [cursor.value], cursor);
+ }
+
+ if (useGetAll) {
+ pseudoCursor = {"continue": continuePseudoCursor};
+ objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
+ objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
+ } else if (descending) {
+ objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;
+ } else {
+ objectStore.openCursor(keyRange).onsuccess = onCursor;
+ }
+}
+
+// simple shim for objectStore.getAll(), falling back to IDBCursor
+function getAll(objectStore, keyRange, onSuccess) {
+ if (typeof objectStore.getAll === 'function') {
+ // use native getAll
+ objectStore.getAll(keyRange).onsuccess = onSuccess;
+ return;
+ }
+ // fall back to cursors
+ var values = [];
+
+ function onCursor(e) {
+ var cursor = e.target.result;
+ if (cursor) {
+ values.push(cursor.value);
+ cursor.continue();
+ } else {
+ onSuccess({
+ target: {
+ result: values
+ }
+ });
+ }
+ }
+
+ objectStore.openCursor(keyRange).onsuccess = onCursor;
+}
+
+function allDocsKeys(keys, docStore, onBatch) {
+ // It's not guaranted to be returned in right order
+ var valuesBatch = new Array(keys.length);
+ var count = 0;
+ keys.forEach(function (key, index) {
+ docStore.get(key).onsuccess = function (event) {
+ if (event.target.result) {
+ valuesBatch[index] = event.target.result;
+ } else {
+ valuesBatch[index] = {key: key, error: 'not_found'};
+ }
+ count++;
+ if (count === keys.length) {
+ onBatch(keys, valuesBatch, {});
+ }
+ };
+ });
+}
+
+function createKeyRange(start, end, inclusiveEnd, key, descending) {
+ try {
+ if (start && end) {
+ if (descending) {
+ return IDBKeyRange.bound(end, start, !inclusiveEnd, false);
+ } else {
+ return IDBKeyRange.bound(start, end, false, !inclusiveEnd);
+ }
+ } else if (start) {
+ if (descending) {
+ return IDBKeyRange.upperBound(start);
+ } else {
+ return IDBKeyRange.lowerBound(start);
+ }
+ } else if (end) {
+ if (descending) {
+ return IDBKeyRange.lowerBound(end, !inclusiveEnd);
+ } else {
+ return IDBKeyRange.upperBound(end, !inclusiveEnd);
+ }
+ } else if (key) {
+ return IDBKeyRange.only(key);
+ }
+ } catch (e) {
+ return {error: e};
+ }
+ return null;
+}
+
+function idbAllDocs(opts, idb, callback) {
+ var start = 'startkey' in opts ? opts.startkey : false;
+ var end = 'endkey' in opts ? opts.endkey : false;
+ var key = 'key' in opts ? opts.key : false;
+ var keys = 'keys' in opts ? opts.keys : false;
+ var skip = opts.skip || 0;
+ var limit = typeof opts.limit === 'number' ? opts.limit : -1;
+ var inclusiveEnd = opts.inclusive_end !== false;
+
+ var keyRange ;
+ var keyRangeError;
+ if (!keys) {
+ keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);
+ keyRangeError = keyRange && keyRange.error;
+ if (keyRangeError &&
+ !(keyRangeError.name === "DataError" && keyRangeError.code === 0)) {
+ // DataError with error code 0 indicates start is less than end, so
+ // can just do an empty query. Else need to throw
+ return callback(createError(IDB_ERROR,
+ keyRangeError.name, keyRangeError.message));
+ }
+ }
+
+ var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];
+
+ if (opts.attachments) {
+ stores.push(ATTACH_STORE);
+ }
+ var txnResult = openTransactionSafely(idb, stores, 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ txn.oncomplete = onTxnComplete;
+ txn.onabort = idbError(callback);
+ var docStore = txn.objectStore(DOC_STORE);
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var metaStore = txn.objectStore(META_STORE);
+ var docIdRevIndex = seqStore.index('_doc_id_rev');
+ var results = [];
+ var docCount;
+ var updateSeq;
+
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ docCount = e.target.result.docCount;
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ getMaxUpdateSeq(seqStore, function (e) {
+ if (e.target.result && e.target.result.length > 0) {
+ updateSeq = e.target.result[0];
+ }
+ });
+ }
+
+ function getMaxUpdateSeq(objectStore, onSuccess) {
+ function onCursor(e) {
+ var cursor = e.target.result;
+ var maxKey = undefined;
+ if (cursor && cursor.key) {
+ maxKey = cursor.key;
+ }
+ return onSuccess({
+ target: {
+ result: [maxKey]
+ }
+ });
+ }
+ objectStore.openCursor(null, 'prev').onsuccess = onCursor;
+ }
+
+ // if the user specifies include_docs=true, then we don't
+ // want to block the main cursor while we're fetching the doc
+ function fetchDocAsynchronously(metadata, row, winningRev) {
+ var key = metadata.id + "::" + winningRev;
+ docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {
+ row.doc = decodeDoc(e.target.result) || {};
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ row.doc._conflicts = conflicts;
+ }
+ }
+ fetchAttachmentsIfNecessary(row.doc, opts, txn);
+ };
+ }
+
+ function allDocsInner(winningRev, metadata) {
+ var row = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ var deleted = metadata.deleted;
+ if (deleted) {
+ if (keys) {
+ results.push(row);
+ // deleted docs are okay with "keys" requests
+ row.value.deleted = true;
+ row.doc = null;
+ }
+ } else if (skip-- <= 0) {
+ results.push(row);
+ if (opts.include_docs) {
+ fetchDocAsynchronously(metadata, row, winningRev);
+ }
+ }
+ }
+
+ function processBatch(batchValues) {
+ for (var i = 0, len = batchValues.length; i < len; i++) {
+ if (results.length === limit) {
+ break;
+ }
+ var batchValue = batchValues[i];
+ if (batchValue.error && keys) {
+ // key was not found with "keys" requests
+ results.push(batchValue);
+ continue;
+ }
+ var metadata = decodeMetadata(batchValue);
+ var winningRev = metadata.winningRev;
+ allDocsInner(winningRev, metadata);
+ }
+ }
+
+ function onBatch(batchKeys, batchValues, cursor) {
+ if (!cursor) {
+ return;
+ }
+ processBatch(batchValues);
+ if (results.length < limit) {
+ cursor.continue();
+ }
+ }
+
+ function onGetAll(e) {
+ var values = e.target.result;
+ if (opts.descending) {
+ values = values.reverse();
+ }
+ processBatch(values);
+ }
+
+ function onResultsReady() {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq && updateSeq !== undefined) {
+ returnVal.update_seq = updateSeq;
+ }
+ callback(null, returnVal);
+ }
+
+ function onTxnComplete() {
+ if (opts.attachments) {
+ postProcessAttachments(results, opts.binary).then(onResultsReady);
+ } else {
+ onResultsReady();
+ }
+ }
+
+ // don't bother doing any requests if start > end or limit === 0
+ if (keyRangeError || limit === 0) {
+ return;
+ }
+ if (keys) {
+ return allDocsKeys(keys, docStore, onBatch);
+ }
+ if (limit === -1) { // just fetch everything
+ return getAll(docStore, keyRange, onGetAll);
+ }
+ // else do a cursor
+ // choose a batch size based on the skip, since we'll need to skip that many
+ runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);
+}
+
+//
+// Blobs are not supported in all versions of IndexedDB, notably
+// Chrome <37 and Android <5. In those versions, storing a blob will throw.
+//
+// Various other blob bugs exist in Chrome v37-42 (inclusive).
+// Detecting them is expensive and confusing to users, and Chrome 37-42
+// is at very low usage worldwide, so we do a hacky userAgent check instead.
+//
+// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120
+// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916
+// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836
+//
+function checkBlobSupport(txn) {
+ return new Promise(function (resolve) {
+ var blob = new Blob(['']);
+ var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');
+
+ req.onsuccess = function () {
+ var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/);
+ var matchedEdge = navigator.userAgent.match(/Edge\//);
+ // MS Edge pretends to be Chrome 42:
+ // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx
+ resolve(matchedEdge || !matchedChrome ||
+ parseInt(matchedChrome[1], 10) >= 43);
+ };
+
+ req.onerror = txn.onabort = function (e) {
+ // If the transaction aborts now its due to not being able to
+ // write to the database, likely due to the disk being full
+ e.preventDefault();
+ e.stopPropagation();
+ resolve(false);
+ };
+ }).catch(function () {
+ return false; // error, so assume unsupported
+ });
+}
+
+function countDocs(txn, cb) {
+ var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');
+ index.count(IDBKeyRange.only('0')).onsuccess = function (e) {
+ cb(e.target.result);
+ };
+}
+
+// This task queue ensures that IDB open calls are done in their own tick
+
+var running = false;
+var queue = [];
+
+function tryCode(fun, err, res, PouchDB) {
+ try {
+ fun(err, res);
+ } catch (err) {
+ // Shouldn't happen, but in some odd cases
+ // IndexedDB implementations might throw a sync
+ // error, in which case this will at least log it.
+ PouchDB.emit('error', err);
+ }
+}
+
+function applyNext() {
+ if (running || !queue.length) {
+ return;
+ }
+ running = true;
+ queue.shift()();
+}
+
+function enqueueTask(action, callback, PouchDB) {
+ queue.push(function runAction() {
+ action(function runCallback(err, res) {
+ tryCode(callback, err, res, PouchDB);
+ running = false;
+ nextTick(function runNext() {
+ applyNext();
+ });
+ });
+ });
+ applyNext();
+}
+
+function changes(opts, api, dbName, idb) {
+ opts = clone(opts);
+
+ if (opts.continuous) {
+ var id = dbName + ':' + uuid();
+ changesHandler.addListener(dbName, id, api, opts);
+ changesHandler.notify(dbName);
+ return {
+ cancel: function () {
+ changesHandler.removeListener(dbName, id);
+ }
+ };
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+
+ opts.since = opts.since || 0;
+ var lastSeq = opts.since;
+
+ var limit = 'limit' in opts ? opts.limit : -1;
+ if (limit === 0) {
+ limit = 1; // per CouchDB _changes spec
+ }
+
+ var results = [];
+ var numResults = 0;
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ var txn;
+ var bySeqStore;
+ var docStore;
+ var docIdRevIndex;
+
+ function onBatch(batchKeys, batchValues, cursor) {
+ if (!cursor || !batchKeys.length) { // done
+ return;
+ }
+
+ var winningDocs = new Array(batchKeys.length);
+ var metadatas = new Array(batchKeys.length);
+
+ function processMetadataAndWinningDoc(metadata, winningDoc) {
+ var change = opts.processChange(winningDoc, metadata, opts);
+ lastSeq = change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') { // anything but true/false indicates error
+ return Promise.reject(filtered);
+ }
+
+ if (!filtered) {
+ return Promise.resolve();
+ }
+ numResults++;
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ // process the attachment immediately
+ // for the benefit of live listeners
+ if (opts.attachments && opts.include_docs) {
+ return new Promise(function (resolve) {
+ fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {
+ postProcessAttachments([change], opts.binary).then(function () {
+ resolve(change);
+ });
+ });
+ });
+ } else {
+ return Promise.resolve(change);
+ }
+ }
+
+ function onBatchDone() {
+ var promises = [];
+ for (var i = 0, len = winningDocs.length; i < len; i++) {
+ if (numResults === limit) {
+ break;
+ }
+ var winningDoc = winningDocs[i];
+ if (!winningDoc) {
+ continue;
+ }
+ var metadata = metadatas[i];
+ promises.push(processMetadataAndWinningDoc(metadata, winningDoc));
+ }
+
+ Promise.all(promises).then(function (changes) {
+ for (var i = 0, len = changes.length; i < len; i++) {
+ if (changes[i]) {
+ opts.onChange(changes[i]);
+ }
+ }
+ }).catch(opts.complete);
+
+ if (numResults !== limit) {
+ cursor.continue();
+ }
+ }
+
+ // Fetch all metadatas/winningdocs from this batch in parallel, then process
+ // them all only once all data has been collected. This is done in parallel
+ // because it's faster than doing it one-at-a-time.
+ var numDone = 0;
+ batchValues.forEach(function (value, i) {
+ var doc = decodeDoc(value);
+ var seq = batchKeys[i];
+ fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {
+ metadatas[i] = metadata;
+ winningDocs[i] = winningDoc;
+ if (++numDone === batchKeys.length) {
+ onBatchDone();
+ }
+ });
+ });
+ }
+
+ function onGetMetadata(doc, seq, metadata, cb) {
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return cb();
+ }
+
+ if (metadata.winningRev === doc._rev) {
+ // this is the winning doc
+ return cb(metadata, doc);
+ }
+
+ // fetch winning doc in separate request
+ var docIdRev = doc._id + '::' + metadata.winningRev;
+ var req = docIdRevIndex.get(docIdRev);
+ req.onsuccess = function (e) {
+ cb(metadata, decodeDoc(e.target.result));
+ };
+ }
+
+ function fetchWinningDocAndMetadata(doc, seq, cb) {
+ if (docIds && !docIds.has(doc._id)) {
+ return cb();
+ }
+
+ var metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(doc, seq, metadata, cb);
+ }
+ // metadata not cached, have to go fetch it
+ docStore.get(doc._id).onsuccess = function (e) {
+ metadata = decodeMetadata(e.target.result);
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(doc, seq, metadata, cb);
+ };
+ }
+
+ function finish() {
+ opts.complete(null, {
+ results: results,
+ last_seq: lastSeq
+ });
+ }
+
+ function onTxnComplete() {
+ if (!opts.continuous && opts.attachments) {
+ // cannot guarantee that postProcessing was already done,
+ // so do it again
+ postProcessAttachments(results).then(finish);
+ } else {
+ finish();
+ }
+ }
+
+ var objectStores = [DOC_STORE, BY_SEQ_STORE];
+ if (opts.attachments) {
+ objectStores.push(ATTACH_STORE);
+ }
+ var txnResult = openTransactionSafely(idb, objectStores, 'readonly');
+ if (txnResult.error) {
+ return opts.complete(txnResult.error);
+ }
+ txn = txnResult.txn;
+ txn.onabort = idbError(opts.complete);
+ txn.oncomplete = onTxnComplete;
+
+ bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ docStore = txn.objectStore(DOC_STORE);
+ docIdRevIndex = bySeqStore.index('_doc_id_rev');
+
+ var keyRange = (opts.since && !opts.descending) ?
+ IDBKeyRange.lowerBound(opts.since, true) : null;
+
+ runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);
+}
+
+var cachedDBs = new Map();
+var blobSupportPromise;
+var openReqList = new Map();
+
+function IdbPouch(opts, callback) {
+ var api = this;
+
+ enqueueTask(function (thisCallback) {
+ init(api, opts, thisCallback);
+ }, callback, api.constructor);
+}
+
+function init(api, opts, callback) {
+
+ var dbName = opts.name;
+
+ var idb = null;
+ var idbGlobalFailureError = null;
+ api._meta = null;
+
+ function enrichCallbackError(callback) {
+ return function (error, result) {
+ if (error && error instanceof Error && !error.reason) {
+ if (idbGlobalFailureError) {
+ error.reason = idbGlobalFailureError;
+ }
+ }
+
+ callback(error, result);
+ };
+ }
+
+ // called when creating a fresh new database
+ function createSchema(db) {
+ var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});
+ db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})
+ .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});
+ db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});
+ db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});
+ db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);
+
+ // added in v2
+ docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});
+
+ // added in v3
+ db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});
+
+ // added in v4
+ var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,
+ {autoIncrement: true});
+ attAndSeqStore.createIndex('seq', 'seq');
+ attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});
+ }
+
+ // migration to version 2
+ // unfortunately "deletedOrLocal" is a misnomer now that we no longer
+ // store local docs in the main doc-store, but whaddyagonnado
+ function addDeletedOrLocalIndex(txn, callback) {
+ var docStore = txn.objectStore(DOC_STORE);
+ docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});
+
+ docStore.openCursor().onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var metadata = cursor.value;
+ var deleted = isDeleted(metadata);
+ metadata.deletedOrLocal = deleted ? "1" : "0";
+ docStore.put(metadata);
+ cursor.continue();
+ } else {
+ callback();
+ }
+ };
+ }
+
+ // migration to version 3 (part 1)
+ function createLocalStoreSchema(db) {
+ db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})
+ .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});
+ }
+
+ // migration to version 3 (part 2)
+ function migrateLocalStore(txn, cb) {
+ var localStore = txn.objectStore(LOCAL_STORE);
+ var docStore = txn.objectStore(DOC_STORE);
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+
+ var cursor = docStore.openCursor();
+ cursor.onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var metadata = cursor.value;
+ var docId = metadata.id;
+ var local = isLocalId(docId);
+ var rev = winningRev(metadata);
+ if (local) {
+ var docIdRev = docId + "::" + rev;
+ // remove all seq entries
+ // associated with this docId
+ var start = docId + "::";
+ var end = docId + "::~";
+ var index = seqStore.index('_doc_id_rev');
+ var range = IDBKeyRange.bound(start, end, false, false);
+ var seqCursor = index.openCursor(range);
+ seqCursor.onsuccess = function (e) {
+ seqCursor = e.target.result;
+ if (!seqCursor) {
+ // done
+ docStore.delete(cursor.primaryKey);
+ cursor.continue();
+ } else {
+ var data = seqCursor.value;
+ if (data._doc_id_rev === docIdRev) {
+ localStore.put(data);
+ }
+ seqStore.delete(seqCursor.primaryKey);
+ seqCursor.continue();
+ }
+ };
+ } else {
+ cursor.continue();
+ }
+ } else if (cb) {
+ cb();
+ }
+ };
+ }
+
+ // migration to version 4 (part 1)
+ function addAttachAndSeqStore(db) {
+ var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,
+ {autoIncrement: true});
+ attAndSeqStore.createIndex('seq', 'seq');
+ attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});
+ }
+
+ // migration to version 4 (part 2)
+ function migrateAttsAndSeqs(txn, callback) {
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var attStore = txn.objectStore(ATTACH_STORE);
+ var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+
+ // need to actually populate the table. this is the expensive part,
+ // so as an optimization, check first that this database even
+ // contains attachments
+ var req = attStore.count();
+ req.onsuccess = function (e) {
+ var count = e.target.result;
+ if (!count) {
+ return callback(); // done
+ }
+
+ seqStore.openCursor().onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ return callback(); // done
+ }
+ var doc = cursor.value;
+ var seq = cursor.primaryKey;
+ var atts = Object.keys(doc._attachments || {});
+ var digestMap = {};
+ for (var j = 0; j < atts.length; j++) {
+ var att = doc._attachments[atts[j]];
+ digestMap[att.digest] = true; // uniq digests, just in case
+ }
+ var digests = Object.keys(digestMap);
+ for (j = 0; j < digests.length; j++) {
+ var digest = digests[j];
+ attAndSeqStore.put({
+ seq: seq,
+ digestSeq: digest + '::' + seq
+ });
+ }
+ cursor.continue();
+ };
+ };
+ }
+
+ // migration to version 5
+ // Instead of relying on on-the-fly migration of metadata,
+ // this brings the doc-store to its modern form:
+ // - metadata.winningrev
+ // - metadata.seq
+ // - stringify the metadata when storing it
+ function migrateMetadata(txn) {
+
+ function decodeMetadataCompat(storedObject) {
+ if (!storedObject.data) {
+ // old format, when we didn't store it stringified
+ storedObject.deleted = storedObject.deletedOrLocal === '1';
+ return storedObject;
+ }
+ return decodeMetadata(storedObject);
+ }
+
+ // ensure that every metadata has a winningRev and seq,
+ // which was previously created on-the-fly but better to migrate
+ var bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ var docStore = txn.objectStore(DOC_STORE);
+ var cursor = docStore.openCursor();
+ cursor.onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ return; // done
+ }
+ var metadata = decodeMetadataCompat(cursor.value);
+
+ metadata.winningRev = metadata.winningRev ||
+ winningRev(metadata);
+
+ function fetchMetadataSeq() {
+ // metadata.seq was added post-3.2.0, so if it's missing,
+ // we need to fetch it manually
+ var start = metadata.id + '::';
+ var end = metadata.id + '::\uffff';
+ var req = bySeqStore.index('_doc_id_rev').openCursor(
+ IDBKeyRange.bound(start, end));
+
+ var metadataSeq = 0;
+ req.onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ metadata.seq = metadataSeq;
+ return onGetMetadataSeq();
+ }
+ var seq = cursor.primaryKey;
+ if (seq > metadataSeq) {
+ metadataSeq = seq;
+ }
+ cursor.continue();
+ };
+ }
+
+ function onGetMetadataSeq() {
+ var metadataToStore = encodeMetadata(metadata,
+ metadata.winningRev, metadata.deleted);
+
+ var req = docStore.put(metadataToStore);
+ req.onsuccess = function () {
+ cursor.continue();
+ };
+ }
+
+ if (metadata.seq) {
+ return onGetMetadataSeq();
+ }
+
+ fetchMetadataSeq();
+ };
+
+ }
+
+ api._remote = false;
+ api.type = function () {
+ return 'idb';
+ };
+
+ api._id = toPromise(function (callback) {
+ callback(null, api._meta.instanceId);
+ });
+
+ api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {
+ idbBulkDocs(opts, req, reqOpts, api, idb, enrichCallbackError(callback));
+ };
+
+ // First we look up the metadata in the ids database, then we fetch the
+ // current revision(s) from the by sequence store
+ api._get = function idb_get(id, opts, callback) {
+ var doc;
+ var metadata;
+ var err;
+ var txn = opts.ctx;
+ if (!txn) {
+ var txnResult = openTransactionSafely(idb,
+ [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ }
+
+ function finish() {
+ callback(err, {doc: doc, metadata: metadata, ctx: txn});
+ }
+
+ txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {
+ metadata = decodeMetadata(e.target.result);
+ // we can determine the result here if:
+ // 1. there is no such document
+ // 2. the document is deleted and we don't ask about specific rev
+ // When we ask with opts.rev we expect the answer to be either
+ // doc (possibly with _deleted=true) or missing error
+ if (!metadata) {
+ err = createError(MISSING_DOC, 'missing');
+ return finish();
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = metadata.winningRev;
+ var deleted = isDeleted(metadata);
+ if (deleted) {
+ err = createError(MISSING_DOC, "deleted");
+ return finish();
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var objectStore = txn.objectStore(BY_SEQ_STORE);
+ var key = metadata.id + '::' + rev;
+
+ objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {
+ doc = e.target.result;
+ if (doc) {
+ doc = decodeDoc(doc);
+ }
+ if (!doc) {
+ err = createError(MISSING_DOC, 'missing');
+ return finish();
+ }
+ finish();
+ };
+ };
+ };
+
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var txn;
+ if (opts.ctx) {
+ txn = opts.ctx;
+ } else {
+ var txnResult = openTransactionSafely(idb,
+ [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ }
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {
+ var body = e.target.result.body;
+ readBlobData(body, type, opts.binary, function (blobData) {
+ callback(null, blobData);
+ });
+ };
+ };
+
+ api._info = function idb_info(callback) {
+ var updateSeq;
+ var docCount;
+
+ var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {
+ docCount = e.target.result.docCount;
+ };
+ txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {
+ var cursor = e.target.result;
+ updateSeq = cursor ? cursor.key : 0;
+ };
+
+ txn.oncomplete = function () {
+ callback(null, {
+ doc_count: docCount,
+ update_seq: updateSeq,
+ // for debugging
+ idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')
+ });
+ };
+ };
+
+ api._allDocs = function idb_allDocs(opts, callback) {
+ idbAllDocs(opts, idb, enrichCallbackError(callback));
+ };
+
+ api._changes = function idbChanges(opts) {
+ return changes(opts, api, dbName, idb);
+ };
+
+ api._close = function (callback) {
+ // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close
+ // "Returns immediately and closes the connection in a separate thread..."
+ idb.close();
+ cachedDBs.delete(dbName);
+ callback();
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ var req = txn.objectStore(DOC_STORE).get(docId);
+ req.onsuccess = function (event) {
+ var doc = decodeMetadata(event.target.result);
+ if (!doc) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, doc.rev_tree);
+ }
+ };
+ };
+
+ // This function removes revisions of document docId
+ // which are listed in revs and sets this document
+ // revision to to rev_tree
+ api._doCompaction = function (docId, revs, callback) {
+ var stores = [
+ DOC_STORE,
+ BY_SEQ_STORE,
+ ATTACH_STORE,
+ ATTACH_AND_SEQ_STORE
+ ];
+ var txnResult = openTransactionSafely(idb, stores, 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+
+ var docStore = txn.objectStore(DOC_STORE);
+
+ docStore.get(docId).onsuccess = function (event) {
+ var metadata = decodeMetadata(event.target.result);
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+ compactRevs(revs, docId, txn);
+ var winningRev = metadata.winningRev;
+ var deleted = metadata.deleted;
+ txn.objectStore(DOC_STORE).put(
+ encodeMetadata(metadata, winningRev, deleted));
+ };
+ txn.onabort = idbError(callback);
+ txn.oncomplete = function () {
+ callback();
+ };
+ };
+
+
+ api._getLocal = function (id, callback) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var tx = txnResult.txn;
+ var req = tx.objectStore(LOCAL_STORE).get(id);
+
+ req.onerror = idbError(callback);
+ req.onsuccess = function (e) {
+ var doc = e.target.result;
+ if (!doc) {
+ callback(createError(MISSING_DOC));
+ } else {
+ delete doc['_doc_id_rev']; // for backwards compat
+ callback(null, doc);
+ }
+ };
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+ if (!oldRev) {
+ doc._rev = '0-1';
+ } else {
+ doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);
+ }
+
+ var tx = opts.ctx;
+ var ret;
+ if (!tx) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ tx = txnResult.txn;
+ tx.onerror = idbError(callback);
+ tx.oncomplete = function () {
+ if (ret) {
+ callback(null, ret);
+ }
+ };
+ }
+
+ var oStore = tx.objectStore(LOCAL_STORE);
+ var req;
+ if (oldRev) {
+ req = oStore.get(id);
+ req.onsuccess = function (e) {
+ var oldDoc = e.target.result;
+ if (!oldDoc || oldDoc._rev !== oldRev) {
+ callback(createError(REV_CONFLICT));
+ } else { // update
+ var req = oStore.put(doc);
+ req.onsuccess = function () {
+ ret = {ok: true, id: doc._id, rev: doc._rev};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ };
+ }
+ };
+ } else { // new doc
+ req = oStore.add(doc);
+ req.onerror = function (e) {
+ // constraint error, already exists
+ callback(createError(REV_CONFLICT));
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ };
+ req.onsuccess = function () {
+ ret = {ok: true, id: doc._id, rev: doc._rev};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ };
+ }
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ var tx = opts.ctx;
+ if (!tx) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ tx = txnResult.txn;
+ tx.oncomplete = function () {
+ if (ret) {
+ callback(null, ret);
+ }
+ };
+ }
+ var ret;
+ var id = doc._id;
+ var oStore = tx.objectStore(LOCAL_STORE);
+ var req = oStore.get(id);
+
+ req.onerror = idbError(callback);
+ req.onsuccess = function (e) {
+ var oldDoc = e.target.result;
+ if (!oldDoc || oldDoc._rev !== doc._rev) {
+ callback(createError(MISSING_DOC));
+ } else {
+ oStore.delete(id);
+ ret = {ok: true, id: id, rev: '0-0'};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ }
+ };
+ };
+
+ api._destroy = function (opts, callback) {
+ changesHandler.removeAllListeners(dbName);
+
+ //Close open request for "dbName" database to fix ie delay.
+ var openReq = openReqList.get(dbName);
+ if (openReq && openReq.result) {
+ openReq.result.close();
+ cachedDBs.delete(dbName);
+ }
+ var req = indexedDB.deleteDatabase(dbName);
+
+ req.onsuccess = function () {
+ //Remove open request from the list.
+ openReqList.delete(dbName);
+ callback(null, { 'ok': true });
+ };
+
+ req.onerror = idbError(callback);
+ };
+
+ var cached = cachedDBs.get(dbName);
+
+ if (cached) {
+ idb = cached.idb;
+ api._meta = cached.global;
+ return nextTick(function () {
+ callback(null, api);
+ });
+ }
+
+ var req = indexedDB.open(dbName, ADAPTER_VERSION);
+ openReqList.set(dbName, req);
+
+ req.onupgradeneeded = function (e) {
+ var db = e.target.result;
+ if (e.oldVersion < 1) {
+ return createSchema(db); // new db, initial schema
+ }
+ // do migrations
+
+ var txn = e.currentTarget.transaction;
+ // these migrations have to be done in this function, before
+ // control is returned to the event loop, because IndexedDB
+
+ if (e.oldVersion < 3) {
+ createLocalStoreSchema(db); // v2 -> v3
+ }
+ if (e.oldVersion < 4) {
+ addAttachAndSeqStore(db); // v3 -> v4
+ }
+
+ var migrations = [
+ addDeletedOrLocalIndex, // v1 -> v2
+ migrateLocalStore, // v2 -> v3
+ migrateAttsAndSeqs, // v3 -> v4
+ migrateMetadata // v4 -> v5
+ ];
+
+ var i = e.oldVersion;
+
+ function next() {
+ var migration = migrations[i - 1];
+ i++;
+ if (migration) {
+ migration(txn, next);
+ }
+ }
+
+ next();
+ };
+
+ req.onsuccess = function (e) {
+
+ idb = e.target.result;
+
+ idb.onversionchange = function () {
+ idb.close();
+ cachedDBs.delete(dbName);
+ };
+
+ idb.onabort = function (e) {
+ guardedConsole('error', 'Database has a global failure', e.target.error);
+ idbGlobalFailureError = e.target.error;
+ idb.close();
+ cachedDBs.delete(dbName);
+ };
+
+ // Do a few setup operations (in parallel as much as possible):
+ // 1. Fetch meta doc
+ // 2. Check blob support
+ // 3. Calculate docCount
+ // 4. Generate an instanceId if necessary
+ // 5. Store docCount and instanceId on meta doc
+
+ var txn = idb.transaction([
+ META_STORE,
+ DETECT_BLOB_SUPPORT_STORE,
+ DOC_STORE
+ ], 'readwrite');
+
+ var storedMetaDoc = false;
+ var metaDoc;
+ var docCount;
+ var blobSupport;
+ var instanceId;
+
+ function completeSetup() {
+ if (typeof blobSupport === 'undefined' || !storedMetaDoc) {
+ return;
+ }
+ api._meta = {
+ name: dbName,
+ instanceId: instanceId,
+ blobSupport: blobSupport
+ };
+
+ cachedDBs.set(dbName, {
+ idb: idb,
+ global: api._meta
+ });
+ callback(null, api);
+ }
+
+ function storeMetaDocIfReady() {
+ if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {
+ return;
+ }
+ var instanceKey = dbName + '_id';
+ if (instanceKey in metaDoc) {
+ instanceId = metaDoc[instanceKey];
+ } else {
+ metaDoc[instanceKey] = instanceId = uuid();
+ }
+ metaDoc.docCount = docCount;
+ txn.objectStore(META_STORE).put(metaDoc);
+ }
+
+ //
+ // fetch or generate the instanceId
+ //
+ txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {
+ metaDoc = e.target.result || { id: META_STORE };
+ storeMetaDocIfReady();
+ };
+
+ //
+ // countDocs
+ //
+ countDocs(txn, function (count) {
+ docCount = count;
+ storeMetaDocIfReady();
+ });
+
+ //
+ // check blob support
+ //
+ if (!blobSupportPromise) {
+ // make sure blob support is only checked once
+ blobSupportPromise = checkBlobSupport(txn);
+ }
+
+ blobSupportPromise.then(function (val) {
+ blobSupport = val;
+ completeSetup();
+ });
+
+ // only when the metadata put transaction has completed,
+ // consider the setup done
+ txn.oncomplete = function () {
+ storedMetaDoc = true;
+ completeSetup();
+ };
+ txn.onabort = idbError(callback);
+ };
+
+ req.onerror = function (e) {
+ var msg = e.target.error && e.target.error.message;
+
+ if (!msg) {
+ msg = 'Failed to open indexedDB, are you in private browsing mode?';
+ } else if (msg.indexOf("stored database is a higher version") !== -1) {
+ msg = new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter');
+ }
+
+ guardedConsole('error', msg);
+ callback(createError(IDB_ERROR, msg));
+ };
+}
+
+IdbPouch.valid = function () {
+ // Following #7085 buggy idb versions (typically Safari < 10.1) are
+ // considered valid.
+
+ // On Firefox SecurityError is thrown while referencing indexedDB if cookies
+ // are not allowed. `typeof indexedDB` also triggers the error.
+ try {
+ // some outdated implementations of IDB that appear on Samsung
+ // and HTC Android devices <4.4 are missing IDBKeyRange
+ return typeof indexedDB !== 'undefined' && typeof IDBKeyRange !== 'undefined';
+ } catch (e) {
+ return false;
+ }
+};
+
+function IDBPouch (PouchDB) {
+ PouchDB.adapter('idb', IdbPouch, true);
+}
+
+export { IDBPouch as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-indexeddb.js b/packages/pouchdb-lib/lib/pouchdb-adapter-indexeddb.js
new file mode 100644
index 0000000000..dfa9686a11
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-indexeddb.js
@@ -0,0 +1,1825 @@
+import { uuid, filterChange, changesHandler as Changes } from './pouchdb-utils.js';
+import './functionName-706c6c65.js';
+import { createError, IDB_ERROR, MISSING_DOC, UNKNOWN_ERROR, REV_CONFLICT, MISSING_STUB, BAD_ARG } from './pouchdb-errors.js';
+import 'node:events';
+import 'crypto';
+import { r as readAsBinaryString } from './readAsBinaryString-06e911ba.js';
+import { l as latest, c as compactTree } from './latest-0521537f.js';
+import { b as binStringToBluffer } from './binaryStringToBlobOrBuffer-39ece35b.js';
+import { p as parseDoc } from './parseDoc-71681539.js';
+import { b as binaryMd5 } from './binaryMd5-601b2421.js';
+import { w as winningRev, t as traverseRevTree } from './rootToLeaf-f8d0e78a.js';
+import { m as merge } from './merge-1e46cced.js';
+import { a as collectConflicts } from './collectConflicts-ad0b7c70.js';
+import { r as removeLeafFromRevTree } from './removeLeafFromTree-8dc5c1bf.js';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './guardedConsole-f54e5a40.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './upsert-331b6913.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './typedBuffer-a8220a49.js';
+
+// 'use strict'; is default when ESM
+
+var IDB_NULL = Number.MIN_SAFE_INTEGER;
+var IDB_FALSE = Number.MIN_SAFE_INTEGER + 1;
+var IDB_TRUE = Number.MIN_SAFE_INTEGER + 2;
+
+// These are the same as bellow but without the global flag
+// we want to use RegExp.test because it's really fast, but the global flag
+// makes the regex const stateful (seriously) as it walked through all instances
+var TEST_KEY_INVALID = /^[^a-zA-Z_$]|[^a-zA-Z0-9_$]+/;
+var TEST_PATH_INVALID = /\\.|(^|\.)[^a-zA-Z_$]|[^a-zA-Z0-9_$.]+/;
+function needsSanitise(name, isPath) {
+ if (isPath) {
+ return TEST_PATH_INVALID.test(name);
+ } else {
+ return TEST_KEY_INVALID.test(name);
+ }
+}
+
+//
+// IndexedDB only allows valid JS names in its index paths, whereas JSON allows
+// for any string at all. This converts invalid JS names to valid ones, to allow
+// for them to be indexed.
+//
+// For example, "foo-bar" is a valid JSON key, but cannot be a valid JS name
+// (because that would be read as foo minus bar).
+//
+// Very high level rules for valid JS names are:
+// - First character cannot start with a number
+// - Otherwise all characters must be be a-z, A-Z, 0-9, $ or _.
+// - We allow . unless the name represents a single field, as that represents
+// a deep index path.
+//
+// This is more aggressive than it needs to be, but also simpler.
+//
+var KEY_INVALID = new RegExp(TEST_KEY_INVALID.source, 'g');
+var PATH_INVALID = new RegExp(TEST_PATH_INVALID.source, 'g');
+var SLASH = '\\'.charCodeAt(0);
+const IS_DOT = '.'.charCodeAt(0);
+
+function sanitise(name, isPath) {
+ var correctCharacters = function (match) {
+ var good = '';
+ for (var i = 0; i < match.length; i++) {
+ var code = match.charCodeAt(i);
+ // If you're sanitising a path, a slash character is there to be interpreted
+ // by whatever parses the path later as "escape the next thing".
+ //
+ // e.g., if you want to index THIS string:
+ // {"foo": {"bar.baz": "THIS"}}
+ // Your index path would be "foo.bar\.baz".
+
+ if (code === IS_DOT && isPath && i === 0) {
+ good += '.';
+ } else if (code === SLASH && isPath) {
+ continue;
+ } else {
+ good += '_c' + code + '_';
+ }
+ }
+ return good;
+ };
+
+ if (isPath) {
+ return name.replace(PATH_INVALID, correctCharacters);
+ } else {
+ return name.replace(KEY_INVALID, correctCharacters);
+ }
+}
+
+function needsRewrite(data) {
+ for (var key of Object.keys(data)) {
+ if (needsSanitise(key)) {
+ return true;
+ } else if (data[key] === null || typeof data[key] === 'boolean') {
+ return true;
+ } else if (typeof data[key] === 'object') {
+ return needsRewrite(data[key]);
+ }
+ }
+}
+
+function rewrite(data) {
+ if (!needsRewrite(data)) {
+ return false;
+ }
+
+ var isArray = Array.isArray(data);
+ var clone = isArray
+ ? []
+ : {};
+
+ Object.keys(data).forEach(function (key) {
+ var safeKey = isArray ? key : sanitise(key);
+
+ if (data[key] === null) {
+ clone[safeKey] = IDB_NULL;
+ } else if (typeof data[key] === 'boolean') {
+ clone[safeKey] = data[key] ? IDB_TRUE : IDB_FALSE;
+ } else if (typeof data[key] === 'object') {
+ clone[safeKey] = rewrite(data[key]);
+ } else {
+ clone[safeKey] = data[key];
+ }
+ });
+
+ return clone;
+}
+
+// 'use strict'; is default when ESM
+
+var DOC_STORE = 'docs';
+var META_STORE = 'meta';
+
+function idbError(callback) {
+ return function (evt) {
+ var message = 'unknown_error';
+ if (evt.target && evt.target.error) {
+ message = evt.target.error.name || evt.target.error.message;
+ }
+ callback(createError(IDB_ERROR, message, evt.type));
+ };
+}
+
+function processAttachment(name, src, doc, isBinary) {
+
+ delete doc._attachments[name].stub;
+
+ if (isBinary) {
+ doc._attachments[name].data =
+ src.attachments[doc._attachments[name].digest].data;
+ return Promise.resolve();
+ }
+
+ return new Promise(function (resolve) {
+ var data = src.attachments[doc._attachments[name].digest].data;
+ readAsBinaryString(data, function (binString) {
+ doc._attachments[name].data = btoa(binString);
+ delete doc._attachments[name].length;
+ resolve();
+ });
+ });
+}
+
+function rawIndexFields(ddoc, viewName) {
+ // fields are an array of either the string name of the field, or a key value
+ var fields = ddoc.views[viewName].options &&
+ ddoc.views[viewName].options.def &&
+ ddoc.views[viewName].options.def.fields || [];
+
+ // Either ['foo'] or [{'foo': 'desc'}]
+ return fields.map(function (field) {
+ if (typeof field === 'string') {
+ return field;
+ } else {
+ return Object.keys(field)[0];
+ }
+ });
+}
+
+/**
+ * true if the view is has a "partial_filter_selector".
+ */
+function isPartialFilterView(ddoc, viewName) {
+ return viewName in ddoc.views &&
+ ddoc.views[viewName].options &&
+ ddoc.views[viewName].options.def &&
+ ddoc.views[viewName].options.def.partial_filter_selector;
+}
+
+function naturalIndexName(fields) {
+ return '_find_idx/' + fields.join('/');
+}
+
+/**
+ * Convert the fields the user gave us in the view and convert them to work for
+ * indexeddb.
+ *
+ * fields is an array of field strings. A field string could be one field:
+ * 'foo'
+ * Or it could be a json path:
+ * 'foo.bar'
+ */
+function correctIndexFields(fields) {
+ // Every index has to have deleted at the front, because when we do a query
+ // we need to filter out deleted documents.
+ return ['deleted'].concat(
+ fields.map(function (field) {
+ if (['_id', '_rev', '_deleted', '_attachments'].includes(field)) {
+ // These properties are stored at the top level without the underscore
+ return field.substr(1);
+ } else {
+ // The custom document fields are inside the `data` property
+ return 'data.' + sanitise(field, true);
+ }
+ })
+ );
+}
+
+// 'use strict'; is default when ESM
+
+//
+// Core PouchDB schema version. Increment this if we, as a library, want to make
+// schema changes in indexeddb. See upgradePouchDbSchema()
+//
+var POUCHDB_IDB_VERSION = 1;
+
+//
+// Functions that manage a combinate indexeddb version, by combining the current
+// time in millis that represents user migrations with a large multiplier that
+// represents PouchDB system migrations.
+//
+// This lets us use the idb version number to both represent
+// PouchDB-library-level migrations as well as "user migrations" required for
+// when design documents trigger the addition or removal of native indexes.
+//
+// Given that Number.MAX_SAFE_INTEGER = 9007199254740991
+//
+// We can easily use the largest 2-3 digits and either allow:
+// - 900 system migrations up to 2198/02/18
+// - or 89 system migrations up to 5050/02/14
+//
+// This impl does the former. If this code still exists after 2198 someone send my
+// descendants a Spacebook message congratulating them on their impressive genes.
+//
+// 9007199254740991 <- MAX_SAFE_INTEGER
+// 10000000000000 <- 10^13
+// 7199254740991 <- 2198-02-18T16:59:00.991Z
+//
+var versionMultiplier = Math.pow(10, 13);
+function createIdbVersion() {
+ return (versionMultiplier * POUCHDB_IDB_VERSION) + new Date().getTime();
+}
+function getPouchDbVersion(version) {
+ return Math.floor(version / versionMultiplier);
+}
+
+function maintainNativeIndexes(openReq, reject) {
+ var docStore = openReq.transaction.objectStore(DOC_STORE);
+ var ddocsReq = docStore.getAll(IDBKeyRange.bound('_design/', '_design/\uffff'));
+
+ ddocsReq.onsuccess = function (e) {
+ var results = e.target.result;
+ var existingIndexNames = Array.from(docStore.indexNames);
+
+ // NB: the only thing we're supporting here is the declared indexing
+ // fields nothing more.
+ var expectedIndexes = results.filter(function (row) {
+ return row.deleted === 0 && row.revs[row.rev].data.views;
+ }).map(function (row) {
+ return row.revs[row.rev].data;
+ }).reduce(function (indexes, ddoc) {
+ return Object.keys(ddoc.views).reduce(function (acc, viewName) {
+ var fields = rawIndexFields(ddoc, viewName);
+
+ if (fields && fields.length > 0) {
+ acc[naturalIndexName(fields)] = correctIndexFields(fields);
+ }
+
+ return acc;
+ }, indexes);
+ }, {});
+
+ var expectedIndexNames = Object.keys(expectedIndexes);
+
+ // Delete any indexes that aren't system indexes or expected
+ var systemIndexNames = ['seq'];
+ existingIndexNames.forEach(function (index) {
+ if (systemIndexNames.indexOf(index) === -1 && expectedIndexNames.indexOf(index) === -1) {
+ docStore.deleteIndex(index);
+ }
+ });
+
+ // Work out which indexes are missing and create them
+ var newIndexNames = expectedIndexNames.filter(function (ei) {
+ return existingIndexNames.indexOf(ei) === -1;
+ });
+
+ try {
+ newIndexNames.forEach(function (indexName) {
+ docStore.createIndex(indexName, expectedIndexes[indexName]);
+ });
+ } catch (err) {
+ reject(err);
+ }
+ };
+}
+
+function upgradePouchDbSchema(db, pouchdbVersion) {
+ if (pouchdbVersion < 1) {
+ var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});
+ docStore.createIndex('seq', 'seq', {unique: true});
+
+ db.createObjectStore(META_STORE, {keyPath: 'id'});
+ }
+
+ // Declare more PouchDB schema changes here
+ // if (pouchdbVersion < 2) { .. }
+}
+
+function openDatabase(openDatabases, api, opts, resolve, reject) {
+ var openReq = opts.versionchanged ?
+ indexedDB.open(opts.name) :
+ indexedDB.open(opts.name, createIdbVersion());
+
+ openReq.onupgradeneeded = function (e) {
+ if (e.oldVersion > 0 && e.oldVersion < versionMultiplier) {
+ // This DB was created with the "idb" adapter, **not** this one.
+ // For now we're going to just error out here: users must manually
+ // migrate between the two. In the future, dependent on performance tests,
+ // we might silently migrate
+ throw new Error('Incorrect adapter: you should specify the "idb" adapter to open this DB');
+ } else if (e.oldVersion === 0 && e.newVersion < versionMultiplier) {
+ // Firefox still creates the database with version=1 even if we throw,
+ // so we need to be sure to destroy the empty database before throwing
+ indexedDB.deleteDatabase(opts.name);
+ throw new Error('Database was deleted while open');
+ }
+
+ var db = e.target.result;
+
+ var pouchdbVersion = getPouchDbVersion(e.oldVersion);
+ upgradePouchDbSchema(db, pouchdbVersion);
+ maintainNativeIndexes(openReq, reject);
+ };
+
+ openReq.onblocked = function (e) {
+ // AFAICT this only occurs if, after sending `onversionchange` events to
+ // all other open DBs (ie in different tabs), there are still open
+ // connections to the DB. In this code we should never see this because we
+ // close our DBs on these events, and all DB interactions are wrapped in
+ // safely re-opening the DB.
+ console.error('onblocked, this should never happen', e);
+ };
+
+ openReq.onsuccess = function (e) {
+ var idb = e.target.result;
+
+ idb.onabort = function (e) {
+ console.error('Database has a global failure', e.target.error);
+ delete openDatabases[opts.name];
+ idb.close();
+ };
+
+ idb.onversionchange = function () {
+ console.log('Database was made stale, closing handle');
+ openDatabases[opts.name].versionchanged = true;
+ idb.close();
+ };
+
+ idb.onclose = function () {
+ console.log('Database was made stale, closing handle');
+ if (opts.name in openDatabases) {
+ openDatabases[opts.name].versionchanged = true;
+ }
+ };
+
+ var metadata = {id: META_STORE};
+ var txn = idb.transaction([META_STORE], 'readwrite');
+
+ txn.oncomplete = function () {
+ resolve({idb: idb, metadata: metadata});
+ };
+
+ var metaStore = txn.objectStore(META_STORE);
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ metadata = e.target.result || metadata;
+ var changed = false;
+
+ if (!('doc_count' in metadata)) {
+ changed = true;
+ metadata.doc_count = 0;
+ }
+
+ if (!('seq' in metadata)) {
+ changed = true;
+ metadata.seq = 0;
+ }
+
+ if (!('db_uuid' in metadata)) {
+ changed = true;
+ metadata.db_uuid = uuid();
+ }
+
+ if (changed) {
+ metaStore.put(metadata);
+ }
+ };
+ };
+
+ openReq.onerror = function (e) {
+ reject(e.target.error);
+ };
+}
+
+function setup (openDatabases, api, opts) {
+ if (!openDatabases[opts.name] || openDatabases[opts.name].versionchanged) {
+ opts.versionchanged = openDatabases[opts.name] &&
+ openDatabases[opts.name].versionchanged;
+
+ openDatabases[opts.name] = new Promise(function (resolve, reject) {
+ openDatabase(openDatabases, api, opts, resolve, reject);
+ });
+ }
+
+ return openDatabases[opts.name];
+}
+
+// 'use strict'; is default when ESM
+
+function info (metadata, callback) {
+ callback(null, {
+ doc_count: metadata.doc_count,
+ update_seq: metadata.seq
+ });
+}
+
+// 'use strict'; is default when ESM
+
+function get (txn, id, opts, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ txn.txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {
+ var doc = e.target.result;
+ var rev;
+ if (!opts.rev) {
+ rev = (doc && doc.rev);
+ } else {
+ rev = opts.latest ? latest(opts.rev, doc) : opts.rev;
+ }
+
+ if (!doc || (doc.deleted && !opts.rev) || !(rev in doc.revs)) {
+ callback(createError(MISSING_DOC, 'missing'));
+ return;
+ }
+
+ var result = doc.revs[rev].data;
+ result._id = doc.id;
+ result._rev = rev;
+
+ // WARNING: expecting possible old format
+ // TODO: why are we passing the transaction in the context?
+ // It's not clear we ever thread these txns usefully
+ callback(null, {
+ doc: result,
+ metadata: doc,
+ ctx: txn
+ });
+ };
+}
+
+// 'use strict'; is default when ESM
+
+function parseAttachment(attachment, opts, cb) {
+ if (opts.binary) {
+ return cb(null, attachment);
+ } else {
+ readAsBinaryString(attachment, function (binString) {
+ cb(null, btoa(binString));
+ });
+ }
+}
+
+function getAttachment(txn, docId, attachId, _, opts, cb) {
+ if (txn.error) {
+ return cb(txn.error);
+ }
+
+ var attachment;
+
+ txn.txn.objectStore(DOC_STORE).get(docId).onsuccess = function (e) {
+ var doc = e.target.result;
+ var rev = doc.revs[opts.rev || doc.rev].data;
+ var digest = rev._attachments[attachId].digest;
+ attachment = doc.attachments[digest].data;
+ };
+
+ txn.txn.oncomplete = function () {
+ parseAttachment(attachment, opts, cb);
+ };
+
+ txn.txn.onabort = cb;
+}
+
+// 'use strict'; is default when ESM
+
+function bulkDocs (api, req, opts, metadata, dbOpts, idbChanges, callback) {
+
+ var txn;
+
+ // TODO: I would prefer to get rid of these globals
+ var error;
+ var results = [];
+ var docs = [];
+ var lastWriteIndex;
+
+ var revsLimit = dbOpts.revs_limit || 1000;
+ var rewriteEnabled = dbOpts.name.indexOf("-mrview-") === -1;
+ const autoCompaction = dbOpts.auto_compaction;
+
+ // We only need to track 1 revision for local documents
+ function docsRevsLimit(doc) {
+ return doc.id.startsWith('_local/') ? 1 : revsLimit;
+ }
+
+ function rootIsMissing(doc) {
+ return doc.rev_tree[0].ids[1].status === 'missing';
+ }
+
+ function parseBase64(data) {
+ try {
+ return atob(data);
+ } catch (e) {
+ return {
+ error: createError(BAD_ARG, 'Attachment is not a valid base64 string')
+ };
+ }
+ }
+
+ // Reads the original doc from the store if available
+ // As in allDocs with keys option using multiple get calls is the fastest way
+ function fetchExistingDocs(txn, docs) {
+ var fetched = 0;
+ var oldDocs = {};
+
+ function readDone(e) {
+ if (e.target.result) {
+ oldDocs[e.target.result.id] = e.target.result;
+ }
+ if (++fetched === docs.length) {
+ processDocs(txn, docs, oldDocs);
+ }
+ }
+
+ docs.forEach(function (doc) {
+ txn.objectStore(DOC_STORE).get(doc.id).onsuccess = readDone;
+ });
+ }
+
+ function revHasAttachment(doc, rev, digest) {
+ return doc.revs[rev] &&
+ doc.revs[rev].data._attachments &&
+ Object.values(doc.revs[rev].data._attachments).find(function (att) {
+ return att.digest === digest;
+ });
+ }
+
+ function processDocs(txn, docs, oldDocs) {
+
+ docs.forEach(function (doc, i) {
+ var newDoc;
+
+ // The first document write cannot be a deletion
+ if ('was_delete' in opts && !(Object.prototype.hasOwnProperty.call(oldDocs, doc.id))) {
+ newDoc = createError(MISSING_DOC, 'deleted');
+
+ // The first write of a document cannot specify a revision
+ } else if (opts.new_edits &&
+ !Object.prototype.hasOwnProperty.call(oldDocs, doc.id) &&
+ rootIsMissing(doc)) {
+ newDoc = createError(REV_CONFLICT);
+
+ // Update the existing document
+ } else if (Object.prototype.hasOwnProperty.call(oldDocs, doc.id)) {
+ newDoc = update(txn, doc, oldDocs[doc.id]);
+ // The update can be rejected if it is an update to an existing
+ // revision, if so skip it
+ if (newDoc == false) {
+ return;
+ }
+
+ // New document
+ } else {
+ // Ensure new documents are also stemmed
+ var merged = merge([], doc.rev_tree[0], docsRevsLimit(doc));
+ doc.rev_tree = merged.tree;
+ doc.stemmedRevs = merged.stemmedRevs;
+ newDoc = doc;
+ newDoc.isNewDoc = true;
+ newDoc.wasDeleted = doc.revs[doc.rev].deleted ? 1 : 0;
+ }
+
+ if (newDoc.error) {
+ results[i] = newDoc;
+ } else {
+ oldDocs[newDoc.id] = newDoc;
+ lastWriteIndex = i;
+ write(txn, newDoc, i);
+ }
+ });
+ }
+
+ // Converts from the format returned by parseDoc into the new format
+ // we use to store
+ function convertDocFormat(doc) {
+
+ var newDoc = {
+ id: doc.metadata.id,
+ rev: doc.metadata.rev,
+ rev_tree: doc.metadata.rev_tree,
+ revs: doc.metadata.revs || {}
+ };
+
+ newDoc.revs[newDoc.rev] = {
+ data: doc.data,
+ deleted: doc.metadata.deleted
+ };
+
+ return newDoc;
+ }
+
+ function update(txn, doc, oldDoc) {
+
+ // Ignore updates to existing revisions
+ if ((doc.rev in oldDoc.revs) && !opts.new_edits) {
+ return false;
+ }
+
+ var isRoot = /^1-/.test(doc.rev);
+
+ // Reattach first writes after a deletion to last deleted tree
+ if (oldDoc.deleted && !doc.deleted && opts.new_edits && isRoot) {
+ var tmp = doc.revs[doc.rev].data;
+ tmp._rev = oldDoc.rev;
+ tmp._id = oldDoc.id;
+ doc = convertDocFormat(parseDoc(tmp, opts.new_edits, dbOpts));
+ }
+
+ var merged = merge(oldDoc.rev_tree, doc.rev_tree[0], docsRevsLimit(doc));
+ doc.stemmedRevs = merged.stemmedRevs;
+ doc.rev_tree = merged.tree;
+
+ // Merge the old and new rev data
+ var revs = oldDoc.revs;
+ revs[doc.rev] = doc.revs[doc.rev];
+ doc.revs = revs;
+
+ doc.attachments = oldDoc.attachments;
+
+ var inConflict = opts.new_edits && (((oldDoc.deleted && doc.deleted) ||
+ (!oldDoc.deleted && merged.conflicts !== 'new_leaf') ||
+ (oldDoc.deleted && !doc.deleted && merged.conflicts === 'new_branch') ||
+ (oldDoc.rev === doc.rev)));
+
+ if (inConflict) {
+ return createError(REV_CONFLICT);
+ }
+
+ doc.wasDeleted = oldDoc.deleted;
+
+ return doc;
+ }
+
+ function write(txn, doc, i) {
+
+ // We copy the data from the winning revision into the root
+ // of the document so that it can be indexed
+ var winningRev$1 = winningRev(doc);
+ // rev of new doc for attachments and to return it
+ var writtenRev = doc.rev;
+ var isLocal = doc.id.startsWith('_local/');
+
+ var theDoc = doc.revs[winningRev$1].data;
+
+ const isNewDoc = doc.isNewDoc;
+
+ if (rewriteEnabled) {
+ // doc.data is what we index, so we need to clone and rewrite it, and clean
+ // it up for indexability
+ var result = rewrite(theDoc);
+ if (result) {
+ doc.data = result;
+ delete doc.data._attachments;
+ } else {
+ doc.data = theDoc;
+ }
+ } else {
+ doc.data = theDoc;
+ }
+
+ doc.rev = winningRev$1;
+ // .deleted needs to be an int for indexing
+ doc.deleted = doc.revs[winningRev$1].deleted ? 1 : 0;
+
+ // Bump the seq for every new (non local) revision written
+ // TODO: index expects a unique seq, not sure if ignoring local will
+ // work
+ if (!isLocal) {
+ doc.seq = ++metadata.seq;
+
+ var delta = 0;
+ // If its a new document, we wont decrement if deleted
+ if (doc.isNewDoc) {
+ delta = doc.deleted ? 0 : 1;
+ } else if (doc.wasDeleted !== doc.deleted) {
+ delta = doc.deleted ? -1 : 1;
+ }
+ metadata.doc_count += delta;
+ }
+ delete doc.isNewDoc;
+ delete doc.wasDeleted;
+
+ // If there have been revisions stemmed when merging trees,
+ // delete their data
+ let revsToDelete = doc.stemmedRevs || [];
+
+ if (autoCompaction && !isNewDoc) {
+ const result = compactTree(doc);
+ if (result.length) {
+ revsToDelete = revsToDelete.concat(result);
+ }
+ }
+
+ if (revsToDelete.length) {
+ revsToDelete.forEach(function (rev) { delete doc.revs[rev]; });
+ }
+
+ delete doc.stemmedRevs;
+
+ if (!('attachments' in doc)) {
+ doc.attachments = {};
+ }
+
+ if (theDoc._attachments) {
+ for (var k in theDoc._attachments) {
+ var attachment = theDoc._attachments[k];
+ if (attachment.stub) {
+ if (!(attachment.digest in doc.attachments)) {
+ error = createError(MISSING_STUB);
+ // TODO: Not sure how safe this manual abort is, seeing
+ // console issues
+ txn.abort();
+ return;
+ }
+
+ if (revHasAttachment(doc, writtenRev, attachment.digest)) {
+ doc.attachments[attachment.digest].revs[writtenRev] = true;
+ }
+
+ } else {
+
+ doc.attachments[attachment.digest] = attachment;
+ doc.attachments[attachment.digest].revs = {};
+ doc.attachments[attachment.digest].revs[writtenRev] = true;
+
+ theDoc._attachments[k] = {
+ stub: true,
+ digest: attachment.digest,
+ content_type: attachment.content_type,
+ length: attachment.length,
+ revpos: parseInt(writtenRev, 10)
+ };
+ }
+ }
+ }
+
+ // Local documents have different revision handling
+ if (isLocal && doc.deleted) {
+ txn.objectStore(DOC_STORE).delete(doc.id).onsuccess = function () {
+ results[i] = {
+ ok: true,
+ id: doc.id,
+ rev: '0-0'
+ };
+ };
+ updateSeq(i);
+ return;
+ }
+
+ txn.objectStore(DOC_STORE).put(doc).onsuccess = function () {
+ results[i] = {
+ ok: true,
+ id: doc.id,
+ rev: writtenRev
+ };
+ updateSeq(i);
+ };
+ }
+
+ function updateSeq(i) {
+ if (i === lastWriteIndex) {
+ txn.objectStore(META_STORE).put(metadata);
+ }
+ }
+
+ function preProcessAttachment(attachment) {
+ if (attachment.stub) {
+ return Promise.resolve(attachment);
+ }
+
+ var binData;
+ if (typeof attachment.data === 'string') {
+ binData = parseBase64(attachment.data);
+ if (binData.error) {
+ return Promise.reject(binData.error);
+ }
+ attachment.data = binStringToBluffer(binData, attachment.content_type);
+ } else {
+ binData = attachment.data;
+ }
+
+ return new Promise(function (resolve) {
+ binaryMd5(binData, function (result) {
+ attachment.digest = 'md5-' + result;
+ attachment.length = binData.size || binData.length || 0;
+ resolve(attachment);
+ });
+ });
+ }
+
+ function preProcessAttachments() {
+ var promises = docs.map(function (doc) {
+ var data = doc.revs[doc.rev].data;
+ if (!data._attachments) {
+ return Promise.resolve(data);
+ }
+ var attachments = Object.keys(data._attachments).map(function (k) {
+ data._attachments[k].name = k;
+ return preProcessAttachment(data._attachments[k]);
+ });
+
+ return Promise.all(attachments).then(function (newAttachments) {
+ var processed = {};
+ newAttachments.forEach(function (attachment) {
+ processed[attachment.name] = attachment;
+ delete attachment.name;
+ });
+ data._attachments = processed;
+ return data;
+ });
+ });
+ return Promise.all(promises);
+ }
+
+ for (var i = 0, len = req.docs.length; i < len; i++) {
+ var result;
+ // TODO: We should get rid of throwing for invalid docs, also not sure
+ // why this is needed in idb-next and not idb
+ try {
+ result = parseDoc(req.docs[i], opts.new_edits, dbOpts);
+ } catch (err) {
+ result = err;
+ }
+ if (result.error) {
+ return callback(result);
+ }
+
+ // Ideally parseDoc would return data in this format, but it is currently
+ // shared so we need to convert
+ docs.push(convertDocFormat(result));
+ }
+
+ preProcessAttachments().then(function () {
+ api._openTransactionSafely([DOC_STORE, META_STORE], 'readwrite', function (err, _txn) {
+ if (err) {
+ return callback(err);
+ }
+
+ txn = _txn;
+
+ txn.onabort = function () {
+ callback(error || createError(UNKNOWN_ERROR, 'transaction was aborted'));
+ };
+ txn.ontimeout = idbError(callback);
+
+ txn.oncomplete = function () {
+ idbChanges.notify(dbOpts.name);
+ callback(null, results);
+ };
+
+ // We would like to use promises here, but idb sucks
+ fetchExistingDocs(txn, docs);
+ });
+ }).catch(function (err) {
+ callback(err);
+ });
+}
+
+// 'use strict'; is default when ESM
+
+function allDocsKeys(keys, docStore, allDocsInner) {
+ // It's not guaranted to be returned in right order
+ var valuesBatch = new Array(keys.length);
+ var count = 0;
+ keys.forEach(function (key, index) {
+ docStore.get(key).onsuccess = function (event) {
+ if (event.target.result) {
+ valuesBatch[index] = event.target.result;
+ } else {
+ valuesBatch[index] = {key: key, error: 'not_found'};
+ }
+ count++;
+ if (count === keys.length) {
+ valuesBatch.forEach(function (doc) {
+ allDocsInner(doc);
+ });
+ }
+ };
+ });
+}
+
+function createKeyRange(start, end, inclusiveEnd, key, descending) {
+ try {
+ if (start && end) {
+ if (descending) {
+ return IDBKeyRange.bound(end, start, !inclusiveEnd, false);
+ } else {
+ return IDBKeyRange.bound(start, end, false, !inclusiveEnd);
+ }
+ } else if (start) {
+ if (descending) {
+ return IDBKeyRange.upperBound(start);
+ } else {
+ return IDBKeyRange.lowerBound(start);
+ }
+ } else if (end) {
+ if (descending) {
+ return IDBKeyRange.lowerBound(end, !inclusiveEnd);
+ } else {
+ return IDBKeyRange.upperBound(end, !inclusiveEnd);
+ }
+ } else if (key) {
+ return IDBKeyRange.only(key);
+ }
+ } catch (e) {
+ return {error: e};
+ }
+ return null;
+}
+
+function handleKeyRangeError(opts, metadata, err, callback) {
+ if (err.name === "DataError" && err.code === 0) {
+ // data error, start is less than end
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ return callback(null, returnVal);
+ }
+ callback(createError(IDB_ERROR, err.name, err.message));
+}
+
+function allDocs (txn, metadata, opts, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ // TODO: Weird hack, I dont like it
+ if (opts.limit === 0) {
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: opts.skip,
+ rows: []
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ return callback(null, returnVal);
+ }
+
+ var results = [];
+ var processing = [];
+
+ var start = 'startkey' in opts ? opts.startkey : false;
+ var end = 'endkey' in opts ? opts.endkey : false;
+ var key = 'key' in opts ? opts.key : false;
+ var keys = 'keys' in opts ? opts.keys : false;
+ var skip = opts.skip || 0;
+ var limit = typeof opts.limit === 'number' ? opts.limit : -1;
+ var inclusiveEnd = opts.inclusive_end !== false;
+ var descending = 'descending' in opts && opts.descending ? 'prev' : null;
+
+ var keyRange;
+ if (!keys) {
+ keyRange = createKeyRange(start, end, inclusiveEnd, key, descending);
+ if (keyRange && keyRange.error) {
+ return handleKeyRangeError(opts, metadata, keyRange.error, callback);
+ }
+ }
+
+ var docStore = txn.txn.objectStore(DOC_STORE);
+
+ txn.txn.oncomplete = onTxnComplete;
+
+ if (keys) {
+ return allDocsKeys(opts.keys, docStore, allDocsInner);
+ }
+
+ function include_doc(row, doc) {
+ var docData = doc.revs[doc.rev].data;
+
+ row.doc = docData;
+ row.doc._id = doc.id;
+ row.doc._rev = doc.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(doc);
+ if (conflicts.length) {
+ row.doc._conflicts = conflicts;
+ }
+ }
+ if (opts.attachments && docData._attachments) {
+ for (var name in docData._attachments) {
+ processing.push(processAttachment(name, doc, row.doc, opts.binary));
+ }
+ }
+ }
+
+ function allDocsInner(doc) {
+ if (doc.error && keys) {
+ // key was not found with "keys" requests
+ results.push(doc);
+ return true;
+ }
+
+ var row = {
+ id: doc.id,
+ key: doc.id,
+ value: {
+ rev: doc.rev
+ }
+ };
+
+ var deleted = doc.deleted;
+ if (deleted) {
+ if (keys) {
+ results.push(row);
+ row.value.deleted = true;
+ row.doc = null;
+ }
+ } else if (skip-- <= 0) {
+ results.push(row);
+ if (opts.include_docs) {
+ include_doc(row, doc);
+ }
+ if (--limit === 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function onTxnComplete() {
+ Promise.all(processing).then(function () {
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: 0,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ callback(null, returnVal);
+ });
+ }
+
+ var cursor = descending ?
+ docStore.openCursor(keyRange, descending) :
+ docStore.openCursor(keyRange);
+
+ cursor.onsuccess = function (e) {
+
+ var doc = e.target.result && e.target.result.value;
+
+ // Happens if opts does not have limit,
+ // because cursor will end normally then,
+ // when all docs are retrieved.
+ // Would not be needed, if getAll() optimization was used like in #6059
+ if (!doc) { return; }
+
+ // Skip local docs
+ if (doc.id.startsWith('_local/')) {
+ return e.target.result.continue();
+ }
+
+ var continueCursor = allDocsInner(doc);
+ if (continueCursor) {
+ e.target.result.continue();
+ }
+ };
+
+}
+
+function changes (txn, idbChanges, api, dbOpts, opts) {
+ if (txn.error) {
+ return opts.complete(txn.error);
+ }
+
+ if (opts.continuous) {
+ var id = dbOpts.name + ':' + uuid();
+ idbChanges.addListener(dbOpts.name, id, api, opts);
+ idbChanges.notify(dbOpts.name);
+ return {
+ cancel: function () {
+ idbChanges.removeListener(dbOpts.name, id);
+ }
+ };
+ }
+
+ var limit = 'limit' in opts ? opts.limit : -1;
+ if (limit === 0) {
+ limit = 1;
+ }
+
+ var store = txn.txn.objectStore(DOC_STORE).index('seq');
+
+ var filter = filterChange(opts);
+ var received = 0;
+
+ var lastSeq = opts.since || 0;
+ var results = [];
+
+ var processing = [];
+
+ function onReqSuccess(e) {
+ if (!e.target.result) { return; }
+ var cursor = e.target.result;
+ var doc = cursor.value;
+ // Overwrite doc.data, which may have been rewritten (see rewrite.js) with
+ // the clean version for that rev
+ doc.data = doc.revs[doc.rev].data;
+ doc.data._id = doc.id;
+ doc.data._rev = doc.rev;
+ if (doc.deleted) {
+ doc.data._deleted = true;
+ }
+
+ if (opts.doc_ids && opts.doc_ids.indexOf(doc.id) === -1) {
+ return cursor.continue();
+ }
+
+ // WARNING: expecting possible old format
+ var change = opts.processChange(doc.data, doc, opts);
+ change.seq = doc.seq;
+ lastSeq = doc.seq;
+ var filtered = filter(change);
+
+ // If its an error
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ received++;
+ if (opts.return_docs) {
+ results.push(change);
+ }
+
+ if (opts.include_docs && opts.attachments && doc.data._attachments) {
+ var promises = [];
+ for (var name in doc.data._attachments) {
+ var p = processAttachment(name, doc, change.doc, opts.binary);
+ // We add the processing promise to 2 arrays, one tracks all
+ // the promises needed before we fire onChange, the other
+ // ensure we process all attachments before onComplete
+ promises.push(p);
+ processing.push(p);
+ }
+
+ Promise.all(promises).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+ }
+ if (received !== limit) {
+ cursor.continue();
+ }
+ }
+
+ function onTxnComplete() {
+ Promise.all(processing).then(function () {
+ opts.complete(null, {
+ results: results,
+ last_seq: lastSeq
+ });
+ });
+ }
+
+ var req;
+ if (opts.descending) {
+ req = store.openCursor(null, 'prev');
+ } else {
+ req = store.openCursor(IDBKeyRange.lowerBound(opts.since, true));
+ }
+
+ txn.txn.oncomplete = onTxnComplete;
+ req.onsuccess = onReqSuccess;
+}
+
+// 'use strict'; is default when ESM
+
+function getRevisionTree (txn, id, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ var req = txn.txn.objectStore(DOC_STORE).get(id);
+ req.onsuccess = function (e) {
+ if (!e.target.result) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, e.target.result.rev_tree);
+ }
+ };
+}
+
+// 'use strict'; is default when ESM
+
+function doCompaction (txn, id, revs, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ var docStore = txn.txn.objectStore(DOC_STORE);
+
+ docStore.get(id).onsuccess = function (e) {
+ var doc = e.target.result;
+
+ traverseRevTree(doc.rev_tree, function (isLeaf, pos, revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var attachments = [];
+
+ revs.forEach(function (rev) {
+ if (rev in doc.revs) {
+ // Make a list of attachments that are used by the revisions being
+ // deleted
+ if (doc.revs[rev].data._attachments) {
+ for (var k in doc.revs[rev].data._attachments) {
+ attachments.push(doc.revs[rev].data._attachments[k].digest);
+ }
+ }
+ delete doc.revs[rev];
+ }
+ });
+
+ // Attachments have a list of revisions that are using them, when
+ // that list becomes empty we can delete the attachment.
+ attachments.forEach(function (digest) {
+ revs.forEach(function (rev) {
+ delete doc.attachments[digest].revs[rev];
+ });
+ if (!Object.keys(doc.attachments[digest].revs).length) {
+ delete doc.attachments[digest];
+ }
+ });
+
+ docStore.put(doc);
+ };
+
+ txn.txn.oncomplete = function () {
+ callback();
+ };
+}
+
+function destroy (dbOpts, openDatabases, idbChanges, callback) {
+
+ idbChanges.removeAllListeners(dbOpts.name);
+
+ function doDestroy() {
+ var req = indexedDB.deleteDatabase(dbOpts.name);
+ req.onsuccess = function () {
+ delete openDatabases[dbOpts.name];
+ callback(null, {ok: true});
+ };
+ }
+
+ // If the database is open we need to close it
+ if (dbOpts.name in openDatabases) {
+ openDatabases[dbOpts.name].then(function (res) {
+ res.idb.close();
+ doDestroy();
+ });
+ } else {
+ doDestroy();
+ }
+
+}
+
+// 'use strict'; is default when ESM
+
+// Adapted from
+// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-find/src/adapters/local/find/query-planner.js#L20-L24
+// This could change / improve in the future?
+var COUCH_COLLATE_LO = null;
+var COUCH_COLLATE_HI = '\uffff'; // actually used as {"\uffff": {}}
+
+// Adapted from: https://www.w3.org/TR/IndexedDB/#compare-two-keys
+// Importantly, *there is no upper bound possible* in idb. The ideal data
+// structure an infintely deep array:
+// var IDB_COLLATE_HI = []; IDB_COLLATE_HI.push(IDB_COLLATE_HI)
+// But IDBKeyRange is not a fan of shenanigans, so I've just gone with 12 layers
+// because it looks nice and surely that's enough!
+var IDB_COLLATE_LO = Number.NEGATIVE_INFINITY;
+var IDB_COLLATE_HI = [[[[[[[[[[[[]]]]]]]]]]]];
+
+//
+// TODO: this should be made offical somewhere and used by AllDocs / get /
+// changes etc as well.
+//
+function externaliseRecord(idbDoc) {
+ var doc = idbDoc.revs[idbDoc.rev].data;
+ doc._id = idbDoc.id;
+ doc._rev = idbDoc.rev;
+ if (idbDoc.deleted) {
+ doc._deleted = true;
+ }
+
+ return doc;
+}
+
+/**
+ * Generates a keyrange based on the opts passed to query
+ *
+ * The first key is always 0, as that's how we're filtering out deleted entries.
+ */
+function generateKeyRange(opts) {
+ function defined(obj, k) {
+ return obj[k] !== void 0;
+ }
+
+ // Converts a valid CouchDB key into a valid IndexedDB one
+ function convert(key, exact) {
+ // The first item in every native index is doc.deleted, and we always want
+ // to only search documents that are not deleted.
+ // "foo" -> [0, "foo"]
+ var filterDeleted = [0].concat(key);
+
+ return filterDeleted.map(function (k) {
+ // null, true and false are not indexable by indexeddb. When we write
+ // these values we convert them to these constants, and so when we
+ // query for them we need to convert the query also.
+ if (k === null && exact) {
+ // for non-exact queries we treat null as a collate property
+ // see `if (!exact)` block below
+ return IDB_NULL;
+ } else if (k === true) {
+ return IDB_TRUE;
+ } else if (k === false) {
+ return IDB_FALSE;
+ }
+
+ if (!exact) {
+ // We get passed CouchDB's collate low and high values, so for non-exact
+ // ranged queries we're going to convert them to our IDB equivalents
+ if (k === COUCH_COLLATE_LO) {
+ return IDB_COLLATE_LO;
+ } else if (Object.prototype.hasOwnProperty.call(k, COUCH_COLLATE_HI)) {
+ return IDB_COLLATE_HI;
+ }
+ }
+
+ return k;
+ });
+ }
+
+ // CouchDB and so PouchdB defaults to true. We need to make this explicit as
+ // we invert these later for IndexedDB.
+ if (!defined(opts, 'inclusive_end')) {
+ opts.inclusive_end = true;
+ }
+ if (!defined(opts, 'inclusive_start')) {
+ opts.inclusive_start = true;
+ }
+
+ if (opts.descending) {
+ // Flip before generating. We'll check descending again later when performing
+ // an index request
+ var realEndkey = opts.startkey,
+ realInclusiveEnd = opts.inclusive_start;
+
+ opts.startkey = opts.endkey;
+ opts.endkey = realEndkey;
+ opts.inclusive_start = opts.inclusive_end;
+ opts.inclusive_end = realInclusiveEnd;
+ }
+
+ try {
+ if (defined(opts, 'key')) {
+ return IDBKeyRange.only(convert(opts.key, true));
+ }
+
+ if (defined(opts, 'startkey') && !defined(opts, 'endkey')) {
+ // lowerBound, but without the deleted docs.
+ // [1] is the start of the deleted doc range, and we don't want to include then.
+ return IDBKeyRange.bound(
+ convert(opts.startkey), [1],
+ !opts.inclusive_start, true
+ );
+ }
+
+ if (!defined(opts, 'startkey') && defined(opts, 'endkey')) {
+ return IDBKeyRange.upperBound(convert(opts.endkey), !opts.inclusive_end);
+ }
+
+ if (defined(opts, 'startkey') && defined(opts, 'endkey')) {
+ return IDBKeyRange.bound(
+ convert(opts.startkey), convert(opts.endkey),
+ !opts.inclusive_start, !opts.inclusive_end
+ );
+ }
+
+ return IDBKeyRange.only([0]);
+ } catch (err) {
+ console.error('Could not generate keyRange', err, opts);
+ throw Error('Could not generate key range with ' + JSON.stringify(opts));
+ }
+}
+
+function getIndexHandle(pdb, fields, reject) {
+ var indexName = naturalIndexName(fields);
+
+ return new Promise(function (resolve) {
+ pdb._openTransactionSafely([DOC_STORE], 'readonly', function (err, txn) {
+ if (err) {
+ return idbError(reject)(err);
+ }
+
+ txn.onabort = idbError(reject);
+ txn.ontimeout = idbError(reject);
+
+ var existingIndexNames = Array.from(txn.objectStore(DOC_STORE).indexNames);
+
+ if (existingIndexNames.indexOf(indexName) === -1) {
+ // The index is missing, force a db restart and try again
+ pdb._freshen()
+ .then(function () { return getIndexHandle(pdb, fields, reject); })
+ .then(resolve);
+ } else {
+ resolve(txn.objectStore(DOC_STORE).index(indexName));
+ }
+ });
+ });
+}
+
+// In theory we should return something like the doc example below, but find
+// only needs rows: [{doc: {...}}], so I think we can just not bother for now
+// {
+// "offset" : 0,
+// "rows": [{
+// "id": "doc3",
+// "key": "Lisa Says",
+// "value": null,
+// "doc": {
+// "_id": "doc3",
+// "_rev": "1-z",
+// "title": "Lisa Says"
+// }
+// }],
+// "total_rows" : 4
+// }
+function query(idb, signature, opts, fallback) {
+ // At this stage, in the current implementation, find has already gone through
+ // and determined if the index already exists from PouchDB's perspective (eg
+ // there is a design doc for it).
+ //
+ // If we find that the index doesn't exist this means we have to close and
+ // re-open the DB to correct indexes before proceeding, at which point the
+ // index should exist.
+
+ var pdb = this;
+
+ // Assumption, there will be only one /, between the design document name
+ // and the view name.
+ var parts = signature.split('/');
+
+ return new Promise(function (resolve, reject) {
+ pdb.get('_design/' + parts[0]).then(function (ddoc) {
+ if (isPartialFilterView(ddoc, parts[1])) {
+ // Fix for #8522
+ // An IndexedDB index is always over all entries. And there is no way to filter them.
+ // Therefore the normal findAbstractMapper will be used
+ // for indexes with partial_filter_selector.
+ return fallback(signature, opts).then(resolve, reject);
+ }
+
+ var fields = rawIndexFields(ddoc, parts[1]);
+ if (!fields) {
+ throw new Error('ddoc ' + ddoc._id +' with view ' + parts[1] +
+ ' does not have map.options.def.fields defined.');
+ }
+
+ var skip = opts.skip;
+ var limit = Number.isInteger(opts.limit) && opts.limit;
+
+ return getIndexHandle(pdb, fields, reject)
+ .then(function (indexHandle) {
+ var keyRange = generateKeyRange(opts);
+ var req = indexHandle.openCursor(keyRange, opts.descending ? 'prev' : 'next');
+
+ var rows = [];
+ req.onerror = idbError(reject);
+ req.onsuccess = function (e) {
+ var cursor = e.target.result;
+
+ if (!cursor || limit === 0) {
+ return resolve({
+ rows: rows
+ });
+ }
+
+ if (skip) {
+ cursor.advance(skip);
+ skip = false;
+ return;
+ }
+
+ if (limit) {
+ limit = limit - 1;
+ }
+
+ rows.push({doc: externaliseRecord(cursor.value)});
+ cursor.continue();
+ };
+ });
+ })
+ .catch(reject);
+ });
+
+}
+
+function viewCleanup(idb, fallback) {
+ // I'm not sure we have to do anything here.
+ //
+ // One option is to just close and re-open the DB, which performs the same
+ // action. The only reason you'd want to call this is if you deleted a bunch
+ // of indexes and wanted the space back immediately.
+ //
+ // Otherwise index cleanup happens when:
+ // - A DB is opened
+ // - A find query is performed against an index that doesn't exist but should
+
+ // Fix for #8522
+ // On views with partial_filter_selector the standard find-abstract-mapper is used.
+ // Its indexes must be cleaned up.
+ // Fallback is the standard viewCleanup.
+ return fallback();
+}
+
+function purgeAttachments(doc, revs) {
+ if (!doc.attachments) {
+ // If there are no attachments, doc.attachments is an empty object
+ return {};
+ }
+
+ // Iterate over all attachments and remove the respective revs
+ for (let key in doc.attachments) {
+ const attachment = doc.attachments[key];
+
+ for (let rev of revs) {
+ if (attachment.revs[rev]) {
+ delete attachment.revs[rev];
+ }
+ }
+
+ if (Object.keys(attachment.revs).length === 0) {
+ delete doc.attachments[key];
+ }
+ }
+
+ return doc.attachments;
+}
+
+// `purge()` expects a path of revisions in its revs argument that:
+// - starts with a leaf rev
+// - continues sequentially with the remaining revs of that leaf’s branch
+//
+// eg. for this rev tree:
+// 1-9692 ▶ 2-37aa ▶ 3-df22 ▶ 4-6e94 ▶ 5-df4a ▶ 6-6a3a ▶ 7-57e5
+// ┃ ┗━━━━━━▶ 5-8d8c ▶ 6-65e0
+// ┗━━━━━━▶ 3-43f6 ▶ 4-a3b4
+//
+// …if you wanted to purge '7-57e5', you would provide ['7-57e5', '6-6a3a', '5-df4a']
+//
+// The purge adapter implementation in `pouchdb-core` uses the helper function `findPathToLeaf`
+// from `pouchdb-merge` to construct this array correctly. Since this purge implementation is
+// only ever called from there, we do no additional checks here as to whether `revs` actually
+// fulfills the criteria above, since `findPathToLeaf` already does these.
+function purge(txn, docId, revs, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ const docStore = txn.txn.objectStore(DOC_STORE);
+ const deletedRevs = [];
+ let documentWasRemovedCompletely = false;
+ docStore.get(docId).onsuccess = (e) => {
+ const doc = e.target.result;
+
+ // we could do a dry run here to check if revs is a proper path towards a leaf in the rev tree
+
+ for (const rev of revs) {
+ // purge rev from tree
+ doc.rev_tree = removeLeafFromRevTree(doc.rev_tree, rev);
+
+ // assign new revs
+ delete doc.revs[rev];
+ deletedRevs.push(rev);
+ }
+
+ if (doc.rev_tree.length === 0) {
+ // if the rev tree is empty, we can delete the entire document
+ docStore.delete(doc.id);
+ documentWasRemovedCompletely = true;
+ return;
+ }
+
+ // find new winning rev
+ doc.rev = winningRev(doc);
+ doc.data = doc.revs[doc.rev].data;
+ doc.attachments = purgeAttachments(doc, revs);
+
+ // finally, write the purged doc
+ docStore.put(doc);
+ };
+
+ txn.txn.oncomplete = function () {
+ callback(null, {
+ ok: true,
+ deletedRevs,
+ documentWasRemovedCompletely
+ });
+ };
+}
+
+// 'use strict'; is default when ESM
+
+var ADAPTER_NAME = 'indexeddb';
+
+// TODO: Constructor should be capitalised
+var idbChanges = new Changes();
+
+// A shared list of database handles
+var openDatabases = {};
+
+function IdbPouch(dbOpts, callback) {
+
+ if (dbOpts.view_adapter) {
+ console.log('Please note that the indexeddb adapter manages _find indexes itself, therefore it is not using your specified view_adapter');
+ }
+
+ var api = this;
+ var metadata = {};
+
+ // Wrapper that gives you an active DB handle. You probably want $t.
+ var $ = function (fun) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ args.unshift(res.idb);
+ fun.apply(api, args);
+ }).catch(function (err) {
+ var last = args.pop();
+ if (typeof last === 'function') {
+ last(err);
+ } else {
+ console.error(err);
+ }
+ });
+ };
+ };
+ // the promise version of $
+ var $p = function (fun) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+
+ return setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ args.unshift(res.idb);
+
+ return fun.apply(api, args);
+ });
+ };
+ };
+ // Wrapper that gives you a safe transaction handle. It's important to use
+ // this instead of opening your own transaction from a db handle got from $,
+ // because in the time between getting the db handle and opening the
+ // transaction it may have been invalidated by index changes.
+ var $t = function (fun, stores, mode) {
+ stores = stores || [DOC_STORE];
+ mode = mode || 'readonly';
+
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ var txn = {};
+ setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ txn.txn = res.idb.transaction(stores, mode);
+ }).catch(function (err) {
+ console.error('Failed to establish transaction safely');
+ console.error(err);
+ txn.error = err;
+ }).then(function () {
+ args.unshift(txn);
+ fun.apply(api, args);
+ });
+ };
+ };
+
+ api._openTransactionSafely = function (stores, mode, callback) {
+ $t(function (txn, callback) {
+ callback(txn.error, txn.txn);
+ }, stores, mode)(callback);
+ };
+
+ api._remote = false;
+ api.type = function () { return ADAPTER_NAME; };
+
+ api._id = $(function (_, cb) {
+ cb(null, metadata.db_uuid);
+ });
+
+ api._info = $(function (_, cb) {
+ return info(metadata, cb);
+ });
+
+ api._get = $t(get);
+
+ api._bulkDocs = $(function (_, req, opts, callback) {
+ bulkDocs(api, req, opts, metadata, dbOpts, idbChanges, callback);
+ });
+
+ api._allDocs = $t(function (txn, opts, cb) {
+ allDocs(txn, metadata, opts, cb);
+ });
+
+ api._getAttachment = $t(getAttachment);
+
+ api._changes = $t(function (txn, opts) {
+ changes(txn, idbChanges, api, dbOpts, opts);
+ });
+
+ api._getRevisionTree = $t(getRevisionTree);
+ api._doCompaction = $t(doCompaction, [DOC_STORE], 'readwrite');
+
+ api._customFindAbstractMapper = {
+ query: $p(query),
+ viewCleanup: $p(viewCleanup)
+ };
+
+ api._destroy = function (opts, callback) {
+ return destroy(dbOpts, openDatabases, idbChanges, callback);
+ };
+
+ api._close = $(function (db, cb) {
+ delete openDatabases[dbOpts.name];
+ db.close();
+ cb();
+ });
+
+ // Closing and re-opening the DB re-generates native indexes
+ api._freshen = function () {
+ return new Promise(function (resolve) {
+ api._close(function () {
+ $(resolve)();
+ });
+ });
+ };
+
+ api._purge = $t(purge, [DOC_STORE], 'readwrite');
+
+ // TODO: this setTimeout seems nasty, if its needed lets
+ // figure out / explain why
+ setTimeout(function () {
+ callback(null, api);
+ });
+}
+
+// TODO: this isnt really valid permanently, just being lazy to start
+IdbPouch.valid = function () {
+ return true;
+};
+
+function IndexeddbPouchPlugin (PouchDB) {
+ PouchDB.adapter(ADAPTER_NAME, IdbPouch, true);
+}
+
+export { IndexeddbPouchPlugin as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb-core.js b/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb-core.js
new file mode 100644
index 0000000000..38739f0a61
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb-core.js
@@ -0,0 +1,65 @@
+export { L as default } from './index-3d81fcba.js';
+import './pouchdb-core.js';
+import './pouchdb-utils.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './latest-0521537f.js';
+import './isLocalId-d067de54.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './pouchdb-errors.js';
+import './binaryMd5-601b2421.js';
+import 'crypto';
+import './processDocs-7c802567.js';
+import './safeJsonStringify-6520e306.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './nextTick-ea093886.js';
+import './_commonjsHelpers-24198af3.js';
+import 'events';
+import 'util';
+import 'buffer';
+import './readable-bcb7bff2.js';
+import 'stream';
+import 'assert';
+import './typedBuffer-a8220a49.js';
+import 'node:events';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb.js b/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb.js
new file mode 100644
index 0000000000..c75461c7cf
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-leveldb.js
@@ -0,0 +1,2149 @@
+import { i as immutable, m as mutable, e as errors, l as levelup$1, o as obj, L as LevelPouch$1 } from './index-3d81fcba.js';
+import './pouchdb-platform.js';
+import path$1 from 'node:path';
+import { w as winningRev } from './rootToLeaf-f8d0e78a.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import { a as isLocalId } from './isLocalId-d067de54.js';
+import { g as getDefaultExportFromCjs } from './_commonjsHelpers-24198af3.js';
+import require$$0 from 'buffer';
+import { i as inheritsExports, l as levelCodec } from './readable-bcb7bff2.js';
+import require$$0$1$1 from 'util';
+import require$$0$1 from 'fs';
+import require$$1 from 'path';
+import require$$2 from 'os';
+import Stream from 'stream';
+import fs$1 from 'node:fs';
+import 'events';
+import 'assert';
+import './pouchdb-core.js';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import 'node:assert';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:os';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+
+// require leveldown. provide verbose output on error as it is the default
+// nodejs adapter, which we do not provide for the user
+/* istanbul ignore next */
+var requireLeveldown = function () {
+ try {
+ return require('leveldown');
+ } catch (err) {
+ /* eslint no-ex-assign: 0*/
+ err = err || 'leveldown import error';
+ if (err.code === 'MODULE_NOT_FOUND') {
+ // handle leveldown not installed case
+ return new Error([
+ 'the \'leveldown\' package is not available. install it, or,',
+ 'specify another storage backend using the \'db\' option'
+ ].join(' '));
+ } else if (err.message && err.message.match('Module version mismatch')) {
+ // handle common user enviornment error
+ return new Error([
+ err.message,
+ 'This generally implies that leveldown was built with a different',
+ 'version of node than that which is running now. You may try',
+ 'fully removing and reinstalling PouchDB or leveldown to resolve.'
+ ].join(' '));
+ }
+ // handle general internal nodejs require error
+ return new Error(err.toString() + ': unable to import leveldown');
+ }
+};
+
+var abstractLeveldown$3 = {};
+
+// For (old) browser support
+var xtend$3 = immutable;
+var assign$1 = mutable;
+
+var levelSupports$1 = function supports () {
+ var manifest = xtend$3.apply(null, arguments);
+
+ return assign$1(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$3(manifest.additionalMethods)
+ })
+};
+
+var nextTick$7 = process.nextTick;
+
+var nextTick$6 = nextTick$7;
+
+function AbstractIterator$5 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$5.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$6(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$6(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$5.prototype._next = function (callback) {
+ nextTick$6(callback);
+};
+
+AbstractIterator$5.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$5.prototype._seek = function (target) {};
+
+AbstractIterator$5.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$6(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$5.prototype._end = function (callback) {
+ nextTick$6(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$5.prototype._nextTick = nextTick$6;
+
+var abstractIterator$1 = AbstractIterator$5;
+
+var nextTick$5 = nextTick$7;
+
+function AbstractChainedBatch$5 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$5.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$5.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$5.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$5.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$5.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$5.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$5.prototype._nextTick = nextTick$5;
+
+var abstractChainedBatch$1 = AbstractChainedBatch$5;
+
+var xtend$2 = immutable;
+var supports$1 = levelSupports$1;
+var Buffer$2 = require$$0.Buffer;
+var AbstractIterator$4 = abstractIterator$1;
+var AbstractChainedBatch$4 = abstractChainedBatch$1;
+var nextTick$4 = nextTick$7;
+var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+var rangeOptions$1 = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$3 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports$1(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$3.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$3.prototype._open = function (options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$3.prototype._close = function (callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._get = function (key, options, callback) {
+ nextTick$4(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$3.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._put = function (key, value, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._del = function (key, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick$4(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick$4(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick$4(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend$2(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick$4(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick$4(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick$4(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._batch = function (array, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions$1(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$3.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions$1(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions$1 (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty$1.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption$1(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption$1 (k) {
+ return rangeOptions$1.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$3.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$3.prototype._iterator = function (options) {
+ return new AbstractIterator$4(this)
+};
+
+AbstractLevelDOWN$3.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch$4(this)
+};
+
+AbstractLevelDOWN$3.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$3.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$3.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$2.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$3.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$3.prototype._nextTick = nextTick$4;
+
+var abstractLeveldown$2 = AbstractLevelDOWN$3;
+
+abstractLeveldown$3.AbstractLevelDOWN = abstractLeveldown$2;
+abstractLeveldown$3.AbstractIterator = abstractIterator$1;
+abstractLeveldown$3.AbstractChainedBatch = abstractChainedBatch$1;
+
+var AbstractLevelDOWN$2 = abstractLeveldown$3.AbstractLevelDOWN;
+var AbstractChainedBatch$3 = abstractLeveldown$3.AbstractChainedBatch;
+var AbstractIterator$3 = abstractLeveldown$3.AbstractIterator;
+var inherits = inheritsExports;
+var Codec = levelCodec;
+var EncodingError = errors.EncodingError;
+var rangeMethods = ['approximateSize', 'compactRange'];
+
+var encodingDown = DB.default = DB;
+
+function DB (db, opts) {
+ if (!(this instanceof DB)) return new DB(db, opts)
+
+ var manifest = db.supports || {};
+ var additionalMethods = manifest.additionalMethods || {};
+
+ AbstractLevelDOWN$2.call(this, manifest);
+
+ this.supports.encodings = true;
+ this.supports.additionalMethods = {};
+
+ rangeMethods.forEach(function (m) {
+ // TODO (future major): remove this fallback
+ var fallback = typeof db[m] === 'function';
+
+ if (additionalMethods[m] || fallback) {
+ this.supports.additionalMethods[m] = true;
+
+ this[m] = function (start, end, opts, cb) {
+ start = this.codec.encodeKey(start, opts);
+ end = this.codec.encodeKey(end, opts);
+ return this.db[m](start, end, opts, cb)
+ };
+ }
+ }, this);
+
+ opts = opts || {};
+ if (typeof opts.keyEncoding === 'undefined') opts.keyEncoding = 'utf8';
+ if (typeof opts.valueEncoding === 'undefined') opts.valueEncoding = 'utf8';
+
+ this.db = db;
+ this.codec = new Codec(opts);
+}
+
+inherits(DB, AbstractLevelDOWN$2);
+
+DB.prototype.type = 'encoding-down';
+
+DB.prototype._serializeKey =
+DB.prototype._serializeValue = function (datum) {
+ return datum
+};
+
+DB.prototype._open = function (opts, cb) {
+ this.db.open(opts, cb);
+};
+
+DB.prototype._close = function (cb) {
+ this.db.close(cb);
+};
+
+DB.prototype._put = function (key, value, opts, cb) {
+ key = this.codec.encodeKey(key, opts);
+ value = this.codec.encodeValue(value, opts);
+ this.db.put(key, value, opts, cb);
+};
+
+DB.prototype._get = function (key, opts, cb) {
+ var self = this;
+ key = this.codec.encodeKey(key, opts);
+ opts.asBuffer = this.codec.valueAsBuffer(opts);
+ this.db.get(key, opts, function (err, value) {
+ if (err) return cb(err)
+ try {
+ value = self.codec.decodeValue(value, opts);
+ } catch (err) {
+ return cb(new EncodingError(err))
+ }
+ cb(null, value);
+ });
+};
+
+DB.prototype._del = function (key, opts, cb) {
+ key = this.codec.encodeKey(key, opts);
+ this.db.del(key, opts, cb);
+};
+
+DB.prototype._chainedBatch = function () {
+ return new Batch(this)
+};
+
+DB.prototype._batch = function (ops, opts, cb) {
+ ops = this.codec.encodeBatch(ops, opts);
+ this.db.batch(ops, opts, cb);
+};
+
+DB.prototype._iterator = function (opts) {
+ opts.keyAsBuffer = this.codec.keyAsBuffer(opts);
+ opts.valueAsBuffer = this.codec.valueAsBuffer(opts);
+ return new Iterator$2(this, opts)
+};
+
+DB.prototype._clear = function (opts, callback) {
+ opts = this.codec.encodeLtgt(opts);
+ this.db.clear(opts, callback);
+};
+
+function Iterator$2 (db, opts) {
+ AbstractIterator$3.call(this, db);
+ this.codec = db.codec;
+ this.keys = opts.keys;
+ this.values = opts.values;
+ this.opts = this.codec.encodeLtgt(opts);
+ this.it = db.db.iterator(this.opts);
+}
+
+inherits(Iterator$2, AbstractIterator$3);
+
+Iterator$2.prototype._next = function (cb) {
+ var self = this;
+ this.it.next(function (err, key, value) {
+ if (err) return cb(err)
+ try {
+ if (self.keys && typeof key !== 'undefined') {
+ key = self.codec.decodeKey(key, self.opts);
+ } else {
+ key = undefined;
+ }
+
+ if (self.values && typeof value !== 'undefined') {
+ value = self.codec.decodeValue(value, self.opts);
+ } else {
+ value = undefined;
+ }
+ } catch (err) {
+ return cb(new EncodingError(err))
+ }
+ cb(null, key, value);
+ });
+};
+
+Iterator$2.prototype._seek = function (key) {
+ key = this.codec.encodeKey(key, this.opts);
+ this.it.seek(key);
+};
+
+Iterator$2.prototype._end = function (cb) {
+ this.it.end(cb);
+};
+
+function Batch (db, codec) {
+ AbstractChainedBatch$3.call(this, db);
+ this.codec = db.codec;
+ this.batch = db.db.batch();
+}
+
+inherits(Batch, AbstractChainedBatch$3);
+
+Batch.prototype._put = function (key, value) {
+ key = this.codec.encodeKey(key);
+ value = this.codec.encodeValue(value);
+ this.batch.put(key, value);
+};
+
+Batch.prototype._del = function (key) {
+ key = this.codec.encodeKey(key);
+ this.batch.del(key);
+};
+
+Batch.prototype._clear = function () {
+ this.batch.clear();
+};
+
+Batch.prototype._write = function (opts, cb) {
+ this.batch.write(opts, cb);
+};
+
+var levelup = levelup$1;
+var encode = encodingDown;
+
+function packager (leveldown) {
+ function Level (location, options, callback) {
+ if (typeof location === 'function') {
+ callback = location;
+ } else if (typeof options === 'function') {
+ callback = options;
+ }
+
+ if (!isObject(options)) {
+ options = isObject(location) ? location : {};
+ }
+
+ return levelup(encode(leveldown(location, options), options), options, callback)
+ }
+
+ function isObject (o) {
+ return typeof o === 'object' && o !== null
+ }
+
+ ['destroy', 'repair'].forEach(function (m) {
+ if (typeof leveldown[m] === 'function') {
+ Level[m] = function () {
+ leveldown[m].apply(leveldown, arguments);
+ };
+ }
+ });
+
+ Level.errors = levelup.errors;
+
+ return Level
+}
+
+var levelPackager = packager;
+
+var abstractLeveldown$1 = {};
+
+// For (old) browser support
+var xtend$1 = immutable;
+var assign = mutable;
+
+var levelSupports = function supports () {
+ var manifest = xtend$1.apply(null, arguments);
+
+ return assign(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$1(manifest.additionalMethods)
+ })
+};
+
+var nextTick$3 = process.nextTick;
+
+var nextTick$2 = nextTick$3;
+
+function AbstractIterator$2 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$2(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$2(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$2.prototype._next = function (callback) {
+ nextTick$2(callback);
+};
+
+AbstractIterator$2.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$2.prototype._seek = function (target) {};
+
+AbstractIterator$2.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$2(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$2.prototype._end = function (callback) {
+ nextTick$2(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$2.prototype._nextTick = nextTick$2;
+
+var abstractIterator = AbstractIterator$2;
+
+var nextTick$1 = nextTick$3;
+
+function AbstractChainedBatch$2 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$2.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$2.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$2.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$2.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$2.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$2.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$2.prototype._nextTick = nextTick$1;
+
+var abstractChainedBatch = AbstractChainedBatch$2;
+
+var xtend = immutable;
+var supports = levelSupports;
+var Buffer$1 = require$$0.Buffer;
+var AbstractIterator$1 = abstractIterator;
+var AbstractChainedBatch$1 = abstractChainedBatch;
+var nextTick = nextTick$3;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var rangeOptions = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$1 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$1.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._open = function (options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._close = function (callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._get = function (key, options, callback) {
+ nextTick(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$1.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._put = function (key, value, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._del = function (key, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._batch = function (array, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$1.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption (k) {
+ return rangeOptions.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$1.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$1.prototype._iterator = function (options) {
+ return new AbstractIterator$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$1.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$1.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$1.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$1.prototype._nextTick = nextTick;
+
+var abstractLeveldown = AbstractLevelDOWN$1;
+
+abstractLeveldown$1.AbstractLevelDOWN = abstractLeveldown;
+abstractLeveldown$1.AbstractIterator = abstractIterator;
+abstractLeveldown$1.AbstractChainedBatch = abstractChainedBatch;
+
+function commonjsRequire(path) {
+ throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
+}
+
+var fs = require$$0$1;
+var path = require$$1;
+var os = require$$2;
+
+// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'
+var runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : commonjsRequire; // eslint-disable-line
+
+var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
+var abi = process.versions.modules; // TODO: support old node where this is undef
+var runtime = isElectron() ? 'electron' : 'node';
+var arch = os.arch();
+var platform = os.platform();
+var libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc');
+var armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : process.config.variables.arm_version) || '';
+var uv = (process.versions.uv || '').split('.')[0];
+
+var nodeGypBuild = load;
+
+function load (dir) {
+ return runtimeRequire(load.path(dir))
+}
+
+load.path = function (dir) {
+ dir = path.resolve(dir || '.');
+
+ try {
+ var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_');
+ if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD'];
+ } catch (err) {}
+
+ if (!prebuildsOnly) {
+ var release = getFirst(path.join(dir, 'build/Release'), matchBuild);
+ if (release) return release
+
+ var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild);
+ if (debug) return debug
+ }
+
+ // Find most specific flavor first
+ var prebuilds = path.join(dir, 'prebuilds', platform + '-' + arch);
+ var parsed = readdirSync(prebuilds).map(parseTags);
+ var candidates = parsed.filter(matchTags(runtime, abi));
+ var winner = candidates.sort(compareTags(runtime))[0];
+ if (winner) return path.join(prebuilds, winner.file)
+
+ var target = [
+ 'platform=' + platform,
+ 'arch=' + arch,
+ 'runtime=' + runtime,
+ 'abi=' + abi,
+ 'uv=' + uv,
+ armv ? 'armv=' + armv : '',
+ 'libc=' + libc
+ ].filter(Boolean).join(' ');
+
+ throw new Error('No native build was found for ' + target)
+};
+
+function readdirSync (dir) {
+ try {
+ return fs.readdirSync(dir)
+ } catch (err) {
+ return []
+ }
+}
+
+function getFirst (dir, filter) {
+ var files = readdirSync(dir).filter(filter);
+ return files[0] && path.join(dir, files[0])
+}
+
+function matchBuild (name) {
+ return /\.node$/.test(name)
+}
+
+function parseTags (file) {
+ var arr = file.split('.');
+ var extension = arr.pop();
+ var tags = { file: file, specificity: 0 };
+
+ if (extension !== 'node') return
+
+ for (var i = 0; i < arr.length; i++) {
+ var tag = arr[i];
+
+ if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {
+ tags.runtime = tag;
+ } else if (tag === 'napi') {
+ tags.napi = true;
+ } else if (tag.slice(0, 3) === 'abi') {
+ tags.abi = tag.slice(3);
+ } else if (tag.slice(0, 2) === 'uv') {
+ tags.uv = tag.slice(2);
+ } else if (tag.slice(0, 4) === 'armv') {
+ tags.armv = tag.slice(4);
+ } else if (tag === 'glibc' || tag === 'musl') {
+ tags.libc = tag;
+ } else {
+ continue
+ }
+
+ tags.specificity++;
+ }
+
+ return tags
+}
+
+function matchTags (runtime, abi) {
+ return function (tags) {
+ if (tags == null) return false
+ if (tags.runtime !== runtime && !runtimeAgnostic(tags)) return false
+ if (tags.abi !== abi && !tags.napi) return false
+ if (tags.uv && tags.uv !== uv) return false
+ if (tags.armv && tags.armv !== armv) return false
+ if (tags.libc && tags.libc !== libc) return false
+
+ return true
+ }
+}
+
+function runtimeAgnostic (tags) {
+ return tags.runtime === 'node' && tags.napi
+}
+
+function compareTags (runtime) {
+ // Precedence: non-agnostic runtime, abi over napi, then by specificity.
+ return function (a, b) {
+ if (a.runtime !== b.runtime) {
+ return a.runtime === runtime ? -1 : 1
+ } else if (a.abi !== b.abi) {
+ return a.abi ? -1 : 1
+ } else if (a.specificity !== b.specificity) {
+ return a.specificity > b.specificity ? -1 : 1
+ } else {
+ return 0
+ }
+ }
+}
+
+function isElectron () {
+ if (process.versions && process.versions.electron) return true
+ if (process.env.ELECTRON_RUN_AS_NODE) return true
+ return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
+}
+
+function isAlpine (platform) {
+ return platform === 'linux' && fs.existsSync('/etc/alpine-release')
+}
+
+// Exposed for unit tests
+// TODO: move to lib
+load.parseTags = parseTags;
+load.matchTags = matchTags;
+load.compareTags = compareTags;
+
+var binding$3 = nodeGypBuild(__dirname);
+
+const util$2 = require$$0$1$1;
+const AbstractChainedBatch = abstractLeveldown$1.AbstractChainedBatch;
+const binding$2 = binding$3;
+
+function ChainedBatch$1 (db) {
+ AbstractChainedBatch.call(this, db);
+ this.context = binding$2.batch_init(db.context);
+}
+
+ChainedBatch$1.prototype._put = function (key, value) {
+ binding$2.batch_put(this.context, key, value);
+};
+
+ChainedBatch$1.prototype._del = function (key) {
+ binding$2.batch_del(this.context, key);
+};
+
+ChainedBatch$1.prototype._clear = function () {
+ binding$2.batch_clear(this.context);
+};
+
+ChainedBatch$1.prototype._write = function (options, callback) {
+ binding$2.batch_write(this.context, options, callback);
+};
+
+util$2.inherits(ChainedBatch$1, AbstractChainedBatch);
+
+var chainedBatch = ChainedBatch$1;
+
+const util$1 = require$$0$1$1;
+const AbstractIterator = abstractLeveldown$1.AbstractIterator;
+const binding$1 = binding$3;
+
+function Iterator$1 (db, options) {
+ AbstractIterator.call(this, db);
+
+ this.context = binding$1.iterator_init(db.context, options);
+ this.cache = null;
+ this.finished = false;
+}
+
+util$1.inherits(Iterator$1, AbstractIterator);
+
+Iterator$1.prototype._seek = function (target) {
+ if (target.length === 0) {
+ throw new Error('cannot seek() to an empty target')
+ }
+
+ this.cache = null;
+ binding$1.iterator_seek(this.context, target);
+ this.finished = false;
+};
+
+Iterator$1.prototype._next = function (callback) {
+ var that = this;
+
+ if (this.cache && this.cache.length) {
+ process.nextTick(callback, null, this.cache.pop(), this.cache.pop());
+ } else if (this.finished) {
+ process.nextTick(callback);
+ } else {
+ binding$1.iterator_next(this.context, function (err, array, finished) {
+ if (err) return callback(err)
+
+ that.cache = array;
+ that.finished = finished;
+ that._next(callback);
+ });
+ }
+
+ return this
+};
+
+Iterator$1.prototype._end = function (callback) {
+ delete this.cache;
+ binding$1.iterator_end(this.context, callback);
+};
+
+var iterator = Iterator$1;
+
+const util = require$$0$1$1;
+const AbstractLevelDOWN = abstractLeveldown$1.AbstractLevelDOWN;
+const binding = binding$3;
+const ChainedBatch = chainedBatch;
+const Iterator = iterator;
+
+function LevelDOWN (location) {
+ if (!(this instanceof LevelDOWN)) {
+ return new LevelDOWN(location)
+ }
+
+ if (typeof location !== 'string') {
+ throw new Error('constructor requires a location string argument')
+ }
+
+ AbstractLevelDOWN.call(this, {
+ bufferKeys: true,
+ snapshots: true,
+ permanence: true,
+ seek: true,
+ clear: true,
+ createIfMissing: true,
+ errorIfExists: true,
+ additionalMethods: {
+ approximateSize: true,
+ compactRange: true
+ }
+ });
+
+ this.location = location;
+ this.context = binding.db_init();
+}
+
+util.inherits(LevelDOWN, AbstractLevelDOWN);
+
+LevelDOWN.prototype._open = function (options, callback) {
+ binding.db_open(this.context, this.location, options, callback);
+};
+
+LevelDOWN.prototype._close = function (callback) {
+ binding.db_close(this.context, callback);
+};
+
+LevelDOWN.prototype._serializeKey = function (key) {
+ return Buffer.isBuffer(key) ? key : String(key)
+};
+
+LevelDOWN.prototype._serializeValue = function (value) {
+ return Buffer.isBuffer(value) ? value : String(value)
+};
+
+LevelDOWN.prototype._put = function (key, value, options, callback) {
+ binding.db_put(this.context, key, value, options, callback);
+};
+
+LevelDOWN.prototype._get = function (key, options, callback) {
+ binding.db_get(this.context, key, options, callback);
+};
+
+LevelDOWN.prototype._del = function (key, options, callback) {
+ binding.db_del(this.context, key, options, callback);
+};
+
+LevelDOWN.prototype._chainedBatch = function () {
+ return new ChainedBatch(this)
+};
+
+LevelDOWN.prototype._batch = function (operations, options, callback) {
+ binding.batch_do(this.context, operations, options, callback);
+};
+
+LevelDOWN.prototype.approximateSize = function (start, end, callback) {
+ if (start == null ||
+ end == null ||
+ typeof start === 'function' ||
+ typeof end === 'function') {
+ throw new Error('approximateSize() requires valid `start` and `end` arguments')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new Error('approximateSize() requires a callback argument')
+ }
+
+ start = this._serializeKey(start);
+ end = this._serializeKey(end);
+
+ binding.db_approximate_size(this.context, start, end, callback);
+};
+
+LevelDOWN.prototype.compactRange = function (start, end, callback) {
+ if (start == null ||
+ end == null ||
+ typeof start === 'function' ||
+ typeof end === 'function') {
+ throw new Error('compactRange() requires valid `start` and `end` arguments')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new Error('compactRange() requires a callback argument')
+ }
+
+ start = this._serializeKey(start);
+ end = this._serializeKey(end);
+
+ binding.db_compact_range(this.context, start, end, callback);
+};
+
+LevelDOWN.prototype.getProperty = function (property) {
+ if (typeof property !== 'string') {
+ throw new Error('getProperty() requires a valid `property` argument')
+ }
+
+ return binding.db_get_property(this.context, property)
+};
+
+LevelDOWN.prototype._iterator = function (options) {
+ if (this.status !== 'open') {
+ // Prevent segfault
+ throw new Error('cannot call iterator() before open()')
+ }
+
+ return new Iterator(this, options)
+};
+
+LevelDOWN.destroy = function (location, callback) {
+ if (arguments.length < 2) {
+ throw new Error('destroy() requires `location` and `callback` arguments')
+ }
+ if (typeof location !== 'string') {
+ throw new Error('destroy() requires a location string argument')
+ }
+ if (typeof callback !== 'function') {
+ throw new Error('destroy() requires a callback function argument')
+ }
+
+ binding.destroy_db(location, callback);
+};
+
+LevelDOWN.repair = function (location, callback) {
+ if (arguments.length < 2) {
+ throw new Error('repair() requires `location` and `callback` arguments')
+ }
+ if (typeof location !== 'string') {
+ throw new Error('repair() requires a location string argument')
+ }
+ if (typeof callback !== 'function') {
+ throw new Error('repair() requires a callback function argument')
+ }
+
+ binding.repair_db(location, callback);
+};
+
+var leveldown = LevelDOWN.default = LevelDOWN;
+
+var level = levelPackager(leveldown);
+
+var level$1 = /*@__PURE__*/getDefaultExportFromCjs(level);
+
+var array;
+var hasRequiredArray;
+
+function requireArray () {
+ if (hasRequiredArray) return array;
+ hasRequiredArray = 1;
+ var to = requireWriteStream();
+
+ array = toArray;
+
+ function toArray(array, end) {
+ if (typeof array === "function") {
+ end = array;
+ array = [];
+ }
+
+ return to(writeArray, endArray)
+
+ function writeArray(chunk) {
+ array.push(chunk);
+ }
+
+ function endArray() {
+ end(array);
+ this.emit("end");
+ }
+ }
+ return array;
+}
+
+var writeStream;
+var hasRequiredWriteStream;
+
+function requireWriteStream () {
+ if (hasRequiredWriteStream) return writeStream;
+ hasRequiredWriteStream = 1;
+ var Stream$1 = Stream;
+
+ writeStream = WriteStream;
+
+ WriteStream.toArray = requireArray();
+
+ function WriteStream(write, end) {
+ var stream = new Stream$1()
+ , ended = false;
+
+ end = end || defaultEnd;
+
+ stream.write = handleWrite;
+ stream.end = handleEnd;
+
+ // Support 0.8 pipe [LEGACY]
+ stream.writable = true;
+
+ return stream
+
+ function handleWrite(chunk) {
+ var result = write.call(stream, chunk);
+ return result === false ? false : true
+ }
+
+ function handleEnd(chunk) {
+ if (ended) {
+ return
+ }
+
+ ended = true;
+ if (arguments.length) {
+ stream.write(chunk);
+ }
+ end.call(stream);
+ }
+ }
+
+ function defaultEnd() {
+ this.emit("finish");
+ }
+ return writeStream;
+}
+
+var WriteStream = requireWriteStream();
+
+var endStream = EndStream$1;
+
+function EndStream$1(write, end) {
+ var counter = 0
+ , ended = false;
+
+ var stream = WriteStream(function (chunk) {
+ counter++;
+ write(chunk, function (err) {
+ if (err) {
+ return stream.emit("error", err)
+ }
+
+ counter--;
+
+ if (counter === 0 && ended) {
+ stream.emit("finish");
+ }
+ });
+ }, function () {
+ ended = true;
+ if (counter === 0) {
+ this.emit("finish");
+ }
+ });
+
+ return stream
+}
+
+var EndStream = endStream;
+
+var levelWriteStream = LevelWriteStream;
+
+function LevelWriteStream(db) {
+ return writeStream
+
+ function writeStream(options) {
+ options = options || {};
+
+ var queue = []
+ , stream = EndStream(write);
+
+ return stream
+
+ function write(chunk, callback) {
+ if (queue.length === 0) {
+ process.nextTick(drain);
+ }
+
+ queue.push(chunk);
+ stream.once("_drain", callback);
+ }
+
+ function drain() {
+ if (queue.length === 1) {
+ var chunk = queue[0];
+ db.put(chunk.key, chunk.value, options, emit);
+ } else {
+ var arr = queue.map(function (chunk) {
+ chunk.type = "put";
+ return chunk
+ });
+
+ db.batch(arr, options, emit);
+ }
+
+ queue.length = 0;
+ }
+
+ function emit(err) {
+ stream.emit("_drain", err);
+ }
+ }
+}
+
+var LevelWriteStream$1 = /*@__PURE__*/getDefaultExportFromCjs(levelWriteStream);
+
+var stores = [
+ 'document-store',
+ 'by-sequence',
+ 'attach-store',
+ 'attach-binary-store'
+];
+function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+}
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var doMigrationOne = function (name, db, callback) {
+ // local require to prevent crashing if leveldown isn't installed.
+ var leveldown = require("leveldown");
+
+ var base = path$1.resolve(name);
+ function move(store, index, cb) {
+ var storePath = path$1.join(base, store);
+ var opts;
+ if (index === 3) {
+ opts = {
+ valueEncoding: 'binary'
+ };
+ } else {
+ opts = {
+ valueEncoding: 'json'
+ };
+ }
+ var sub = db.sublevel(store, opts);
+ var orig = level$1(storePath, opts);
+ var from = orig.createReadStream();
+ var writeStream = new LevelWriteStream$1(sub);
+ var to = writeStream();
+ from.on('end', function () {
+ orig.close(function (err) {
+ cb(err, storePath);
+ });
+ });
+ from.pipe(to);
+ }
+ fs$1.unlink(base + '.uuid', function (err) {
+ if (err) {
+ return callback();
+ }
+ var todo = 4;
+ var done = [];
+ stores.forEach(function (store, i) {
+ move(store, i, function (err, storePath) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ done.push(storePath);
+ if (!(--todo)) {
+ done.forEach(function (item) {
+ leveldown.destroy(item, function () {
+ if (++todo === done.length) {
+ fs$1.rmdir(base, callback);
+ }
+ });
+ });
+ }
+ });
+ });
+ });
+};
+var doMigrationTwo = function (db, stores, callback) {
+ var batches = [];
+ stores.bySeqStore.get(UUID_KEY, function (err, value) {
+ if (err) {
+ // no uuid key, so don't need to migrate;
+ return callback();
+ }
+ batches.push({
+ key: UUID_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UUID_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ stores.bySeqStore.get(DOC_COUNT_KEY, function (err, value) {
+ if (value) {
+ // if no doc count key,
+ // just skip
+ // we can live with this
+ batches.push({
+ key: DOC_COUNT_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: DOC_COUNT_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ stores.bySeqStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (value) {
+ // if no UPDATE_SEQ_KEY
+ // just skip
+ // we've gone to far to stop.
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ var deletedSeqs = {};
+ stores.docStore.createReadStream({
+ startKey: '_',
+ endKey: '_\xFF'
+ }).pipe(obj(function (ch, _, next) {
+ if (!isLocalId(ch.key)) {
+ return next();
+ }
+ batches.push({
+ key: ch.key,
+ prefix: stores.docStore,
+ type: 'del'
+ });
+ var winner = winningRev(ch.value);
+ Object.keys(ch.value.rev_map).forEach(function (key) {
+ if (key !== 'winner') {
+ this.push(formatSeq(ch.value.rev_map[key]));
+ }
+ }, this);
+ var winningSeq = ch.value.rev_map[winner];
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, value) {
+ if (!err) {
+ batches.push({
+ key: ch.key,
+ value: value,
+ prefix: stores.localStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ }
+ next();
+ });
+
+ })).pipe(obj(function (seq, _, next) {
+ /* istanbul ignore if */
+ if (deletedSeqs[seq]) {
+ return next();
+ }
+ deletedSeqs[seq] = true;
+ stores.bySeqStore.get(seq, function (err, resp) {
+ /* istanbul ignore if */
+ if (err || !isLocalId(resp._id)) {
+ return next();
+ }
+ batches.push({
+ key: seq,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ next();
+ });
+ }, function () {
+ db.batch(batches, callback);
+ }));
+ });
+ });
+ });
+
+};
+
+var migrate = {
+ doMigrationOne: doMigrationOne,
+ doMigrationTwo: doMigrationTwo
+};
+
+function LevelDownPouch(opts, callback) {
+
+ // Users can pass in their own leveldown alternative here, in which case
+ // it overrides the default one. (This is in addition to the custom builds.)
+ var leveldown = opts.db;
+
+ /* istanbul ignore else */
+ if (!leveldown) {
+ leveldown = requireLeveldown();
+
+ /* istanbul ignore if */
+ if (leveldown instanceof Error) {
+ return callback(leveldown);
+ }
+ }
+
+ var _opts = Object.assign({
+ db: leveldown,
+ migrate: migrate
+ }, opts);
+
+ LevelPouch$1.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+LevelDownPouch.valid = () => {
+ return true;
+};
+LevelDownPouch.use_prefix = false;
+
+function LevelPouch(PouchDB) {
+ PouchDB.adapter('leveldb', LevelDownPouch, true);
+}
+
+export { LevelPouch as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-localstorage.js b/packages/pouchdb-lib/lib/pouchdb-adapter-localstorage.js
new file mode 100644
index 0000000000..d44851b327
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-localstorage.js
@@ -0,0 +1,1522 @@
+import { L as LevelPouch } from './index-3d81fcba.js';
+import { c as commonjsGlobal, g as getDefaultExportFromCjs } from './_commonjsHelpers-24198af3.js';
+import { i as inheritsExports } from './readable-bcb7bff2.js';
+import require$$0 from 'buffer';
+import 'events';
+import 'util';
+import 'stream';
+import 'assert';
+import './pouchdb-core.js';
+import 'node:events';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+
+var toString = Object.prototype.toString;
+
+var isModern = (
+ typeof Buffer.alloc === 'function' &&
+ typeof Buffer.allocUnsafe === 'function' &&
+ typeof Buffer.from === 'function'
+);
+
+function isArrayBuffer (input) {
+ return toString.call(input).slice(8, -1) === 'ArrayBuffer'
+}
+
+function fromArrayBuffer (obj, byteOffset, length) {
+ byteOffset >>>= 0;
+
+ var maxLength = obj.byteLength - byteOffset;
+
+ if (maxLength < 0) {
+ throw new RangeError("'offset' is out of bounds")
+ }
+
+ if (length === undefined) {
+ length = maxLength;
+ } else {
+ length >>>= 0;
+
+ if (length > maxLength) {
+ throw new RangeError("'length' is out of bounds")
+ }
+ }
+
+ return isModern
+ ? Buffer.from(obj.slice(byteOffset, byteOffset + length))
+ : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))
+}
+
+function fromString (string, encoding) {
+ if (typeof encoding !== 'string' || encoding === '') {
+ encoding = 'utf8';
+ }
+
+ if (!Buffer.isEncoding(encoding)) {
+ throw new TypeError('"encoding" must be a valid string encoding')
+ }
+
+ return isModern
+ ? Buffer.from(string, encoding)
+ : new Buffer(string, encoding)
+}
+
+function bufferFrom$1 (value, encodingOrOffset, length) {
+ if (typeof value === 'number') {
+ throw new TypeError('"value" argument must not be a number')
+ }
+
+ if (isArrayBuffer(value)) {
+ return fromArrayBuffer(value, encodingOrOffset, length)
+ }
+
+ if (typeof value === 'string') {
+ return fromString(value, encodingOrOffset)
+ }
+
+ return isModern
+ ? Buffer.from(value)
+ : new Buffer(value)
+}
+
+var bufferFrom_1 = bufferFrom$1;
+
+var abstractLeveldown = {};
+
+var xtend$1 = extend;
+
+function extend() {
+ var target = {};
+
+ for (var i = 0; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (source.hasOwnProperty(key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+/* Copyright (c) 2013 Rod Vagg, MIT License */
+
+function AbstractIterator$2 (db) {
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback != 'function')
+ throw new Error('next() requires a callback argument')
+
+ if (self._ended)
+ return callback(new Error('cannot call next() after end()'))
+ if (self._nexting)
+ return callback(new Error('cannot call next() before previous next() has completed'))
+
+ self._nexting = true;
+ if (typeof self._next == 'function') {
+ return self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ })
+ }
+
+ process.nextTick(function () {
+ self._nexting = false;
+ callback();
+ });
+};
+
+AbstractIterator$2.prototype.end = function (callback) {
+ if (typeof callback != 'function')
+ throw new Error('end() requires a callback argument')
+
+ if (this._ended)
+ return callback(new Error('end() already called on iterator'))
+
+ this._ended = true;
+
+ if (typeof this._end == 'function')
+ return this._end(callback)
+
+ process.nextTick(callback);
+};
+
+var abstractIterator = AbstractIterator$2;
+
+/* Copyright (c) 2013 Rod Vagg, MIT License */
+
+function AbstractChainedBatch$1 (db) {
+ this._db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$1.prototype._checkWritten = function () {
+ if (this._written)
+ throw new Error('write() already called on this batch')
+};
+
+AbstractChainedBatch$1.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this._db._checkKeyValue(key, 'key', this._db._isBuffer);
+ if (err) throw err
+ err = this._db._checkKeyValue(value, 'value', this._db._isBuffer);
+ if (err) throw err
+
+ if (!this._db._isBuffer(key)) key = String(key);
+ if (!this._db._isBuffer(value)) value = String(value);
+
+ if (typeof this._put == 'function' )
+ this._put(key, value);
+ else
+ this._operations.push({ type: 'put', key: key, value: value });
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this._db._checkKeyValue(key, 'key', this._db._isBuffer);
+ if (err) throw err
+
+ if (!this._db._isBuffer(key)) key = String(key);
+
+ if (typeof this._del == 'function' )
+ this._del(key);
+ else
+ this._operations.push({ type: 'del', key: key });
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.clear = function () {
+ this._checkWritten();
+
+ this._operations = [];
+
+ if (typeof this._clear == 'function' )
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options == 'function')
+ callback = options;
+ if (typeof callback != 'function')
+ throw new Error('write() requires a callback argument')
+ if (typeof options != 'object')
+ options = {};
+
+ this._written = true;
+
+ if (typeof this._write == 'function' )
+ return this._write(callback)
+
+ if (typeof this._db._batch == 'function')
+ return this._db._batch(this._operations, options, callback)
+
+ process.nextTick(callback);
+};
+
+var abstractChainedBatch = AbstractChainedBatch$1;
+
+/* Copyright (c) 2013 Rod Vagg, MIT License */
+
+var xtend = xtend$1
+ , AbstractIterator$1 = abstractIterator
+ , AbstractChainedBatch = abstractChainedBatch;
+
+function AbstractLevelDOWN$1 (location) {
+ if (!arguments.length || location === undefined)
+ throw new Error('constructor requires at least a location argument')
+
+ if (typeof location != 'string')
+ throw new Error('constructor requires a location string argument')
+
+ this.location = location;
+}
+
+AbstractLevelDOWN$1.prototype.open = function (options, callback) {
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('open() requires a callback argument')
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._open == 'function')
+ return this._open(options, callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.close = function (callback) {
+ if (typeof callback != 'function')
+ throw new Error('close() requires a callback argument')
+
+ if (typeof this._close == 'function')
+ return this._close(callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.get = function (key, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('get() requires a callback argument')
+
+ if (err = this._checkKeyValue(key, 'key', this._isBuffer))
+ return callback(err)
+
+ if (!this._isBuffer(key))
+ key = String(key);
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._get == 'function')
+ return this._get(key, options, callback)
+
+ process.nextTick(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$1.prototype.put = function (key, value, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('put() requires a callback argument')
+
+ if (err = this._checkKeyValue(key, 'key', this._isBuffer))
+ return callback(err)
+
+ if (err = this._checkKeyValue(value, 'value', this._isBuffer))
+ return callback(err)
+
+ if (!this._isBuffer(key))
+ key = String(key);
+
+ // coerce value to string in node, don't touch it in browser
+ // (indexeddb can store any JS type)
+ if (!this._isBuffer(value) && !process.browser)
+ value = String(value);
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._put == 'function')
+ return this._put(key, value, options, callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.del = function (key, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('del() requires a callback argument')
+
+ if (err = this._checkKeyValue(key, 'key', this._isBuffer))
+ return callback(err)
+
+ if (!this._isBuffer(key))
+ key = String(key);
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._del == 'function')
+ return this._del(key, options, callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.batch = function (array, options, callback) {
+ if (!arguments.length)
+ return this._chainedBatch()
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('batch(array) requires a callback argument')
+
+ if (!Array.isArray(array))
+ return callback(new Error('batch(array) requires an array argument'))
+
+ if (typeof options != 'object')
+ options = {};
+
+ var i = 0
+ , l = array.length
+ , e
+ , err;
+
+ for (; i < l; i++) {
+ e = array[i];
+ if (typeof e != 'object')
+ continue
+
+ if (err = this._checkKeyValue(e.type, 'type', this._isBuffer))
+ return callback(err)
+
+ if (err = this._checkKeyValue(e.key, 'key', this._isBuffer))
+ return callback(err)
+
+ if (e.type == 'put') {
+ if (err = this._checkKeyValue(e.value, 'value', this._isBuffer))
+ return callback(err)
+ }
+ }
+
+ if (typeof this._batch == 'function')
+ return this._batch(array, options, callback)
+
+ process.nextTick(callback);
+};
+
+//TODO: remove from here, not a necessary primitive
+AbstractLevelDOWN$1.prototype.approximateSize = function (start, end, callback) {
+ if ( start == null
+ || end == null
+ || typeof start == 'function'
+ || typeof end == 'function') {
+ throw new Error('approximateSize() requires valid `start`, `end` and `callback` arguments')
+ }
+
+ if (typeof callback != 'function')
+ throw new Error('approximateSize() requires a callback argument')
+
+ if (!this._isBuffer(start))
+ start = String(start);
+
+ if (!this._isBuffer(end))
+ end = String(end);
+
+ if (typeof this._approximateSize == 'function')
+ return this._approximateSize(start, end, callback)
+
+ process.nextTick(function () {
+ callback(null, 0);
+ });
+};
+
+AbstractLevelDOWN$1.prototype._setupIteratorOptions = function (options) {
+ var self = this;
+
+ options = xtend(options)
+
+ ;[ 'start', 'end', 'gt', 'gte', 'lt', 'lte' ].forEach(function (o) {
+ if (options[o] && self._isBuffer(options[o]) && options[o].length === 0)
+ delete options[o];
+ });
+
+ options.reverse = !!options.reverse;
+
+ // fix `start` so it takes into account gt, gte, lt, lte as appropriate
+ if (options.reverse && options.lt)
+ options.start = options.lt;
+ if (options.reverse && options.lte)
+ options.start = options.lte;
+ if (!options.reverse && options.gt)
+ options.start = options.gt;
+ if (!options.reverse && options.gte)
+ options.start = options.gte;
+
+ if ((options.reverse && options.lt && !options.lte)
+ || (!options.reverse && options.gt && !options.gte))
+ options.exclusiveStart = true; // start should *not* include matching key
+
+ return options
+};
+
+AbstractLevelDOWN$1.prototype.iterator = function (options) {
+ if (typeof options != 'object')
+ options = {};
+
+ options = this._setupIteratorOptions(options);
+
+ if (typeof this._iterator == 'function')
+ return this._iterator(options)
+
+ return new AbstractIterator$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch(this)
+};
+
+AbstractLevelDOWN$1.prototype._isBuffer = function (obj) {
+ return Buffer.isBuffer(obj)
+};
+
+AbstractLevelDOWN$1.prototype._checkKeyValue = function (obj, type) {
+ if (obj === null || obj === undefined)
+ return new Error(type + ' cannot be `null` or `undefined`')
+
+ if (obj === null || obj === undefined)
+ return new Error(type + ' cannot be `null` or `undefined`')
+
+ if (this._isBuffer(obj)) {
+ if (obj.length === 0)
+ return new Error(type + ' cannot be an empty Buffer')
+ } else if (String(obj) === '')
+ return new Error(type + ' cannot be an empty String')
+};
+
+abstractLeveldown.AbstractLevelDOWN = AbstractLevelDOWN$1;
+abstractLeveldown.AbstractIterator = AbstractIterator$1;
+abstractLeveldown.AbstractChainedBatch = AbstractChainedBatch;
+
+var localstorage = {};
+
+var utils$2 = {};
+
+// taken from rvagg/memdown commit 2078b40
+utils$2.sortedIndexOf = function(arr, item) {
+ var low = 0;
+ var high = arr.length;
+ var mid;
+ while (low < high) {
+ mid = (low + high) >>> 1;
+ if (arr[mid] < item) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return low;
+};
+
+var api$1 = {exports: {}};
+
+var localstorageMemory = {exports: {}};
+
+localstorageMemory.exports;
+
+(function (module, exports) {
+ (function (root) {
+ var localStorageMemory = {};
+ var cache = {};
+
+ /**
+ * number of stored items.
+ */
+ localStorageMemory.length = 0;
+
+ /**
+ * returns item for passed key, or null
+ *
+ * @para {String} key
+ * name of item to be returned
+ * @returns {String|null}
+ */
+ localStorageMemory.getItem = function (key) {
+ if (key in cache) {
+ return cache[key]
+ }
+
+ return null
+ };
+
+ /**
+ * sets item for key to passed value, as String
+ *
+ * @para {String} key
+ * name of item to be set
+ * @para {String} value
+ * value, will always be turned into a String
+ * @returns {undefined}
+ */
+ localStorageMemory.setItem = function (key, value) {
+ if (typeof value === 'undefined') {
+ localStorageMemory.removeItem(key);
+ } else {
+ if (!(cache.hasOwnProperty(key))) {
+ localStorageMemory.length++;
+ }
+
+ cache[key] = '' + value;
+ }
+ };
+
+ /**
+ * removes item for passed key
+ *
+ * @para {String} key
+ * name of item to be removed
+ * @returns {undefined}
+ */
+ localStorageMemory.removeItem = function (key) {
+ if (cache.hasOwnProperty(key)) {
+ delete cache[key];
+ localStorageMemory.length--;
+ }
+ };
+
+ /**
+ * returns name of key at passed index
+ *
+ * @para {Number} index
+ * Position for key to be returned (starts at 0)
+ * @returns {String|null}
+ */
+ localStorageMemory.key = function (index) {
+ return Object.keys(cache)[index] || null
+ };
+
+ /**
+ * removes all stored items and sets length to 0
+ *
+ * @returns {undefined}
+ */
+ localStorageMemory.clear = function () {
+ cache = {};
+ localStorageMemory.length = 0;
+ };
+
+ {
+ module.exports = localStorageMemory;
+ }
+ })();
+} (localstorageMemory, localstorageMemory.exports));
+
+var localstorageMemoryExports = localstorageMemory.exports;
+
+var hasLocalstorage = {exports: {}};
+
+/**
+ * # hasLocalStorage()
+ *
+ * returns `true` or `false` depending on whether localStorage is supported or not.
+ * Beware that some browsers like Safari do not support localStorage in private mode.
+ *
+ * inspired by this cappuccino commit
+ * https://github.com/cappuccino/cappuccino/commit/063b05d9643c35b303568a28809e4eb3224f71ec
+ *
+ * @returns {Boolean}
+ */
+hasLocalstorage.exports;
+
+(function (module, exports) {
+ function hasLocalStorage() {
+ try {
+
+ // we've to put this in here. I've seen Firefox throwing `Security error: 1000`
+ // when cookies have been disabled
+ if (typeof localStorage === 'undefined') {
+ return false;
+ }
+
+ // Just because localStorage exists does not mean it works. In particular it might be disabled
+ // as it is when Safari's private browsing mode is active.
+ localStorage.setItem('Storage-Test', '1');
+
+ // that should not happen ...
+ if (localStorage.getItem('Storage-Test') !== '1') {
+ return false;
+ }
+
+ // okay, let's clean up if we got here.
+ localStorage.removeItem('Storage-Test');
+ } catch (_error) {
+
+ // in case of an error, like Safari's Private Mode, return false
+ return false;
+ }
+
+ // we're good.
+ return true;
+ }
+
+
+ {
+ module.exports = hasLocalStorage;
+ }
+} (hasLocalstorage, hasLocalstorage.exports));
+
+var hasLocalstorageExports = hasLocalstorage.exports;
+
+var exports = api$1.exports = {};
+var localStorageMemory = localstorageMemoryExports;
+exports.hasLocalStorage = hasLocalstorageExports;
+
+/**
+ * returns localStorage-compatible API, either backed by window.localStorage
+ * or memory if it's not available or not persistent.
+ *
+ * It also adds an object API (`.getObject(key)`,
+ * `.setObject(key, properties)`) and a `isPresistent` property
+ *
+ * @returns {Object}
+ */
+exports.create = function () {
+ var api;
+
+ if (!exports.hasLocalStorage()) {
+ api = localStorageMemory;
+ api.isPersistent = false;
+ } else {
+ api = commonjsGlobal.localStorage;
+ api = {
+ get length() { return commonjsGlobal.localStorage.length; },
+ getItem: commonjsGlobal.localStorage.getItem.bind(commonjsGlobal.localStorage),
+ setItem: commonjsGlobal.localStorage.setItem.bind(commonjsGlobal.localStorage),
+ removeItem: commonjsGlobal.localStorage.removeItem.bind(commonjsGlobal.localStorage),
+ key: commonjsGlobal.localStorage.key.bind(commonjsGlobal.localStorage),
+ clear: commonjsGlobal.localStorage.clear.bind(commonjsGlobal.localStorage),
+ };
+
+ api.isPersistent = true;
+ }
+
+ api.getObject = exports.getObject.bind(null, api);
+ api.setObject = exports.setObject.bind(null, api);
+
+ return api;
+};
+
+/**
+ * sets key to passed Object.
+ *
+ * @returns undefined
+ */
+exports.setObject = function (store, key, object) {
+ if (typeof object !== 'object') {
+ return store.setItem(key, object);
+ }
+
+ return store.setItem(key, JSON.stringify(object));
+};
+
+/**
+ * returns Object for key, or null
+ *
+ * @returns {Object|null}
+ */
+exports.getObject = function (store, key) {
+ var item = store.getItem(key);
+
+ if (!item) {
+ return null;
+ }
+
+ try {
+ return JSON.parse(item);
+ } catch (e) {
+ return item;
+ }
+};
+
+var apiExports = api$1.exports;
+
+var api = apiExports;
+var lib$1 = api.create();
+
+//
+// Class that should contain everything necessary to interact
+// with localStorage as a generic key-value store.
+// The idea is that authors who want to create an AbstractKeyValueDOWN
+// module (e.g. on lawnchair, S3, whatever) will only have to
+// reimplement this file.
+//
+
+// see http://stackoverflow.com/a/15349865/680742
+var nextTick$2 = commonjsGlobal.setImmediate || process.nextTick;
+
+// We use humble-localstorage as a wrapper for localStorage because
+// it falls back to an in-memory implementation in environments without
+// localStorage, like Node or Safari private browsing.
+var storage = lib$1;
+
+function callbackify(callback, fun) {
+ var val;
+ var err;
+ try {
+ val = fun();
+ } catch (e) {
+ err = e;
+ }
+ nextTick$2(function () {
+ callback(err, val);
+ });
+}
+
+function createPrefix(dbname) {
+ return dbname.replace(/!/g, '!!') + '!'; // escape bangs in dbname;
+}
+
+function LocalStorageCore$2(dbname) {
+ this._prefix = createPrefix(dbname);
+}
+
+LocalStorageCore$2.prototype.getKeys = function (callback) {
+ var self = this;
+ callbackify(callback, function () {
+ var keys = [];
+ var prefixLen = self._prefix.length;
+ var i = -1;
+ var len = storage.length;
+ while (++i < len) {
+ var fullKey = storage.key(i);
+ if (fullKey.substring(0, prefixLen) === self._prefix) {
+ keys.push(fullKey.substring(prefixLen));
+ }
+ }
+ keys.sort();
+ return keys;
+ });
+};
+
+LocalStorageCore$2.prototype.put = function (key, value, callback) {
+ var self = this;
+ callbackify(callback, function () {
+ storage.setItem(self._prefix + key, value);
+ });
+};
+
+LocalStorageCore$2.prototype.get = function (key, callback) {
+ var self = this;
+ callbackify(callback, function () {
+ return storage.getItem(self._prefix + key);
+ });
+};
+
+LocalStorageCore$2.prototype.remove = function (key, callback) {
+ var self = this;
+ callbackify(callback, function () {
+ storage.removeItem(self._prefix + key);
+ });
+};
+
+LocalStorageCore$2.destroy = function (dbname, callback) {
+ var prefix = createPrefix(dbname);
+ callbackify(callback, function () {
+ var keysToDelete = [];
+ var i = -1;
+ var len = storage.length;
+ while (++i < len) {
+ var key = storage.key(i);
+ if (key.substring(0, prefix.length) === prefix) {
+ keysToDelete.push(key);
+ }
+ }
+ keysToDelete.forEach(function (key) {
+ storage.removeItem(key);
+ });
+ });
+};
+
+var localstorageCore = LocalStorageCore$2;
+
+var argsarray$1 = argsArray;
+
+function argsArray(fun) {
+ return function () {
+ var len = arguments.length;
+ if (len) {
+ var args = [];
+ var i = -1;
+ while (++i < len) {
+ args[i] = arguments[i];
+ }
+ return fun.call(this, args);
+ } else {
+ return fun.call(this, []);
+ }
+ };
+}
+
+// Simple FIFO queue implementation to avoid having to do shift()
+// on an array, which is slow.
+
+function Queue$1() {
+ this.length = 0;
+}
+
+Queue$1.prototype.push = function (item) {
+ var node = {item: item};
+ if (this.last) {
+ this.last = this.last.next = node;
+ } else {
+ this.last = this.first = node;
+ }
+ this.length++;
+};
+
+Queue$1.prototype.shift = function () {
+ var node = this.first;
+ if (node) {
+ this.first = node.next;
+ if (!(--this.length)) {
+ this.last = undefined;
+ }
+ return node.item;
+ }
+};
+
+Queue$1.prototype.slice = function (start, end) {
+ start = typeof start === 'undefined' ? 0 : start;
+ end = typeof end === 'undefined' ? Infinity : end;
+
+ var output = [];
+
+ var i = 0;
+ for (var node = this.first; node; node = node.next) {
+ if (--end < 0) {
+ break;
+ } else if (++i > start) {
+ output.push(node.item);
+ }
+ }
+ return output;
+};
+
+var tinyQueue = Queue$1;
+
+var argsarray = argsarray$1;
+var Queue = tinyQueue;
+
+// see http://stackoverflow.com/a/15349865/680742
+var nextTick$1 = commonjsGlobal.setImmediate || process.nextTick;
+
+function TaskQueue$1() {
+ this.queue = new Queue();
+ this.running = false;
+}
+
+TaskQueue$1.prototype.add = function (fun, callback) {
+ this.queue.push({fun: fun, callback: callback});
+ this.processNext();
+};
+
+TaskQueue$1.prototype.processNext = function () {
+ var self = this;
+ if (self.running || !self.queue.length) {
+ return;
+ }
+ self.running = true;
+
+ var task = self.queue.shift();
+ nextTick$1(function () {
+ task.fun(argsarray(function (args) {
+ task.callback.apply(null, args);
+ self.running = false;
+ self.processNext();
+ }));
+ });
+};
+
+var taskqueue = TaskQueue$1;
+
+var d64$1 = {exports: {}};
+
+d64$1.exports;
+
+(function (module) {
+ var Buffer = require$$0.Buffer;
+
+ var CHARS = '.PYFGCRLAOEUIDHTNSQJKXBMWVZ_pyfgcrlaoeuidhtnsqjkxbmwvz1234567890'
+ .split('').sort().join('');
+
+ module.exports = function (chars, exports) {
+ chars = chars || CHARS;
+ exports = exports || {};
+ if(chars.length !== 64) throw new Error('a base 64 encoding requires 64 chars')
+
+ var codeToIndex = new Buffer(128);
+ codeToIndex.fill();
+
+ for(var i = 0; i < 64; i++) {
+ var code = chars.charCodeAt(i);
+ codeToIndex[code] = i;
+ }
+
+ exports.encode = function (data) {
+ var s = '', l = data.length, hang = 0;
+ for(var i = 0; i < l; i++) {
+ var v = data[i];
+
+ switch (i % 3) {
+ case 0:
+ s += chars[v >> 2];
+ hang = (v & 3) << 4;
+ break;
+ case 1:
+ s += chars[hang | v >> 4];
+ hang = (v & 0xf) << 2;
+ break;
+ case 2:
+ s += chars[hang | v >> 6];
+ s += chars[v & 0x3f];
+ hang = 0;
+ break;
+ }
+
+ }
+ if(l%3) s += chars[hang];
+ return s
+ };
+ exports.decode = function (str) {
+ var l = str.length, j = 0;
+ var b = new Buffer(~~((l/4)*3)), hang = 0;
+
+ for(var i = 0; i < l; i++) {
+ var v = codeToIndex[str.charCodeAt(i)];
+
+ switch (i % 4) {
+ case 0:
+ hang = v << 2;
+ break;
+ case 1:
+ b[j++] = hang | v >> 4;
+ hang = (v << 4) & 0xff;
+ break;
+ case 2:
+ b[j++] = hang | v >> 2;
+ hang = (v << 6) & 0xff;
+ break;
+ case 3:
+ b[j++] = hang | v;
+ break;
+ }
+
+ }
+ return b
+ };
+ return exports
+ };
+
+ module.exports(CHARS, module.exports);
+} (d64$1));
+
+var d64Exports = d64$1.exports;
+
+// ArrayBuffer/Uint8Array are old formats that date back to before we
+// had a proper browserified buffer type. they may be removed later
+var arrayBuffPrefix = 'ArrayBuffer:';
+var arrayBuffRegex = new RegExp('^' + arrayBuffPrefix);
+var uintPrefix = 'Uint8Array:';
+var uintRegex = new RegExp('^' + uintPrefix);
+
+// this is the new encoding format used going forward
+var bufferPrefix = 'Buff:';
+var bufferRegex = new RegExp('^' + bufferPrefix);
+
+var utils$1 = utils$2;
+var LocalStorageCore$1 = localstorageCore;
+var TaskQueue = taskqueue;
+var d64 = d64Exports;
+
+function LocalStorage$1(dbname) {
+ this._store = new LocalStorageCore$1(dbname);
+ this._queue = new TaskQueue();
+}
+
+LocalStorage$1.prototype.sequentialize = function (callback, fun) {
+ this._queue.add(fun, callback);
+};
+
+LocalStorage$1.prototype.init = function (callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ self._store.getKeys(function (err, keys) {
+ if (err) {
+ return callback(err);
+ }
+ self._keys = keys;
+ return callback();
+ });
+ });
+};
+
+LocalStorage$1.prototype.keys = function (callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ self._store.getKeys(function (err, keys) {
+ callback(null, keys.slice());
+ });
+ });
+};
+
+//setItem: Saves and item at the key provided.
+LocalStorage$1.prototype.setItem = function (key, value, callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ if (Buffer.isBuffer(value)) {
+ value = bufferPrefix + d64.encode(value);
+ }
+
+ var idx = utils$1.sortedIndexOf(self._keys, key);
+ if (self._keys[idx] !== key) {
+ self._keys.splice(idx, 0, key);
+ }
+ self._store.put(key, value, callback);
+ });
+};
+
+//getItem: Returns the item identified by it's key.
+LocalStorage$1.prototype.getItem = function (key, callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ self._store.get(key, function (err, retval) {
+ if (err) {
+ return callback(err);
+ }
+ if (typeof retval === 'undefined' || retval === null) {
+ // 'NotFound' error, consistent with LevelDOWN API
+ return callback(new Error('NotFound'));
+ }
+ if (typeof retval !== 'undefined') {
+ if (bufferRegex.test(retval)) {
+ retval = d64.decode(retval.substring(bufferPrefix.length));
+ } else if (arrayBuffRegex.test(retval)) {
+ // this type is kept for backwards
+ // compatibility with older databases, but may be removed
+ // after a major version bump
+ retval = retval.substring(arrayBuffPrefix.length);
+ retval = new ArrayBuffer(atob(retval).split('').map(function (c) {
+ return c.charCodeAt(0);
+ }));
+ } else if (uintRegex.test(retval)) {
+ // ditto
+ retval = retval.substring(uintPrefix.length);
+ retval = new Uint8Array(atob(retval).split('').map(function (c) {
+ return c.charCodeAt(0);
+ }));
+ }
+ }
+ callback(null, retval);
+ });
+ });
+};
+
+//removeItem: Removes the item identified by it's key.
+LocalStorage$1.prototype.removeItem = function (key, callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ var idx = utils$1.sortedIndexOf(self._keys, key);
+ if (self._keys[idx] === key) {
+ self._keys.splice(idx, 1);
+ self._store.remove(key, function (err) {
+ if (err) {
+ return callback(err);
+ }
+ callback();
+ });
+ } else {
+ callback();
+ }
+ });
+};
+
+LocalStorage$1.prototype.length = function (callback) {
+ var self = this;
+ self.sequentialize(callback, function (callback) {
+ callback(null, self._keys.length);
+ });
+};
+
+localstorage.LocalStorage = LocalStorage$1;
+
+var inherits = inheritsExports;
+var bufferFrom = bufferFrom_1;
+var AbstractLevelDOWN = abstractLeveldown.AbstractLevelDOWN;
+var AbstractIterator = abstractLeveldown.AbstractIterator;
+
+var LocalStorage = localstorage.LocalStorage;
+var LocalStorageCore = localstorageCore;
+var utils = utils$2;
+
+// see http://stackoverflow.com/a/15349865/680742
+var nextTick = commonjsGlobal.setImmediate || process.nextTick;
+
+function LDIterator(db, options) {
+
+ AbstractIterator.call(this, db);
+
+ this._reverse = !!options.reverse;
+ this._endkey = options.end;
+ this._startkey = options.start;
+ this._gt = options.gt;
+ this._gte = options.gte;
+ this._lt = options.lt;
+ this._lte = options.lte;
+ this._exclusiveStart = options.exclusiveStart;
+ this._keysOnly = options.values === false;
+ this._limit = options.limit;
+ this._count = 0;
+
+ this.onInitCompleteListeners = [];
+}
+
+inherits(LDIterator, AbstractIterator);
+
+LDIterator.prototype._init = function (callback) {
+ nextTick(function () {
+ callback();
+ });
+};
+
+LDIterator.prototype._next = function (callback) {
+ var self = this;
+
+ function onInitComplete() {
+ if (self._pos === self._keys.length || self._pos < 0) { // done reading
+ return callback();
+ }
+
+ var key = self._keys[self._pos];
+
+ if (!!self._endkey && (self._reverse ? key < self._endkey : key > self._endkey)) {
+ return callback();
+ }
+
+ if (!!self._limit && self._limit > 0 && self._count++ >= self._limit) {
+ return callback();
+ }
+
+ if ((self._lt && key >= self._lt) ||
+ (self._lte && key > self._lte) ||
+ (self._gt && key <= self._gt) ||
+ (self._gte && key < self._gte)) {
+ return callback();
+ }
+
+ self._pos += self._reverse ? -1 : 1;
+ if (self._keysOnly) {
+ return callback(null, key);
+ }
+
+ self.db.container.getItem(key, function (err, value) {
+ if (err) {
+ if (err.message === 'NotFound') {
+ return nextTick(function () {
+ self._next(callback);
+ });
+ }
+ return callback(err);
+ }
+ callback(null, key, value);
+ });
+ }
+ if (!self.initStarted) {
+ process.nextTick(function () {
+ self.initStarted = true;
+ self._init(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ self.db.container.keys(function (err, keys) {
+ if (err) {
+ return callback(err);
+ }
+ self._keys = keys;
+ if (self._startkey) {
+ var index = utils.sortedIndexOf(self._keys, self._startkey);
+ var startkey = (index >= self._keys.length || index < 0) ?
+ undefined : self._keys[index];
+ self._pos = index;
+ if (self._reverse) {
+ if (self._exclusiveStart || startkey !== self._startkey) {
+ self._pos--;
+ }
+ } else if (self._exclusiveStart && startkey === self._startkey) {
+ self._pos++;
+ }
+ } else {
+ self._pos = self._reverse ? self._keys.length - 1 : 0;
+ }
+ onInitComplete();
+
+ self.initCompleted = true;
+ var i = -1;
+ while (++i < self.onInitCompleteListeners.length) {
+ nextTick(self.onInitCompleteListeners[i]);
+ }
+ });
+ });
+ });
+ } else if (!self.initCompleted) {
+ self.onInitCompleteListeners.push(onInitComplete);
+ } else {
+ process.nextTick(onInitComplete);
+ }
+};
+
+function LD(location) {
+ if (!(this instanceof LD)) {
+ return new LD(location);
+ }
+ AbstractLevelDOWN.call(this, location);
+ this.container = new LocalStorage(location);
+}
+
+inherits(LD, AbstractLevelDOWN);
+
+LD.prototype._open = function (options, callback) {
+ this.container.init(callback);
+};
+
+LD.prototype._put = function (key, value, options, callback) {
+
+ var err = checkKeyValue(key, 'key');
+
+ if (err) {
+ return nextTick(function () {
+ callback(err);
+ });
+ }
+
+ err = checkKeyValue(value, 'value');
+
+ if (err) {
+ return nextTick(function () {
+ callback(err);
+ });
+ }
+
+ if (typeof value === 'object' && !Buffer.isBuffer(value) && value.buffer === undefined) {
+ var obj = {};
+ obj.storetype = "json";
+ obj.data = value;
+ value = JSON.stringify(obj);
+ }
+
+ this.container.setItem(key, value, callback);
+};
+
+LD.prototype._get = function (key, options, callback) {
+
+ var err = checkKeyValue(key, 'key');
+
+ if (err) {
+ return nextTick(function () {
+ callback(err);
+ });
+ }
+
+ if (!Buffer.isBuffer(key)) {
+ key = String(key);
+ }
+ this.container.getItem(key, function (err, value) {
+
+ if (err) {
+ return callback(err);
+ }
+
+ if (options.asBuffer !== false && !Buffer.isBuffer(value)) {
+ value = bufferFrom(value);
+ }
+
+
+ if (options.asBuffer === false) {
+ if (value.indexOf("{\"storetype\":\"json\",\"data\"") > -1) {
+ var res = JSON.parse(value);
+ value = res.data;
+ }
+ }
+ callback(null, value);
+ });
+};
+
+LD.prototype._del = function (key, options, callback) {
+
+ var err = checkKeyValue(key, 'key');
+
+ if (err) {
+ return nextTick(function () {
+ callback(err);
+ });
+ }
+ if (!Buffer.isBuffer(key)) {
+ key = String(key);
+ }
+
+ this.container.removeItem(key, callback);
+};
+
+LD.prototype._batch = function (array, options, callback) {
+ var self = this;
+ nextTick(function () {
+ var err;
+ var key;
+ var value;
+
+ var numDone = 0;
+ var overallErr;
+ function checkDone() {
+ if (++numDone === array.length) {
+ callback(overallErr);
+ }
+ }
+
+ if (Array.isArray(array) && array.length) {
+ for (var i = 0; i < array.length; i++) {
+ var task = array[i];
+ if (task) {
+ key = Buffer.isBuffer(task.key) ? task.key : String(task.key);
+ err = checkKeyValue(key, 'key');
+ if (err) {
+ overallErr = err;
+ checkDone();
+ } else if (task.type === 'del') {
+ self._del(task.key, options, checkDone);
+ } else if (task.type === 'put') {
+ value = Buffer.isBuffer(task.value) ? task.value : String(task.value);
+ err = checkKeyValue(value, 'value');
+ if (err) {
+ overallErr = err;
+ checkDone();
+ } else {
+ self._put(key, value, options, checkDone);
+ }
+ }
+ } else {
+ checkDone();
+ }
+ }
+ } else {
+ callback();
+ }
+ });
+};
+
+LD.prototype._iterator = function (options) {
+ return new LDIterator(this, options);
+};
+
+LD.destroy = function (name, callback) {
+ LocalStorageCore.destroy(name, callback);
+};
+
+function checkKeyValue(obj, type) {
+ if (obj === null || obj === undefined) {
+ return new Error(type + ' cannot be `null` or `undefined`');
+ }
+ if (obj === null || obj === undefined) {
+ return new Error(type + ' cannot be `null` or `undefined`');
+ }
+
+ if (type === 'key') {
+
+ if (obj instanceof Boolean) {
+ return new Error(type + ' cannot be `null` or `undefined`');
+ }
+ if (obj === '') {
+ return new Error(type + ' cannot be empty');
+ }
+ }
+ if (obj.toString().indexOf("[object ArrayBuffer]") === 0) {
+ if (obj.byteLength === 0 || obj.byteLength === undefined) {
+ return new Error(type + ' cannot be an empty Buffer');
+ }
+ }
+
+ if (Buffer.isBuffer(obj)) {
+ if (obj.length === 0) {
+ return new Error(type + ' cannot be an empty Buffer');
+ }
+ } else if (String(obj) === '') {
+ return new Error(type + ' cannot be an empty String');
+ }
+}
+
+var lib = LD;
+
+var localstoragedown = /*@__PURE__*/getDefaultExportFromCjs(lib);
+
+function LocalStoragePouch(opts, callback) {
+ var _opts = Object.assign({
+ db: localstoragedown
+ }, opts);
+
+ LevelPouch.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+LocalStoragePouch.valid = () => typeof localStorage !== 'undefined';
+LocalStoragePouch.use_prefix = true;
+
+const localstorageAdapter = (PouchDB) => {
+ PouchDB.adapter('localstorage', LocalStoragePouch, true);
+};
+
+export { localstorageAdapter as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-memory.js b/packages/pouchdb-lib/lib/pouchdb-adapter-memory.js
new file mode 100644
index 0000000000..69c39e158f
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-memory.js
@@ -0,0 +1,1815 @@
+import { i as immutable, L as LevelPouch } from './index-3d81fcba.js';
+import { g as getDefaultExportFromCjs } from './_commonjsHelpers-24198af3.js';
+import { i as inheritsExports, c as ltgt$1 } from './readable-bcb7bff2.js';
+import require$$0 from 'buffer';
+import 'events';
+import 'util';
+import 'stream';
+import 'assert';
+import './pouchdb-core.js';
+import 'node:events';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+
+var abstractLeveldown$1 = {};
+
+/* Copyright (c) 2017 Rod Vagg, MIT License */
+
+function AbstractIterator$2 (db) {
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback != 'function')
+ throw new Error('next() requires a callback argument')
+
+ if (self._ended)
+ return callback(new Error('cannot call next() after end()'))
+ if (self._nexting)
+ return callback(new Error('cannot call next() before previous next() has completed'))
+
+ self._nexting = true;
+ if (typeof self._next == 'function') {
+ return self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ })
+ }
+
+ process.nextTick(function () {
+ self._nexting = false;
+ callback();
+ });
+};
+
+AbstractIterator$2.prototype.end = function (callback) {
+ if (typeof callback != 'function')
+ throw new Error('end() requires a callback argument')
+
+ if (this._ended)
+ return callback(new Error('end() already called on iterator'))
+
+ this._ended = true;
+
+ if (typeof this._end == 'function')
+ return this._end(callback)
+
+ process.nextTick(callback);
+};
+
+var abstractIterator = AbstractIterator$2;
+
+/* Copyright (c) 2017 Rod Vagg, MIT License */
+
+function AbstractChainedBatch$1 (db) {
+ this._db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$1.prototype._serializeKey = function (key) {
+ return this._db._serializeKey(key)
+};
+
+AbstractChainedBatch$1.prototype._serializeValue = function (value) {
+ return this._db._serializeValue(value)
+};
+
+AbstractChainedBatch$1.prototype._checkWritten = function () {
+ if (this._written)
+ throw new Error('write() already called on this batch')
+};
+
+AbstractChainedBatch$1.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this._db._checkKey(key, 'key', this._db._isBuffer);
+ if (err)
+ throw err
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof this._put == 'function' )
+ this._put(key, value);
+ else
+ this._operations.push({ type: 'put', key: key, value: value });
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this._db._checkKey(key, 'key', this._db._isBuffer);
+ if (err) throw err
+
+ key = this._serializeKey(key);
+
+ if (typeof this._del == 'function' )
+ this._del(key);
+ else
+ this._operations.push({ type: 'del', key: key });
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.clear = function () {
+ this._checkWritten();
+
+ this._operations = [];
+
+ if (typeof this._clear == 'function' )
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$1.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options == 'function')
+ callback = options;
+ if (typeof callback != 'function')
+ throw new Error('write() requires a callback argument')
+ if (typeof options != 'object')
+ options = {};
+
+ this._written = true;
+
+ if (typeof this._write == 'function' )
+ return this._write(callback)
+
+ if (typeof this._db._batch == 'function')
+ return this._db._batch(this._operations, options, callback)
+
+ process.nextTick(callback);
+};
+
+var abstractChainedBatch = AbstractChainedBatch$1;
+
+/* Copyright (c) 2017 Rod Vagg, MIT License */
+
+var xtend = immutable
+ , AbstractIterator$1 = abstractIterator
+ , AbstractChainedBatch = abstractChainedBatch;
+
+function AbstractLevelDOWN$2 (location) {
+ if (!arguments.length || location === undefined)
+ throw new Error('constructor requires at least a location argument')
+
+ if (typeof location != 'string')
+ throw new Error('constructor requires a location string argument')
+
+ this.location = location;
+ this.status = 'new';
+}
+
+AbstractLevelDOWN$2.prototype.open = function (options, callback) {
+ var self = this
+ , oldStatus = this.status;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('open() requires a callback argument')
+
+ if (typeof options != 'object')
+ options = {};
+
+ options.createIfMissing = options.createIfMissing != false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ if (typeof this._open == 'function') {
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+ } else {
+ this.status = 'open';
+ process.nextTick(callback);
+ }
+};
+
+AbstractLevelDOWN$2.prototype.close = function (callback) {
+ var self = this
+ , oldStatus = this.status;
+
+ if (typeof callback != 'function')
+ throw new Error('close() requires a callback argument')
+
+ if (typeof this._close == 'function') {
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+ } else {
+ this.status = 'closed';
+ process.nextTick(callback);
+ }
+};
+
+AbstractLevelDOWN$2.prototype.get = function (key, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('get() requires a callback argument')
+
+ if (err = this._checkKey(key, 'key'))
+ return callback(err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options != 'object')
+ options = {};
+
+ options.asBuffer = options.asBuffer != false;
+
+ if (typeof this._get == 'function')
+ return this._get(key, options, callback)
+
+ process.nextTick(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$2.prototype.put = function (key, value, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('put() requires a callback argument')
+
+ if (err = this._checkKey(key, 'key'))
+ return callback(err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._put == 'function')
+ return this._put(key, value, options, callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$2.prototype.del = function (key, options, callback) {
+ var err;
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof callback != 'function')
+ throw new Error('del() requires a callback argument')
+
+ if (err = this._checkKey(key, 'key'))
+ return callback(err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options != 'object')
+ options = {};
+
+ if (typeof this._del == 'function')
+ return this._del(key, options, callback)
+
+ process.nextTick(callback);
+};
+
+AbstractLevelDOWN$2.prototype.batch = function (array, options, callback) {
+ if (!arguments.length)
+ return this._chainedBatch()
+
+ if (typeof options == 'function')
+ callback = options;
+
+ if (typeof array == 'function')
+ callback = array;
+
+ if (typeof callback != 'function')
+ throw new Error('batch(array) requires a callback argument')
+
+ if (!Array.isArray(array))
+ return callback(new Error('batch(array) requires an array argument'))
+
+ if (!options || typeof options != 'object')
+ options = {};
+
+ var i = 0
+ , l = array.length
+ , e
+ , err;
+
+ for (; i < l; i++) {
+ e = array[i];
+ if (typeof e != 'object')
+ continue
+
+ if (err = this._checkKey(e.type, 'type'))
+ return callback(err)
+
+ if (err = this._checkKey(e.key, 'key'))
+ return callback(err)
+ }
+
+ if (typeof this._batch == 'function')
+ return this._batch(array, options, callback)
+
+ process.nextTick(callback);
+};
+
+//TODO: remove from here, not a necessary primitive
+AbstractLevelDOWN$2.prototype.approximateSize = function (start, end, callback) {
+ if ( start == null
+ || end == null
+ || typeof start == 'function'
+ || typeof end == 'function') {
+ throw new Error('approximateSize() requires valid `start`, `end` and `callback` arguments')
+ }
+
+ if (typeof callback != 'function')
+ throw new Error('approximateSize() requires a callback argument')
+
+ start = this._serializeKey(start);
+ end = this._serializeKey(end);
+
+ if (typeof this._approximateSize == 'function')
+ return this._approximateSize(start, end, callback)
+
+ process.nextTick(function () {
+ callback(null, 0);
+ });
+};
+
+AbstractLevelDOWN$2.prototype._setupIteratorOptions = function (options) {
+ var self = this;
+
+ options = xtend(options)
+
+ ;[ 'start', 'end', 'gt', 'gte', 'lt', 'lte' ].forEach(function (o) {
+ if (options[o] && self._isBuffer(options[o]) && options[o].length === 0)
+ delete options[o];
+ });
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys != false;
+ options.values = options.values != false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer != false;
+ options.valueAsBuffer = options.valueAsBuffer != false;
+
+ return options
+};
+
+AbstractLevelDOWN$2.prototype.iterator = function (options) {
+ if (typeof options != 'object')
+ options = {};
+
+ options = this._setupIteratorOptions(options);
+
+ if (typeof this._iterator == 'function')
+ return this._iterator(options)
+
+ return new AbstractIterator$1(this)
+};
+
+AbstractLevelDOWN$2.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch(this)
+};
+
+AbstractLevelDOWN$2.prototype._isBuffer = function (obj) {
+ return Buffer.isBuffer(obj)
+};
+
+AbstractLevelDOWN$2.prototype._serializeKey = function (key) {
+ return this._isBuffer(key)
+ ? key
+ : String(key)
+};
+
+AbstractLevelDOWN$2.prototype._serializeValue = function (value) {
+ if (value == null) return ''
+ return this._isBuffer(value) || process.browser ? value : String(value)
+};
+
+AbstractLevelDOWN$2.prototype._checkKey = function (obj, type) {
+ if (obj === null || obj === undefined)
+ return new Error(type + ' cannot be `null` or `undefined`')
+
+ if (this._isBuffer(obj) && obj.length === 0)
+ return new Error(type + ' cannot be an empty Buffer')
+ else if (String(obj) === '')
+ return new Error(type + ' cannot be an empty String')
+};
+
+var abstractLeveldown = AbstractLevelDOWN$2;
+
+var AbstractLevelDOWN$1 = abstractLeveldown;
+
+function isLevelDOWN (db) {
+ if (!db || typeof db !== 'object')
+ return false
+ return Object.keys(AbstractLevelDOWN$1.prototype).filter(function (name) {
+ // TODO remove approximateSize check when method is gone
+ return name[0] != '_' && name != 'approximateSize'
+ }).every(function (name) {
+ return typeof db[name] == 'function'
+ })
+}
+
+var isLeveldown = isLevelDOWN;
+
+abstractLeveldown$1.AbstractLevelDOWN = abstractLeveldown;
+abstractLeveldown$1.AbstractIterator = abstractIterator;
+abstractLeveldown$1.AbstractChainedBatch = abstractChainedBatch;
+abstractLeveldown$1.isLevelDOWN = isLeveldown;
+
+var rbtree = createRBTree;
+
+var RED = 0;
+var BLACK = 1;
+
+function RBNode(color, key, value, left, right, count) {
+ this._color = color;
+ this.key = key;
+ this.value = value;
+ this.left = left;
+ this.right = right;
+ this._count = count;
+}
+
+function cloneNode(node) {
+ return new RBNode(node._color, node.key, node.value, node.left, node.right, node._count)
+}
+
+function repaint(color, node) {
+ return new RBNode(color, node.key, node.value, node.left, node.right, node._count)
+}
+
+function recount(node) {
+ node._count = 1 + (node.left ? node.left._count : 0) + (node.right ? node.right._count : 0);
+}
+
+function RedBlackTree(compare, root) {
+ this._compare = compare;
+ this.root = root;
+}
+
+var proto = RedBlackTree.prototype;
+
+Object.defineProperty(proto, "keys", {
+ get: function() {
+ var result = [];
+ this.forEach(function(k,v) {
+ result.push(k);
+ });
+ return result
+ }
+});
+
+Object.defineProperty(proto, "values", {
+ get: function() {
+ var result = [];
+ this.forEach(function(k,v) {
+ result.push(v);
+ });
+ return result
+ }
+});
+
+//Returns the number of nodes in the tree
+Object.defineProperty(proto, "length", {
+ get: function() {
+ if(this.root) {
+ return this.root._count
+ }
+ return 0
+ }
+});
+
+//Insert a new item into the tree
+proto.insert = function(key, value) {
+ var cmp = this._compare;
+ //Find point to insert new node at
+ var n = this.root;
+ var n_stack = [];
+ var d_stack = [];
+ while(n) {
+ var d = cmp(key, n.key);
+ n_stack.push(n);
+ d_stack.push(d);
+ if(d <= 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ //Rebuild path to leaf node
+ n_stack.push(new RBNode(RED, key, value, null, null, 1));
+ for(var s=n_stack.length-2; s>=0; --s) {
+ var n = n_stack[s];
+ if(d_stack[s] <= 0) {
+ n_stack[s] = new RBNode(n._color, n.key, n.value, n_stack[s+1], n.right, n._count+1);
+ } else {
+ n_stack[s] = new RBNode(n._color, n.key, n.value, n.left, n_stack[s+1], n._count+1);
+ }
+ }
+ //Rebalance tree using rotations
+ //console.log("start insert", key, d_stack)
+ for(var s=n_stack.length-1; s>1; --s) {
+ var p = n_stack[s-1];
+ var n = n_stack[s];
+ if(p._color === BLACK || n._color === BLACK) {
+ break
+ }
+ var pp = n_stack[s-2];
+ if(pp.left === p) {
+ if(p.left === n) {
+ var y = pp.right;
+ if(y && y._color === RED) {
+ //console.log("LLr")
+ p._color = BLACK;
+ pp.right = repaint(BLACK, y);
+ pp._color = RED;
+ s -= 1;
+ } else {
+ //console.log("LLb")
+ pp._color = RED;
+ pp.left = p.right;
+ p._color = BLACK;
+ p.right = pp;
+ n_stack[s-2] = p;
+ n_stack[s-1] = n;
+ recount(pp);
+ recount(p);
+ if(s >= 3) {
+ var ppp = n_stack[s-3];
+ if(ppp.left === pp) {
+ ppp.left = p;
+ } else {
+ ppp.right = p;
+ }
+ }
+ break
+ }
+ } else {
+ var y = pp.right;
+ if(y && y._color === RED) {
+ //console.log("LRr")
+ p._color = BLACK;
+ pp.right = repaint(BLACK, y);
+ pp._color = RED;
+ s -= 1;
+ } else {
+ //console.log("LRb")
+ p.right = n.left;
+ pp._color = RED;
+ pp.left = n.right;
+ n._color = BLACK;
+ n.left = p;
+ n.right = pp;
+ n_stack[s-2] = n;
+ n_stack[s-1] = p;
+ recount(pp);
+ recount(p);
+ recount(n);
+ if(s >= 3) {
+ var ppp = n_stack[s-3];
+ if(ppp.left === pp) {
+ ppp.left = n;
+ } else {
+ ppp.right = n;
+ }
+ }
+ break
+ }
+ }
+ } else {
+ if(p.right === n) {
+ var y = pp.left;
+ if(y && y._color === RED) {
+ //console.log("RRr", y.key)
+ p._color = BLACK;
+ pp.left = repaint(BLACK, y);
+ pp._color = RED;
+ s -= 1;
+ } else {
+ //console.log("RRb")
+ pp._color = RED;
+ pp.right = p.left;
+ p._color = BLACK;
+ p.left = pp;
+ n_stack[s-2] = p;
+ n_stack[s-1] = n;
+ recount(pp);
+ recount(p);
+ if(s >= 3) {
+ var ppp = n_stack[s-3];
+ if(ppp.right === pp) {
+ ppp.right = p;
+ } else {
+ ppp.left = p;
+ }
+ }
+ break
+ }
+ } else {
+ var y = pp.left;
+ if(y && y._color === RED) {
+ //console.log("RLr")
+ p._color = BLACK;
+ pp.left = repaint(BLACK, y);
+ pp._color = RED;
+ s -= 1;
+ } else {
+ //console.log("RLb")
+ p.left = n.right;
+ pp._color = RED;
+ pp.right = n.left;
+ n._color = BLACK;
+ n.right = p;
+ n.left = pp;
+ n_stack[s-2] = n;
+ n_stack[s-1] = p;
+ recount(pp);
+ recount(p);
+ recount(n);
+ if(s >= 3) {
+ var ppp = n_stack[s-3];
+ if(ppp.right === pp) {
+ ppp.right = n;
+ } else {
+ ppp.left = n;
+ }
+ }
+ break
+ }
+ }
+ }
+ }
+ //Return new tree
+ n_stack[0]._color = BLACK;
+ return new RedBlackTree(cmp, n_stack[0])
+};
+
+
+//Visit all nodes inorder
+function doVisitFull(visit, node) {
+ if(node.left) {
+ var v = doVisitFull(visit, node.left);
+ if(v) { return v }
+ }
+ var v = visit(node.key, node.value);
+ if(v) { return v }
+ if(node.right) {
+ return doVisitFull(visit, node.right)
+ }
+}
+
+//Visit half nodes in order
+function doVisitHalf(lo, compare, visit, node) {
+ var l = compare(lo, node.key);
+ if(l <= 0) {
+ if(node.left) {
+ var v = doVisitHalf(lo, compare, visit, node.left);
+ if(v) { return v }
+ }
+ var v = visit(node.key, node.value);
+ if(v) { return v }
+ }
+ if(node.right) {
+ return doVisitHalf(lo, compare, visit, node.right)
+ }
+}
+
+//Visit all nodes within a range
+function doVisit(lo, hi, compare, visit, node) {
+ var l = compare(lo, node.key);
+ var h = compare(hi, node.key);
+ var v;
+ if(l <= 0) {
+ if(node.left) {
+ v = doVisit(lo, hi, compare, visit, node.left);
+ if(v) { return v }
+ }
+ if(h > 0) {
+ v = visit(node.key, node.value);
+ if(v) { return v }
+ }
+ }
+ if(h > 0 && node.right) {
+ return doVisit(lo, hi, compare, visit, node.right)
+ }
+}
+
+
+proto.forEach = function rbTreeForEach(visit, lo, hi) {
+ if(!this.root) {
+ return
+ }
+ switch(arguments.length) {
+ case 1:
+ return doVisitFull(visit, this.root)
+
+ case 2:
+ return doVisitHalf(lo, this._compare, visit, this.root)
+
+ case 3:
+ if(this._compare(lo, hi) >= 0) {
+ return
+ }
+ return doVisit(lo, hi, this._compare, visit, this.root)
+ }
+};
+
+//First item in list
+Object.defineProperty(proto, "begin", {
+ get: function() {
+ var stack = [];
+ var n = this.root;
+ while(n) {
+ stack.push(n);
+ n = n.left;
+ }
+ return new RedBlackTreeIterator(this, stack)
+ }
+});
+
+//Last item in list
+Object.defineProperty(proto, "end", {
+ get: function() {
+ var stack = [];
+ var n = this.root;
+ while(n) {
+ stack.push(n);
+ n = n.right;
+ }
+ return new RedBlackTreeIterator(this, stack)
+ }
+});
+
+//Find the ith item in the tree
+proto.at = function(idx) {
+ if(idx < 0) {
+ return new RedBlackTreeIterator(this, [])
+ }
+ var n = this.root;
+ var stack = [];
+ while(true) {
+ stack.push(n);
+ if(n.left) {
+ if(idx < n.left._count) {
+ n = n.left;
+ continue
+ }
+ idx -= n.left._count;
+ }
+ if(!idx) {
+ return new RedBlackTreeIterator(this, stack)
+ }
+ idx -= 1;
+ if(n.right) {
+ if(idx >= n.right._count) {
+ break
+ }
+ n = n.right;
+ } else {
+ break
+ }
+ }
+ return new RedBlackTreeIterator(this, [])
+};
+
+proto.ge = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ var stack = [];
+ var last_ptr = 0;
+ while(n) {
+ var d = cmp(key, n.key);
+ stack.push(n);
+ if(d <= 0) {
+ last_ptr = stack.length;
+ }
+ if(d <= 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ stack.length = last_ptr;
+ return new RedBlackTreeIterator(this, stack)
+};
+
+proto.gt = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ var stack = [];
+ var last_ptr = 0;
+ while(n) {
+ var d = cmp(key, n.key);
+ stack.push(n);
+ if(d < 0) {
+ last_ptr = stack.length;
+ }
+ if(d < 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ stack.length = last_ptr;
+ return new RedBlackTreeIterator(this, stack)
+};
+
+proto.lt = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ var stack = [];
+ var last_ptr = 0;
+ while(n) {
+ var d = cmp(key, n.key);
+ stack.push(n);
+ if(d > 0) {
+ last_ptr = stack.length;
+ }
+ if(d <= 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ stack.length = last_ptr;
+ return new RedBlackTreeIterator(this, stack)
+};
+
+proto.le = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ var stack = [];
+ var last_ptr = 0;
+ while(n) {
+ var d = cmp(key, n.key);
+ stack.push(n);
+ if(d >= 0) {
+ last_ptr = stack.length;
+ }
+ if(d < 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ stack.length = last_ptr;
+ return new RedBlackTreeIterator(this, stack)
+};
+
+//Finds the item with key if it exists
+proto.find = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ var stack = [];
+ while(n) {
+ var d = cmp(key, n.key);
+ stack.push(n);
+ if(d === 0) {
+ return new RedBlackTreeIterator(this, stack)
+ }
+ if(d <= 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ return new RedBlackTreeIterator(this, [])
+};
+
+//Removes item with key from tree
+proto.remove = function(key) {
+ var iter = this.find(key);
+ if(iter) {
+ return iter.remove()
+ }
+ return this
+};
+
+//Returns the item at `key`
+proto.get = function(key) {
+ var cmp = this._compare;
+ var n = this.root;
+ while(n) {
+ var d = cmp(key, n.key);
+ if(d === 0) {
+ return n.value
+ }
+ if(d <= 0) {
+ n = n.left;
+ } else {
+ n = n.right;
+ }
+ }
+ return
+};
+
+//Iterator for red black tree
+function RedBlackTreeIterator(tree, stack) {
+ this.tree = tree;
+ this._stack = stack;
+}
+
+var iproto = RedBlackTreeIterator.prototype;
+
+//Test if iterator is valid
+Object.defineProperty(iproto, "valid", {
+ get: function() {
+ return this._stack.length > 0
+ }
+});
+
+//Node of the iterator
+Object.defineProperty(iproto, "node", {
+ get: function() {
+ if(this._stack.length > 0) {
+ return this._stack[this._stack.length-1]
+ }
+ return null
+ },
+ enumerable: true
+});
+
+//Makes a copy of an iterator
+iproto.clone = function() {
+ return new RedBlackTreeIterator(this.tree, this._stack.slice())
+};
+
+//Swaps two nodes
+function swapNode(n, v) {
+ n.key = v.key;
+ n.value = v.value;
+ n.left = v.left;
+ n.right = v.right;
+ n._color = v._color;
+ n._count = v._count;
+}
+
+//Fix up a double black node in a tree
+function fixDoubleBlack(stack) {
+ var n, p, s, z;
+ for(var i=stack.length-1; i>=0; --i) {
+ n = stack[i];
+ if(i === 0) {
+ n._color = BLACK;
+ return
+ }
+ //console.log("visit node:", n.key, i, stack[i].key, stack[i-1].key)
+ p = stack[i-1];
+ if(p.left === n) {
+ //console.log("left child")
+ s = p.right;
+ if(s.right && s.right._color === RED) {
+ //console.log("case 1: right sibling child red")
+ s = p.right = cloneNode(s);
+ z = s.right = cloneNode(s.right);
+ p.right = s.left;
+ s.left = p;
+ s.right = z;
+ s._color = p._color;
+ n._color = BLACK;
+ p._color = BLACK;
+ z._color = BLACK;
+ recount(p);
+ recount(s);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.left === p) {
+ pp.left = s;
+ } else {
+ pp.right = s;
+ }
+ }
+ stack[i-1] = s;
+ return
+ } else if(s.left && s.left._color === RED) {
+ //console.log("case 1: left sibling child red")
+ s = p.right = cloneNode(s);
+ z = s.left = cloneNode(s.left);
+ p.right = z.left;
+ s.left = z.right;
+ z.left = p;
+ z.right = s;
+ z._color = p._color;
+ p._color = BLACK;
+ s._color = BLACK;
+ n._color = BLACK;
+ recount(p);
+ recount(s);
+ recount(z);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.left === p) {
+ pp.left = z;
+ } else {
+ pp.right = z;
+ }
+ }
+ stack[i-1] = z;
+ return
+ }
+ if(s._color === BLACK) {
+ if(p._color === RED) {
+ //console.log("case 2: black sibling, red parent", p.right.value)
+ p._color = BLACK;
+ p.right = repaint(RED, s);
+ return
+ } else {
+ //console.log("case 2: black sibling, black parent", p.right.value)
+ p.right = repaint(RED, s);
+ continue
+ }
+ } else {
+ //console.log("case 3: red sibling")
+ s = cloneNode(s);
+ p.right = s.left;
+ s.left = p;
+ s._color = p._color;
+ p._color = RED;
+ recount(p);
+ recount(s);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.left === p) {
+ pp.left = s;
+ } else {
+ pp.right = s;
+ }
+ }
+ stack[i-1] = s;
+ stack[i] = p;
+ if(i+1 < stack.length) {
+ stack[i+1] = n;
+ } else {
+ stack.push(n);
+ }
+ i = i+2;
+ }
+ } else {
+ //console.log("right child")
+ s = p.left;
+ if(s.left && s.left._color === RED) {
+ //console.log("case 1: left sibling child red", p.value, p._color)
+ s = p.left = cloneNode(s);
+ z = s.left = cloneNode(s.left);
+ p.left = s.right;
+ s.right = p;
+ s.left = z;
+ s._color = p._color;
+ n._color = BLACK;
+ p._color = BLACK;
+ z._color = BLACK;
+ recount(p);
+ recount(s);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.right === p) {
+ pp.right = s;
+ } else {
+ pp.left = s;
+ }
+ }
+ stack[i-1] = s;
+ return
+ } else if(s.right && s.right._color === RED) {
+ //console.log("case 1: right sibling child red")
+ s = p.left = cloneNode(s);
+ z = s.right = cloneNode(s.right);
+ p.left = z.right;
+ s.right = z.left;
+ z.right = p;
+ z.left = s;
+ z._color = p._color;
+ p._color = BLACK;
+ s._color = BLACK;
+ n._color = BLACK;
+ recount(p);
+ recount(s);
+ recount(z);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.right === p) {
+ pp.right = z;
+ } else {
+ pp.left = z;
+ }
+ }
+ stack[i-1] = z;
+ return
+ }
+ if(s._color === BLACK) {
+ if(p._color === RED) {
+ //console.log("case 2: black sibling, red parent")
+ p._color = BLACK;
+ p.left = repaint(RED, s);
+ return
+ } else {
+ //console.log("case 2: black sibling, black parent")
+ p.left = repaint(RED, s);
+ continue
+ }
+ } else {
+ //console.log("case 3: red sibling")
+ s = cloneNode(s);
+ p.left = s.right;
+ s.right = p;
+ s._color = p._color;
+ p._color = RED;
+ recount(p);
+ recount(s);
+ if(i > 1) {
+ var pp = stack[i-2];
+ if(pp.right === p) {
+ pp.right = s;
+ } else {
+ pp.left = s;
+ }
+ }
+ stack[i-1] = s;
+ stack[i] = p;
+ if(i+1 < stack.length) {
+ stack[i+1] = n;
+ } else {
+ stack.push(n);
+ }
+ i = i+2;
+ }
+ }
+ }
+}
+
+//Removes item at iterator from tree
+iproto.remove = function() {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ return this.tree
+ }
+ //First copy path to node
+ var cstack = new Array(stack.length);
+ var n = stack[stack.length-1];
+ cstack[cstack.length-1] = new RBNode(n._color, n.key, n.value, n.left, n.right, n._count);
+ for(var i=stack.length-2; i>=0; --i) {
+ var n = stack[i];
+ if(n.left === stack[i+1]) {
+ cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count);
+ } else {
+ cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count);
+ }
+ }
+
+ //Get node
+ n = cstack[cstack.length-1];
+ //console.log("start remove: ", n.value)
+
+ //If not leaf, then swap with previous node
+ if(n.left && n.right) {
+ //console.log("moving to leaf")
+
+ //First walk to previous leaf
+ var split = cstack.length;
+ n = n.left;
+ while(n.right) {
+ cstack.push(n);
+ n = n.right;
+ }
+ //Copy path to leaf
+ var v = cstack[split-1];
+ cstack.push(new RBNode(n._color, v.key, v.value, n.left, n.right, n._count));
+ cstack[split-1].key = n.key;
+ cstack[split-1].value = n.value;
+
+ //Fix up stack
+ for(var i=cstack.length-2; i>=split; --i) {
+ n = cstack[i];
+ cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count);
+ }
+ cstack[split-1].left = cstack[split];
+ }
+ //console.log("stack=", cstack.map(function(v) { return v.value }))
+
+ //Remove leaf node
+ n = cstack[cstack.length-1];
+ if(n._color === RED) {
+ //Easy case: removing red leaf
+ //console.log("RED leaf")
+ var p = cstack[cstack.length-2];
+ if(p.left === n) {
+ p.left = null;
+ } else if(p.right === n) {
+ p.right = null;
+ }
+ cstack.pop();
+ for(var i=0; i 0) {
+ return this._stack[this._stack.length-1].key
+ }
+ return
+ },
+ enumerable: true
+});
+
+//Returns value
+Object.defineProperty(iproto, "value", {
+ get: function() {
+ if(this._stack.length > 0) {
+ return this._stack[this._stack.length-1].value
+ }
+ return
+ },
+ enumerable: true
+});
+
+
+//Returns the position of this iterator in the sorted list
+Object.defineProperty(iproto, "index", {
+ get: function() {
+ var idx = 0;
+ var stack = this._stack;
+ if(stack.length === 0) {
+ var r = this.tree.root;
+ if(r) {
+ return r._count
+ }
+ return 0
+ } else if(stack[stack.length-1].left) {
+ idx = stack[stack.length-1].left._count;
+ }
+ for(var s=stack.length-2; s>=0; --s) {
+ if(stack[s+1] === stack[s].right) {
+ ++idx;
+ if(stack[s].left) {
+ idx += stack[s].left._count;
+ }
+ }
+ }
+ return idx
+ },
+ enumerable: true
+});
+
+//Advances iterator to next element in list
+iproto.next = function() {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ return
+ }
+ var n = stack[stack.length-1];
+ if(n.right) {
+ n = n.right;
+ while(n) {
+ stack.push(n);
+ n = n.left;
+ }
+ } else {
+ stack.pop();
+ while(stack.length > 0 && stack[stack.length-1].right === n) {
+ n = stack[stack.length-1];
+ stack.pop();
+ }
+ }
+};
+
+//Checks if iterator is at end of tree
+Object.defineProperty(iproto, "hasNext", {
+ get: function() {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ return false
+ }
+ if(stack[stack.length-1].right) {
+ return true
+ }
+ for(var s=stack.length-1; s>0; --s) {
+ if(stack[s-1].left === stack[s]) {
+ return true
+ }
+ }
+ return false
+ }
+});
+
+//Update value
+iproto.update = function(value) {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ throw new Error("Can't update empty node!")
+ }
+ var cstack = new Array(stack.length);
+ var n = stack[stack.length-1];
+ cstack[cstack.length-1] = new RBNode(n._color, n.key, value, n.left, n.right, n._count);
+ for(var i=stack.length-2; i>=0; --i) {
+ n = stack[i];
+ if(n.left === stack[i+1]) {
+ cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count);
+ } else {
+ cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count);
+ }
+ }
+ return new RedBlackTree(this.tree._compare, cstack[0])
+};
+
+//Moves iterator backward one element
+iproto.prev = function() {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ return
+ }
+ var n = stack[stack.length-1];
+ if(n.left) {
+ n = n.left;
+ while(n) {
+ stack.push(n);
+ n = n.right;
+ }
+ } else {
+ stack.pop();
+ while(stack.length > 0 && stack[stack.length-1].left === n) {
+ n = stack[stack.length-1];
+ stack.pop();
+ }
+ }
+};
+
+//Checks if iterator is at start of tree
+Object.defineProperty(iproto, "hasPrev", {
+ get: function() {
+ var stack = this._stack;
+ if(stack.length === 0) {
+ return false
+ }
+ if(stack[stack.length-1].left) {
+ return true
+ }
+ for(var s=stack.length-1; s>0; --s) {
+ if(stack[s-1].right === stack[s]) {
+ return true
+ }
+ }
+ return false
+ }
+});
+
+//Default comparison function
+function defaultCompare(a, b) {
+ if(a < b) {
+ return -1
+ }
+ if(a > b) {
+ return 1
+ }
+ return 0
+}
+
+//Build a tree
+function createRBTree(compare) {
+ return new RedBlackTree(compare || defaultCompare, null)
+}
+
+var safeBuffer = {exports: {}};
+
+/* eslint-disable node/no-deprecated-api */
+safeBuffer.exports;
+
+(function (module, exports) {
+ var buffer = require$$0;
+ var Buffer = buffer.Buffer;
+
+ // alternative to using Object.keys for old browsers
+ function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key];
+ }
+ }
+ if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer;
+ } else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports);
+ exports.Buffer = SafeBuffer;
+ }
+
+ function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+ }
+
+ // Copy static methods from Buffer
+ copyProps(Buffer, SafeBuffer);
+
+ SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+ };
+
+ SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size);
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding);
+ } else {
+ buf.fill(fill);
+ }
+ } else {
+ buf.fill(0);
+ }
+ return buf
+ };
+
+ SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+ };
+
+ SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+ };
+} (safeBuffer, safeBuffer.exports));
+
+var safeBufferExports = safeBuffer.exports;
+
+var immediate = setImmediate;
+
+var inherits = inheritsExports;
+var AbstractLevelDOWN = abstractLeveldown$1.AbstractLevelDOWN;
+var AbstractIterator = abstractLeveldown$1.AbstractIterator;
+var ltgt = ltgt$1;
+var createRBT = rbtree;
+var Buffer$1 = safeBufferExports.Buffer;
+var globalStore = {};
+
+// In Node, use global.setImmediate. In the browser, use a consistent
+// microtask library to give consistent microtask experience to all browsers
+var setImmediate$1 = immediate;
+
+function gt (value) {
+ return ltgt.compare(value, this._end) > 0
+}
+
+function gte (value) {
+ return ltgt.compare(value, this._end) >= 0
+}
+
+function lt (value) {
+ return ltgt.compare(value, this._end) < 0
+}
+
+function lte (value) {
+ return ltgt.compare(value, this._end) <= 0
+}
+
+function MemIterator (db, options) {
+ AbstractIterator.call(this, db);
+ this._limit = options.limit;
+
+ if (this._limit === -1) this._limit = Infinity;
+
+ var tree = db._store[db._location];
+
+ this.keyAsBuffer = options.keyAsBuffer !== false;
+ this.valueAsBuffer = options.valueAsBuffer !== false;
+ this._reverse = options.reverse;
+ this._options = options;
+ this._done = 0;
+
+ if (!this._reverse) {
+ this._incr = 'next';
+ this._start = ltgt.lowerBound(options);
+ this._end = ltgt.upperBound(options);
+
+ if (typeof this._start === 'undefined') {
+ this._tree = tree.begin;
+ } else if (ltgt.lowerBoundInclusive(options)) {
+ this._tree = tree.ge(this._start);
+ } else {
+ this._tree = tree.gt(this._start);
+ }
+
+ if (this._end) {
+ if (ltgt.upperBoundInclusive(options)) {
+ this._test = lte;
+ } else {
+ this._test = lt;
+ }
+ }
+ } else {
+ this._incr = 'prev';
+ this._start = ltgt.upperBound(options);
+ this._end = ltgt.lowerBound(options);
+
+ if (typeof this._start === 'undefined') {
+ this._tree = tree.end;
+ } else if (ltgt.upperBoundInclusive(options)) {
+ this._tree = tree.le(this._start);
+ } else {
+ this._tree = tree.lt(this._start);
+ }
+
+ if (this._end) {
+ if (ltgt.lowerBoundInclusive(options)) {
+ this._test = gte;
+ } else {
+ this._test = gt;
+ }
+ }
+ }
+}
+
+inherits(MemIterator, AbstractIterator);
+
+MemIterator.prototype._next = function (callback) {
+ var key;
+ var value;
+
+ if (this._done++ >= this._limit) return setImmediate$1(callback)
+ if (!this._tree.valid) return setImmediate$1(callback)
+
+ key = this._tree.key;
+ value = this._tree.value;
+
+ if (!this._test(key)) return setImmediate$1(callback)
+
+ if (this.keyAsBuffer) key = Buffer$1.from(key);
+ if (this.valueAsBuffer) value = Buffer$1.from(value);
+
+ this._tree[this._incr]();
+
+ setImmediate$1(function callNext () {
+ callback(null, key, value);
+ });
+};
+
+MemIterator.prototype._test = function () {
+ return true
+};
+
+function MemDOWN (location) {
+ if (!(this instanceof MemDOWN)) return new MemDOWN(location)
+
+ AbstractLevelDOWN.call(this, typeof location === 'string' ? location : '');
+
+ this._location = this.location ? '$' + this.location : '_tree';
+ this._store = this.location ? globalStore : this;
+ this._store[this._location] =
+ this._store[this._location] || createRBT(ltgt.compare);
+}
+
+MemDOWN.clearGlobalStore = function (strict) {
+ if (strict) {
+ Object.keys(globalStore).forEach(function (key) {
+ delete globalStore[key];
+ });
+ } else {
+ globalStore = {};
+ }
+};
+
+inherits(MemDOWN, AbstractLevelDOWN);
+
+MemDOWN.prototype._open = function (options, callback) {
+ var self = this;
+ setImmediate$1(function callNext () {
+ callback(null, self);
+ });
+};
+
+MemDOWN.prototype._put = function (key, value, options, callback) {
+ if (typeof value === 'undefined' || value === null) value = '';
+
+ var iter = this._store[this._location].find(key);
+
+ if (iter.valid) {
+ this._store[this._location] = iter.update(value);
+ } else {
+ this._store[this._location] = this._store[this._location].insert(key, value);
+ }
+
+ setImmediate$1(callback);
+};
+
+MemDOWN.prototype._get = function (key, options, callback) {
+ var value = this._store[this._location].get(key);
+
+ if (typeof value === 'undefined') {
+ // 'NotFound' error, consistent with LevelDOWN API
+ return setImmediate$1(function callNext () {
+ callback(new Error('NotFound'));
+ })
+ }
+
+ if (options.asBuffer !== false && !this._isBuffer(value)) {
+ value = Buffer$1.from(String(value));
+ }
+
+ setImmediate$1(function callNext () {
+ callback(null, value);
+ });
+};
+
+MemDOWN.prototype._del = function (key, options, callback) {
+ this._store[this._location] = this._store[this._location].remove(key);
+ setImmediate$1(callback);
+};
+
+MemDOWN.prototype._batch = function (array, options, callback) {
+ var i = -1;
+ var key;
+ var value;
+ var iter;
+ var len = array.length;
+ var tree = this._store[this._location];
+
+ while (++i < len) {
+ if (!array[i]) continue
+
+ key = this._isBuffer(array[i].key) ? array[i].key : String(array[i].key);
+ iter = tree.find(key);
+
+ if (array[i].type === 'put') {
+ value = this._isBuffer(array[i].value)
+ ? array[i].value
+ : String(array[i].value);
+ tree = iter.valid ? iter.update(value) : tree.insert(key, value);
+ } else {
+ tree = iter.remove();
+ }
+ }
+
+ this._store[this._location] = tree;
+
+ setImmediate$1(callback);
+};
+
+MemDOWN.prototype._iterator = function (options) {
+ return new MemIterator(this, options)
+};
+
+MemDOWN.prototype._isBuffer = function (obj) {
+ return Buffer$1.isBuffer(obj)
+};
+
+MemDOWN.destroy = function (name, callback) {
+ var key = '$' + name;
+
+ if (key in globalStore) {
+ delete globalStore[key];
+ }
+
+ setImmediate$1(callback);
+};
+
+var memdown = MemDOWN.default = MemDOWN;
+
+var memdown$1 = /*@__PURE__*/getDefaultExportFromCjs(memdown);
+
+function MemDownPouch(opts, callback) {
+ var _opts = Object.assign({
+ db: memdown$1
+ }, opts);
+
+ LevelPouch.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+MemDownPouch.valid = function () {
+ return true;
+};
+MemDownPouch.use_prefix = false;
+
+function index(PouchDB) {
+ PouchDB.adapter('memory', MemDownPouch, true);
+}
+
+export { index as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-adapter-utils.js b/packages/pouchdb-lib/lib/pouchdb-adapter-utils.js
new file mode 100644
index 0000000000..0b908c6d3a
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-adapter-utils.js
@@ -0,0 +1,31 @@
+export { a as allDocsKeysQuery } from './allDocsKeysQuery-7f4fbcb9.js';
+export { p as parseDoc } from './parseDoc-71681539.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+export { i as invalidIdError } from './rev-48662a2a.js';
+export { n as normalizeDdocFunctionName, p as parseDdocFunctionName } from './normalizeDdocFunctionName-ea3481cf.js';
+import 'crypto';
+export { i as isDeleted, a as isLocalId } from './isLocalId-d067de54.js';
+export { p as preprocessAttachments } from './preprocessAttachments-0457f2a2.js';
+export { p as processDocs, u as updateDoc } from './processDocs-7c802567.js';
+import './pouchdb-utils.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './guardedConsole-f54e5a40.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './upsert-331b6913.js';
+import './stringMd5-15f53eba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './rootToLeaf-f8d0e78a.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './blobOrBufferToBinaryString-56930128.js';
+import './binaryMd5-601b2421.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
diff --git a/packages/pouchdb-lib/lib/pouchdb-binary-utils.js b/packages/pouchdb-lib/lib/pouchdb-binary-utils.js
new file mode 100644
index 0000000000..3d2c6826f7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-binary-utils.js
@@ -0,0 +1,29 @@
+export { b as base64StringToBlobOrBuffer } from './base64StringToBlobOrBuffer-3fd03be6.js';
+export { b as binaryStringToBlobOrBuffer } from './binaryStringToBlobOrBuffer-39ece35b.js';
+export { a as blobOrBufferToBase64, b as blobOrBufferToBinaryString } from './blobOrBufferToBinaryString-56930128.js';
+export { r as readAsBinaryString } from './readAsBinaryString-06e911ba.js';
+export { t as typedBuffer } from './typedBuffer-a8220a49.js';
+
+// From http://stackoverflow.com/questions/14967647/ (continues on next line)
+// encode-decode-image-with-base64-breaks-image (2013-04-21)
+function binaryStringToArrayBuffer(bin) {
+ var length = bin.length;
+ var buf = new ArrayBuffer(length);
+ var arr = new Uint8Array(buf);
+ for (var i = 0; i < length; i++) {
+ arr[i] = bin.charCodeAt(i);
+ }
+ return buf;
+}
+
+// simplified API. universal browser support is assumed
+function readAsArrayBuffer(blob, callback) {
+ var reader = new FileReader();
+ reader.onloadend = function (e) {
+ var result = e.target.result || new ArrayBuffer(0);
+ callback(result);
+ };
+ reader.readAsArrayBuffer(blob);
+}
+
+export { binaryStringToArrayBuffer, readAsArrayBuffer };
diff --git a/packages/pouchdb-lib/lib/pouchdb-browser.js b/packages/pouchdb-lib/lib/pouchdb-browser.js
new file mode 100644
index 0000000000..9a33483108
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-browser.js
@@ -0,0 +1,78 @@
+import PouchDB from './pouchdb-core.js';
+export { default } from './pouchdb-core.js';
+import IDBPouch from './pouchdb-adapter-idb.js';
+import mapreduce from './pouchdb-mapreduce.js';
+import replication from './pouchdb-replication.js';
+import 'node:events';
+import './fetch-f2310cb2.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './_commonjsHelpers-24198af3.js';
+import 'util';
+import './rev-48662a2a.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import 'buffer';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './latest-0521537f.js';
+import './parseDoc-71681539.js';
+import './preprocessAttachments-0457f2a2.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './blobOrBufferToBinaryString-56930128.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './readAsBinaryString-06e911ba.js';
+import './pouchdb-mapreduce-utils.js';
+import './pouchdb-abstract-mapreduce.js';
+import './pouchdb-crypto.js';
+import './pouchdb-checkpointer.js';
+import './pouchdb-generate-replication-id.js';
+
+PouchDB.plugin(IDBPouch)
+ //.plugin(HttpPouch)
+ .plugin(mapreduce)
+ .plugin(replication);
diff --git a/packages/pouchdb-lib/lib/pouchdb-changes-filter.js b/packages/pouchdb-lib/lib/pouchdb-changes-filter.js
new file mode 100644
index 0000000000..979b1f82ab
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-changes-filter.js
@@ -0,0 +1,139 @@
+import { createError, BAD_REQUEST, generateErrorFromResponse, MISSING_DOC } from './pouchdb-errors.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { i as isRemote } from './isRemote-2533b7cb.js';
+import { n as normalizeDesignDocFunctionName, p as parseDesignDocFunctionName } from './normalizeDdocFunctionName-ea3481cf.js';
+import 'crypto';
+import { m as matchesSelector } from './matches-selector-87ab4d5f.js';
+import vm from 'vm';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './guardedConsole-f54e5a40.js';
+import './clone-7eeb6295.js';
+import './pouchdb-collate.js';
+
+function evalFilter(input) {
+ var code = '(function() {\n"use strict";\nreturn ' + input + '\n})()';
+
+ return vm.runInNewContext(code);
+}
+
+function evalView(input) {
+ var code = [
+ '"use strict";',
+ 'var emitted = false;',
+ 'var emit = function (a, b) {',
+ ' emitted = true;',
+ '};',
+ 'var view = ' + input + ';',
+ 'view(doc);',
+ 'if (emitted) {',
+ ' return true;',
+ '}'
+ ].join('\n');
+
+ return vm.runInNewContext('(function(doc) {\n' + code + '\n})');
+}
+
+function validate(opts, callback) {
+ if (opts.selector) {
+ if (opts.filter && opts.filter !== '_selector') {
+ var filterName = typeof opts.filter === 'string' ?
+ opts.filter : 'function';
+ return callback(new Error('selector invalid for filter "' + filterName + '"'));
+ }
+ }
+ callback();
+}
+
+function normalize(opts) {
+ if (opts.view && !opts.filter) {
+ opts.filter = '_view';
+ }
+
+ if (opts.selector && !opts.filter) {
+ opts.filter = '_selector';
+ }
+
+ if (opts.filter && typeof opts.filter === 'string') {
+ if (opts.filter === '_view') {
+ opts.view = normalizeDesignDocFunctionName(opts.view);
+ } else {
+ opts.filter = normalizeDesignDocFunctionName(opts.filter);
+ }
+ }
+}
+
+function shouldFilter(changesHandler, opts) {
+ return opts.filter && typeof opts.filter === 'string' &&
+ !opts.doc_ids && !isRemote(changesHandler.db);
+}
+
+function filter(changesHandler, opts) {
+ var callback = opts.complete;
+ if (opts.filter === '_view') {
+ if (!opts.view || typeof opts.view !== 'string') {
+ var err = createError(BAD_REQUEST,
+ '`view` filter parameter not found or invalid.');
+ return callback(err);
+ }
+ // fetch a view from a design doc, make it behave like a filter
+ var viewName = parseDesignDocFunctionName(opts.view);
+ changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&
+ ddoc.views[viewName[1]].map;
+ if (!mapFun) {
+ return callback(createError(MISSING_DOC,
+ (ddoc.views ? 'missing json key: ' + viewName[1] :
+ 'missing json key: views')));
+ }
+ opts.filter = evalView(mapFun);
+ changesHandler.doChanges(opts);
+ });
+ } else if (opts.selector) {
+ opts.filter = function (doc) {
+ return matchesSelector(doc, opts.selector);
+ };
+ changesHandler.doChanges(opts);
+ } else {
+ // fetch a filter from a design doc
+ var filterName = parseDesignDocFunctionName(opts.filter);
+ changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];
+ if (!filterFun) {
+ return callback(createError(MISSING_DOC,
+ ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]
+ : 'missing json key: filters')));
+ }
+ opts.filter = evalFilter(filterFun);
+ changesHandler.doChanges(opts);
+ });
+ }
+}
+
+function applyChangesFilterPlugin(PouchDB) {
+ PouchDB._changesFilterPlugin = {
+ validate: validate,
+ normalize: normalize,
+ shouldFilter: shouldFilter,
+ filter: filter
+ };
+}
+
+export { applyChangesFilterPlugin as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-checkpointer.js b/packages/pouchdb-lib/lib/pouchdb-checkpointer.js
new file mode 100644
index 0000000000..ed5b4a4f35
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-checkpointer.js
@@ -0,0 +1,276 @@
+import 'node:events';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import { collate } from './pouchdb-collate.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+
+var CHECKPOINT_VERSION = 1;
+var REPLICATOR = "pouchdb";
+// This is an arbitrary number to limit the
+// amount of replication history we save in the checkpoint.
+// If we save too much, the checkpoing docs will become very big,
+// if we save fewer, we'll run a greater risk of having to
+// read all the changes from 0 when checkpoint PUTs fail
+// CouchDB 2.0 has a more involved history pruning,
+// but let's go for the simple version for now.
+var CHECKPOINT_HISTORY_SIZE = 5;
+var LOWEST_SEQ = 0;
+
+function updateCheckpoint(db, id, checkpoint, session, returnValue) {
+ return db.get(id).catch(function (err) {
+ if (err.status === 404) {
+ if (db.adapter === 'http' || db.adapter === 'https') ;
+ return {
+ session_id: session,
+ _id: id,
+ history: [],
+ replicator: REPLICATOR,
+ version: CHECKPOINT_VERSION
+ };
+ }
+ throw err;
+ }).then(function (doc) {
+ if (returnValue.cancelled) {
+ return;
+ }
+
+ // if the checkpoint has not changed, do not update
+ if (doc.last_seq === checkpoint) {
+ return;
+ }
+
+ // Filter out current entry for this replication
+ doc.history = (doc.history || []).filter(function (item) {
+ return item.session_id !== session;
+ });
+
+ // Add the latest checkpoint to history
+ doc.history.unshift({
+ last_seq: checkpoint,
+ session_id: session
+ });
+
+ // Just take the last pieces in history, to
+ // avoid really big checkpoint docs.
+ // see comment on history size above
+ doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);
+
+ doc.version = CHECKPOINT_VERSION;
+ doc.replicator = REPLICATOR;
+
+ doc.session_id = session;
+ doc.last_seq = checkpoint;
+
+ return db.put(doc).catch(function (err) {
+ if (err.status === 409) {
+ // retry; someone is trying to write a checkpoint simultaneously
+ return updateCheckpoint(db, id, checkpoint, session, returnValue);
+ }
+ throw err;
+ });
+ });
+}
+
+class CheckpointerInternal {
+ constructor(src, target, id, returnValue, opts) {
+ this.src = src;
+ this.target = target;
+ this.id = id;
+ this.returnValue = returnValue;
+ this.opts = opts || {};
+ }
+
+ writeCheckpoint(checkpoint, session) {
+ var self = this;
+ return this.updateTarget(checkpoint, session).then(function () {
+ return self.updateSource(checkpoint, session);
+ });
+ }
+
+ updateTarget(checkpoint, session) {
+ if (this.opts.writeTargetCheckpoint) {
+ return updateCheckpoint(this.target, this.id, checkpoint,
+ session, this.returnValue);
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ updateSource(checkpoint, session) {
+ if (this.opts.writeSourceCheckpoint) {
+ var self = this;
+ return updateCheckpoint(this.src, this.id, checkpoint,
+ session, this.returnValue)
+ .catch(function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return true;
+ }
+ throw err;
+ });
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ getCheckpoint() {
+ var self = this;
+
+ if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {
+ return self.src.get(self.id).then(function (sourceDoc) {
+ return sourceDoc.last_seq || LOWEST_SEQ;
+ }).catch(function (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+
+ return self.target.get(self.id).then(function (targetDoc) {
+ if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {
+ return targetDoc.last_seq || LOWEST_SEQ;
+ }
+
+ return self.src.get(self.id).then(function (sourceDoc) {
+ // Since we can't migrate an old version doc to a new one
+ // (no session id), we just go with the lowest seq in this case
+ /* istanbul ignore if */
+ if (targetDoc.version !== sourceDoc.version) {
+ return LOWEST_SEQ;
+ }
+
+ var version;
+ if (targetDoc.version) {
+ version = targetDoc.version.toString();
+ } else {
+ version = "undefined";
+ }
+
+ if (version in comparisons) {
+ return comparisons[version](targetDoc, sourceDoc);
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (err.status === 404 && targetDoc.last_seq) {
+ return self.src.put({
+ _id: self.id,
+ last_seq: LOWEST_SEQ
+ }).then(function () {
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return targetDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ });
+ }
+ throw err;
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+}
+
+var comparisons = {
+ "undefined": function (targetDoc, sourceDoc) {
+ // This is the previous comparison function
+ if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {
+ return sourceDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return 0;
+ },
+ "1": function (targetDoc, sourceDoc) {
+ // This is the comparison function ported from CouchDB
+ return compareReplicationLogs(sourceDoc, targetDoc).last_seq;
+ }
+};
+
+// This checkpoint comparison is ported from CouchDBs source
+// they come from here:
+// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906
+
+function compareReplicationLogs(srcDoc, tgtDoc) {
+ if (srcDoc.session_id === tgtDoc.session_id) {
+ return {
+ last_seq: srcDoc.last_seq,
+ history: srcDoc.history
+ };
+ }
+
+ return compareReplicationHistory(srcDoc.history, tgtDoc.history);
+}
+
+function compareReplicationHistory(sourceHistory, targetHistory) {
+ // the erlang loop via function arguments is not so easy to repeat in JS
+ // therefore, doing this as recursion
+ var S = sourceHistory[0];
+ var sourceRest = sourceHistory.slice(1);
+ var T = targetHistory[0];
+ var targetRest = targetHistory.slice(1);
+
+ if (!S || targetHistory.length === 0) {
+ return {
+ last_seq: LOWEST_SEQ,
+ history: []
+ };
+ }
+
+ var sourceId = S.session_id;
+ /* istanbul ignore if */
+ if (hasSessionId(sourceId, targetHistory)) {
+ return {
+ last_seq: S.last_seq,
+ history: sourceHistory
+ };
+ }
+
+ var targetId = T.session_id;
+ if (hasSessionId(targetId, sourceRest)) {
+ return {
+ last_seq: T.last_seq,
+ history: targetRest
+ };
+ }
+
+ return compareReplicationHistory(sourceRest, targetRest);
+}
+
+function hasSessionId(sessionId, history) {
+ var props = history[0];
+ var rest = history.slice(1);
+
+ if (!sessionId || history.length === 0) {
+ return false;
+ }
+
+ if (sessionId === props.session_id) {
+ return true;
+ }
+
+ return hasSessionId(sessionId, rest);
+}
+
+function isForbiddenError(err) {
+ return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;
+}
+
+function Checkpointer(src, target, id, returnValue, opts) {
+ if (!(this instanceof CheckpointerInternal)) {
+ return new CheckpointerInternal(src, target, id, returnValue, opts);
+ }
+ return Checkpointer;
+}
+
+export { Checkpointer as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-collate.js b/packages/pouchdb-lib/lib/pouchdb-collate.js
new file mode 100644
index 0000000000..c58663bff7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-collate.js
@@ -0,0 +1,382 @@
+// 'use strict'; is default when ESM
+
+function pad(str, padWith, upToLength) {
+ var padding = '';
+ var targetLength = upToLength - str.length;
+ /* istanbul ignore next */
+ while (padding.length < targetLength) {
+ padding += padWith;
+ }
+ return padding;
+}
+
+function padLeft(str, padWith, upToLength) {
+ var padding = pad(str, padWith, upToLength);
+ return padding + str;
+}
+
+// 'use strict'; is default when ESM
+
+var MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE
+var MAGNITUDE_DIGITS = 3; // ditto
+var SEP = ''; // set to '_' for easier debugging
+
+function collate(a, b) {
+
+ if (a === b) {
+ return 0;
+ }
+
+ a = normalizeKey(a);
+ b = normalizeKey(b);
+
+ var ai = collationIndex(a);
+ var bi = collationIndex(b);
+ if ((ai - bi) !== 0) {
+ return ai - bi;
+ }
+ switch (typeof a) {
+ case 'number':
+ return a - b;
+ case 'boolean':
+ return a < b ? -1 : 1;
+ case 'string':
+ return stringCollate(a, b);
+ }
+ return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);
+}
+
+// couch considers null/NaN/Infinity/-Infinity === undefined,
+// for the purposes of mapreduce indexes. also, dates get stringified.
+function normalizeKey(key) {
+ switch (typeof key) {
+ case 'undefined':
+ return null;
+ case 'number':
+ if (key === Infinity || key === -Infinity || isNaN(key)) {
+ return null;
+ }
+ return key;
+ case 'object':
+ var origKey = key;
+ if (Array.isArray(key)) {
+ var len = key.length;
+ key = new Array(len);
+ for (var i = 0; i < len; i++) {
+ key[i] = normalizeKey(origKey[i]);
+ }
+ /* istanbul ignore next */
+ } else if (key instanceof Date) {
+ return key.toJSON();
+ } else if (key !== null) { // generic object
+ key = {};
+ for (var k in origKey) {
+ if (Object.prototype.hasOwnProperty.call(origKey, k)) {
+ var val = origKey[k];
+ if (typeof val !== 'undefined') {
+ key[k] = normalizeKey(val);
+ }
+ }
+ }
+ }
+ }
+ return key;
+}
+
+function indexify(key) {
+ if (key !== null) {
+ switch (typeof key) {
+ case 'boolean':
+ return key ? 1 : 0;
+ case 'number':
+ return numToIndexableString(key);
+ case 'string':
+ // We've to be sure that key does not contain \u0000
+ // Do order-preserving replacements:
+ // 0 -> 1, 1
+ // 1 -> 1, 2
+ // 2 -> 2, 2
+ /* eslint-disable no-control-regex */
+ return key
+ .replace(/\u0002/g, '\u0002\u0002')
+ .replace(/\u0001/g, '\u0001\u0002')
+ .replace(/\u0000/g, '\u0001\u0001');
+ /* eslint-enable no-control-regex */
+ case 'object':
+ var isArray = Array.isArray(key);
+ var arr = isArray ? key : Object.keys(key);
+ var i = -1;
+ var len = arr.length;
+ var result = '';
+ if (isArray) {
+ while (++i < len) {
+ result += toIndexableString(arr[i]);
+ }
+ } else {
+ while (++i < len) {
+ var objKey = arr[i];
+ result += toIndexableString(objKey) +
+ toIndexableString(key[objKey]);
+ }
+ }
+ return result;
+ }
+ }
+ return '';
+}
+
+// convert the given key to a string that would be appropriate
+// for lexical sorting, e.g. within a database, where the
+// sorting is the same given by the collate() function.
+function toIndexableString(key) {
+ var zero = '\u0000';
+ key = normalizeKey(key);
+ return collationIndex(key) + SEP + indexify(key) + zero;
+}
+
+function parseNumber(str, i) {
+ var originalIdx = i;
+ var num;
+ var zero = str[i] === '1';
+ if (zero) {
+ num = 0;
+ i++;
+ } else {
+ var neg = str[i] === '0';
+ i++;
+ var numAsString = '';
+ var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);
+ var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;
+ /* istanbul ignore next */
+ if (neg) {
+ magnitude = -magnitude;
+ }
+ i += MAGNITUDE_DIGITS;
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ } else {
+ numAsString += ch;
+ }
+ i++;
+ }
+ numAsString = numAsString.split('.');
+ if (numAsString.length === 1) {
+ num = parseInt(numAsString, 10);
+ } else {
+ /* istanbul ignore next */
+ num = parseFloat(numAsString[0] + '.' + numAsString[1]);
+ }
+ /* istanbul ignore next */
+ if (neg) {
+ num = num - 10;
+ }
+ /* istanbul ignore next */
+ if (magnitude !== 0) {
+ // parseFloat is more reliable than pow due to rounding errors
+ // e.g. Number.MAX_VALUE would return Infinity if we did
+ // num * Math.pow(10, magnitude);
+ num = parseFloat(num + 'e' + magnitude);
+ }
+ }
+ return {num: num, length : i - originalIdx};
+}
+
+// move up the stack while parsing
+// this function moved outside of parseIndexableString for performance
+function pop(stack, metaStack) {
+ var obj = stack.pop();
+
+ if (metaStack.length) {
+ var lastMetaElement = metaStack[metaStack.length - 1];
+ if (obj === lastMetaElement.element) {
+ // popping a meta-element, e.g. an object whose value is another object
+ metaStack.pop();
+ lastMetaElement = metaStack[metaStack.length - 1];
+ }
+ var element = lastMetaElement.element;
+ var lastElementIndex = lastMetaElement.index;
+ if (Array.isArray(element)) {
+ element.push(obj);
+ } else if (lastElementIndex === stack.length - 2) { // obj with key+value
+ var key = stack.pop();
+ element[key] = obj;
+ } else {
+ stack.push(obj); // obj with key only
+ }
+ }
+}
+
+function parseIndexableString(str) {
+ var stack = [];
+ var metaStack = []; // stack for arrays and objects
+ var i = 0;
+
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var collationIndex = str[i++];
+ if (collationIndex === '\u0000') {
+ if (stack.length === 1) {
+ return stack.pop();
+ } else {
+ pop(stack, metaStack);
+ continue;
+ }
+ }
+ switch (collationIndex) {
+ case '1':
+ stack.push(null);
+ break;
+ case '2':
+ stack.push(str[i] === '1');
+ i++;
+ break;
+ case '3':
+ var parsedNum = parseNumber(str, i);
+ stack.push(parsedNum.num);
+ i += parsedNum.length;
+ break;
+ case '4':
+ var parsedStr = '';
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ }
+ parsedStr += ch;
+ i++;
+ }
+ // perform the reverse of the order-preserving replacement
+ // algorithm (see above)
+ /* eslint-disable no-control-regex */
+ parsedStr = parsedStr.replace(/\u0001\u0001/g, '\u0000')
+ .replace(/\u0001\u0002/g, '\u0001')
+ .replace(/\u0002\u0002/g, '\u0002');
+ /* eslint-enable no-control-regex */
+ stack.push(parsedStr);
+ break;
+ case '5':
+ var arrayElement = { element: [], index: stack.length };
+ stack.push(arrayElement.element);
+ metaStack.push(arrayElement);
+ break;
+ case '6':
+ var objElement = { element: {}, index: stack.length };
+ stack.push(objElement.element);
+ metaStack.push(objElement);
+ break;
+ /* istanbul ignore next */
+ default:
+ throw new Error(
+ 'bad collationIndex or unexpectedly reached end of input: ' +
+ collationIndex);
+ }
+ }
+}
+
+function arrayCollate(a, b) {
+ var len = Math.min(a.length, b.length);
+ for (var i = 0; i < len; i++) {
+ var sort = collate(a[i], b[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ }
+ return (a.length === b.length) ? 0 :
+ (a.length > b.length) ? 1 : -1;
+}
+function stringCollate(a, b) {
+ // See: https://github.com/daleharvey/pouchdb/issues/40
+ // This is incompatible with the CouchDB implementation, but its the
+ // best we can do for now
+ return (a === b) ? 0 : ((a > b) ? 1 : -1);
+}
+function objectCollate(a, b) {
+ var ak = Object.keys(a), bk = Object.keys(b);
+ var len = Math.min(ak.length, bk.length);
+ for (var i = 0; i < len; i++) {
+ // First sort the keys
+ var sort = collate(ak[i], bk[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ // if the keys are equal sort the values
+ sort = collate(a[ak[i]], b[bk[i]]);
+ if (sort !== 0) {
+ return sort;
+ }
+
+ }
+ return (ak.length === bk.length) ? 0 :
+ (ak.length > bk.length) ? 1 : -1;
+}
+// The collation is defined by erlangs ordered terms
+// the atoms null, true, false come first, then numbers, strings,
+// arrays, then objects
+// null/undefined/NaN/Infinity/-Infinity are all considered null
+function collationIndex(x) {
+ var id = ['boolean', 'number', 'string', 'object'];
+ var idx = id.indexOf(typeof x);
+ //false if -1 otherwise true, but fast!!!!1
+ if (~idx) {
+ if (x === null) {
+ return 1;
+ }
+ if (Array.isArray(x)) {
+ return 5;
+ }
+ return idx < 3 ? (idx + 2) : (idx + 3);
+ }
+ /* istanbul ignore next */
+ if (Array.isArray(x)) {
+ return 5;
+ }
+}
+
+// conversion:
+// x yyy zz...zz
+// x = 0 for negative, 1 for 0, 2 for positive
+// y = exponent (for negative numbers negated) moved so that it's >= 0
+// z = mantisse
+function numToIndexableString(num) {
+
+ if (num === 0) {
+ return '1';
+ }
+
+ // convert number to exponential format for easier and
+ // more succinct string sorting
+ var expFormat = num.toExponential().split(/e\+?/);
+ var magnitude = parseInt(expFormat[1], 10);
+
+ var neg = num < 0;
+
+ var result = neg ? '0' : '2';
+
+ // first sort by magnitude
+ // it's easier if all magnitudes are positive
+ var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);
+ var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);
+
+ result += SEP + magString;
+
+ // then sort by the factor
+ var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)
+ /* istanbul ignore next */
+ if (neg) { // for negative reverse ordering
+ factor = 10 - factor;
+ }
+
+ var factorStr = factor.toFixed(20);
+
+ // strip zeros from the end
+ factorStr = factorStr.replace(/\.?0+$/, '');
+
+ result += SEP + factorStr;
+
+ return result;
+}
+
+export { collate, normalizeKey, parseIndexableString, toIndexableString };
diff --git a/packages/pouchdb-lib/lib/pouchdb-collections.js b/packages/pouchdb-lib/lib/pouchdb-collections.js
new file mode 100644
index 0000000000..8b7a3318dd
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-collections.js
@@ -0,0 +1,103 @@
+function mangle(key) {
+ return '$' + key;
+}
+function unmangle(key) {
+ return key.substring(1);
+}
+function Map$1() {
+ this._store = {};
+}
+Map$1.prototype.get = function (key) {
+ var mangled = mangle(key);
+ return this._store[mangled];
+};
+Map$1.prototype.set = function (key, value) {
+ var mangled = mangle(key);
+ this._store[mangled] = value;
+ return true;
+};
+Map$1.prototype.has = function (key) {
+ var mangled = mangle(key);
+ return mangled in this._store;
+};
+Map$1.prototype.keys = function () {
+ return Object.keys(this._store).map(k => unmangle(k));
+};
+Map$1.prototype.delete = function (key) {
+ var mangled = mangle(key);
+ var res = mangled in this._store;
+ delete this._store[mangled];
+ return res;
+};
+Map$1.prototype.forEach = function (cb) {
+ var keys = Object.keys(this._store);
+ for (var i = 0, len = keys.length; i < len; i++) {
+ var key = keys[i];
+ var value = this._store[key];
+ key = unmangle(key);
+ cb(value, key);
+ }
+};
+Object.defineProperty(Map$1.prototype, 'size', {
+ get: function () {
+ return Object.keys(this._store).length;
+ }
+});
+
+function Set$1(array) {
+ this._store = new Map$1();
+
+ // init with an array
+ if (array && Array.isArray(array)) {
+ for (var i = 0, len = array.length; i < len; i++) {
+ this.add(array[i]);
+ }
+ }
+}
+Set$1.prototype.add = function (key) {
+ return this._store.set(key, true);
+};
+Set$1.prototype.has = function (key) {
+ return this._store.has(key);
+};
+Set$1.prototype.forEach = function (cb) {
+ this._store.forEach(function (value, key) {
+ cb(key);
+ });
+};
+Object.defineProperty(Set$1.prototype, 'size', {
+ get: function () {
+ return this._store.size;
+ }
+});
+
+// Based on https://kangax.github.io/compat-table/es6/ we can sniff out
+// incomplete Map/Set implementations which would otherwise cause our tests to fail.
+// Notably they fail in IE11 and iOS 8.4, which this prevents.
+function supportsMapAndSet() {
+ if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {
+ return false;
+ }
+ var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);
+ return prop && 'get' in prop && Map[Symbol.species] === Map;
+}
+
+// based on https://github.com/montagejs/collections
+
+var ExportedSet;
+var ExportedMap;
+
+if (process.env.COVERAGE) { // don't penalize ourselves on coverage
+ ExportedSet = Set$1;
+ ExportedMap = Map$1;
+} else {
+ if (supportsMapAndSet()) { // prefer built-in Map/Set
+ ExportedSet = Set;
+ ExportedMap = Map;
+ } else { // fall back to our polyfill
+ ExportedSet = Set$1;
+ ExportedMap = Map$1;
+ }
+}
+
+export { ExportedMap as Map, ExportedSet as Set };
diff --git a/packages/pouchdb-lib/lib/pouchdb-core.js b/packages/pouchdb-lib/lib/pouchdb-core.js
new file mode 100644
index 0000000000..e6fb66f59b
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-core.js
@@ -0,0 +1,1560 @@
+import EE from 'node:events';
+import { f as fetch } from './fetch-f2310cb2.js';
+import { v as v4, l as listenerCount, i as invalidIdError, r as rev, b as bulkGet, p as pick, h as hasLocalStorage } from './rev-48662a2a.js';
+import { n as nextTick } from './nextTick-ea093886.js';
+import { c as clone } from './clone-7eeb6295.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './functionName-706c6c65.js';
+import { createError, UNKNOWN_ERROR, MISSING_DOC, NOT_AN_OBJECT, REV_CONFLICT, INVALID_ID, INVALID_REV, QUERY_PARSE_ERROR, MISSING_BULK_DOCS, BAD_REQUEST } from './pouchdb-errors.js';
+import { i as isRemote } from './isRemote-2533b7cb.js';
+import { u as upsert } from './upsert-331b6913.js';
+import { o as once } from './once-de8350b9.js';
+import 'crypto';
+import { c as collectLeaves, a as collectConflicts } from './collectConflicts-ad0b7c70.js';
+import { i as isDeleted, a as isLocalId } from './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import { t as traverseRevTree, r as rootToLeaf } from './rootToLeaf-f8d0e78a.js';
+import { f as findPathToLeaf } from './findPathToLeaf-7e69c93c.js';
+import { clone as clone$1 } from 'pouchdb-utils.js';
+import applyChangesFilterPlugin from './pouchdb-changes-filter.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './_commonjsHelpers-24198af3.js';
+import 'util';
+import './stringMd5-15f53eba.js';
+import 'buffer';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+
+class ActiveTasks {
+ constructor() {
+ this.tasks = {};
+ }
+
+ list() {
+ return Object.values(this.tasks);
+ }
+
+ add(task) {
+ const id = v4();
+ this.tasks[id] = {
+ id,
+ name: task.name,
+ total_items: task.total_items,
+ created_at: new Date().toJSON()
+ };
+ return id;
+ }
+
+ get(id) {
+ return this.tasks[id];
+ }
+
+ /* eslint-disable no-unused-vars */
+ remove(id, reason) {
+ delete this.tasks[id];
+ return this.tasks;
+ }
+
+ update(id, updatedTask) {
+ const task = this.tasks[id];
+ if (typeof task !== 'undefined') {
+ const mergedTask = {
+ id: task.id,
+ name: task.name,
+ created_at: task.created_at,
+ total_items: updatedTask.total_items || task.total_items,
+ completed_items: updatedTask.completed_items || task.completed_items,
+ updated_at: new Date().toJSON()
+ };
+ this.tasks[id] = mergedTask;
+ }
+ return this.tasks;
+ }
+}
+
+function inherits(A, B) {
+ A.prototype = Object.create(B.prototype, {
+ constructor: { value: A }
+ });
+}
+
+function createClass(parent, init) {
+ let klass = function (...args) {
+ if (!(this instanceof klass)) {
+ return new klass(...args);
+ }
+ init.apply(this, args);
+ };
+ inherits(klass, parent);
+ return klass;
+}
+
+function tryCatchInChangeListener(self, change, pending, lastSeq) {
+ // isolate try/catches to avoid V8 deoptimizations
+ try {
+ self.emit('change', change, pending, lastSeq);
+ } catch (e) {
+ guardedConsole('error', 'Error in .on("change", function):', e);
+ }
+}
+
+function processChange(doc, metadata, opts) {
+ var changeList = [{rev: doc._rev}];
+ if (opts.style === 'all_docs') {
+ changeList = collectLeaves(metadata.rev_tree)
+ .map(function (x) { return {rev: x.rev}; });
+ }
+ var change = {
+ id: metadata.id,
+ changes: changeList,
+ doc: doc
+ };
+
+ if (isDeleted(metadata, doc._rev)) {
+ change.deleted = true;
+ }
+ if (opts.conflicts) {
+ change.doc._conflicts = collectConflicts(metadata);
+ if (!change.doc._conflicts.length) {
+ delete change.doc._conflicts;
+ }
+ }
+ return change;
+}
+
+class Changes extends EE {
+ constructor(db, opts, callback) {
+ super();
+ this.db = db;
+ opts = opts ? clone(opts) : {};
+ var complete = opts.complete = once((err, resp) => {
+ if (err) {
+ if (listenerCount(this, 'error') > 0) {
+ this.emit('error', err);
+ }
+ } else {
+ this.emit('complete', resp);
+ }
+ this.removeAllListeners();
+ db.removeListener('destroyed', onDestroy);
+ });
+ if (callback) {
+ this.on('complete', function (resp) {
+ callback(null, resp);
+ });
+ this.on('error', callback);
+ }
+ const onDestroy = () => {
+ this.cancel();
+ };
+ db.once('destroyed', onDestroy);
+
+ opts.onChange = (change, pending, lastSeq) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ return;
+ }
+ tryCatchInChangeListener(this, change, pending, lastSeq);
+ };
+
+ var promise = new Promise(function (fulfill, reject) {
+ opts.complete = function (err, res) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(res);
+ }
+ };
+ });
+ this.once('cancel', function () {
+ db.removeListener('destroyed', onDestroy);
+ opts.complete(null, {status: 'cancelled'});
+ });
+ this.then = promise.then.bind(promise);
+ this['catch'] = promise['catch'].bind(promise);
+ this.then(function (result) {
+ complete(null, result);
+ }, complete);
+
+
+
+ if (!db.taskqueue.isReady) {
+ db.taskqueue.addTask((failed) => {
+ if (failed) {
+ opts.complete(failed);
+ } else if (this.isCancelled) {
+ this.emit('cancel');
+ } else {
+ this.validateChanges(opts);
+ }
+ });
+ } else {
+ this.validateChanges(opts);
+ }
+ }
+
+ cancel() {
+ this.isCancelled = true;
+ if (this.db.taskqueue.isReady) {
+ this.emit('cancel');
+ }
+ }
+
+ validateChanges(opts) {
+ var callback = opts.complete;
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.validate(opts, (err) => {
+ if (err) {
+ return callback(err);
+ }
+ this.doChanges(opts);
+ });
+ } else {
+ this.doChanges(opts);
+ }
+ }
+
+ doChanges(opts) {
+ var callback = opts.complete;
+
+ opts = clone(opts);
+ if ('live' in opts && !('continuous' in opts)) {
+ opts.continuous = opts.live;
+ }
+ opts.processChange = processChange;
+
+ if (opts.since === 'latest') {
+ opts.since = 'now';
+ }
+ if (!opts.since) {
+ opts.since = 0;
+ }
+ if (opts.since === 'now') {
+ this.db.info().then((info) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ callback(null, {status: 'cancelled'});
+ return;
+ }
+ opts.since = info.update_seq;
+ this.doChanges(opts);
+ }, callback);
+ return;
+ }
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.normalize(opts);
+ if (PouchDB$1._changesFilterPlugin.shouldFilter(this, opts)) {
+ return PouchDB$1._changesFilterPlugin.filter(this, opts);
+ }
+ } else {
+ ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {
+ if (key in opts) {
+ guardedConsole('warn',
+ 'The "' + key + '" option was passed in to changes/replicate, ' +
+ 'but pouchdb-changes-filter plugin is not installed, so it ' +
+ 'was ignored. Please install the plugin to enable filtering.'
+ );
+ }
+ });
+ }
+
+ if (!('descending' in opts)) {
+ opts.descending = false;
+ }
+
+ // 0 and 1 should return 1 document
+ opts.limit = opts.limit === 0 ? 1 : opts.limit;
+ opts.complete = callback;
+ var newPromise = this.db._changes(opts);
+ /* istanbul ignore else */
+ if (newPromise && typeof newPromise.cancel === 'function') {
+ const cancel = this.cancel;
+ this.cancel = (...args) => {
+ newPromise.cancel();
+ cancel.apply(this, args);
+ };
+ }
+ }
+}
+
+/**
+ * About Adapter FUN it is not funny
+ * we can use new Proxy to get all calls or we simple use
+ * the new message bassed api which can log for obvious reaasons
+ */
+
+
+/*
+ * A generic pouch adapter
+ */
+
+function compare(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Wrapper for functions that call the bulkdocs api with a single doc,
+// if the first result is an error, return an error
+function yankError(callback, docId) {
+ return (err, results) => {
+ if (err || (results[0] && results[0].error)) {
+ err = err || results[0];
+ err.docId = docId;
+ callback(err);
+ } else {
+ callback(null, results.length ? results[0] : results);
+ }
+ };
+}
+
+// clean docs given to us by the user
+function cleanDocs(docs) {
+ for (let i = 0; i < docs.length; i++) {
+ const doc = docs[i];
+ if (doc._deleted) {
+ delete doc._attachments; // ignore atts for deleted docs
+ } else if (doc._attachments) {
+ // filter out extraneous keys from _attachments
+ const atts = Object.keys(doc._attachments);
+ for (let j = 0; j < atts.length; j++) {
+ const att = atts[j];
+ doc._attachments[att] = pick(doc._attachments[att],
+ ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);
+ }
+ }
+ }
+}
+
+// compare two docs, first by _id then by _rev
+function compareByIdThenRev({_id, _revisions}, b) {
+ const idCompare = compare(_id, b._id);
+ if (idCompare !== 0) {
+ return idCompare;
+ }
+ const aStart = _revisions ? _revisions.start : 0;
+ const bStart = b._revisions ? b._revisions.start : 0;
+ return compare(aStart, bStart);
+}
+
+// for every node in a revision tree computes its distance from the closest
+// leaf
+function computeHeight(revs) {
+ const height = {};
+ const edges = [];
+ traverseRevTree(revs, (isLeaf, pos, id, prnt) => {
+ const rev = `${pos}-${id}`;
+ if (isLeaf) {
+ height[rev] = 0;
+ }
+ if (prnt !== undefined) {
+ edges.push({from: prnt, to: rev});
+ }
+ return rev;
+ });
+
+ edges.reverse();
+ edges.forEach(({from, to}) => {
+ if (height[from] === undefined) {
+ height[from] = 1 + height[to];
+ } else {
+ height[from] = Math.min(height[from], 1 + height[to]);
+ }
+ });
+ return height;
+}
+
+function allDocsKeysParse(opts) {
+ const keys = ('limit' in opts) ?
+ opts.keys.slice(opts.skip, opts.limit + opts.skip) :
+ (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;
+ opts.keys = keys;
+ opts.skip = 0;
+ delete opts.limit;
+ if (opts.descending) {
+ keys.reverse();
+ opts.descending = false;
+ }
+}
+
+// all compaction is done in a queue, to avoid attaching
+// too many listeners at once
+function doNextCompaction(self) {
+ const task = self._compactionQueue[0];
+ const opts = task.opts;
+ const callback = task.callback;
+ self.get('_local/compaction').catch(() => false).then(doc => {
+ if (doc && doc.last_seq) {
+ opts.last_seq = doc.last_seq;
+ }
+ self._compact(opts, (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ callback(null, res);
+ }
+ nextTick(() => {
+ self._compactionQueue.shift();
+ if (self._compactionQueue.length) {
+ doNextCompaction(self);
+ }
+ });
+ });
+ });
+}
+
+function appendPurgeSeq(db, docId, rev) {
+ return db.get('_local/purges').then(doc => {
+ const purgeSeq = doc.purgeSeq + 1;
+ doc.purges.push({
+ docId,
+ rev,
+ purgeSeq,
+ });
+ if (doc.purges.length > self.purged_infos_limit) {
+ doc.purges.splice(0, doc.purges.length - self.purged_infos_limit);
+ }
+ doc.purgeSeq = purgeSeq;
+ return doc;
+ }).catch(err => {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {
+ _id: '_local/purges',
+ purges: [{
+ docId,
+ rev,
+ purgeSeq: 0,
+ }],
+ purgeSeq: 0,
+ };
+ }).then(doc => db.put(doc));
+}
+
+function attachmentNameError(name) {
+ if (name.charAt(0) === '_') {
+ return `${name} is not a valid attachment name, attachment names cannot start with '_'`;
+ }
+ return false;
+}
+
+class AbstractPouchDB extends BroadcastChannel {
+ _setup() {
+ this.post = (doc, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return callback(createError(NOT_AN_OBJECT));
+ }
+ this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));
+ };
+
+ this.put = (doc, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return cb(createError(NOT_AN_OBJECT));
+ }
+ invalidIdError(doc._id);
+ if (isLocalId(doc._id) && typeof this._putLocal === 'function') {
+ if (doc._deleted) {
+ return this._removeLocal(doc, cb);
+ } else {
+ return this._putLocal(doc, cb);
+ }
+ }
+
+ const putDoc = (next) => {
+ if (typeof this._put === 'function' && opts.new_edits !== false) {
+ this._put(doc, opts, next);
+ } else {
+ this.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));
+ }
+ };
+
+ if (opts.force && doc._rev) {
+ transformForceOptionToNewEditsOption();
+ putDoc(err => {
+ const result = err ? null : {ok: true, id: doc._id, rev: doc._rev};
+ cb(err, result);
+ });
+ } else {
+ putDoc(cb);
+ }
+
+ function transformForceOptionToNewEditsOption() {
+ const parts = doc._rev.split('-');
+ const oldRevId = parts[1];
+ const oldRevNum = parseInt(parts[0], 10);
+
+ const newRevNum = oldRevNum + 1;
+ const newRevId = rev();
+
+ doc._revisions = {
+ start: newRevNum,
+ ids: [newRevId, oldRevId]
+ };
+ doc._rev = `${newRevNum}-${newRevId}`;
+ opts.new_edits = false;
+ }
+ };
+
+ this.putAttachment = (docId, attachmentId, rev, blob, type) => {
+ const api = this;
+ if (typeof type === 'function') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267
+ /* istanbul ignore if */
+ if (typeof type === 'undefined') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ if (!type) {
+ guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');
+ }
+
+ function createAttachment(doc) {
+ let prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;
+ doc._attachments = doc._attachments || {};
+ doc._attachments[attachmentId] = {
+ content_type: type,
+ data: blob,
+ revpos: ++prevrevpos
+ };
+ return api.put(doc);
+ }
+
+ return api.get(docId).then(doc => {
+ if (doc._rev !== rev) {
+ throw createError(REV_CONFLICT);
+ }
+
+ return createAttachment(doc);
+ }, err => {
+ // create new doc
+ /* istanbul ignore else */
+ if (err.reason === MISSING_DOC.message) {
+ return createAttachment({_id: docId});
+ } else {
+ throw err;
+ }
+ });
+ };
+
+ this.removeAttachment = (docId, attachmentId, rev, callback) => {
+ this.get(docId, (err, obj) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ return;
+ }
+ if (obj._rev !== rev) {
+ callback(createError(REV_CONFLICT));
+ return;
+ }
+ /* istanbul ignore if */
+ if (!obj._attachments) {
+ return callback();
+ }
+ delete obj._attachments[attachmentId];
+ if (Object.keys(obj._attachments).length === 0) {
+ delete obj._attachments;
+ }
+ this.put(obj, callback);
+ });
+ };
+
+ this.remove = (docOrId, optsOrRev, opts, callback) => {
+ let doc;
+ if (typeof optsOrRev === 'string') {
+ // id, rev, opts, callback style
+ doc = {
+ _id: docOrId,
+ _rev: optsOrRev
+ };
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ } else {
+ // doc, opts, callback style
+ doc = docOrId;
+ if (typeof optsOrRev === 'function') {
+ callback = optsOrRev;
+ opts = {};
+ } else {
+ callback = opts;
+ opts = optsOrRev;
+ }
+ }
+ opts = opts || {};
+ opts.was_delete = true;
+ const newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};
+ newDoc._deleted = true;
+ if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {
+ return this._removeLocal(doc, callback);
+ }
+ this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));
+ };
+
+ this.revsDiff = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ const ids = Object.keys(req);
+
+ if (!ids.length) {
+ return callback(null, {});
+ }
+
+ let count = 0;
+ const missing = new Map();
+
+ function addToMissing(id, revId) {
+ if (!missing.has(id)) {
+ missing.set(id, {missing: []});
+ }
+ missing.get(id).missing.push(revId);
+ }
+
+ function processDoc(id, rev_tree) {
+ // Is this fast enough? Maybe we should switch to a set simulated by a map
+ const missingForId = req[id].slice(0);
+ traverseRevTree(rev_tree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ const idx = missingForId.indexOf(rev);
+ if (idx === -1) {
+ return;
+ }
+
+ missingForId.splice(idx, 1);
+ /* istanbul ignore if */
+ if (status !== 'available') {
+ addToMissing(id, rev);
+ }
+ });
+
+ // Traversing the tree is synchronous, so now `missingForId` contains
+ // revisions that were not found in the tree
+ missingForId.forEach(rev => {
+ addToMissing(id, rev);
+ });
+ }
+
+ ids.map(function (id) {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ if (err && err.status === 404 && err.message === 'missing') {
+ missing.set(id, {missing: req[id]});
+ } else if (err) {
+ /* istanbul ignore next */
+ return callback(err);
+ } else {
+ processDoc(id, rev_tree);
+ }
+
+ if (++count === ids.length) {
+ // convert LazyMap to object
+ const missingObj = {};
+ missing.forEach((value, key) => {
+ missingObj[key] = value;
+ });
+ return callback(null, missingObj);
+ }
+ });
+ }, this);
+ };
+
+ // _bulk_get API for faster replication, as described in
+ // https://github.com/apache/couchdb-chttpd/pull/33
+ // At the "abstract" level, it will just run multiple get()s in
+ // parallel, because this isn't much of a performance cost
+ // for local databases (except the cost of multiple transactions, which is
+ // small). The http adapter overrides this in order
+ // to do a more efficient single HTTP request.
+ this.bulkGet = (opts, callback) => {
+ bulkGet(this, opts, callback);
+ };
+
+ // compact one document and fire callback
+ // by compacting we mean removing all revisions which
+ // are further from the leaf in revision tree than max_height
+ this.compactDocument = (docId, maxHeight, callback) => {
+ this._getRevisionTree(docId, (err, revTree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ const height = computeHeight(revTree);
+ const candidates = [];
+ const revs = [];
+ Object.keys(height).forEach(rev => {
+ if (height[rev] > maxHeight) {
+ candidates.push(rev);
+ }
+ });
+
+ traverseRevTree(revTree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ if (status === 'available' && candidates.includes(rev)) {
+ revs.push(rev);
+ }
+ });
+ this._doCompaction(docId, revs, callback);
+ });
+ };
+
+ // compact the whole database using single document
+ // compaction
+ this.compact = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ this._compactionQueue = this._compactionQueue || [];
+ this._compactionQueue.push({opts, callback});
+ if (this._compactionQueue.length === 1) {
+ doNextCompaction(this);
+ }
+ };
+
+ /* Begin api wrappers. Specific functionality to storage belongs in the _[method] */
+ this.get = (id, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof id !== 'string') {
+ return cb(createError(INVALID_ID));
+ }
+ if (isLocalId(id) && typeof this._getLocal === 'function') {
+ return this._getLocal(id, cb);
+ }
+ let leaves = [];
+
+ const finishOpenRevs = () => {
+ const result = [];
+ let count = leaves.length;
+ /* istanbul ignore if */
+ if (!count) {
+ return cb(null, result);
+ }
+
+ // order with open_revs is unspecified
+ leaves.forEach((leaf) => {
+ this.get(id, {
+ rev: leaf,
+ revs: opts.revs,
+ latest: opts.latest,
+ attachments: opts.attachments,
+ binary: opts.binary
+ }, (err, doc) => {
+ if (!err) {
+ // using latest=true can produce duplicates
+ let existing;
+ for (let i = 0, l = result.length; i < l; i++) {
+ if (result[i].ok && result[i].ok._rev === doc._rev) {
+ existing = true;
+ break;
+ }
+ }
+ if (!existing) {
+ result.push({ok: doc});
+ }
+ } else {
+ result.push({missing: leaf});
+ }
+ count--;
+ if (!count) {
+ cb(null, result);
+ }
+ });
+ });
+ };
+
+ if (opts.open_revs) {
+ if (opts.open_revs === "all") {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return cb(err);
+ }
+ leaves = collectLeaves(rev_tree).map(leaf => leaf.rev);
+ finishOpenRevs();
+ });
+ } else {
+ if (Array.isArray(opts.open_revs)) {
+ leaves = opts.open_revs;
+ for (let i = 0; i < leaves.length; i++) {
+ const l = leaves[i];
+ // looks like it's the only thing couchdb checks
+ if (!(typeof (l) === "string" && /^\d+-/.test(l))) {
+ return cb(createError(INVALID_REV));
+ }
+ }
+ finishOpenRevs();
+ } else {
+ return cb(createError(UNKNOWN_ERROR, 'function_clause'));
+ }
+ }
+ return; // open_revs does not like other options
+ }
+
+ return this._get(id, opts, (err, result) => {
+ if (err) {
+ err.docId = id;
+ return cb(err);
+ }
+
+ const doc = result.doc;
+ const metadata = result.metadata;
+ const ctx = result.ctx;
+
+ if (opts.conflicts) {
+ const conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc._conflicts = conflicts;
+ }
+ }
+
+ if (isDeleted(metadata, doc._rev)) {
+ doc._deleted = true;
+ }
+
+ if (opts.revs || opts.revs_info) {
+ const splittedRev = doc._rev.split('-');
+ const revNo = parseInt(splittedRev[0], 10);
+ const revHash = splittedRev[1];
+
+ const paths = rootToLeaf(metadata.rev_tree);
+ let path = null;
+
+ for (let i = 0; i < paths.length; i++) {
+ const currentPath = paths[i];
+ const hashIndex = currentPath.ids.map(x => x.id)
+ .indexOf(revHash);
+ const hashFoundAtRevPos = hashIndex === (revNo - 1);
+
+ if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {
+ path = currentPath;
+ }
+ }
+
+ /* istanbul ignore if */
+ if (!path) {
+ err = new Error('invalid rev tree');
+ err.docId = id;
+ return cb(err);
+ }
+
+ const indexOfRev = path.ids.map(x => x.id)
+ .indexOf(doc._rev.split('-')[1]) + 1;
+ const howMany = path.ids.length - indexOfRev;
+ path.ids.splice(indexOfRev, howMany);
+ path.ids.reverse();
+
+ if (opts.revs) {
+ doc._revisions = {
+ start: (path.pos + path.ids.length) - 1,
+ ids: path.ids.map(rev => rev.id)
+ };
+ }
+ if (opts.revs_info) {
+ let pos = path.pos + path.ids.length;
+ doc._revs_info = path.ids.map(rev => {
+ pos--;
+ return {
+ rev: `${pos}-${rev.id}`,
+ status: rev.opts.status
+ };
+ });
+ }
+ }
+
+ if (opts.attachments && doc._attachments) {
+ const attachments = doc._attachments;
+ let count = Object.keys(attachments).length;
+ if (count === 0) {
+ return cb(null, doc);
+ }
+ Object.keys(attachments).forEach((key) => {
+ this._getAttachment(doc._id, key, attachments[key], {
+ // Previously the revision handling was done in adapter.js
+ // getAttachment, however since idb-next doesnt we need to
+ // pass the rev through
+ rev: doc._rev,
+ binary: opts.binary,
+ ctx
+ }, (err, data) => {
+ const att = doc._attachments[key];
+ att.data = data;
+ delete att.stub;
+ delete att.length;
+ if (!--count) {
+ cb(null, doc);
+ }
+ });
+ });
+ } else {
+ if (doc._attachments) {
+ for (const key in doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc._attachments, key)) {
+ doc._attachments[key].stub = true;
+ }
+ }
+ }
+ cb(null, doc);
+ }
+ });
+ };
+
+ // TODO: I dont like this, it forces an extra read for every
+ // attachment read and enforces a confusing api between
+ // adapter.js and the adapter implementation
+ this.getAttachment = (docId, attachmentId, opts, callback) => {
+ if (opts instanceof Function) {
+ callback = opts;
+ opts = {};
+ }
+ this._get(docId, opts, (err, {doc, ctx}) => {
+ if (err) {
+ return callback(err);
+ }
+ if (doc._attachments && doc._attachments[attachmentId]) {
+ opts.ctx = ctx;
+ opts.binary = true;
+ this._getAttachment(docId, attachmentId,
+ doc._attachments[attachmentId], opts, callback);
+ } else {
+ return callback(createError(MISSING_DOC));
+ }
+ });
+ };
+
+ this.allDocs = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;
+ if (opts.start_key) {
+ opts.startkey = opts.start_key;
+ }
+ if (opts.end_key) {
+ opts.endkey = opts.end_key;
+ }
+ if ('keys' in opts) {
+ if (!Array.isArray(opts.keys)) {
+ return callback(new TypeError('options.keys must be an array'));
+ }
+ const incompatibleOpt =
+ ['startkey', 'endkey', 'key'].filter(incompatibleOpt => incompatibleOpt in opts)[0];
+ if (incompatibleOpt) {
+ callback(createError(QUERY_PARSE_ERROR,
+ `Query parameter \`${incompatibleOpt}\` is not compatible with multi-get`
+ ));
+ return;
+ }
+ if (!isRemote(this)) {
+ allDocsKeysParse(opts);
+ if (opts.keys.length === 0) {
+ return this._allDocs({limit: 0}, callback);
+ }
+ }
+ }
+
+ return this._allDocs(opts, callback);
+ };
+
+ this.close = (callback) => {
+ this._closed = true;
+ this.postMessage('closed');
+ return this._close(callback);
+ };
+
+ this.info = function (callback) {
+ this._info((err, info) => {
+ if (err) {
+ return callback(err);
+ }
+ // assume we know better than the adapter, unless it informs us
+ info.db_name = info.db_name || this.name;
+ info.auto_compaction = !!(this.auto_compaction && !isRemote(this));
+ info.adapter = this.adapter;
+ callback(null, info);
+ });
+ };
+
+ this.id = (callback) => {
+ return this._id(callback);
+ };
+
+ this.bulkDocs = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ if (Array.isArray(req)) {
+ req = {
+ docs: req
+ };
+ }
+
+ if (!req || !req.docs || !Array.isArray(req.docs)) {
+ return callback(createError(MISSING_BULK_DOCS));
+ }
+
+ for (let i = 0; i < req.docs.length; ++i) {
+ if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {
+ return callback(createError(NOT_AN_OBJECT));
+ }
+ }
+
+ let attachmentError;
+ req.docs.forEach(({_attachments, _id}) => {
+ if (_attachments) {
+ Object.keys(_attachments).forEach(name => {
+ attachmentError = attachmentError || attachmentNameError(name);
+ if (!_attachments[name].content_type) {
+ guardedConsole('warn', 'Attachment', name, 'on document', _id, 'is missing content_type');
+ }
+ });
+ }
+ });
+
+ if (attachmentError) {
+ return callback(createError(BAD_REQUEST, attachmentError));
+ }
+
+ if (!('new_edits' in opts)) {
+ if ('new_edits' in req) {
+ opts.new_edits = req.new_edits;
+ } else {
+ opts.new_edits = true;
+ }
+ }
+
+ const adapter = this;
+ if (!opts.new_edits && !isRemote(adapter)) {
+ // ensure revisions of the same doc are sorted, so that
+ // the local adapter processes them correctly (#2935)
+ req.docs.sort(compareByIdThenRev);
+ }
+
+ cleanDocs(req.docs);
+
+ // in the case of conflicts, we want to return the _ids to the user
+ // however, the underlying adapter may destroy the docs array, so
+ // create a copy here
+ const ids = req.docs.map(({_id}) => _id);
+
+ this._bulkDocs(req, opts, (err, res) => {
+ if (err) {
+ return callback(err);
+ }
+ if (!opts.new_edits) {
+ // this is what couch does when new_edits is false
+ res = res.filter(({error}) => error);
+ }
+ // add ids for error/conflict responses (not required for CouchDB)
+ if (!isRemote(adapter)) {
+ for (let i = 0, l = res.length; i < l; i++) {
+ res[i].id = res[i].id || ids[i];
+ }
+ }
+
+ callback(null, res);
+ });
+ };
+
+ this.registerDependentDatabase = (dependentDb, callback) => {
+ const dbOptions = clone(this.__opts);
+ if (this.__opts.view_adapter) {
+ dbOptions.adapter = this.__opts.view_adapter;
+ }
+
+ const depDB = new this.constructor(dependentDb, dbOptions);
+
+ function diffFun(doc) {
+ doc.dependentDbs = doc.dependentDbs || {};
+ if (doc.dependentDbs[dependentDb]) {
+ return false; // no update required
+ }
+ doc.dependentDbs[dependentDb] = true;
+ return doc;
+ }
+ upsert(this, '_local/_pouch_dependentDbs', diffFun).then(() => {
+ callback(null, {db: depDB});
+ }).catch(callback);
+ };
+
+ this.destroy = (opts, callback) => {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ const usePrefix = 'use_prefix' in this ? this.use_prefix : true;
+
+ const destroyDb = () => {
+ // call destroy method of the particular adaptor
+ this._destroy(opts, (err, resp) => {
+ if (err) {
+ return callback(err);
+ }
+ this._destroyed = true;
+ this.postMessage('destroyed');
+ callback(null, resp || { 'ok': true });
+ });
+ };
+
+ if (isRemote(this)) {
+ // no need to check for dependent DBs if it's a remote DB
+ return destroyDb();
+ }
+
+ this.get('_local/_pouch_dependentDbs', (err, localDoc) => {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ return callback(err);
+ } else { // no dependencies
+ return destroyDb();
+ }
+ }
+ const dependentDbs = localDoc.dependentDbs;
+ const PouchDB = this.constructor;
+ const deletedMap = Object.keys(dependentDbs).map((name) => {
+ // use_prefix is only false in the browser
+ /* istanbul ignore next */
+ const trueName = usePrefix ?
+ name.replace(new RegExp(`^${PouchDB.prefix}`), '') : name;
+ return new PouchDB(trueName, this.__opts).destroy();
+ });
+ Promise.all(deletedMap).then(destroyDb, callback);
+ });
+ };
+ }
+
+ _compact({last_seq}, callback) {
+ const changesOpts = {
+ return_docs: false,
+ last_seq: last_seq || 0
+ };
+ const promises = [];
+
+ let taskId;
+ let compactedDocs = 0;
+
+ const onChange = ({id}) => {
+ this.activeTasks.update(taskId, {
+ completed_items: ++compactedDocs
+ });
+ promises.push(this.compactDocument(id, 0));
+ };
+ const onError = (err) => {
+ this.activeTasks.remove(taskId, err);
+ callback(err);
+ };
+ const onComplete = ({last_seq}) => {
+ const lastSeq = last_seq;
+ Promise.all(promises).then(() => upsert(this, '_local/compaction', (doc) => {
+ if (!doc.last_seq || doc.last_seq < lastSeq) {
+ doc.last_seq = lastSeq;
+ return doc;
+ }
+ return false; // somebody else got here first, don't update
+ })).then(() => {
+ this.activeTasks.remove(taskId);
+ callback(null, {ok: true});
+ }).catch(onError);
+ };
+
+ this.info().then(({update_seq}) => {
+ taskId = this.activeTasks.add({
+ name: 'database_compaction',
+ total_items: update_seq - changesOpts.last_seq,
+ });
+
+ this.changes(changesOpts)
+ .on('change', onChange)
+ .on('complete', onComplete)
+ .on('error', onError);
+ });
+ }
+
+ changes(opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ // By default set return_docs to false if the caller has opts.live = true,
+ // this will prevent us from collecting the set of changes indefinitely
+ // resulting in growing memory
+ opts.return_docs = ('return_docs' in opts) ? opts.return_docs : !opts.live;
+
+ return new Changes(this, opts, callback);
+ }
+
+ type() {
+ return (typeof this._type === 'function') ? this._type() : this.adapter;
+ }
+}
+
+// The abstract purge implementation expects a doc id and the rev of a leaf node in that doc.
+// It will return errors if the rev doesn’t exist or isn’t a leaf.
+AbstractPouchDB.prototype.purge = function purge(docId, rev, callback) {
+ if (typeof this._purge === 'undefined') {
+ return callback(createError(UNKNOWN_ERROR,
+ `Purge is not implemented in the ${this.adapter} adapter.`
+ ));
+ }
+ const self = this;
+
+ self._getRevisionTree(docId, (error, revs) => {
+ if (error) {
+ return callback(error);
+ }
+ if (!revs) {
+ return callback(createError(MISSING_DOC));
+ }
+ let path;
+ try {
+ path = findPathToLeaf(revs, rev);
+ } catch (error) {
+ return callback(error.message || error);
+ }
+ self._purge(docId, path, (error, result) => {
+ if (error) {
+ return callback(error);
+ } else {
+ appendPurgeSeq(self, docId, rev).then(() => callback(null, result));
+ }
+ });
+ });
+};
+
+class TaskQueue {
+ constructor() {
+ this.isReady = false;
+ this.failed = false;
+ this.queue = [];
+ }
+
+ execute() {
+ var fun;
+ if (this.failed) {
+ while ((fun = this.queue.shift())) {
+ fun(this.failed);
+ }
+ } else {
+ while ((fun = this.queue.shift())) {
+ fun();
+ }
+ }
+ }
+
+ fail(err) {
+ this.failed = err;
+ this.execute();
+ }
+
+ ready(db) {
+ this.isReady = true;
+ this.db = db;
+ this.execute();
+ }
+
+ addTask(fun) {
+ this.queue.push(fun);
+ if (this.failed) {
+ this.execute();
+ }
+ }
+}
+
+const getParseAdapter = (PouchDB) => function parseAdapter(name, opts) {
+ var match = name.match(/([a-z-]*):\/\/(.*)/);
+ if (match) {
+ // the http adapter expects the fully qualified name
+ return {
+ name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],
+ adapter: match[1]
+ };
+ }
+
+ var adapters = PouchDB.adapters;
+ var preferredAdapters = PouchDB.preferredAdapters;
+ var prefix = PouchDB.prefix;
+ var adapterName = opts.adapter;
+
+ if (!adapterName) { // automatically determine adapter
+ for (var i = 0; i < preferredAdapters.length; ++i) {
+ adapterName = preferredAdapters[i];
+ // check for browsers that have been upgraded from websql-only to websql+idb
+ /* istanbul ignore if */
+ if (adapterName === 'idb' && 'websql' in adapters &&
+ hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {
+ // log it, because this can be confusing during development
+ guardedConsole('log', 'PouchDB is downgrading "' + name + '" to WebSQL to' +
+ ' avoid data loss, because it was already opened with WebSQL.');
+ continue; // keep using websql to avoid user data loss
+ }
+ break;
+ }
+ }
+
+ var adapter = adapters[adapterName];
+
+ // if adapter is invalid, then an error will be thrown later
+ var usePrefix = (adapter && 'use_prefix' in adapter) ?
+ adapter.use_prefix : true;
+
+ return {
+ name: usePrefix ? (prefix + name) : name,
+ adapter: adapterName
+ };
+};
+
+class PouchInternal extends AbstractPouchDB {
+ constructor(name, opts) {
+ super();
+ this._setup(name, opts);
+ }
+
+ _setup(name, opts) {
+ super._setup();
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ if (opts.deterministic_revs === undefined) {
+ opts.deterministic_revs = true;
+ }
+
+ this.__opts = opts = clone$1(opts);
+
+ this.auto_compaction = opts.auto_compaction;
+ this.purged_infos_limit = opts.purged_infos_limit || 1000;
+ this.prefix = PouchDB.prefix;
+
+ if (typeof name !== 'string') {
+ throw new Error('Missing/invalid DB name');
+ }
+
+ var prefixedName = (opts.prefix || '') + name;
+ var backend = parseAdapter(prefixedName, opts);
+
+ opts.name = backend.name;
+ opts.adapter = opts.adapter || backend.adapter;
+
+ this.name = name;
+ this._adapter = opts.adapter;
+ PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);
+
+ if (!PouchDB.adapters[opts.adapter] ||
+ !PouchDB.adapters[opts.adapter].valid()) {
+ throw new Error('Invalid Adapter: ' + opts.adapter);
+ }
+
+ if (opts.view_adapter) {
+ if (!PouchDB.adapters[opts.view_adapter] ||
+ !PouchDB.adapters[opts.view_adapter].valid()) {
+ throw new Error('Invalid View Adapter: ' + opts.view_adapter);
+ }
+ }
+
+ this.taskqueue = new TaskQueue();
+
+ this.adapter = opts.adapter;
+
+ PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
+ if (err) {
+ return this.taskqueue.fail(err);
+ }
+
+
+ this.emit('created', this);
+ PouchDB.emit('created', this.name);
+ this.taskqueue.ready(this);
+ });
+ }
+}
+
+const PouchDB = createClass(PouchInternal, function (name, opts) {
+ PouchInternal.prototype._setup.call(this, name, opts);
+});
+
+const parseAdapter = getParseAdapter(PouchDB);
+
+
+
+PouchDB.adapters = {};
+PouchDB.preferredAdapters = [];
+
+PouchDB.prefix = '_pouch_';
+
+var eventEmitter = new EE();
+
+
+ Object.keys(EE.prototype).forEach(function (key) {
+ if (typeof EE.prototype[key] === 'function') {
+ PouchDB[key] = eventEmitter[key].bind(eventEmitter);
+ }
+ });
+
+ // these are created in constructor.js, and allow us to notify each DB with
+ // the same name that it was destroyed, via the constructor object
+ var destructListeners = PouchDB._destructionListeners = new Map();
+
+ PouchDB.on('ref', function onConstructorRef(db) {
+ if (!destructListeners.has(db.name)) {
+ destructListeners.set(db.name, []);
+ }
+ destructListeners.get(db.name).push(db);
+ });
+
+ PouchDB.on('unref', function onConstructorUnref(db) {
+ if (!destructListeners.has(db.name)) {
+ return;
+ }
+ var dbList = destructListeners.get(db.name);
+ var pos = dbList.indexOf(db);
+ if (pos < 0) {
+ /* istanbul ignore next */
+ return;
+ }
+ dbList.splice(pos, 1);
+ if (dbList.length > 1) {
+ /* istanbul ignore next */
+ destructListeners.set(db.name, dbList);
+ } else {
+ destructListeners.delete(db.name);
+ }
+ });
+
+ PouchDB.on('destroyed', function onConstructorDestroyed(name) {
+ if (!destructListeners.has(name)) {
+ return;
+ }
+ var dbList = destructListeners.get(name);
+ destructListeners.delete(name);
+ dbList.forEach(function (db) {
+ db.emit('destroyed',true);
+ });
+ });
+
+
+PouchDB.adapter = function (id, obj, addToPreferredAdapters) {
+ /* istanbul ignore else */
+ if (obj.valid()) {
+ PouchDB.adapters[id] = obj;
+ if (addToPreferredAdapters) {
+ PouchDB.preferredAdapters.push(id);
+ }
+ }
+};
+
+PouchDB.plugin = function (obj) {
+ if (typeof obj === 'function') { // function style for plugins
+ obj(PouchDB);
+ } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {
+ throw new Error('Invalid plugin: got "' + obj + '", expected an object or a function');
+ } else {
+ Object.keys(obj).forEach(function (id) { // object style for plugins
+ PouchDB.prototype[id] = obj[id];
+ });
+ }
+ if (this.__defaults) {
+ PouchDB.__defaults = Object.assign({}, this.__defaults);
+ }
+ return PouchDB;
+};
+
+PouchDB.defaults = function (defaultOpts) {
+ let PouchWithDefaults = createClass(PouchDB, function (name, opts) {
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ opts = Object.assign({}, PouchWithDefaults.__defaults, opts);
+ PouchDB.call(this, name, opts);
+ });
+
+ PouchWithDefaults.preferredAdapters = PouchDB.preferredAdapters.slice();
+ Object.keys(PouchDB).forEach(function (key) {
+ if (!(key in PouchWithDefaults)) {
+ PouchWithDefaults[key] = PouchDB[key];
+ }
+ });
+
+ // make default options transitive
+ // https://github.com/pouchdb/pouchdb/issues/5922
+ PouchWithDefaults.__defaults = Object.assign({}, this.__defaults, defaultOpts);
+
+ return PouchWithDefaults;
+};
+
+PouchDB.fetch = function (url, opts) {
+ return fetch(url, opts);
+};
+
+PouchDB.prototype.activeTasks = PouchDB.activeTasks = new ActiveTasks();
+
+var PouchDB$1 = PouchDB;
+
+// TODO: remove from pouchdb-core (breaking)
+PouchDB$1.plugin(applyChangesFilterPlugin);
+
+export { PouchDB$1 as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-crypto.js b/packages/pouchdb-lib/lib/pouchdb-crypto.js
new file mode 100644
index 0000000000..0f9f8023cb
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-crypto.js
@@ -0,0 +1,63 @@
+async function digestFromMessage(message,algo='SHA-256') {
+ const msgUint8 = new TextEncoder().encode(message);
+ const arrayBuffer = await crypto.subtle.digest(algo, msgUint8); // hash the message
+
+ return {
+ digist(format='hex') {
+ const formats = {
+ hex: () =>
+ Array.from(new Uint8Array(arrayBuffer))
+ // converted buffer to byte array
+ .map((b) => b.toString(16).padStart(2, "0"))
+ .join(""), // converted bytes to hex string;
+ };
+ // Fails by design with wrong format
+ return formats[format]();
+ }
+ };
+}
+
+
+const base64encoderStream = {
+ transform(data,ready) {
+ let reader = new FileReader();
+ reader.onloadend = () => {
+ ready.enqueue(reader.result.split(';base64,',1));
+ reader = null;
+ };
+ reader.readAsDataURL(new Blob(data));
+ }
+};
+
+//new TransformStream(base64encoderStream)
+
+// Old But gold
+function blobToBase64(blobOrBuffer, callback) {
+ new Response(blobOrBuffer).arrayBuffer().then((arrayBuffer) => btoa(
+ String.fromCharCode(
+ ...new Uint8Array(arrayBuffer)
+ ))).then((b64)=>callback(null,b64),err=>callback(err));
+ //callback(blobOrBuffer.toString('binary'));
+}
+// eg "digest":"md5-yDbs1scfYdqqLpxyFb1gFw==",
+// base642hex new Buffer('yDbs1scfYdqqLpxyFb1gFw==', 'base64').toString('hex')
+// hex2base64 new Buffer('c836ecd6c71f61daaa2e9c7215bd6017', 'hex').toString('base64')
+
+// Returns only the ${base64Data}
+// Reverse: await fetch(`data:${'image/jpeg'||''};base64,${base64Data}`);
+const toBase64 = (blob) => new Promise((resolve, reject) => {
+ const reader = new FileReader;
+ reader.onerror = reject;
+ reader.onload = () => {
+ resolve(reader.result.split('base64,',1)[1]);
+ };
+ reader.readAsDataURL(new Blob([].concat(blob)));
+});
+
+
+//import { md5, sha1, sha512, sha3 } from 'hash-wasm'
+// replaces stringMd5 returns hex should also use message.normalize('NFKC')
+const createoldMD5 = (message="") => import('./index.esm-9293e8de.js').then(({ md5 }) => md5(new TextEncoder().encode(message)));
+const stringMd5 = async (message="") => (await import('./index.esm-9293e8de.js')).md5(message);
+
+export { base64encoderStream, blobToBase64, createoldMD5, digestFromMessage, stringMd5, toBase64 };
diff --git a/packages/pouchdb-lib/lib/pouchdb-errors.js b/packages/pouchdb-lib/lib/pouchdb-errors.js
new file mode 100644
index 0000000000..690f20c207
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-errors.js
@@ -0,0 +1,102 @@
+class PouchError extends Error {
+ constructor(status, error, reason) {
+ super();
+ this.status = status;
+ this.name = error;
+ this.message = reason;
+ this.error = true;
+ }
+
+ toString() {
+ return JSON.stringify({
+ status: this.status,
+ name: this.name,
+ message: this.message,
+ reason: this.reason
+ });
+ }
+}
+
+var UNAUTHORIZED = new PouchError(401, 'unauthorized', "Name or password is incorrect.");
+var MISSING_BULK_DOCS = new PouchError(400, 'bad_request', "Missing JSON list of 'docs'");
+var MISSING_DOC = new PouchError(404, 'not_found', 'missing');
+var REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');
+var INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');
+var MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');
+var RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');
+var NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');
+var UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');
+var BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');
+var INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');
+var QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');
+var DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');
+var BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');
+var NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');
+var DB_MISSING = new PouchError(404, 'not_found', 'Database not found');
+var IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');
+var WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');
+var LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');
+var FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');
+var INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');
+var FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');
+var MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\'t found');
+var INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');
+
+function createError(error, reason) {
+ function CustomPouchError(reason) {
+ // inherit error properties from our parent error manually
+ // so as to allow proper JSON parsing.
+ /* jshint ignore:start */
+ var names = Object.getOwnPropertyNames(error);
+ for (var i = 0, len = names.length; i < len; i++) {
+ if (typeof error[names[i]] !== 'function') {
+ this[names[i]] = error[names[i]];
+ }
+ }
+
+ if (this.stack === undefined) {
+ this.stack = (new Error()).stack;
+ }
+
+ /* jshint ignore:end */
+ if (reason !== undefined) {
+ this.reason = reason;
+ }
+ }
+ CustomPouchError.prototype = PouchError.prototype;
+ return new CustomPouchError(reason);
+}
+
+function generateErrorFromResponse(err) {
+
+ if (typeof err !== 'object') {
+ var data = err;
+ err = UNKNOWN_ERROR;
+ err.data = data;
+ }
+
+ if ('error' in err && err.error === 'conflict') {
+ err.name = 'conflict';
+ err.status = 409;
+ }
+
+ if (!('name' in err)) {
+ err.name = err.error || 'unknown';
+ }
+
+ if (!('status' in err)) {
+ err.status = 500;
+ }
+
+ if (!('message' in err)) {
+ err.message = err.message || err.reason;
+ }
+
+ if (!('stack' in err)) {
+ err.stack = (new Error()).stack;
+ }
+
+ return err;
+}
+
+export { BAD_ARG, BAD_REQUEST, DB_MISSING, DOC_VALIDATION, FILE_EXISTS, FORBIDDEN, IDB_ERROR, INVALID_ID, INVALID_REQUEST, INVALID_REV, INVALID_URL, LDB_ERROR, MISSING_BULK_DOCS, MISSING_DOC, MISSING_ID, MISSING_STUB, NOT_AN_OBJECT, NOT_OPEN, QUERY_PARSE_ERROR, RESERVED_ID, REV_CONFLICT, UNAUTHORIZED, UNKNOWN_ERROR, WSQ_ERROR, createError, generateErrorFromResponse };
diff --git a/packages/pouchdb-lib/lib/pouchdb-fetch.js b/packages/pouchdb-lib/lib/pouchdb-fetch.js
new file mode 100644
index 0000000000..7d7fed1203
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-fetch.js
@@ -0,0 +1,9 @@
+export { A as AbortController, H as Headers, f as fetch } from './fetch-f2310cb2.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './_commonjsHelpers-24198af3.js';
+import 'util';
diff --git a/packages/pouchdb-lib/lib/pouchdb-find.js b/packages/pouchdb-lib/lib/pouchdb-find.js
new file mode 100644
index 0000000000..f6045786cd
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-find.js
@@ -0,0 +1,1614 @@
+import 'node:events';
+import './functionName-706c6c65.js';
+import { generateErrorFromResponse } from './pouchdb-errors.js';
+import { i as isRemote } from './isRemote-2533b7cb.js';
+import { t as toPromise } from './toPromise-f6e385ee.js';
+import 'crypto';
+import { H as Headers } from './fetch-f2310cb2.js';
+import { c as clone } from './clone-7eeb6295.js';
+import { p as parseField, g as getFieldFromDoc, s as setFieldInDoc, m as matchesSelector, a as massageSelector, b as getValue, c as getKey, d as compare, f as filterInMemoryFields } from './matches-selector-87ab4d5f.js';
+import { n as nextTick } from './nextTick-ea093886.js';
+import createAbstractMapReduce from './pouchdb-abstract-mapreduce.js';
+import { collate } from './pouchdb-collate.js';
+import { u as upsert } from './upsert-331b6913.js';
+import { stringMd5 } from './pouchdb-crypto.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './guardedConsole-f54e5a40.js';
+import './once-de8350b9.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import 'util';
+import './flatten-994f45c6.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './typedBuffer-a8220a49.js';
+import './pouchdb-mapreduce-utils.js';
+
+// we restucture the supplied JSON considerably, because the official
+// Mango API is very particular about a lot of this stuff, but we like
+// to be liberal with what we accept in order to prevent mental
+// breakdowns in our users
+function massageCreateIndexRequest(requestDef) {
+ requestDef = clone(requestDef);
+
+ if (!requestDef.index) {
+ requestDef.index = {};
+ }
+
+ ['type', 'name', 'ddoc'].forEach(function (key) {
+ if (requestDef.index[key]) {
+ requestDef[key] = requestDef.index[key];
+ delete requestDef.index[key];
+ }
+ });
+
+ if (requestDef.fields) {
+ requestDef.index.fields = requestDef.fields;
+ delete requestDef.fields;
+ }
+
+ if (!requestDef.type) {
+ requestDef.type = 'json';
+ }
+ return requestDef;
+}
+
+// throws if the user is using the wrong query field value type
+function checkFieldValueType(name, value, isHttp) {
+ var message = '';
+ var received = value;
+ var addReceived = true;
+ if ([ '$in', '$nin', '$or', '$and', '$mod', '$nor', '$all' ].indexOf(name) !== -1) {
+ if (!Array.isArray(value)) {
+ message = 'Query operator ' + name + ' must be an array.';
+
+ }
+ }
+
+ if ([ '$not', '$elemMatch', '$allMatch' ].indexOf(name) !== -1) {
+ if (!(!Array.isArray(value) && typeof value === 'object' && value !== null)) {
+ message = 'Query operator ' + name + ' must be an object.';
+ }
+ }
+
+ if (name === '$mod' && Array.isArray(value)) {
+ if (value.length !== 2) {
+ message = 'Query operator $mod must be in the format [divisor, remainder], ' +
+ 'where divisor and remainder are both integers.';
+ } else {
+ var divisor = value[0];
+ var mod = value[1];
+ if (divisor === 0) {
+ message = 'Query operator $mod\'s divisor cannot be 0, cannot divide by zero.';
+ addReceived = false;
+ }
+ if (typeof divisor !== 'number' || parseInt(divisor, 10) !== divisor) {
+ message = 'Query operator $mod\'s divisor is not an integer.';
+ received = divisor;
+ }
+ if (parseInt(mod, 10) !== mod) {
+ message = 'Query operator $mod\'s remainder is not an integer.';
+ received = mod;
+ }
+ }
+ }
+ if (name === '$exists') {
+ if (typeof value !== 'boolean') {
+ message = 'Query operator $exists must be a boolean.';
+ }
+ }
+
+ if (name === '$type') {
+ var allowed = [ 'null', 'boolean', 'number', 'string', 'array', 'object' ];
+ var allowedStr = '"' + allowed.slice(0, allowed.length - 1).join('", "') + '", or "' + allowed[allowed.length - 1] + '"';
+ if (typeof value !== 'string') {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ } else if (allowed.indexOf(value) == -1) {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ }
+ }
+
+ if (name === '$size') {
+ if (parseInt(value, 10) !== value) {
+ message = 'Query operator $size must be a integer.';
+ }
+ }
+
+ if (name === '$regex') {
+ if (typeof value !== 'string') {
+ if (isHttp) {
+ message = 'Query operator $regex must be a string.';
+ } else if (!(value instanceof RegExp)) {
+ message = 'Query operator $regex must be a string or an instance ' +
+ 'of a javascript regular expression.';
+ }
+ }
+ }
+
+ if (message) {
+ if (addReceived) {
+
+ var type = received === null
+ ? ' '
+ : Array.isArray(received)
+ ? ' array'
+ : ' ' + typeof received;
+ var receivedStr = typeof received === 'object' && received !== null
+ ? JSON.stringify(received, null, '\t')
+ : received;
+
+ message += ' Received' + type + ': ' + receivedStr;
+ }
+ throw new Error(message);
+ }
+}
+
+
+var requireValidation = [ '$all', '$allMatch', '$and', '$elemMatch', '$exists', '$in', '$mod', '$nin', '$nor', '$not', '$or', '$regex', '$size', '$type' ];
+
+var arrayTypeComparisonOperators = [ '$in', '$nin', '$mod', '$all'];
+
+var equalityOperators = [ '$eq', '$gt', '$gte', '$lt', '$lte' ];
+
+// recursively walks down the a query selector validating any operators
+function validateSelector(input, isHttp) {
+ if (Array.isArray(input)) {
+ for (var entry of input) {
+ if (typeof entry === 'object' && value !== null) {
+ validateSelector(entry, isHttp);
+ }
+ }
+ } else {
+ var fields = Object.keys(input);
+
+ for (var i = 0; i < fields.length; i++) {
+ var key = fields[i];
+ var value = input[key];
+
+ if (requireValidation.indexOf(key) !== -1) {
+ checkFieldValueType(key, value, isHttp);
+ }
+ if (equalityOperators.indexOf(key) !== -1) {
+ // skip, explicit comparison operators can be anything
+ continue;
+ }
+ if (arrayTypeComparisonOperators.indexOf(key) !== -1) {
+ // skip, their values are already valid
+ continue;
+ }
+ if (typeof value === 'object' && value !== null) {
+ validateSelector(value, isHttp);
+ }
+ }
+ }
+}
+
+function dbFetch(db, path, opts, callback) {
+ var status, ok;
+ opts.headers = new Headers({'Content-type': 'application/json'});
+ db.fetch(path, opts).then(function (response) {
+ status = response.status;
+ ok = response.ok;
+ return response.json();
+ }).then(function (json) {
+ if (!ok) {
+ json.status = status;
+ var err = generateErrorFromResponse(json);
+ callback(err);
+ } else {
+ callback(null, json);
+ }
+ }).catch(callback);
+}
+
+function createIndex$1(db, requestDef, callback) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ dbFetch(db, '_index', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function find$1(db, requestDef, callback) {
+ validateSelector(requestDef.selector, true);
+ dbFetch(db, '_find', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function explain$1(db, requestDef, callback) {
+ dbFetch(db, '_explain', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function getIndexes$1(db, callback) {
+ dbFetch(db, '_index', {
+ method: 'GET'
+ }, callback);
+}
+
+function deleteIndex$1(db, indexDef, callback) {
+
+
+ var ddoc = indexDef.ddoc;
+ var type = indexDef.type || 'json';
+ var name = indexDef.name;
+
+ if (!ddoc) {
+ return callback(new Error('you must provide an index\'s ddoc'));
+ }
+
+ if (!name) {
+ return callback(new Error('you must provide an index\'s name'));
+ }
+
+ var url = '_index/' + [ddoc, type, name].map(encodeURIComponent).join('/');
+
+ dbFetch(db, url, {method: 'DELETE'}, callback);
+}
+
+function callbackify(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ promisedCallback(promise, cb);
+ return promise;
+ };
+}
+
+function promisedCallback(promise, callback) {
+ promise.then(function (res) {
+ nextTick(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick(function () {
+ callback(reason);
+ });
+ });
+ return promise;
+}
+
+var flatten = function (...args) {
+ var res = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ var subArr = args[i];
+ if (Array.isArray(subArr)) {
+ res = res.concat(flatten.apply(null, subArr));
+ } else {
+ res.push(subArr);
+ }
+ }
+ return res;
+};
+
+function mergeObjects(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res = Object.assign(res, arr[i]);
+ }
+ return res;
+}
+
+// Selects a list of fields defined in dot notation from one doc
+// and copies them to a new doc. Like underscore _.pick but supports nesting.
+function pick(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var parsedField = parseField(arr[i]);
+ var value = getFieldFromDoc(obj, parsedField);
+ if (typeof value !== 'undefined') {
+ setFieldInDoc(res, parsedField, value);
+ }
+ }
+ return res;
+}
+
+// e.g. ['a'], ['a', 'b'] is true, but ['b'], ['a', 'b'] is false
+function oneArrayIsSubArrayOfOther(left, right) {
+
+ for (var i = 0, len = Math.min(left.length, right.length); i < len; i++) {
+ if (left[i] !== right[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// e.g.['a', 'b', 'c'], ['a', 'b'] is false
+function oneArrayIsStrictSubArrayOfOther(left, right) {
+
+ if (left.length > right.length) {
+ return false;
+ }
+
+ return oneArrayIsSubArrayOfOther(left, right);
+}
+
+// same as above, but treat the left array as an unordered set
+// e.g. ['b', 'a'], ['a', 'b', 'c'] is true, but ['c'], ['a', 'b', 'c'] is false
+function oneSetIsSubArrayOfOther(left, right) {
+ left = left.slice();
+ for (var i = 0, len = right.length; i < len; i++) {
+ var field = right[i];
+ if (!left.length) {
+ break;
+ }
+ var leftIdx = left.indexOf(field);
+ if (leftIdx === -1) {
+ return false;
+ } else {
+ left.splice(leftIdx, 1);
+ }
+ }
+ return true;
+}
+
+function arrayToObject(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res[arr[i]] = true;
+ }
+ return res;
+}
+
+function max(arr, fun) {
+ var max = null;
+ var maxScore = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var element = arr[i];
+ var score = fun(element);
+ if (score > maxScore) {
+ maxScore = score;
+ max = element;
+ }
+ }
+ return max;
+}
+
+function arrayEquals(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+ for (var i = 0, len = arr1.length; i < len; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function uniq(arr) {
+ var obj = {};
+ for (var i = 0; i < arr.length; i++) {
+ obj['$' + arr[i]] = true;
+ }
+ return Object.keys(obj).map(function (key) {
+ return key.substring(1);
+ });
+}
+
+//
+// One thing about these mappers:
+//
+// Per the advice of John-David Dalton (http://youtu.be/NthmeLEhDDM),
+// what you want to do in this case is optimize for the smallest possible
+// function, since that's the thing that gets run over and over again.
+//
+// This code would be a lot simpler if all the if/elses were inside
+// the function, but it would also be a lot less performant.
+//
+
+
+function createDeepMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, iLen = fields.length; i < iLen; i++) {
+ var parsedField = parseField(fields[i]);
+ var value = doc;
+ for (var j = 0, jLen = parsedField.length; j < jLen; j++) {
+ var key = parsedField[j];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // don't emit
+ }
+ }
+ toEmit.push(value);
+ }
+ emit(toEmit);
+ };
+}
+
+function createDeepSingleMapper(field, emit, selector) {
+ var parsedField = parseField(field);
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // do nothing
+ }
+ }
+ emit(value);
+ };
+}
+
+function createShallowSingleMapper(field, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ emit(doc[field]);
+ };
+}
+
+function createShallowMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, len = fields.length; i < len; i++) {
+ toEmit.push(doc[fields[i]]);
+ }
+ emit(toEmit);
+ };
+}
+
+function checkShallow(fields) {
+ for (var i = 0, len = fields.length; i < len; i++) {
+ var field = fields[i];
+ if (field.indexOf('.') !== -1) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function createMapper(fields, emit, selector) {
+ var isShallow = checkShallow(fields);
+ var isSingle = fields.length === 1;
+
+ // notice we try to optimize for the most common case,
+ // i.e. single shallow indexes
+ if (isShallow) {
+ if (isSingle) {
+ return createShallowSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createShallowMultiMapper(fields, emit, selector);
+ }
+ } else { // deep
+ if (isSingle) {
+ return createDeepSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createDeepMultiMapper(fields, emit, selector);
+ }
+ }
+}
+
+function mapper(mapFunDef, emit) {
+ // mapFunDef is a list of fields
+
+ const fields = Object.keys(mapFunDef.fields);
+ const partialSelector = mapFunDef.partial_filter_selector;
+
+ return createMapper(fields, emit, partialSelector);
+}
+
+/* istanbul ignore next */
+function reducer(/*reduceFunDef*/) {
+ throw new Error('reduce not supported');
+}
+
+function ddocValidator(ddoc, viewName) {
+ var view = ddoc.views[viewName];
+ // This doesn't actually need to be here apparently, but
+ // I feel safer keeping it.
+ /* istanbul ignore if */
+ if (!view.map || !view.map.fields) {
+ throw new Error('ddoc ' + ddoc._id +' with view ' + viewName +
+ ' doesn\'t have map.fields defined. ' +
+ 'maybe it wasn\'t created by this plugin?');
+ }
+}
+
+var abstractMapper = createAbstractMapReduce(
+ /* localDocName */ 'indexes',
+ mapper,
+ reducer,
+ ddocValidator
+);
+
+function abstractMapper$1 (db) {
+ if (db._customFindAbstractMapper) {
+ return {
+ // Calls the _customFindAbstractMapper, but with a third argument:
+ // the standard findAbstractMapper query/viewCleanup.
+ // This allows the indexeddb adapter to support partial_filter_selector.
+ query: function addQueryFallback(signature, opts) {
+ var fallback = abstractMapper.query.bind(this);
+ return db._customFindAbstractMapper.query.call(this, signature, opts, fallback);
+ },
+ viewCleanup: function addViewCleanupFallback() {
+ var fallback = abstractMapper.viewCleanup.bind(this);
+ return db._customFindAbstractMapper.viewCleanup.call(this, fallback);
+ }
+ };
+ }
+ return abstractMapper;
+}
+
+// normalize the "sort" value
+function massageSort(sort) {
+ if (!Array.isArray(sort)) {
+ throw new Error('invalid sort json - should be an array');
+ }
+ return sort.map(function (sorting) {
+ if (typeof sorting === 'string') {
+ var obj = {};
+ obj[sorting] = 'asc';
+ return obj;
+ } else {
+ return sorting;
+ }
+ });
+}
+
+function massageUseIndex(useIndex) {
+ var cleanedUseIndex = [];
+ if (typeof useIndex === 'string') {
+ cleanedUseIndex.push(useIndex);
+ } else {
+ cleanedUseIndex = useIndex;
+ }
+
+ return cleanedUseIndex.map(function (name) {
+ return name.replace('_design/', '');
+ });
+}
+
+function massageIndexDef(indexDef) {
+ indexDef.fields = indexDef.fields.map(function (field) {
+ if (typeof field === 'string') {
+ var obj = {};
+ obj[field] = 'asc';
+ return obj;
+ }
+ return field;
+ });
+ if (indexDef.partial_filter_selector) {
+ indexDef.partial_filter_selector = massageSelector(
+ indexDef.partial_filter_selector
+ );
+ }
+ return indexDef;
+}
+
+function getKeyFromDoc(doc, index) {
+ var res = [];
+ for (var i = 0; i < index.def.fields.length; i++) {
+ var field = getKey(index.def.fields[i]);
+ res.push(getFieldFromDoc(doc, parseField(field)));
+ }
+ return res;
+}
+
+// have to do this manually because REASONS. I don't know why
+// CouchDB didn't implement inclusive_start
+function filterInclusiveStart(rows, targetValue, index) {
+ var indexFields = index.def.fields;
+ for (var i = 0, len = rows.length; i < len; i++) {
+ var row = rows[i];
+
+ // shave off any docs at the beginning that are <= the
+ // target value
+
+ var docKey = getKeyFromDoc(row.doc, index);
+ if (indexFields.length === 1) {
+ docKey = docKey[0]; // only one field, not multi-field
+ } else { // more than one field in index
+ // in the case where e.g. the user is searching {$gt: {a: 1}}
+ // but the index is [a, b], then we need to shorten the doc key
+ while (docKey.length > targetValue.length) {
+ docKey.pop();
+ }
+ }
+ //ABS as we just looking for values that don't match
+ if (Math.abs(collate(docKey, targetValue)) > 0) {
+ // no need to filter any further; we're past the key
+ break;
+ }
+ }
+ return i > 0 ? rows.slice(i) : rows;
+}
+
+function reverseOptions(opts) {
+ var newOpts = clone(opts);
+ delete newOpts.startkey;
+ delete newOpts.endkey;
+ delete newOpts.inclusive_start;
+ delete newOpts.inclusive_end;
+
+ if ('endkey' in opts) {
+ newOpts.startkey = opts.endkey;
+ }
+ if ('startkey' in opts) {
+ newOpts.endkey = opts.startkey;
+ }
+ if ('inclusive_start' in opts) {
+ newOpts.inclusive_end = opts.inclusive_start;
+ }
+ if ('inclusive_end' in opts) {
+ newOpts.inclusive_start = opts.inclusive_end;
+ }
+ return newOpts;
+}
+
+function validateIndex(index) {
+ var ascFields = index.fields.filter(function (field) {
+ return getValue(field) === 'asc';
+ });
+ if (ascFields.length !== 0 && ascFields.length !== index.fields.length) {
+ throw new Error('unsupported mixed sorting');
+ }
+}
+
+function validateSort(requestDef, index) {
+ if (index.defaultUsed && requestDef.sort) {
+ var noneIdSorts = requestDef.sort.filter(function (sortItem) {
+ return Object.keys(sortItem)[0] !== '_id';
+ }).map(function (sortItem) {
+ return Object.keys(sortItem)[0];
+ });
+
+ if (noneIdSorts.length > 0) {
+ throw new Error('Cannot sort on field(s) "' + noneIdSorts.join(',') +
+ '" when using the default index');
+ }
+ }
+
+ if (index.defaultUsed) {
+ return;
+ }
+}
+
+function validateFindRequest(requestDef) {
+ if (typeof requestDef.selector !== 'object') {
+ throw new Error('you must provide a selector when you find()');
+ }
+
+ /*var selectors = requestDef.selector['$and'] || [requestDef.selector];
+ for (var i = 0; i < selectors.length; i++) {
+ var selector = selectors[i];
+ var keys = Object.keys(selector);
+ if (keys.length === 0) {
+ throw new Error('invalid empty selector');
+ }
+ //var selection = selector[keys[0]];
+ /*if (Object.keys(selection).length !== 1) {
+ throw new Error('invalid selector: ' + JSON.stringify(selection) +
+ ' - it must have exactly one key/value');
+ }
+ }*/
+}
+
+// determine the maximum number of fields
+// we're going to need to query, e.g. if the user
+// has selection ['a'] and sorting ['a', 'b'], then we
+// need to use the longer of the two: ['a', 'b']
+function getUserFields(selector, sort) {
+ var selectorFields = Object.keys(selector);
+ var sortFields = sort? sort.map(getKey) : [];
+ var userFields;
+ if (selectorFields.length >= sortFields.length) {
+ userFields = selectorFields;
+ } else {
+ userFields = sortFields;
+ }
+
+ if (sortFields.length === 0) {
+ return {
+ fields: userFields
+ };
+ }
+
+ // sort according to the user's preferred sorting
+ userFields = userFields.sort(function (left, right) {
+ var leftIdx = sortFields.indexOf(left);
+ if (leftIdx === -1) {
+ leftIdx = Number.MAX_VALUE;
+ }
+ var rightIdx = sortFields.indexOf(right);
+ if (rightIdx === -1) {
+ rightIdx = Number.MAX_VALUE;
+ }
+ return leftIdx < rightIdx ? -1 : leftIdx > rightIdx ? 1 : 0;
+ });
+
+ return {
+ fields: userFields,
+ sortOrder: sort.map(getKey)
+ };
+}
+
+async function createIndex(db, requestDef) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ var originalIndexDef = clone(requestDef.index);
+ requestDef.index = massageIndexDef(requestDef.index);
+
+ validateIndex(requestDef.index);
+
+ // calculating md5 is expensive - memoize and only
+ // run if required
+ var md5 = await stringMd5(JSON.stringify(requestDef));
+
+ var viewName = requestDef.name || ('idx-' + md5);
+
+ var ddocName = requestDef.ddoc || ('idx-' + md5);
+ var ddocId = '_design/' + ddocName;
+
+ var hasInvalidLanguage = false;
+ var viewExists = false;
+
+ function updateDdoc(doc) {
+ if (doc._rev && doc.language !== 'query') {
+ hasInvalidLanguage = true;
+ }
+ doc.language = 'query';
+ doc.views = doc.views || {};
+
+ viewExists = !!doc.views[viewName];
+
+ if (viewExists) {
+ return false;
+ }
+
+ doc.views[viewName] = {
+ map: {
+ fields: mergeObjects(requestDef.index.fields),
+ partial_filter_selector: requestDef.index.partial_filter_selector
+ },
+ reduce: '_count',
+ options: {
+ def: originalIndexDef
+ }
+ };
+
+ return doc;
+ }
+
+ db.constructor.emit('debug', ['find', 'creating index', ddocId]);
+
+ return upsert(db, ddocId, updateDdoc).then(function () {
+ if (hasInvalidLanguage) {
+ throw new Error('invalid language for ddoc with id "' +
+ ddocId +
+ '" (should be "query")');
+ }
+ }).then(function () {
+ // kick off a build
+ // TODO: abstract-pouchdb-mapreduce should support auto-updating
+ // TODO: should also use update_after, but pouchdb/pouchdb#3415 blocks me
+ var signature = ddocName + '/' + viewName;
+ return abstractMapper$1(db).query.call(db, signature, {
+ limit: 0,
+ reduce: false
+ }).then(function () {
+ return {
+ id: ddocId,
+ name: viewName,
+ result: viewExists ? 'exists' : 'created'
+ };
+ });
+ });
+}
+
+function getIndexes(db) {
+ // just search through all the design docs and filter in-memory.
+ // hopefully there aren't that many ddocs.
+ return db.allDocs({
+ startkey: '_design/',
+ endkey: '_design/\uffff',
+ include_docs: true
+ }).then(function (allDocsRes) {
+ var res = {
+ indexes: [{
+ ddoc: null,
+ name: '_all_docs',
+ type: 'special',
+ def: {
+ fields: [{_id: 'asc'}]
+ }
+ }]
+ };
+
+ res.indexes = flatten(res.indexes, allDocsRes.rows.filter(function (row) {
+ return row.doc.language === 'query';
+ }).map(function (row) {
+ var viewNames = row.doc.views !== undefined ? Object.keys(row.doc.views) : [];
+
+ return viewNames.map(function (viewName) {
+ var view = row.doc.views[viewName];
+ return {
+ ddoc: row.id,
+ name: viewName,
+ type: 'json',
+ def: massageIndexDef(view.options.def)
+ };
+ });
+ }));
+
+ // these are sorted by view name for some reason
+ res.indexes.sort(function (left, right) {
+ return compare(left.name, right.name);
+ });
+ res.total_rows = res.indexes.length;
+ return res;
+ });
+}
+
+// couchdb lowest collation value
+var COLLATE_LO = null;
+
+// couchdb highest collation value (TODO: well not really, but close enough amirite)
+var COLLATE_HI = {"\uffff": {}};
+
+const SHORT_CIRCUIT_QUERY = {
+ queryOpts: { limit: 0, startkey: COLLATE_HI, endkey: COLLATE_LO },
+ inMemoryFields: [],
+};
+
+// couchdb second-lowest collation value
+
+function checkFieldInIndex(index, field) {
+ var indexFields = index.def.fields.map(getKey);
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (field === indexField) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// so when you do e.g. $eq/$eq, we can do it entirely in the database.
+// but when you do e.g. $gt/$eq, the first part can be done
+// in the database, but the second part has to be done in-memory,
+// because $gt has forced us to lose precision.
+// so that's what this determines
+function userOperatorLosesPrecision(selector, field) {
+ var matcher = selector[field];
+ var userOperator = getKey(matcher);
+
+ return userOperator !== '$eq';
+}
+
+// sort the user fields by their position in the index,
+// if they're in the index
+function sortFieldsByIndex(userFields, index) {
+ var indexFields = index.def.fields.map(getKey);
+
+ return userFields.slice().sort(function (a, b) {
+ var aIdx = indexFields.indexOf(a);
+ var bIdx = indexFields.indexOf(b);
+ if (aIdx === -1) {
+ aIdx = Number.MAX_VALUE;
+ }
+ if (bIdx === -1) {
+ bIdx = Number.MAX_VALUE;
+ }
+ return compare(aIdx, bIdx);
+ });
+}
+
+// first pass to try to find fields that will need to be sorted in-memory
+function getBasicInMemoryFields(index, selector, userFields) {
+
+ userFields = sortFieldsByIndex(userFields, index);
+
+ // check if any of the user selectors lose precision
+ var needToFilterInMemory = false;
+ for (var i = 0, len = userFields.length; i < len; i++) {
+ var field = userFields[i];
+ if (needToFilterInMemory || !checkFieldInIndex(index, field)) {
+ return userFields.slice(i);
+ }
+ if (i < len - 1 && userOperatorLosesPrecision(selector, field)) {
+ needToFilterInMemory = true;
+ }
+ }
+ return [];
+}
+
+function getInMemoryFieldsFromNe(selector) {
+ var fields = [];
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ Object.keys(matcher).forEach(function (operator) {
+ if (operator === '$ne') {
+ fields.push(field);
+ }
+ });
+ });
+ return fields;
+}
+
+function getInMemoryFields(coreInMemoryFields, index, selector, userFields) {
+ var result = flatten(
+ // in-memory fields reported as necessary by the query planner
+ coreInMemoryFields,
+ // combine with another pass that checks for any we may have missed
+ getBasicInMemoryFields(index, selector, userFields),
+ // combine with another pass that checks for $ne's
+ getInMemoryFieldsFromNe(selector)
+ );
+
+ return sortFieldsByIndex(uniq(result), index);
+}
+
+// check that at least one field in the user's query is represented
+// in the index. order matters in the case of sorts
+function checkIndexFieldsMatch(indexFields, sortOrder, fields) {
+ if (sortOrder) {
+ // array has to be a strict subarray of index array. furthermore,
+ // the sortOrder fields need to all be represented in the index
+ var sortMatches = oneArrayIsStrictSubArrayOfOther(sortOrder, indexFields);
+ var selectorMatches = oneArrayIsSubArrayOfOther(fields, indexFields);
+
+ return sortMatches && selectorMatches;
+ }
+
+ // all of the user's specified fields still need to be
+ // on the left side of the index array, although the order
+ // doesn't matter
+ return oneSetIsSubArrayOfOther(fields, indexFields);
+}
+
+var logicalMatchers = ['$eq', '$gt', '$gte', '$lt', '$lte'];
+function isNonLogicalMatcher(matcher) {
+ return logicalMatchers.indexOf(matcher) === -1;
+}
+
+// check all the index fields for usages of '$ne'
+// e.g. if the user queries {foo: {$ne: 'foo'}, bar: {$eq: 'bar'}},
+// then we can neither use an index on ['foo'] nor an index on
+// ['foo', 'bar'], but we can use an index on ['bar'] or ['bar', 'foo']
+function checkFieldsLogicallySound(indexFields, selector) {
+ var firstField = indexFields[0];
+ var matcher = selector[firstField];
+
+ if (typeof matcher === 'undefined') {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ var isInvalidNe = Object.keys(matcher).length === 1 &&
+ getKey(matcher) === '$ne';
+
+ return !isInvalidNe;
+}
+
+function checkIndexMatches(index, sortOrder, fields, selector) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var fieldsMatch = checkIndexFieldsMatch(indexFields, sortOrder, fields);
+
+ if (!fieldsMatch) {
+ return false;
+ }
+
+ return checkFieldsLogicallySound(indexFields, selector);
+}
+
+//
+// the algorithm is very simple:
+// take all the fields the user supplies, and if those fields
+// are a strict subset of the fields in some index,
+// then use that index
+//
+//
+function findMatchingIndexes(selector, userFields, sortOrder, indexes) {
+ return indexes.filter(function (index) {
+ return checkIndexMatches(index, sortOrder, userFields, selector);
+ });
+}
+
+// find the best index, i.e. the one that matches the most fields
+// in the user's query
+function findBestMatchingIndex(selector, userFields, sortOrder, indexes, useIndex) {
+
+ var matchingIndexes = findMatchingIndexes(selector, userFields, sortOrder, indexes);
+
+ if (matchingIndexes.length === 0) {
+ if (useIndex) {
+ throw {
+ error: "no_usable_index",
+ message: "There is no index available for this selector."
+ };
+ }
+ //return `all_docs` as a default index;
+ //I'm assuming that _all_docs is always first
+ var defaultIndex = indexes[0];
+ defaultIndex.defaultUsed = true;
+ return defaultIndex;
+ }
+ if (matchingIndexes.length === 1 && !useIndex) {
+ return matchingIndexes[0];
+ }
+
+ var userFieldsMap = arrayToObject(userFields);
+
+ function scoreIndex(index) {
+ var indexFields = index.def.fields.map(getKey);
+ var score = 0;
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (userFieldsMap[indexField]) {
+ score++;
+ }
+ }
+ return score;
+ }
+
+ if (useIndex) {
+ var useIndexDdoc = '_design/' + useIndex[0];
+ var useIndexName = useIndex.length === 2 ? useIndex[1] : false;
+ var index = matchingIndexes.find(function (index) {
+ if (useIndexName && index.ddoc === useIndexDdoc && useIndexName === index.name) {
+ return true;
+ }
+
+ if (index.ddoc === useIndexDdoc) {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ return false;
+ });
+
+ if (!index) {
+ throw {
+ error: "unknown_error",
+ message: "Could not find that index or could not use that index for the query"
+ };
+ }
+ return index;
+ }
+
+ return max(matchingIndexes, scoreIndex);
+}
+
+function getSingleFieldQueryOptsFor(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {key: userValue};
+ case '$lte':
+ return {endkey: userValue};
+ case '$gte':
+ return {startkey: userValue};
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+
+ return {
+ startkey: COLLATE_LO
+ };
+}
+
+function getSingleFieldCoreQueryPlan(selector, index) {
+ var field = getKey(index.def.fields[0]);
+ //ignoring this because the test to exercise the branch is skipped at the moment
+ /* istanbul ignore next */
+ var matcher = selector[field] || {};
+ var inMemoryFields = [];
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts;
+
+ userOperators.forEach(function (userOperator) {
+
+ if (isNonLogicalMatcher(userOperator)) {
+ inMemoryFields.push(field);
+ }
+
+ var userValue = matcher[userOperator];
+
+ var newQueryOpts = getSingleFieldQueryOptsFor(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newQueryOpts]);
+ } else {
+ combinedOpts = newQueryOpts;
+ }
+ });
+
+ return {
+ queryOpts: combinedOpts,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function getMultiFieldCoreQueryPlan(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {
+ startkey: userValue,
+ endkey: userValue
+ };
+ case '$lte':
+ return {
+ endkey: userValue
+ };
+ case '$gte':
+ return {
+ startkey: userValue
+ };
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+}
+
+function getMultiFieldQueryOpts(selector, index) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var inMemoryFields = [];
+ var startkey = [];
+ var endkey = [];
+ var inclusiveStart;
+ var inclusiveEnd;
+
+
+ function finish(i) {
+
+ if (inclusiveStart !== false) {
+ startkey.push(COLLATE_LO);
+ }
+ if (inclusiveEnd !== false) {
+ endkey.push(COLLATE_HI);
+ }
+ // keep track of the fields where we lost specificity,
+ // and therefore need to filter in-memory
+ inMemoryFields = indexFields.slice(i);
+ }
+
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+
+ var matcher = selector[indexField];
+
+ if (!matcher || !Object.keys(matcher).length) { // fewer fields in user query than in index
+ finish(i);
+ break;
+ } else if (Object.keys(matcher).some(isNonLogicalMatcher)) { // non-logical are ignored
+ finish(i);
+ break;
+ } else if (i > 0) {
+ var usingGtlt = (
+ '$gt' in matcher || '$gte' in matcher ||
+ '$lt' in matcher || '$lte' in matcher);
+ var previousKeys = Object.keys(selector[indexFields[i - 1]]);
+ var previousWasEq = arrayEquals(previousKeys, ['$eq']);
+ var previousWasSame = arrayEquals(previousKeys, Object.keys(matcher));
+ var gtltLostSpecificity = usingGtlt && !previousWasEq && !previousWasSame;
+ if (gtltLostSpecificity) {
+ finish(i);
+ break;
+ }
+ }
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts = null;
+
+ for (var j = 0; j < userOperators.length; j++) {
+ var userOperator = userOperators[j];
+ var userValue = matcher[userOperator];
+
+ var newOpts = getMultiFieldCoreQueryPlan(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newOpts]);
+ } else {
+ combinedOpts = newOpts;
+ }
+ }
+
+ startkey.push('startkey' in combinedOpts ? combinedOpts.startkey : COLLATE_LO);
+ endkey.push('endkey' in combinedOpts ? combinedOpts.endkey : COLLATE_HI);
+ if ('inclusive_start' in combinedOpts) {
+ inclusiveStart = combinedOpts.inclusive_start;
+ }
+ if ('inclusive_end' in combinedOpts) {
+ inclusiveEnd = combinedOpts.inclusive_end;
+ }
+ }
+
+ var res = {
+ startkey: startkey,
+ endkey: endkey
+ };
+
+ if (typeof inclusiveStart !== 'undefined') {
+ res.inclusive_start = inclusiveStart;
+ }
+ if (typeof inclusiveEnd !== 'undefined') {
+ res.inclusive_end = inclusiveEnd;
+ }
+
+ return {
+ queryOpts: res,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function shouldShortCircuit(selector) {
+ // We have a field to select from, but not a valid value
+ // this should result in a short circuited query
+ // just like the http adapter (couchdb) and mongodb
+ // see tests for issue #7810
+
+ // @todo Use 'Object.values' when Node.js v6 support is dropped.
+ const values = Object.keys(selector).map(function (key) {
+ return selector[key];
+ });
+ return values.some(function (val) {
+ return typeof val === 'object' && Object.keys(val).length === 0;
+});
+}
+
+function getDefaultQueryPlan(selector) {
+ //using default index, so all fields need to be done in memory
+ return {
+ queryOpts: {startkey: null},
+ inMemoryFields: [Object.keys(selector)]
+ };
+}
+
+function getCoreQueryPlan(selector, index) {
+ if (index.defaultUsed) {
+ return getDefaultQueryPlan(selector);
+ }
+
+ if (index.def.fields.length === 1) {
+ // one field in index, so the value was indexed as a singleton
+ return getSingleFieldCoreQueryPlan(selector, index);
+ }
+ // else index has multiple fields, so the value was indexed as an array
+ return getMultiFieldQueryOpts(selector, index);
+}
+
+function planQuery(request, indexes) {
+
+ var selector = request.selector;
+ var sort = request.sort;
+
+ if (shouldShortCircuit(selector)) {
+ return Object.assign({}, SHORT_CIRCUIT_QUERY, { index: indexes[0] });
+ }
+
+ var userFieldsRes = getUserFields(selector, sort);
+
+ var userFields = userFieldsRes.fields;
+ var sortOrder = userFieldsRes.sortOrder;
+ var index = findBestMatchingIndex(selector, userFields, sortOrder, indexes, request.use_index);
+
+ var coreQueryPlan = getCoreQueryPlan(selector, index);
+ var queryOpts = coreQueryPlan.queryOpts;
+ var coreInMemoryFields = coreQueryPlan.inMemoryFields;
+
+ var inMemoryFields = getInMemoryFields(coreInMemoryFields, index, selector, userFields);
+
+ var res = {
+ queryOpts: queryOpts,
+ index: index,
+ inMemoryFields: inMemoryFields
+ };
+ return res;
+}
+
+function indexToSignature(index) {
+ // remove '_design/'
+ return index.ddoc.substring(8) + '/' + index.name;
+}
+
+function doAllDocs(db, originalOpts) {
+ var opts = clone(originalOpts);
+
+ // CouchDB responds in weird ways when you provide a non-string to _id;
+ // we mimic the behavior for consistency. See issue66 tests for details.
+ if (opts.descending) {
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.endkey = '';
+ }
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.limit = 0;
+ }
+ } else {
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.startkey = '';
+ }
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.limit = 0;
+ }
+ }
+ if ('key' in opts && typeof opts.key !== 'string') {
+ opts.limit = 0;
+ }
+
+ if (opts.limit > 0 && opts.indexes_count) {
+ // brute force and quite naive impl.
+ // amp up the limit with the amount of (indexes) design docs
+ // or is this too naive? How about skip?
+ opts.original_limit = opts.limit;
+ opts.limit += opts.indexes_count;
+ }
+
+ return db.allDocs(opts)
+ .then(function (res) {
+ // filter out any design docs that _all_docs might return
+ res.rows = res.rows.filter(function (row) {
+ return !/^_design\//.test(row.id);
+ });
+ // put back original limit
+ if (opts.original_limit) {
+ opts.limit = opts.original_limit;
+ }
+ // enforce the rows to respect the given limit
+ res.rows = res.rows.slice(0, opts.limit);
+ return res;
+ });
+}
+
+function find(db, requestDef, explain) {
+ if (requestDef.selector) {
+ // must be validated before massaging
+ validateSelector(requestDef.selector, false);
+ requestDef.selector = massageSelector(requestDef.selector);
+ }
+
+ if (requestDef.sort) {
+ requestDef.sort = massageSort(requestDef.sort);
+ }
+
+ if (requestDef.use_index) {
+ requestDef.use_index = massageUseIndex(requestDef.use_index);
+ }
+
+ validateFindRequest(requestDef);
+
+ return getIndexes(db).then(function (getIndexesRes) {
+
+ db.constructor.emit('debug', ['find', 'planning query', requestDef]);
+ var queryPlan = planQuery(requestDef, getIndexesRes.indexes);
+ db.constructor.emit('debug', ['find', 'query plan', queryPlan]);
+
+ var indexToUse = queryPlan.index;
+
+ validateSort(requestDef, indexToUse);
+
+ var opts = Object.assign({
+ include_docs: true,
+ reduce: false,
+ // Add amount of index for doAllDocs to use (related to issue #7810)
+ indexes_count: getIndexesRes.total_rows,
+ }, queryPlan.queryOpts);
+
+ if ('startkey' in opts && 'endkey' in opts &&
+ collate(opts.startkey, opts.endkey) > 0) {
+ // can't possibly return any results, startkey > endkey
+ /* istanbul ignore next */
+ return {docs: []};
+ }
+
+ var isDescending = requestDef.sort &&
+ typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc';
+
+ if (isDescending) {
+ // either all descending or all ascending
+ opts.descending = true;
+ opts = reverseOptions(opts);
+ }
+
+ if (!queryPlan.inMemoryFields.length) {
+ // no in-memory filtering necessary, so we can let the
+ // database do the limit/skip for us
+ if ('limit' in requestDef) {
+ opts.limit = requestDef.limit;
+ }
+ if ('skip' in requestDef) {
+ opts.skip = requestDef.skip;
+ }
+ }
+
+ if (explain) {
+ return Promise.resolve(queryPlan, opts);
+ }
+
+ return Promise.resolve().then(function () {
+ if (indexToUse.name === '_all_docs') {
+ return doAllDocs(db, opts);
+ } else {
+ var signature = indexToSignature(indexToUse);
+ return abstractMapper$1(db).query.call(db, signature, opts);
+ }
+ }).then(function (res) {
+ if (opts.inclusive_start === false) {
+ // may have to manually filter the first one,
+ // since couchdb has no true inclusive_start option
+ res.rows = filterInclusiveStart(res.rows, opts.startkey, indexToUse);
+ }
+
+ if (queryPlan.inMemoryFields.length) {
+ // need to filter some stuff in-memory
+ res.rows = filterInMemoryFields(res.rows, requestDef, queryPlan.inMemoryFields);
+ }
+
+ var resp = {
+ docs: res.rows.map(function (row) {
+ var doc = row.doc;
+ if (requestDef.fields) {
+ return pick(doc, requestDef.fields);
+ }
+ return doc;
+ })
+ };
+
+ if (indexToUse.defaultUsed) {
+ resp.warning = 'No matching index found, create an index to optimize query time.';
+ }
+
+ return resp;
+ });
+ });
+}
+
+function explain(db, requestDef) {
+ return find(db, requestDef, true)
+ .then(function (queryPlan) {
+ return {
+ dbname: db.name,
+ index: queryPlan.index,
+ selector: requestDef.selector,
+ range: {
+ start_key: queryPlan.queryOpts.startkey,
+ end_key: queryPlan.queryOpts.endkey,
+ },
+ opts: {
+ use_index: requestDef.use_index || [],
+ bookmark: "nil", //hardcoded to match CouchDB since its not supported,
+ limit: requestDef.limit,
+ skip: requestDef.skip,
+ sort: requestDef.sort || {},
+ fields: requestDef.fields,
+ conflicts: false, //hardcoded to match CouchDB since its not supported,
+ r: [49], // hardcoded to match CouchDB since its not support
+ },
+ limit: requestDef.limit,
+ skip: requestDef.skip || 0,
+ fields: requestDef.fields,
+ };
+ });
+}
+
+function deleteIndex(db, index) {
+
+ if (!index.ddoc) {
+ throw new Error('you must supply an index.ddoc when deleting');
+ }
+
+ if (!index.name) {
+ throw new Error('you must supply an index.name when deleting');
+ }
+
+ var docId = index.ddoc;
+ var viewName = index.name;
+
+ function deltaFun(doc) {
+ if (Object.keys(doc.views).length === 1 && doc.views[viewName]) {
+ // only one view in this ddoc, delete the whole ddoc
+ return {_id: docId, _deleted: true};
+ }
+ // more than one view here, just remove the view
+ delete doc.views[viewName];
+ return doc;
+ }
+
+ return upsert(db, docId, deltaFun).then(function () {
+ return abstractMapper$1(db).viewCleanup.apply(db);
+ }).then(function () {
+ return {ok: true};
+ });
+}
+
+var createIndexAsCallback = callbackify(createIndex);
+var findAsCallback = callbackify(find);
+var explainAsCallback = callbackify(explain);
+var getIndexesAsCallback = callbackify(getIndexes);
+var deleteIndexAsCallback = callbackify(deleteIndex);
+
+var plugin = {};
+plugin.createIndex = toPromise(function (requestDef, callback) {
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide an index to create'));
+ }
+
+ var createIndex = isRemote(this) ?
+ createIndex$1 : createIndexAsCallback;
+ createIndex(this, requestDef, callback);
+});
+
+plugin.find = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to find()'));
+ }
+
+ var find = isRemote(this) ? find$1 : findAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.explain = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to explain()'));
+ }
+
+ var find = isRemote(this) ? explain$1 : explainAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.getIndexes = toPromise(function (callback) {
+
+ var getIndexes = isRemote(this) ? getIndexes$1 : getIndexesAsCallback;
+ getIndexes(this, callback);
+});
+
+plugin.deleteIndex = toPromise(function (indexDef, callback) {
+
+ if (typeof indexDef !== 'object') {
+ return callback(new Error('you must provide an index to delete'));
+ }
+
+ var deleteIndex = isRemote(this) ?
+ deleteIndex$1 : deleteIndexAsCallback;
+ deleteIndex(this, indexDef, callback);
+});
+
+export { plugin as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-for-coverage.js b/packages/pouchdb-lib/lib/pouchdb-for-coverage.js
new file mode 100644
index 0000000000..2b60f4da3f
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-for-coverage.js
@@ -0,0 +1,120751 @@
+import EE from 'node:events';
+import Stream from 'stream';
+import http from 'http';
+import Url$1 from 'url';
+import require$$0$1 from 'punycode';
+import https from 'https';
+import zlib from 'zlib';
+import require$$0$1$1 from 'util';
+import crypto$1 from 'crypto';
+import require$$0$2 from 'buffer';
+import 'node:assert';
+import fs$1 from 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import path$1 from 'node:path';
+import 'node:os';
+import { clone as clone$3 } from 'pouchdb-utils.js';
+import vm from 'vm';
+import require$$0$2$1 from 'events';
+import require$$8 from 'assert';
+import require$$0$3 from 'fs';
+import require$$1$2 from 'path';
+import require$$2 from 'os';
+import { parseUri, uuid as uuid$1, defaultBackOff as defaultBackOff$1 } from './pouchdb-utils.js';
+import { w as winningRev$1 } from './rootToLeaf-f8d0e78a.js';
+import { m as merge$1 } from './merge-1e46cced.js';
+import { b as binStringToBluffer$1 } from './binaryStringToBlobOrBuffer-39ece35b.js';
+import { uniq as uniq$2, sequentialize as sequentialize$1, fin as fin$1, callbackify as callbackify$2, promisedCallback as promisedCallback$2 } from './pouchdb-mapreduce-utils.js';
+import { createError as createError$3, generateErrorFromResponse as generateErrorFromResponse$1, UNAUTHORIZED, MISSING_BULK_DOCS as MISSING_BULK_DOCS$1, MISSING_DOC as MISSING_DOC$1, REV_CONFLICT as REV_CONFLICT$1, INVALID_ID as INVALID_ID$1, MISSING_ID as MISSING_ID$1, RESERVED_ID as RESERVED_ID$1, NOT_OPEN as NOT_OPEN$1, UNKNOWN_ERROR as UNKNOWN_ERROR$1, BAD_ARG as BAD_ARG$1, INVALID_REQUEST, QUERY_PARSE_ERROR as QUERY_PARSE_ERROR$1, DOC_VALIDATION as DOC_VALIDATION$1, BAD_REQUEST as BAD_REQUEST$1, NOT_AN_OBJECT as NOT_AN_OBJECT$1, DB_MISSING, WSQ_ERROR, LDB_ERROR, FORBIDDEN, INVALID_REV as INVALID_REV$1, FILE_EXISTS, MISSING_STUB as MISSING_STUB$1, IDB_ERROR, INVALID_URL } from './pouchdb-errors.js';
+import generateReplicationId$1 from './pouchdb-generate-replication-id.js';
+import Checkpointer$1 from './pouchdb-checkpointer.js';
+import { r as rev$1 } from './rev-48662a2a.js';
+import { c as clone$4 } from './clone-7eeb6295.js';
+import { p as parseDesignDocFunctionName$1, n as normalizeDesignDocFunctionName$1 } from './normalizeDdocFunctionName-ea3481cf.js';
+import { o as once$1 } from './once-de8350b9.js';
+import { u as upsert$1 } from './upsert-331b6913.js';
+import { t as toPromise$1 } from './toPromise-f6e385ee.js';
+import './nextTick-ea093886.js';
+import './guardedConsole-f54e5a40.js';
+import './functionName-706c6c65.js';
+import './_commonjsHelpers-24198af3.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './scopeEval-ff3a416d.js';
+import './stringMd5-15f53eba.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './pouchdb-collate.js';
+
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+function getAugmentedNamespace(n) {
+ if (n.__esModule) return n;
+ var f = n.default;
+ if (typeof f == "function") {
+ var a = function a () {
+ if (this instanceof a) {
+ var args = [null];
+ args.push.apply(args, arguments);
+ var Ctor = Function.bind.apply(f, args);
+ return new Ctor();
+ }
+ return f.apply(this, arguments);
+ };
+ a.prototype = f.prototype;
+ } else a = {};
+ Object.defineProperty(a, '__esModule', {value: true});
+ Object.keys(n).forEach(function (k) {
+ var d = Object.getOwnPropertyDescriptor(n, k);
+ Object.defineProperty(a, k, d.get ? d : {
+ enumerable: true,
+ get: function () {
+ return n[k];
+ }
+ });
+ });
+ return a;
+}
+
+var publicApi = {};
+
+var URL$2 = {exports: {}};
+
+var conversions = {};
+var lib = conversions;
+
+function sign(x) {
+ return x < 0 ? -1 : 1;
+}
+
+function evenRound(x) {
+ // Round x to the nearest integer, choosing the even integer if it lies halfway between two.
+ if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)
+ return Math.floor(x);
+ } else {
+ return Math.round(x);
+ }
+}
+
+function createNumberConversion(bitLength, typeOpts) {
+ if (!typeOpts.unsigned) {
+ --bitLength;
+ }
+ const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
+ const upperBound = Math.pow(2, bitLength) - 1;
+
+ const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
+ const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
+
+ return function(V, opts) {
+ if (!opts) opts = {};
+
+ let x = +V;
+
+ if (opts.enforceRange) {
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite number");
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ if (x < lowerBound || x > upperBound) {
+ throw new TypeError("Argument is not in byte range");
+ }
+
+ return x;
+ }
+
+ if (!isNaN(x) && opts.clamp) {
+ x = evenRound(x);
+
+ if (x < lowerBound) x = lowerBound;
+ if (x > upperBound) x = upperBound;
+ return x;
+ }
+
+ if (!Number.isFinite(x) || x === 0) {
+ return 0;
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ x = x % moduloVal;
+
+ if (!typeOpts.unsigned && x >= moduloBound) {
+ return x - moduloVal;
+ } else if (typeOpts.unsigned) {
+ if (x < 0) {
+ x += moduloVal;
+ } else if (x === -0) { // don't return negative zero
+ return 0;
+ }
+ }
+
+ return x;
+ }
+}
+
+conversions["void"] = function () {
+ return undefined;
+};
+
+conversions["boolean"] = function (val) {
+ return !!val;
+};
+
+conversions["byte"] = createNumberConversion(8, { unsigned: false });
+conversions["octet"] = createNumberConversion(8, { unsigned: true });
+
+conversions["short"] = createNumberConversion(16, { unsigned: false });
+conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
+
+conversions["long"] = createNumberConversion(32, { unsigned: false });
+conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
+
+conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
+conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
+
+conversions["double"] = function (V) {
+ const x = +V;
+
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite floating-point value");
+ }
+
+ return x;
+};
+
+conversions["unrestricted double"] = function (V) {
+ const x = +V;
+
+ if (isNaN(x)) {
+ throw new TypeError("Argument is NaN");
+ }
+
+ return x;
+};
+
+// not quite valid, but good enough for JS
+conversions["float"] = conversions["double"];
+conversions["unrestricted float"] = conversions["unrestricted double"];
+
+conversions["DOMString"] = function (V, opts) {
+ if (!opts) opts = {};
+
+ if (opts.treatNullAsEmptyString && V === null) {
+ return "";
+ }
+
+ return String(V);
+};
+
+conversions["ByteString"] = function (V, opts) {
+ const x = String(V);
+ let c = undefined;
+ for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
+ if (c > 255) {
+ throw new TypeError("Argument is not a valid bytestring");
+ }
+ }
+
+ return x;
+};
+
+conversions["USVString"] = function (V) {
+ const S = String(V);
+ const n = S.length;
+ const U = [];
+ for (let i = 0; i < n; ++i) {
+ const c = S.charCodeAt(i);
+ if (c < 0xD800 || c > 0xDFFF) {
+ U.push(String.fromCodePoint(c));
+ } else if (0xDC00 <= c && c <= 0xDFFF) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ if (i === n - 1) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ const d = S.charCodeAt(i + 1);
+ if (0xDC00 <= d && d <= 0xDFFF) {
+ const a = c & 0x3FF;
+ const b = d & 0x3FF;
+ U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
+ ++i;
+ } else {
+ U.push(String.fromCodePoint(0xFFFD));
+ }
+ }
+ }
+ }
+
+ return U.join('');
+};
+
+conversions["Date"] = function (V, opts) {
+ if (!(V instanceof Date)) {
+ throw new TypeError("Argument is not a Date object");
+ }
+ if (isNaN(V)) {
+ return undefined;
+ }
+
+ return V;
+};
+
+conversions["RegExp"] = function (V, opts) {
+ if (!(V instanceof RegExp)) {
+ V = new RegExp(V);
+ }
+
+ return V;
+};
+
+var utils$1 = {exports: {}};
+
+utils$1.exports;
+
+(function (module) {
+
+ module.exports.mixin = function mixin(target, source) {
+ const keys = Object.getOwnPropertyNames(source);
+ for (let i = 0; i < keys.length; ++i) {
+ Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
+ }
+ };
+
+ module.exports.wrapperSymbol = Symbol("wrapper");
+ module.exports.implSymbol = Symbol("impl");
+
+ module.exports.wrapperForImpl = function (impl) {
+ return impl[module.exports.wrapperSymbol];
+ };
+
+ module.exports.implForWrapper = function (wrapper) {
+ return wrapper[module.exports.implSymbol];
+ };
+} (utils$1));
+
+var utilsExports = utils$1.exports;
+
+var URLImpl = {};
+
+var urlStateMachine = {exports: {}};
+
+var tr46 = {};
+
+var require$$1$1 = [
+ [
+ [
+ 0,
+ 44
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 45,
+ 46
+ ],
+ "valid"
+ ],
+ [
+ [
+ 47,
+ 47
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 48,
+ 57
+ ],
+ "valid"
+ ],
+ [
+ [
+ 58,
+ 64
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 65,
+ 65
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 66,
+ 66
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 67,
+ 67
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 68,
+ 68
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 69,
+ 69
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 70,
+ 70
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 71,
+ 71
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 72,
+ 72
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 73,
+ 73
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 74,
+ 74
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 75,
+ 75
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 76,
+ 76
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 77,
+ 77
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 78,
+ 78
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 79,
+ 79
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 80,
+ 80
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 81,
+ 81
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 82,
+ 82
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 83,
+ 83
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 84,
+ 84
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 85,
+ 85
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 86,
+ 86
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 87,
+ 87
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 88,
+ 88
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 89,
+ 89
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 90,
+ 90
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 91,
+ 96
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 97,
+ 122
+ ],
+ "valid"
+ ],
+ [
+ [
+ 123,
+ 127
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 128,
+ 159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 160,
+ 160
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 161,
+ 167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 168,
+ 168
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776
+ ]
+ ],
+ [
+ [
+ 169,
+ 169
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 170,
+ 170
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 171,
+ 172
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 173,
+ 173
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 174,
+ 174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 175,
+ 175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 176,
+ 177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 178,
+ 178
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 179,
+ 179
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 180,
+ 180
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 181,
+ 181
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 182,
+ 182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 183,
+ 183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 184,
+ 184
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 807
+ ]
+ ],
+ [
+ [
+ 185,
+ 185
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 186,
+ 186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 187,
+ 187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 188,
+ 188
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 189,
+ 189
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 50
+ ]
+ ],
+ [
+ [
+ 190,
+ 190
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 191,
+ 191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 192,
+ 192
+ ],
+ "mapped",
+ [
+ 224
+ ]
+ ],
+ [
+ [
+ 193,
+ 193
+ ],
+ "mapped",
+ [
+ 225
+ ]
+ ],
+ [
+ [
+ 194,
+ 194
+ ],
+ "mapped",
+ [
+ 226
+ ]
+ ],
+ [
+ [
+ 195,
+ 195
+ ],
+ "mapped",
+ [
+ 227
+ ]
+ ],
+ [
+ [
+ 196,
+ 196
+ ],
+ "mapped",
+ [
+ 228
+ ]
+ ],
+ [
+ [
+ 197,
+ 197
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 198,
+ 198
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 199,
+ 199
+ ],
+ "mapped",
+ [
+ 231
+ ]
+ ],
+ [
+ [
+ 200,
+ 200
+ ],
+ "mapped",
+ [
+ 232
+ ]
+ ],
+ [
+ [
+ 201,
+ 201
+ ],
+ "mapped",
+ [
+ 233
+ ]
+ ],
+ [
+ [
+ 202,
+ 202
+ ],
+ "mapped",
+ [
+ 234
+ ]
+ ],
+ [
+ [
+ 203,
+ 203
+ ],
+ "mapped",
+ [
+ 235
+ ]
+ ],
+ [
+ [
+ 204,
+ 204
+ ],
+ "mapped",
+ [
+ 236
+ ]
+ ],
+ [
+ [
+ 205,
+ 205
+ ],
+ "mapped",
+ [
+ 237
+ ]
+ ],
+ [
+ [
+ 206,
+ 206
+ ],
+ "mapped",
+ [
+ 238
+ ]
+ ],
+ [
+ [
+ 207,
+ 207
+ ],
+ "mapped",
+ [
+ 239
+ ]
+ ],
+ [
+ [
+ 208,
+ 208
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 209,
+ 209
+ ],
+ "mapped",
+ [
+ 241
+ ]
+ ],
+ [
+ [
+ 210,
+ 210
+ ],
+ "mapped",
+ [
+ 242
+ ]
+ ],
+ [
+ [
+ 211,
+ 211
+ ],
+ "mapped",
+ [
+ 243
+ ]
+ ],
+ [
+ [
+ 212,
+ 212
+ ],
+ "mapped",
+ [
+ 244
+ ]
+ ],
+ [
+ [
+ 213,
+ 213
+ ],
+ "mapped",
+ [
+ 245
+ ]
+ ],
+ [
+ [
+ 214,
+ 214
+ ],
+ "mapped",
+ [
+ 246
+ ]
+ ],
+ [
+ [
+ 215,
+ 215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 216,
+ 216
+ ],
+ "mapped",
+ [
+ 248
+ ]
+ ],
+ [
+ [
+ 217,
+ 217
+ ],
+ "mapped",
+ [
+ 249
+ ]
+ ],
+ [
+ [
+ 218,
+ 218
+ ],
+ "mapped",
+ [
+ 250
+ ]
+ ],
+ [
+ [
+ 219,
+ 219
+ ],
+ "mapped",
+ [
+ 251
+ ]
+ ],
+ [
+ [
+ 220,
+ 220
+ ],
+ "mapped",
+ [
+ 252
+ ]
+ ],
+ [
+ [
+ 221,
+ 221
+ ],
+ "mapped",
+ [
+ 253
+ ]
+ ],
+ [
+ [
+ 222,
+ 222
+ ],
+ "mapped",
+ [
+ 254
+ ]
+ ],
+ [
+ [
+ 223,
+ 223
+ ],
+ "deviation",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 224,
+ 246
+ ],
+ "valid"
+ ],
+ [
+ [
+ 247,
+ 247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 248,
+ 255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 256,
+ 256
+ ],
+ "mapped",
+ [
+ 257
+ ]
+ ],
+ [
+ [
+ 257,
+ 257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 258,
+ 258
+ ],
+ "mapped",
+ [
+ 259
+ ]
+ ],
+ [
+ [
+ 259,
+ 259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 260,
+ 260
+ ],
+ "mapped",
+ [
+ 261
+ ]
+ ],
+ [
+ [
+ 261,
+ 261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 262,
+ 262
+ ],
+ "mapped",
+ [
+ 263
+ ]
+ ],
+ [
+ [
+ 263,
+ 263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 264,
+ 264
+ ],
+ "mapped",
+ [
+ 265
+ ]
+ ],
+ [
+ [
+ 265,
+ 265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 266,
+ 266
+ ],
+ "mapped",
+ [
+ 267
+ ]
+ ],
+ [
+ [
+ 267,
+ 267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 268,
+ 268
+ ],
+ "mapped",
+ [
+ 269
+ ]
+ ],
+ [
+ [
+ 269,
+ 269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 270,
+ 270
+ ],
+ "mapped",
+ [
+ 271
+ ]
+ ],
+ [
+ [
+ 271,
+ 271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 272,
+ 272
+ ],
+ "mapped",
+ [
+ 273
+ ]
+ ],
+ [
+ [
+ 273,
+ 273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 274,
+ 274
+ ],
+ "mapped",
+ [
+ 275
+ ]
+ ],
+ [
+ [
+ 275,
+ 275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 276,
+ 276
+ ],
+ "mapped",
+ [
+ 277
+ ]
+ ],
+ [
+ [
+ 277,
+ 277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 278,
+ 278
+ ],
+ "mapped",
+ [
+ 279
+ ]
+ ],
+ [
+ [
+ 279,
+ 279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 280,
+ 280
+ ],
+ "mapped",
+ [
+ 281
+ ]
+ ],
+ [
+ [
+ 281,
+ 281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 282,
+ 282
+ ],
+ "mapped",
+ [
+ 283
+ ]
+ ],
+ [
+ [
+ 283,
+ 283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 284,
+ 284
+ ],
+ "mapped",
+ [
+ 285
+ ]
+ ],
+ [
+ [
+ 285,
+ 285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 286,
+ 286
+ ],
+ "mapped",
+ [
+ 287
+ ]
+ ],
+ [
+ [
+ 287,
+ 287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 288,
+ 288
+ ],
+ "mapped",
+ [
+ 289
+ ]
+ ],
+ [
+ [
+ 289,
+ 289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 290,
+ 290
+ ],
+ "mapped",
+ [
+ 291
+ ]
+ ],
+ [
+ [
+ 291,
+ 291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 292,
+ 292
+ ],
+ "mapped",
+ [
+ 293
+ ]
+ ],
+ [
+ [
+ 293,
+ 293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 294,
+ 294
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 295,
+ 295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 296,
+ 296
+ ],
+ "mapped",
+ [
+ 297
+ ]
+ ],
+ [
+ [
+ 297,
+ 297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 298,
+ 298
+ ],
+ "mapped",
+ [
+ 299
+ ]
+ ],
+ [
+ [
+ 299,
+ 299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 300,
+ 300
+ ],
+ "mapped",
+ [
+ 301
+ ]
+ ],
+ [
+ [
+ 301,
+ 301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 302,
+ 302
+ ],
+ "mapped",
+ [
+ 303
+ ]
+ ],
+ [
+ [
+ 303,
+ 303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 304,
+ 304
+ ],
+ "mapped",
+ [
+ 105,
+ 775
+ ]
+ ],
+ [
+ [
+ 305,
+ 305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 306,
+ 307
+ ],
+ "mapped",
+ [
+ 105,
+ 106
+ ]
+ ],
+ [
+ [
+ 308,
+ 308
+ ],
+ "mapped",
+ [
+ 309
+ ]
+ ],
+ [
+ [
+ 309,
+ 309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 310,
+ 310
+ ],
+ "mapped",
+ [
+ 311
+ ]
+ ],
+ [
+ [
+ 311,
+ 312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 313,
+ 313
+ ],
+ "mapped",
+ [
+ 314
+ ]
+ ],
+ [
+ [
+ 314,
+ 314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 315,
+ 315
+ ],
+ "mapped",
+ [
+ 316
+ ]
+ ],
+ [
+ [
+ 316,
+ 316
+ ],
+ "valid"
+ ],
+ [
+ [
+ 317,
+ 317
+ ],
+ "mapped",
+ [
+ 318
+ ]
+ ],
+ [
+ [
+ 318,
+ 318
+ ],
+ "valid"
+ ],
+ [
+ [
+ 319,
+ 320
+ ],
+ "mapped",
+ [
+ 108,
+ 183
+ ]
+ ],
+ [
+ [
+ 321,
+ 321
+ ],
+ "mapped",
+ [
+ 322
+ ]
+ ],
+ [
+ [
+ 322,
+ 322
+ ],
+ "valid"
+ ],
+ [
+ [
+ 323,
+ 323
+ ],
+ "mapped",
+ [
+ 324
+ ]
+ ],
+ [
+ [
+ 324,
+ 324
+ ],
+ "valid"
+ ],
+ [
+ [
+ 325,
+ 325
+ ],
+ "mapped",
+ [
+ 326
+ ]
+ ],
+ [
+ [
+ 326,
+ 326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 327,
+ 327
+ ],
+ "mapped",
+ [
+ 328
+ ]
+ ],
+ [
+ [
+ 328,
+ 328
+ ],
+ "valid"
+ ],
+ [
+ [
+ 329,
+ 329
+ ],
+ "mapped",
+ [
+ 700,
+ 110
+ ]
+ ],
+ [
+ [
+ 330,
+ 330
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 331,
+ 331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 332,
+ 332
+ ],
+ "mapped",
+ [
+ 333
+ ]
+ ],
+ [
+ [
+ 333,
+ 333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 334,
+ 334
+ ],
+ "mapped",
+ [
+ 335
+ ]
+ ],
+ [
+ [
+ 335,
+ 335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 336,
+ 336
+ ],
+ "mapped",
+ [
+ 337
+ ]
+ ],
+ [
+ [
+ 337,
+ 337
+ ],
+ "valid"
+ ],
+ [
+ [
+ 338,
+ 338
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 339,
+ 339
+ ],
+ "valid"
+ ],
+ [
+ [
+ 340,
+ 340
+ ],
+ "mapped",
+ [
+ 341
+ ]
+ ],
+ [
+ [
+ 341,
+ 341
+ ],
+ "valid"
+ ],
+ [
+ [
+ 342,
+ 342
+ ],
+ "mapped",
+ [
+ 343
+ ]
+ ],
+ [
+ [
+ 343,
+ 343
+ ],
+ "valid"
+ ],
+ [
+ [
+ 344,
+ 344
+ ],
+ "mapped",
+ [
+ 345
+ ]
+ ],
+ [
+ [
+ 345,
+ 345
+ ],
+ "valid"
+ ],
+ [
+ [
+ 346,
+ 346
+ ],
+ "mapped",
+ [
+ 347
+ ]
+ ],
+ [
+ [
+ 347,
+ 347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 348,
+ 348
+ ],
+ "mapped",
+ [
+ 349
+ ]
+ ],
+ [
+ [
+ 349,
+ 349
+ ],
+ "valid"
+ ],
+ [
+ [
+ 350,
+ 350
+ ],
+ "mapped",
+ [
+ 351
+ ]
+ ],
+ [
+ [
+ 351,
+ 351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 352,
+ 352
+ ],
+ "mapped",
+ [
+ 353
+ ]
+ ],
+ [
+ [
+ 353,
+ 353
+ ],
+ "valid"
+ ],
+ [
+ [
+ 354,
+ 354
+ ],
+ "mapped",
+ [
+ 355
+ ]
+ ],
+ [
+ [
+ 355,
+ 355
+ ],
+ "valid"
+ ],
+ [
+ [
+ 356,
+ 356
+ ],
+ "mapped",
+ [
+ 357
+ ]
+ ],
+ [
+ [
+ 357,
+ 357
+ ],
+ "valid"
+ ],
+ [
+ [
+ 358,
+ 358
+ ],
+ "mapped",
+ [
+ 359
+ ]
+ ],
+ [
+ [
+ 359,
+ 359
+ ],
+ "valid"
+ ],
+ [
+ [
+ 360,
+ 360
+ ],
+ "mapped",
+ [
+ 361
+ ]
+ ],
+ [
+ [
+ 361,
+ 361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 362,
+ 362
+ ],
+ "mapped",
+ [
+ 363
+ ]
+ ],
+ [
+ [
+ 363,
+ 363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 364,
+ 364
+ ],
+ "mapped",
+ [
+ 365
+ ]
+ ],
+ [
+ [
+ 365,
+ 365
+ ],
+ "valid"
+ ],
+ [
+ [
+ 366,
+ 366
+ ],
+ "mapped",
+ [
+ 367
+ ]
+ ],
+ [
+ [
+ 367,
+ 367
+ ],
+ "valid"
+ ],
+ [
+ [
+ 368,
+ 368
+ ],
+ "mapped",
+ [
+ 369
+ ]
+ ],
+ [
+ [
+ 369,
+ 369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 370,
+ 370
+ ],
+ "mapped",
+ [
+ 371
+ ]
+ ],
+ [
+ [
+ 371,
+ 371
+ ],
+ "valid"
+ ],
+ [
+ [
+ 372,
+ 372
+ ],
+ "mapped",
+ [
+ 373
+ ]
+ ],
+ [
+ [
+ 373,
+ 373
+ ],
+ "valid"
+ ],
+ [
+ [
+ 374,
+ 374
+ ],
+ "mapped",
+ [
+ 375
+ ]
+ ],
+ [
+ [
+ 375,
+ 375
+ ],
+ "valid"
+ ],
+ [
+ [
+ 376,
+ 376
+ ],
+ "mapped",
+ [
+ 255
+ ]
+ ],
+ [
+ [
+ 377,
+ 377
+ ],
+ "mapped",
+ [
+ 378
+ ]
+ ],
+ [
+ [
+ 378,
+ 378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 379,
+ 379
+ ],
+ "mapped",
+ [
+ 380
+ ]
+ ],
+ [
+ [
+ 380,
+ 380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 381,
+ 381
+ ],
+ "mapped",
+ [
+ 382
+ ]
+ ],
+ [
+ [
+ 382,
+ 382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 383,
+ 383
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 384,
+ 384
+ ],
+ "valid"
+ ],
+ [
+ [
+ 385,
+ 385
+ ],
+ "mapped",
+ [
+ 595
+ ]
+ ],
+ [
+ [
+ 386,
+ 386
+ ],
+ "mapped",
+ [
+ 387
+ ]
+ ],
+ [
+ [
+ 387,
+ 387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 388,
+ 388
+ ],
+ "mapped",
+ [
+ 389
+ ]
+ ],
+ [
+ [
+ 389,
+ 389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 390,
+ 390
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 391,
+ 391
+ ],
+ "mapped",
+ [
+ 392
+ ]
+ ],
+ [
+ [
+ 392,
+ 392
+ ],
+ "valid"
+ ],
+ [
+ [
+ 393,
+ 393
+ ],
+ "mapped",
+ [
+ 598
+ ]
+ ],
+ [
+ [
+ 394,
+ 394
+ ],
+ "mapped",
+ [
+ 599
+ ]
+ ],
+ [
+ [
+ 395,
+ 395
+ ],
+ "mapped",
+ [
+ 396
+ ]
+ ],
+ [
+ [
+ 396,
+ 397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 398,
+ 398
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 399,
+ 399
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 400,
+ 400
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 401,
+ 401
+ ],
+ "mapped",
+ [
+ 402
+ ]
+ ],
+ [
+ [
+ 402,
+ 402
+ ],
+ "valid"
+ ],
+ [
+ [
+ 403,
+ 403
+ ],
+ "mapped",
+ [
+ 608
+ ]
+ ],
+ [
+ [
+ 404,
+ 404
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 405,
+ 405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 406,
+ 406
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 407,
+ 407
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 408,
+ 408
+ ],
+ "mapped",
+ [
+ 409
+ ]
+ ],
+ [
+ [
+ 409,
+ 411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 412,
+ 412
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 413,
+ 413
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 414,
+ 414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 415,
+ 415
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 416,
+ 416
+ ],
+ "mapped",
+ [
+ 417
+ ]
+ ],
+ [
+ [
+ 417,
+ 417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 418,
+ 418
+ ],
+ "mapped",
+ [
+ 419
+ ]
+ ],
+ [
+ [
+ 419,
+ 419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 420,
+ 420
+ ],
+ "mapped",
+ [
+ 421
+ ]
+ ],
+ [
+ [
+ 421,
+ 421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 422,
+ 422
+ ],
+ "mapped",
+ [
+ 640
+ ]
+ ],
+ [
+ [
+ 423,
+ 423
+ ],
+ "mapped",
+ [
+ 424
+ ]
+ ],
+ [
+ [
+ 424,
+ 424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 425,
+ 425
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 426,
+ 427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 428,
+ 428
+ ],
+ "mapped",
+ [
+ 429
+ ]
+ ],
+ [
+ [
+ 429,
+ 429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 430,
+ 430
+ ],
+ "mapped",
+ [
+ 648
+ ]
+ ],
+ [
+ [
+ 431,
+ 431
+ ],
+ "mapped",
+ [
+ 432
+ ]
+ ],
+ [
+ [
+ 432,
+ 432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 433,
+ 433
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 434,
+ 434
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 435,
+ 435
+ ],
+ "mapped",
+ [
+ 436
+ ]
+ ],
+ [
+ [
+ 436,
+ 436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 437,
+ 437
+ ],
+ "mapped",
+ [
+ 438
+ ]
+ ],
+ [
+ [
+ 438,
+ 438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 439,
+ 439
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 440,
+ 440
+ ],
+ "mapped",
+ [
+ 441
+ ]
+ ],
+ [
+ [
+ 441,
+ 443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 444,
+ 444
+ ],
+ "mapped",
+ [
+ 445
+ ]
+ ],
+ [
+ [
+ 445,
+ 451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 452,
+ 454
+ ],
+ "mapped",
+ [
+ 100,
+ 382
+ ]
+ ],
+ [
+ [
+ 455,
+ 457
+ ],
+ "mapped",
+ [
+ 108,
+ 106
+ ]
+ ],
+ [
+ [
+ 458,
+ 460
+ ],
+ "mapped",
+ [
+ 110,
+ 106
+ ]
+ ],
+ [
+ [
+ 461,
+ 461
+ ],
+ "mapped",
+ [
+ 462
+ ]
+ ],
+ [
+ [
+ 462,
+ 462
+ ],
+ "valid"
+ ],
+ [
+ [
+ 463,
+ 463
+ ],
+ "mapped",
+ [
+ 464
+ ]
+ ],
+ [
+ [
+ 464,
+ 464
+ ],
+ "valid"
+ ],
+ [
+ [
+ 465,
+ 465
+ ],
+ "mapped",
+ [
+ 466
+ ]
+ ],
+ [
+ [
+ 466,
+ 466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 467,
+ 467
+ ],
+ "mapped",
+ [
+ 468
+ ]
+ ],
+ [
+ [
+ 468,
+ 468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 469,
+ 469
+ ],
+ "mapped",
+ [
+ 470
+ ]
+ ],
+ [
+ [
+ 470,
+ 470
+ ],
+ "valid"
+ ],
+ [
+ [
+ 471,
+ 471
+ ],
+ "mapped",
+ [
+ 472
+ ]
+ ],
+ [
+ [
+ 472,
+ 472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 473,
+ 473
+ ],
+ "mapped",
+ [
+ 474
+ ]
+ ],
+ [
+ [
+ 474,
+ 474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 475,
+ 475
+ ],
+ "mapped",
+ [
+ 476
+ ]
+ ],
+ [
+ [
+ 476,
+ 477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 478,
+ 478
+ ],
+ "mapped",
+ [
+ 479
+ ]
+ ],
+ [
+ [
+ 479,
+ 479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 480,
+ 480
+ ],
+ "mapped",
+ [
+ 481
+ ]
+ ],
+ [
+ [
+ 481,
+ 481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 482,
+ 482
+ ],
+ "mapped",
+ [
+ 483
+ ]
+ ],
+ [
+ [
+ 483,
+ 483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 484,
+ 484
+ ],
+ "mapped",
+ [
+ 485
+ ]
+ ],
+ [
+ [
+ 485,
+ 485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 486,
+ 486
+ ],
+ "mapped",
+ [
+ 487
+ ]
+ ],
+ [
+ [
+ 487,
+ 487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 488,
+ 488
+ ],
+ "mapped",
+ [
+ 489
+ ]
+ ],
+ [
+ [
+ 489,
+ 489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 490,
+ 490
+ ],
+ "mapped",
+ [
+ 491
+ ]
+ ],
+ [
+ [
+ 491,
+ 491
+ ],
+ "valid"
+ ],
+ [
+ [
+ 492,
+ 492
+ ],
+ "mapped",
+ [
+ 493
+ ]
+ ],
+ [
+ [
+ 493,
+ 493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 494,
+ 494
+ ],
+ "mapped",
+ [
+ 495
+ ]
+ ],
+ [
+ [
+ 495,
+ 496
+ ],
+ "valid"
+ ],
+ [
+ [
+ 497,
+ 499
+ ],
+ "mapped",
+ [
+ 100,
+ 122
+ ]
+ ],
+ [
+ [
+ 500,
+ 500
+ ],
+ "mapped",
+ [
+ 501
+ ]
+ ],
+ [
+ [
+ 501,
+ 501
+ ],
+ "valid"
+ ],
+ [
+ [
+ 502,
+ 502
+ ],
+ "mapped",
+ [
+ 405
+ ]
+ ],
+ [
+ [
+ 503,
+ 503
+ ],
+ "mapped",
+ [
+ 447
+ ]
+ ],
+ [
+ [
+ 504,
+ 504
+ ],
+ "mapped",
+ [
+ 505
+ ]
+ ],
+ [
+ [
+ 505,
+ 505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 506,
+ 506
+ ],
+ "mapped",
+ [
+ 507
+ ]
+ ],
+ [
+ [
+ 507,
+ 507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 508,
+ 508
+ ],
+ "mapped",
+ [
+ 509
+ ]
+ ],
+ [
+ [
+ 509,
+ 509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 510,
+ 510
+ ],
+ "mapped",
+ [
+ 511
+ ]
+ ],
+ [
+ [
+ 511,
+ 511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 512,
+ 512
+ ],
+ "mapped",
+ [
+ 513
+ ]
+ ],
+ [
+ [
+ 513,
+ 513
+ ],
+ "valid"
+ ],
+ [
+ [
+ 514,
+ 514
+ ],
+ "mapped",
+ [
+ 515
+ ]
+ ],
+ [
+ [
+ 515,
+ 515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 516,
+ 516
+ ],
+ "mapped",
+ [
+ 517
+ ]
+ ],
+ [
+ [
+ 517,
+ 517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 518,
+ 518
+ ],
+ "mapped",
+ [
+ 519
+ ]
+ ],
+ [
+ [
+ 519,
+ 519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 520,
+ 520
+ ],
+ "mapped",
+ [
+ 521
+ ]
+ ],
+ [
+ [
+ 521,
+ 521
+ ],
+ "valid"
+ ],
+ [
+ [
+ 522,
+ 522
+ ],
+ "mapped",
+ [
+ 523
+ ]
+ ],
+ [
+ [
+ 523,
+ 523
+ ],
+ "valid"
+ ],
+ [
+ [
+ 524,
+ 524
+ ],
+ "mapped",
+ [
+ 525
+ ]
+ ],
+ [
+ [
+ 525,
+ 525
+ ],
+ "valid"
+ ],
+ [
+ [
+ 526,
+ 526
+ ],
+ "mapped",
+ [
+ 527
+ ]
+ ],
+ [
+ [
+ 527,
+ 527
+ ],
+ "valid"
+ ],
+ [
+ [
+ 528,
+ 528
+ ],
+ "mapped",
+ [
+ 529
+ ]
+ ],
+ [
+ [
+ 529,
+ 529
+ ],
+ "valid"
+ ],
+ [
+ [
+ 530,
+ 530
+ ],
+ "mapped",
+ [
+ 531
+ ]
+ ],
+ [
+ [
+ 531,
+ 531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 532,
+ 532
+ ],
+ "mapped",
+ [
+ 533
+ ]
+ ],
+ [
+ [
+ 533,
+ 533
+ ],
+ "valid"
+ ],
+ [
+ [
+ 534,
+ 534
+ ],
+ "mapped",
+ [
+ 535
+ ]
+ ],
+ [
+ [
+ 535,
+ 535
+ ],
+ "valid"
+ ],
+ [
+ [
+ 536,
+ 536
+ ],
+ "mapped",
+ [
+ 537
+ ]
+ ],
+ [
+ [
+ 537,
+ 537
+ ],
+ "valid"
+ ],
+ [
+ [
+ 538,
+ 538
+ ],
+ "mapped",
+ [
+ 539
+ ]
+ ],
+ [
+ [
+ 539,
+ 539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 540,
+ 540
+ ],
+ "mapped",
+ [
+ 541
+ ]
+ ],
+ [
+ [
+ 541,
+ 541
+ ],
+ "valid"
+ ],
+ [
+ [
+ 542,
+ 542
+ ],
+ "mapped",
+ [
+ 543
+ ]
+ ],
+ [
+ [
+ 543,
+ 543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 544,
+ 544
+ ],
+ "mapped",
+ [
+ 414
+ ]
+ ],
+ [
+ [
+ 545,
+ 545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 546,
+ 546
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 547,
+ 547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 548,
+ 548
+ ],
+ "mapped",
+ [
+ 549
+ ]
+ ],
+ [
+ [
+ 549,
+ 549
+ ],
+ "valid"
+ ],
+ [
+ [
+ 550,
+ 550
+ ],
+ "mapped",
+ [
+ 551
+ ]
+ ],
+ [
+ [
+ 551,
+ 551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 552,
+ 552
+ ],
+ "mapped",
+ [
+ 553
+ ]
+ ],
+ [
+ [
+ 553,
+ 553
+ ],
+ "valid"
+ ],
+ [
+ [
+ 554,
+ 554
+ ],
+ "mapped",
+ [
+ 555
+ ]
+ ],
+ [
+ [
+ 555,
+ 555
+ ],
+ "valid"
+ ],
+ [
+ [
+ 556,
+ 556
+ ],
+ "mapped",
+ [
+ 557
+ ]
+ ],
+ [
+ [
+ 557,
+ 557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 558,
+ 558
+ ],
+ "mapped",
+ [
+ 559
+ ]
+ ],
+ [
+ [
+ 559,
+ 559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 560,
+ 560
+ ],
+ "mapped",
+ [
+ 561
+ ]
+ ],
+ [
+ [
+ 561,
+ 561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 562,
+ 562
+ ],
+ "mapped",
+ [
+ 563
+ ]
+ ],
+ [
+ [
+ 563,
+ 563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 564,
+ 566
+ ],
+ "valid"
+ ],
+ [
+ [
+ 567,
+ 569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 570,
+ 570
+ ],
+ "mapped",
+ [
+ 11365
+ ]
+ ],
+ [
+ [
+ 571,
+ 571
+ ],
+ "mapped",
+ [
+ 572
+ ]
+ ],
+ [
+ [
+ 572,
+ 572
+ ],
+ "valid"
+ ],
+ [
+ [
+ 573,
+ 573
+ ],
+ "mapped",
+ [
+ 410
+ ]
+ ],
+ [
+ [
+ 574,
+ 574
+ ],
+ "mapped",
+ [
+ 11366
+ ]
+ ],
+ [
+ [
+ 575,
+ 576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 577,
+ 577
+ ],
+ "mapped",
+ [
+ 578
+ ]
+ ],
+ [
+ [
+ 578,
+ 578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 579,
+ 579
+ ],
+ "mapped",
+ [
+ 384
+ ]
+ ],
+ [
+ [
+ 580,
+ 580
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 581,
+ 581
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 582,
+ 582
+ ],
+ "mapped",
+ [
+ 583
+ ]
+ ],
+ [
+ [
+ 583,
+ 583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 584,
+ 584
+ ],
+ "mapped",
+ [
+ 585
+ ]
+ ],
+ [
+ [
+ 585,
+ 585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 586,
+ 586
+ ],
+ "mapped",
+ [
+ 587
+ ]
+ ],
+ [
+ [
+ 587,
+ 587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 588,
+ 588
+ ],
+ "mapped",
+ [
+ 589
+ ]
+ ],
+ [
+ [
+ 589,
+ 589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 590,
+ 590
+ ],
+ "mapped",
+ [
+ 591
+ ]
+ ],
+ [
+ [
+ 591,
+ 591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 592,
+ 680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 681,
+ 685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 686,
+ 687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 688,
+ 688
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 689,
+ 689
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 690,
+ 690
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 691,
+ 691
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 692,
+ 692
+ ],
+ "mapped",
+ [
+ 633
+ ]
+ ],
+ [
+ [
+ 693,
+ 693
+ ],
+ "mapped",
+ [
+ 635
+ ]
+ ],
+ [
+ [
+ 694,
+ 694
+ ],
+ "mapped",
+ [
+ 641
+ ]
+ ],
+ [
+ [
+ 695,
+ 695
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 696,
+ 696
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 697,
+ 705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 706,
+ 709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 710,
+ 721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 722,
+ 727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 728,
+ 728
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 774
+ ]
+ ],
+ [
+ [
+ 729,
+ 729
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 775
+ ]
+ ],
+ [
+ [
+ 730,
+ 730
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 778
+ ]
+ ],
+ [
+ [
+ 731,
+ 731
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 808
+ ]
+ ],
+ [
+ [
+ 732,
+ 732
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 771
+ ]
+ ],
+ [
+ [
+ 733,
+ 733
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 779
+ ]
+ ],
+ [
+ [
+ 734,
+ 734
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 735,
+ 735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 736,
+ 736
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 737,
+ 737
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 738,
+ 738
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 739,
+ 739
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 740,
+ 740
+ ],
+ "mapped",
+ [
+ 661
+ ]
+ ],
+ [
+ [
+ 741,
+ 745
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 746,
+ 747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 748,
+ 748
+ ],
+ "valid"
+ ],
+ [
+ [
+ 749,
+ 749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 750,
+ 750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 751,
+ 767
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 768,
+ 831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 832,
+ 832
+ ],
+ "mapped",
+ [
+ 768
+ ]
+ ],
+ [
+ [
+ 833,
+ 833
+ ],
+ "mapped",
+ [
+ 769
+ ]
+ ],
+ [
+ [
+ 834,
+ 834
+ ],
+ "valid"
+ ],
+ [
+ [
+ 835,
+ 835
+ ],
+ "mapped",
+ [
+ 787
+ ]
+ ],
+ [
+ [
+ 836,
+ 836
+ ],
+ "mapped",
+ [
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 837,
+ 837
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 838,
+ 846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 847,
+ 847
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 848,
+ 855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 856,
+ 860
+ ],
+ "valid"
+ ],
+ [
+ [
+ 861,
+ 863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 864,
+ 865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 866,
+ 866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 867,
+ 879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 880,
+ 880
+ ],
+ "mapped",
+ [
+ 881
+ ]
+ ],
+ [
+ [
+ 881,
+ 881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 882,
+ 882
+ ],
+ "mapped",
+ [
+ 883
+ ]
+ ],
+ [
+ [
+ 883,
+ 883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 884,
+ 884
+ ],
+ "mapped",
+ [
+ 697
+ ]
+ ],
+ [
+ [
+ 885,
+ 885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 886,
+ 886
+ ],
+ "mapped",
+ [
+ 887
+ ]
+ ],
+ [
+ [
+ 887,
+ 887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 888,
+ 889
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 890,
+ 890
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 953
+ ]
+ ],
+ [
+ [
+ 891,
+ 893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 894,
+ 894
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 895,
+ 895
+ ],
+ "mapped",
+ [
+ 1011
+ ]
+ ],
+ [
+ [
+ 896,
+ 899
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 900,
+ 900
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 901,
+ 901
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 902,
+ 902
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 903,
+ 903
+ ],
+ "mapped",
+ [
+ 183
+ ]
+ ],
+ [
+ [
+ 904,
+ 904
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 905,
+ 905
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 906,
+ 906
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 907,
+ 907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 908,
+ 908
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 909,
+ 909
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 910,
+ 910
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 911,
+ 911
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 912,
+ 912
+ ],
+ "valid"
+ ],
+ [
+ [
+ 913,
+ 913
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 914,
+ 914
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 915,
+ 915
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 916,
+ 916
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 917,
+ 917
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 918,
+ 918
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 919,
+ 919
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 920,
+ 920
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 921,
+ 921
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 922,
+ 922
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 923,
+ 923
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 924,
+ 924
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 925,
+ 925
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 926,
+ 926
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 927,
+ 927
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 928,
+ 928
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 929,
+ 929
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 930,
+ 930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 931,
+ 931
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 932,
+ 932
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 933,
+ 933
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 934,
+ 934
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 935,
+ 935
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 936,
+ 936
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 937,
+ 937
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 938,
+ 938
+ ],
+ "mapped",
+ [
+ 970
+ ]
+ ],
+ [
+ [
+ 939,
+ 939
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 940,
+ 961
+ ],
+ "valid"
+ ],
+ [
+ [
+ 962,
+ 962
+ ],
+ "deviation",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 963,
+ 974
+ ],
+ "valid"
+ ],
+ [
+ [
+ 975,
+ 975
+ ],
+ "mapped",
+ [
+ 983
+ ]
+ ],
+ [
+ [
+ 976,
+ 976
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 977,
+ 977
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 978,
+ 978
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 979,
+ 979
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 980,
+ 980
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 981,
+ 981
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 982,
+ 982
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 983,
+ 983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 984,
+ 984
+ ],
+ "mapped",
+ [
+ 985
+ ]
+ ],
+ [
+ [
+ 985,
+ 985
+ ],
+ "valid"
+ ],
+ [
+ [
+ 986,
+ 986
+ ],
+ "mapped",
+ [
+ 987
+ ]
+ ],
+ [
+ [
+ 987,
+ 987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 988,
+ 988
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 989,
+ 989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 990,
+ 990
+ ],
+ "mapped",
+ [
+ 991
+ ]
+ ],
+ [
+ [
+ 991,
+ 991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 992,
+ 992
+ ],
+ "mapped",
+ [
+ 993
+ ]
+ ],
+ [
+ [
+ 993,
+ 993
+ ],
+ "valid"
+ ],
+ [
+ [
+ 994,
+ 994
+ ],
+ "mapped",
+ [
+ 995
+ ]
+ ],
+ [
+ [
+ 995,
+ 995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 996,
+ 996
+ ],
+ "mapped",
+ [
+ 997
+ ]
+ ],
+ [
+ [
+ 997,
+ 997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 998,
+ 998
+ ],
+ "mapped",
+ [
+ 999
+ ]
+ ],
+ [
+ [
+ 999,
+ 999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1000,
+ 1000
+ ],
+ "mapped",
+ [
+ 1001
+ ]
+ ],
+ [
+ [
+ 1001,
+ 1001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1002,
+ 1002
+ ],
+ "mapped",
+ [
+ 1003
+ ]
+ ],
+ [
+ [
+ 1003,
+ 1003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1004,
+ 1004
+ ],
+ "mapped",
+ [
+ 1005
+ ]
+ ],
+ [
+ [
+ 1005,
+ 1005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1006,
+ 1006
+ ],
+ "mapped",
+ [
+ 1007
+ ]
+ ],
+ [
+ [
+ 1007,
+ 1007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1008,
+ 1008
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 1009,
+ 1009
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 1010,
+ 1010
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1011,
+ 1011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1012,
+ 1012
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 1013,
+ 1013
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 1014,
+ 1014
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1015,
+ 1015
+ ],
+ "mapped",
+ [
+ 1016
+ ]
+ ],
+ [
+ [
+ 1016,
+ 1016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1017,
+ 1017
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1018,
+ 1018
+ ],
+ "mapped",
+ [
+ 1019
+ ]
+ ],
+ [
+ [
+ 1019,
+ 1019
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1020,
+ 1020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1021,
+ 1021
+ ],
+ "mapped",
+ [
+ 891
+ ]
+ ],
+ [
+ [
+ 1022,
+ 1022
+ ],
+ "mapped",
+ [
+ 892
+ ]
+ ],
+ [
+ [
+ 1023,
+ 1023
+ ],
+ "mapped",
+ [
+ 893
+ ]
+ ],
+ [
+ [
+ 1024,
+ 1024
+ ],
+ "mapped",
+ [
+ 1104
+ ]
+ ],
+ [
+ [
+ 1025,
+ 1025
+ ],
+ "mapped",
+ [
+ 1105
+ ]
+ ],
+ [
+ [
+ 1026,
+ 1026
+ ],
+ "mapped",
+ [
+ 1106
+ ]
+ ],
+ [
+ [
+ 1027,
+ 1027
+ ],
+ "mapped",
+ [
+ 1107
+ ]
+ ],
+ [
+ [
+ 1028,
+ 1028
+ ],
+ "mapped",
+ [
+ 1108
+ ]
+ ],
+ [
+ [
+ 1029,
+ 1029
+ ],
+ "mapped",
+ [
+ 1109
+ ]
+ ],
+ [
+ [
+ 1030,
+ 1030
+ ],
+ "mapped",
+ [
+ 1110
+ ]
+ ],
+ [
+ [
+ 1031,
+ 1031
+ ],
+ "mapped",
+ [
+ 1111
+ ]
+ ],
+ [
+ [
+ 1032,
+ 1032
+ ],
+ "mapped",
+ [
+ 1112
+ ]
+ ],
+ [
+ [
+ 1033,
+ 1033
+ ],
+ "mapped",
+ [
+ 1113
+ ]
+ ],
+ [
+ [
+ 1034,
+ 1034
+ ],
+ "mapped",
+ [
+ 1114
+ ]
+ ],
+ [
+ [
+ 1035,
+ 1035
+ ],
+ "mapped",
+ [
+ 1115
+ ]
+ ],
+ [
+ [
+ 1036,
+ 1036
+ ],
+ "mapped",
+ [
+ 1116
+ ]
+ ],
+ [
+ [
+ 1037,
+ 1037
+ ],
+ "mapped",
+ [
+ 1117
+ ]
+ ],
+ [
+ [
+ 1038,
+ 1038
+ ],
+ "mapped",
+ [
+ 1118
+ ]
+ ],
+ [
+ [
+ 1039,
+ 1039
+ ],
+ "mapped",
+ [
+ 1119
+ ]
+ ],
+ [
+ [
+ 1040,
+ 1040
+ ],
+ "mapped",
+ [
+ 1072
+ ]
+ ],
+ [
+ [
+ 1041,
+ 1041
+ ],
+ "mapped",
+ [
+ 1073
+ ]
+ ],
+ [
+ [
+ 1042,
+ 1042
+ ],
+ "mapped",
+ [
+ 1074
+ ]
+ ],
+ [
+ [
+ 1043,
+ 1043
+ ],
+ "mapped",
+ [
+ 1075
+ ]
+ ],
+ [
+ [
+ 1044,
+ 1044
+ ],
+ "mapped",
+ [
+ 1076
+ ]
+ ],
+ [
+ [
+ 1045,
+ 1045
+ ],
+ "mapped",
+ [
+ 1077
+ ]
+ ],
+ [
+ [
+ 1046,
+ 1046
+ ],
+ "mapped",
+ [
+ 1078
+ ]
+ ],
+ [
+ [
+ 1047,
+ 1047
+ ],
+ "mapped",
+ [
+ 1079
+ ]
+ ],
+ [
+ [
+ 1048,
+ 1048
+ ],
+ "mapped",
+ [
+ 1080
+ ]
+ ],
+ [
+ [
+ 1049,
+ 1049
+ ],
+ "mapped",
+ [
+ 1081
+ ]
+ ],
+ [
+ [
+ 1050,
+ 1050
+ ],
+ "mapped",
+ [
+ 1082
+ ]
+ ],
+ [
+ [
+ 1051,
+ 1051
+ ],
+ "mapped",
+ [
+ 1083
+ ]
+ ],
+ [
+ [
+ 1052,
+ 1052
+ ],
+ "mapped",
+ [
+ 1084
+ ]
+ ],
+ [
+ [
+ 1053,
+ 1053
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 1054,
+ 1054
+ ],
+ "mapped",
+ [
+ 1086
+ ]
+ ],
+ [
+ [
+ 1055,
+ 1055
+ ],
+ "mapped",
+ [
+ 1087
+ ]
+ ],
+ [
+ [
+ 1056,
+ 1056
+ ],
+ "mapped",
+ [
+ 1088
+ ]
+ ],
+ [
+ [
+ 1057,
+ 1057
+ ],
+ "mapped",
+ [
+ 1089
+ ]
+ ],
+ [
+ [
+ 1058,
+ 1058
+ ],
+ "mapped",
+ [
+ 1090
+ ]
+ ],
+ [
+ [
+ 1059,
+ 1059
+ ],
+ "mapped",
+ [
+ 1091
+ ]
+ ],
+ [
+ [
+ 1060,
+ 1060
+ ],
+ "mapped",
+ [
+ 1092
+ ]
+ ],
+ [
+ [
+ 1061,
+ 1061
+ ],
+ "mapped",
+ [
+ 1093
+ ]
+ ],
+ [
+ [
+ 1062,
+ 1062
+ ],
+ "mapped",
+ [
+ 1094
+ ]
+ ],
+ [
+ [
+ 1063,
+ 1063
+ ],
+ "mapped",
+ [
+ 1095
+ ]
+ ],
+ [
+ [
+ 1064,
+ 1064
+ ],
+ "mapped",
+ [
+ 1096
+ ]
+ ],
+ [
+ [
+ 1065,
+ 1065
+ ],
+ "mapped",
+ [
+ 1097
+ ]
+ ],
+ [
+ [
+ 1066,
+ 1066
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 1067,
+ 1067
+ ],
+ "mapped",
+ [
+ 1099
+ ]
+ ],
+ [
+ [
+ 1068,
+ 1068
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 1069,
+ 1069
+ ],
+ "mapped",
+ [
+ 1101
+ ]
+ ],
+ [
+ [
+ 1070,
+ 1070
+ ],
+ "mapped",
+ [
+ 1102
+ ]
+ ],
+ [
+ [
+ 1071,
+ 1071
+ ],
+ "mapped",
+ [
+ 1103
+ ]
+ ],
+ [
+ [
+ 1072,
+ 1103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1104,
+ 1104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1105,
+ 1116
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1117,
+ 1117
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1118,
+ 1119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1120,
+ 1120
+ ],
+ "mapped",
+ [
+ 1121
+ ]
+ ],
+ [
+ [
+ 1121,
+ 1121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1122,
+ 1122
+ ],
+ "mapped",
+ [
+ 1123
+ ]
+ ],
+ [
+ [
+ 1123,
+ 1123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1124,
+ 1124
+ ],
+ "mapped",
+ [
+ 1125
+ ]
+ ],
+ [
+ [
+ 1125,
+ 1125
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1126,
+ 1126
+ ],
+ "mapped",
+ [
+ 1127
+ ]
+ ],
+ [
+ [
+ 1127,
+ 1127
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1128,
+ 1128
+ ],
+ "mapped",
+ [
+ 1129
+ ]
+ ],
+ [
+ [
+ 1129,
+ 1129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1130,
+ 1130
+ ],
+ "mapped",
+ [
+ 1131
+ ]
+ ],
+ [
+ [
+ 1131,
+ 1131
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1132,
+ 1132
+ ],
+ "mapped",
+ [
+ 1133
+ ]
+ ],
+ [
+ [
+ 1133,
+ 1133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1134,
+ 1134
+ ],
+ "mapped",
+ [
+ 1135
+ ]
+ ],
+ [
+ [
+ 1135,
+ 1135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1136,
+ 1136
+ ],
+ "mapped",
+ [
+ 1137
+ ]
+ ],
+ [
+ [
+ 1137,
+ 1137
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1138,
+ 1138
+ ],
+ "mapped",
+ [
+ 1139
+ ]
+ ],
+ [
+ [
+ 1139,
+ 1139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1140,
+ 1140
+ ],
+ "mapped",
+ [
+ 1141
+ ]
+ ],
+ [
+ [
+ 1141,
+ 1141
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1142,
+ 1142
+ ],
+ "mapped",
+ [
+ 1143
+ ]
+ ],
+ [
+ [
+ 1143,
+ 1143
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1144,
+ 1144
+ ],
+ "mapped",
+ [
+ 1145
+ ]
+ ],
+ [
+ [
+ 1145,
+ 1145
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1146,
+ 1146
+ ],
+ "mapped",
+ [
+ 1147
+ ]
+ ],
+ [
+ [
+ 1147,
+ 1147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1148,
+ 1148
+ ],
+ "mapped",
+ [
+ 1149
+ ]
+ ],
+ [
+ [
+ 1149,
+ 1149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1150,
+ 1150
+ ],
+ "mapped",
+ [
+ 1151
+ ]
+ ],
+ [
+ [
+ 1151,
+ 1151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1152,
+ 1152
+ ],
+ "mapped",
+ [
+ 1153
+ ]
+ ],
+ [
+ [
+ 1153,
+ 1153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1154,
+ 1154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1155,
+ 1158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1159,
+ 1159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1160,
+ 1161
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1162,
+ 1162
+ ],
+ "mapped",
+ [
+ 1163
+ ]
+ ],
+ [
+ [
+ 1163,
+ 1163
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1164,
+ 1164
+ ],
+ "mapped",
+ [
+ 1165
+ ]
+ ],
+ [
+ [
+ 1165,
+ 1165
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1166,
+ 1166
+ ],
+ "mapped",
+ [
+ 1167
+ ]
+ ],
+ [
+ [
+ 1167,
+ 1167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1168,
+ 1168
+ ],
+ "mapped",
+ [
+ 1169
+ ]
+ ],
+ [
+ [
+ 1169,
+ 1169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1170,
+ 1170
+ ],
+ "mapped",
+ [
+ 1171
+ ]
+ ],
+ [
+ [
+ 1171,
+ 1171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1172,
+ 1172
+ ],
+ "mapped",
+ [
+ 1173
+ ]
+ ],
+ [
+ [
+ 1173,
+ 1173
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1174,
+ 1174
+ ],
+ "mapped",
+ [
+ 1175
+ ]
+ ],
+ [
+ [
+ 1175,
+ 1175
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1176,
+ 1176
+ ],
+ "mapped",
+ [
+ 1177
+ ]
+ ],
+ [
+ [
+ 1177,
+ 1177
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1178,
+ 1178
+ ],
+ "mapped",
+ [
+ 1179
+ ]
+ ],
+ [
+ [
+ 1179,
+ 1179
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1180,
+ 1180
+ ],
+ "mapped",
+ [
+ 1181
+ ]
+ ],
+ [
+ [
+ 1181,
+ 1181
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1182,
+ 1182
+ ],
+ "mapped",
+ [
+ 1183
+ ]
+ ],
+ [
+ [
+ 1183,
+ 1183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1184,
+ 1184
+ ],
+ "mapped",
+ [
+ 1185
+ ]
+ ],
+ [
+ [
+ 1185,
+ 1185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1186,
+ 1186
+ ],
+ "mapped",
+ [
+ 1187
+ ]
+ ],
+ [
+ [
+ 1187,
+ 1187
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1188,
+ 1188
+ ],
+ "mapped",
+ [
+ 1189
+ ]
+ ],
+ [
+ [
+ 1189,
+ 1189
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1190,
+ 1190
+ ],
+ "mapped",
+ [
+ 1191
+ ]
+ ],
+ [
+ [
+ 1191,
+ 1191
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1192,
+ 1192
+ ],
+ "mapped",
+ [
+ 1193
+ ]
+ ],
+ [
+ [
+ 1193,
+ 1193
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1194,
+ 1194
+ ],
+ "mapped",
+ [
+ 1195
+ ]
+ ],
+ [
+ [
+ 1195,
+ 1195
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1196,
+ 1196
+ ],
+ "mapped",
+ [
+ 1197
+ ]
+ ],
+ [
+ [
+ 1197,
+ 1197
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1198,
+ 1198
+ ],
+ "mapped",
+ [
+ 1199
+ ]
+ ],
+ [
+ [
+ 1199,
+ 1199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1200,
+ 1200
+ ],
+ "mapped",
+ [
+ 1201
+ ]
+ ],
+ [
+ [
+ 1201,
+ 1201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1202,
+ 1202
+ ],
+ "mapped",
+ [
+ 1203
+ ]
+ ],
+ [
+ [
+ 1203,
+ 1203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1204,
+ 1204
+ ],
+ "mapped",
+ [
+ 1205
+ ]
+ ],
+ [
+ [
+ 1205,
+ 1205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1206,
+ 1206
+ ],
+ "mapped",
+ [
+ 1207
+ ]
+ ],
+ [
+ [
+ 1207,
+ 1207
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1208,
+ 1208
+ ],
+ "mapped",
+ [
+ 1209
+ ]
+ ],
+ [
+ [
+ 1209,
+ 1209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1210,
+ 1210
+ ],
+ "mapped",
+ [
+ 1211
+ ]
+ ],
+ [
+ [
+ 1211,
+ 1211
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1212,
+ 1212
+ ],
+ "mapped",
+ [
+ 1213
+ ]
+ ],
+ [
+ [
+ 1213,
+ 1213
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1214,
+ 1214
+ ],
+ "mapped",
+ [
+ 1215
+ ]
+ ],
+ [
+ [
+ 1215,
+ 1215
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1216,
+ 1216
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1217,
+ 1217
+ ],
+ "mapped",
+ [
+ 1218
+ ]
+ ],
+ [
+ [
+ 1218,
+ 1218
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1219,
+ 1219
+ ],
+ "mapped",
+ [
+ 1220
+ ]
+ ],
+ [
+ [
+ 1220,
+ 1220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1221,
+ 1221
+ ],
+ "mapped",
+ [
+ 1222
+ ]
+ ],
+ [
+ [
+ 1222,
+ 1222
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1223,
+ 1223
+ ],
+ "mapped",
+ [
+ 1224
+ ]
+ ],
+ [
+ [
+ 1224,
+ 1224
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1225,
+ 1225
+ ],
+ "mapped",
+ [
+ 1226
+ ]
+ ],
+ [
+ [
+ 1226,
+ 1226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1227,
+ 1227
+ ],
+ "mapped",
+ [
+ 1228
+ ]
+ ],
+ [
+ [
+ 1228,
+ 1228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1229,
+ 1229
+ ],
+ "mapped",
+ [
+ 1230
+ ]
+ ],
+ [
+ [
+ 1230,
+ 1230
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1231,
+ 1231
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1232,
+ 1232
+ ],
+ "mapped",
+ [
+ 1233
+ ]
+ ],
+ [
+ [
+ 1233,
+ 1233
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1234,
+ 1234
+ ],
+ "mapped",
+ [
+ 1235
+ ]
+ ],
+ [
+ [
+ 1235,
+ 1235
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1236,
+ 1236
+ ],
+ "mapped",
+ [
+ 1237
+ ]
+ ],
+ [
+ [
+ 1237,
+ 1237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1238,
+ 1238
+ ],
+ "mapped",
+ [
+ 1239
+ ]
+ ],
+ [
+ [
+ 1239,
+ 1239
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1240,
+ 1240
+ ],
+ "mapped",
+ [
+ 1241
+ ]
+ ],
+ [
+ [
+ 1241,
+ 1241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1242,
+ 1242
+ ],
+ "mapped",
+ [
+ 1243
+ ]
+ ],
+ [
+ [
+ 1243,
+ 1243
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1244,
+ 1244
+ ],
+ "mapped",
+ [
+ 1245
+ ]
+ ],
+ [
+ [
+ 1245,
+ 1245
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1246,
+ 1246
+ ],
+ "mapped",
+ [
+ 1247
+ ]
+ ],
+ [
+ [
+ 1247,
+ 1247
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1248,
+ 1248
+ ],
+ "mapped",
+ [
+ 1249
+ ]
+ ],
+ [
+ [
+ 1249,
+ 1249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1250,
+ 1250
+ ],
+ "mapped",
+ [
+ 1251
+ ]
+ ],
+ [
+ [
+ 1251,
+ 1251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1252,
+ 1252
+ ],
+ "mapped",
+ [
+ 1253
+ ]
+ ],
+ [
+ [
+ 1253,
+ 1253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1254,
+ 1254
+ ],
+ "mapped",
+ [
+ 1255
+ ]
+ ],
+ [
+ [
+ 1255,
+ 1255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1256,
+ 1256
+ ],
+ "mapped",
+ [
+ 1257
+ ]
+ ],
+ [
+ [
+ 1257,
+ 1257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1258,
+ 1258
+ ],
+ "mapped",
+ [
+ 1259
+ ]
+ ],
+ [
+ [
+ 1259,
+ 1259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1260,
+ 1260
+ ],
+ "mapped",
+ [
+ 1261
+ ]
+ ],
+ [
+ [
+ 1261,
+ 1261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1262,
+ 1262
+ ],
+ "mapped",
+ [
+ 1263
+ ]
+ ],
+ [
+ [
+ 1263,
+ 1263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1264,
+ 1264
+ ],
+ "mapped",
+ [
+ 1265
+ ]
+ ],
+ [
+ [
+ 1265,
+ 1265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1266,
+ 1266
+ ],
+ "mapped",
+ [
+ 1267
+ ]
+ ],
+ [
+ [
+ 1267,
+ 1267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1268,
+ 1268
+ ],
+ "mapped",
+ [
+ 1269
+ ]
+ ],
+ [
+ [
+ 1269,
+ 1269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1270,
+ 1270
+ ],
+ "mapped",
+ [
+ 1271
+ ]
+ ],
+ [
+ [
+ 1271,
+ 1271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1272,
+ 1272
+ ],
+ "mapped",
+ [
+ 1273
+ ]
+ ],
+ [
+ [
+ 1273,
+ 1273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1274,
+ 1274
+ ],
+ "mapped",
+ [
+ 1275
+ ]
+ ],
+ [
+ [
+ 1275,
+ 1275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1276,
+ 1276
+ ],
+ "mapped",
+ [
+ 1277
+ ]
+ ],
+ [
+ [
+ 1277,
+ 1277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1278,
+ 1278
+ ],
+ "mapped",
+ [
+ 1279
+ ]
+ ],
+ [
+ [
+ 1279,
+ 1279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1280,
+ 1280
+ ],
+ "mapped",
+ [
+ 1281
+ ]
+ ],
+ [
+ [
+ 1281,
+ 1281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1282,
+ 1282
+ ],
+ "mapped",
+ [
+ 1283
+ ]
+ ],
+ [
+ [
+ 1283,
+ 1283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1284,
+ 1284
+ ],
+ "mapped",
+ [
+ 1285
+ ]
+ ],
+ [
+ [
+ 1285,
+ 1285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1286,
+ 1286
+ ],
+ "mapped",
+ [
+ 1287
+ ]
+ ],
+ [
+ [
+ 1287,
+ 1287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1288,
+ 1288
+ ],
+ "mapped",
+ [
+ 1289
+ ]
+ ],
+ [
+ [
+ 1289,
+ 1289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1290,
+ 1290
+ ],
+ "mapped",
+ [
+ 1291
+ ]
+ ],
+ [
+ [
+ 1291,
+ 1291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1292,
+ 1292
+ ],
+ "mapped",
+ [
+ 1293
+ ]
+ ],
+ [
+ [
+ 1293,
+ 1293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1294,
+ 1294
+ ],
+ "mapped",
+ [
+ 1295
+ ]
+ ],
+ [
+ [
+ 1295,
+ 1295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1296,
+ 1296
+ ],
+ "mapped",
+ [
+ 1297
+ ]
+ ],
+ [
+ [
+ 1297,
+ 1297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1298,
+ 1298
+ ],
+ "mapped",
+ [
+ 1299
+ ]
+ ],
+ [
+ [
+ 1299,
+ 1299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1300,
+ 1300
+ ],
+ "mapped",
+ [
+ 1301
+ ]
+ ],
+ [
+ [
+ 1301,
+ 1301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1302,
+ 1302
+ ],
+ "mapped",
+ [
+ 1303
+ ]
+ ],
+ [
+ [
+ 1303,
+ 1303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1304,
+ 1304
+ ],
+ "mapped",
+ [
+ 1305
+ ]
+ ],
+ [
+ [
+ 1305,
+ 1305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1306,
+ 1306
+ ],
+ "mapped",
+ [
+ 1307
+ ]
+ ],
+ [
+ [
+ 1307,
+ 1307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1308,
+ 1308
+ ],
+ "mapped",
+ [
+ 1309
+ ]
+ ],
+ [
+ [
+ 1309,
+ 1309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1310,
+ 1310
+ ],
+ "mapped",
+ [
+ 1311
+ ]
+ ],
+ [
+ [
+ 1311,
+ 1311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1312,
+ 1312
+ ],
+ "mapped",
+ [
+ 1313
+ ]
+ ],
+ [
+ [
+ 1313,
+ 1313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1314,
+ 1314
+ ],
+ "mapped",
+ [
+ 1315
+ ]
+ ],
+ [
+ [
+ 1315,
+ 1315
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1316,
+ 1316
+ ],
+ "mapped",
+ [
+ 1317
+ ]
+ ],
+ [
+ [
+ 1317,
+ 1317
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1318,
+ 1318
+ ],
+ "mapped",
+ [
+ 1319
+ ]
+ ],
+ [
+ [
+ 1319,
+ 1319
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1320,
+ 1320
+ ],
+ "mapped",
+ [
+ 1321
+ ]
+ ],
+ [
+ [
+ 1321,
+ 1321
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1322,
+ 1322
+ ],
+ "mapped",
+ [
+ 1323
+ ]
+ ],
+ [
+ [
+ 1323,
+ 1323
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1324,
+ 1324
+ ],
+ "mapped",
+ [
+ 1325
+ ]
+ ],
+ [
+ [
+ 1325,
+ 1325
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1326,
+ 1326
+ ],
+ "mapped",
+ [
+ 1327
+ ]
+ ],
+ [
+ [
+ 1327,
+ 1327
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1328,
+ 1328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1329,
+ 1329
+ ],
+ "mapped",
+ [
+ 1377
+ ]
+ ],
+ [
+ [
+ 1330,
+ 1330
+ ],
+ "mapped",
+ [
+ 1378
+ ]
+ ],
+ [
+ [
+ 1331,
+ 1331
+ ],
+ "mapped",
+ [
+ 1379
+ ]
+ ],
+ [
+ [
+ 1332,
+ 1332
+ ],
+ "mapped",
+ [
+ 1380
+ ]
+ ],
+ [
+ [
+ 1333,
+ 1333
+ ],
+ "mapped",
+ [
+ 1381
+ ]
+ ],
+ [
+ [
+ 1334,
+ 1334
+ ],
+ "mapped",
+ [
+ 1382
+ ]
+ ],
+ [
+ [
+ 1335,
+ 1335
+ ],
+ "mapped",
+ [
+ 1383
+ ]
+ ],
+ [
+ [
+ 1336,
+ 1336
+ ],
+ "mapped",
+ [
+ 1384
+ ]
+ ],
+ [
+ [
+ 1337,
+ 1337
+ ],
+ "mapped",
+ [
+ 1385
+ ]
+ ],
+ [
+ [
+ 1338,
+ 1338
+ ],
+ "mapped",
+ [
+ 1386
+ ]
+ ],
+ [
+ [
+ 1339,
+ 1339
+ ],
+ "mapped",
+ [
+ 1387
+ ]
+ ],
+ [
+ [
+ 1340,
+ 1340
+ ],
+ "mapped",
+ [
+ 1388
+ ]
+ ],
+ [
+ [
+ 1341,
+ 1341
+ ],
+ "mapped",
+ [
+ 1389
+ ]
+ ],
+ [
+ [
+ 1342,
+ 1342
+ ],
+ "mapped",
+ [
+ 1390
+ ]
+ ],
+ [
+ [
+ 1343,
+ 1343
+ ],
+ "mapped",
+ [
+ 1391
+ ]
+ ],
+ [
+ [
+ 1344,
+ 1344
+ ],
+ "mapped",
+ [
+ 1392
+ ]
+ ],
+ [
+ [
+ 1345,
+ 1345
+ ],
+ "mapped",
+ [
+ 1393
+ ]
+ ],
+ [
+ [
+ 1346,
+ 1346
+ ],
+ "mapped",
+ [
+ 1394
+ ]
+ ],
+ [
+ [
+ 1347,
+ 1347
+ ],
+ "mapped",
+ [
+ 1395
+ ]
+ ],
+ [
+ [
+ 1348,
+ 1348
+ ],
+ "mapped",
+ [
+ 1396
+ ]
+ ],
+ [
+ [
+ 1349,
+ 1349
+ ],
+ "mapped",
+ [
+ 1397
+ ]
+ ],
+ [
+ [
+ 1350,
+ 1350
+ ],
+ "mapped",
+ [
+ 1398
+ ]
+ ],
+ [
+ [
+ 1351,
+ 1351
+ ],
+ "mapped",
+ [
+ 1399
+ ]
+ ],
+ [
+ [
+ 1352,
+ 1352
+ ],
+ "mapped",
+ [
+ 1400
+ ]
+ ],
+ [
+ [
+ 1353,
+ 1353
+ ],
+ "mapped",
+ [
+ 1401
+ ]
+ ],
+ [
+ [
+ 1354,
+ 1354
+ ],
+ "mapped",
+ [
+ 1402
+ ]
+ ],
+ [
+ [
+ 1355,
+ 1355
+ ],
+ "mapped",
+ [
+ 1403
+ ]
+ ],
+ [
+ [
+ 1356,
+ 1356
+ ],
+ "mapped",
+ [
+ 1404
+ ]
+ ],
+ [
+ [
+ 1357,
+ 1357
+ ],
+ "mapped",
+ [
+ 1405
+ ]
+ ],
+ [
+ [
+ 1358,
+ 1358
+ ],
+ "mapped",
+ [
+ 1406
+ ]
+ ],
+ [
+ [
+ 1359,
+ 1359
+ ],
+ "mapped",
+ [
+ 1407
+ ]
+ ],
+ [
+ [
+ 1360,
+ 1360
+ ],
+ "mapped",
+ [
+ 1408
+ ]
+ ],
+ [
+ [
+ 1361,
+ 1361
+ ],
+ "mapped",
+ [
+ 1409
+ ]
+ ],
+ [
+ [
+ 1362,
+ 1362
+ ],
+ "mapped",
+ [
+ 1410
+ ]
+ ],
+ [
+ [
+ 1363,
+ 1363
+ ],
+ "mapped",
+ [
+ 1411
+ ]
+ ],
+ [
+ [
+ 1364,
+ 1364
+ ],
+ "mapped",
+ [
+ 1412
+ ]
+ ],
+ [
+ [
+ 1365,
+ 1365
+ ],
+ "mapped",
+ [
+ 1413
+ ]
+ ],
+ [
+ [
+ 1366,
+ 1366
+ ],
+ "mapped",
+ [
+ 1414
+ ]
+ ],
+ [
+ [
+ 1367,
+ 1368
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1369,
+ 1369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1370,
+ 1375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1376,
+ 1376
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1377,
+ 1414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1415,
+ 1415
+ ],
+ "mapped",
+ [
+ 1381,
+ 1410
+ ]
+ ],
+ [
+ [
+ 1416,
+ 1416
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1417,
+ 1417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1418,
+ 1418
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1419,
+ 1420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1421,
+ 1422
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1423,
+ 1423
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1424,
+ 1424
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1425,
+ 1441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1442,
+ 1442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1443,
+ 1455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1456,
+ 1465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1466,
+ 1466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1467,
+ 1469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1470,
+ 1470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1471,
+ 1471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1472,
+ 1472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1473,
+ 1474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1475,
+ 1475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1476,
+ 1476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1477,
+ 1477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1478,
+ 1478
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1479,
+ 1479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1480,
+ 1487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1488,
+ 1514
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1515,
+ 1519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1520,
+ 1524
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1525,
+ 1535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1536,
+ 1539
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1540,
+ 1540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1541,
+ 1541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1542,
+ 1546
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1547,
+ 1547
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1548,
+ 1548
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1549,
+ 1551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1552,
+ 1557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1558,
+ 1562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1563,
+ 1563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1564,
+ 1564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1565,
+ 1565
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1566,
+ 1566
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1567,
+ 1567
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1568,
+ 1568
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1569,
+ 1594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1595,
+ 1599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1600,
+ 1600
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1601,
+ 1618
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1619,
+ 1621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1622,
+ 1624
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1625,
+ 1630
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1631,
+ 1631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1632,
+ 1641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1642,
+ 1645
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1646,
+ 1647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1648,
+ 1652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1653,
+ 1653
+ ],
+ "mapped",
+ [
+ 1575,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1654,
+ 1654
+ ],
+ "mapped",
+ [
+ 1608,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1655,
+ 1655
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1656,
+ 1656
+ ],
+ "mapped",
+ [
+ 1610,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1657,
+ 1719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1720,
+ 1721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1722,
+ 1726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1727,
+ 1727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1728,
+ 1742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1743,
+ 1743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1744,
+ 1747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1748,
+ 1748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1749,
+ 1756
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1757,
+ 1757
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1758,
+ 1758
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1759,
+ 1768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1769,
+ 1769
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1770,
+ 1773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1774,
+ 1775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1776,
+ 1785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1786,
+ 1790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1791,
+ 1791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1792,
+ 1805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1806,
+ 1806
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1807,
+ 1807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1808,
+ 1836
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1837,
+ 1839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1840,
+ 1866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1867,
+ 1868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1869,
+ 1871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1872,
+ 1901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1902,
+ 1919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1920,
+ 1968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1969,
+ 1969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1970,
+ 1983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1984,
+ 2037
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2038,
+ 2042
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2043,
+ 2047
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2048,
+ 2093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2094,
+ 2095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2096,
+ 2110
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2111,
+ 2111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2112,
+ 2139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2140,
+ 2141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2142,
+ 2142
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2143,
+ 2207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2208,
+ 2208
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2209,
+ 2209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2210,
+ 2220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2221,
+ 2226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2227,
+ 2228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2229,
+ 2274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2275,
+ 2275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2276,
+ 2302
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2303,
+ 2303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2304,
+ 2304
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2305,
+ 2307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2308,
+ 2308
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2309,
+ 2361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2362,
+ 2363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2364,
+ 2381
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2382,
+ 2382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2383,
+ 2383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2384,
+ 2388
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2389,
+ 2389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2390,
+ 2391
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2392,
+ 2392
+ ],
+ "mapped",
+ [
+ 2325,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2393,
+ 2393
+ ],
+ "mapped",
+ [
+ 2326,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2394,
+ 2394
+ ],
+ "mapped",
+ [
+ 2327,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2395,
+ 2395
+ ],
+ "mapped",
+ [
+ 2332,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2396,
+ 2396
+ ],
+ "mapped",
+ [
+ 2337,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2397,
+ 2397
+ ],
+ "mapped",
+ [
+ 2338,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2398,
+ 2398
+ ],
+ "mapped",
+ [
+ 2347,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2399,
+ 2399
+ ],
+ "mapped",
+ [
+ 2351,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2400,
+ 2403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2404,
+ 2405
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2406,
+ 2415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2416,
+ 2416
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2417,
+ 2418
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2419,
+ 2423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2424,
+ 2424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2425,
+ 2426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2427,
+ 2428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2429,
+ 2429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2430,
+ 2431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2432,
+ 2432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2433,
+ 2435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2436,
+ 2436
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2437,
+ 2444
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2445,
+ 2446
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2447,
+ 2448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2449,
+ 2450
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2451,
+ 2472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2473,
+ 2473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2474,
+ 2480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2481,
+ 2481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2482,
+ 2482
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2483,
+ 2485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2486,
+ 2489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2490,
+ 2491
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2492,
+ 2492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2493,
+ 2493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2494,
+ 2500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2501,
+ 2502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2503,
+ 2504
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2505,
+ 2506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2507,
+ 2509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2510,
+ 2510
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2511,
+ 2518
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2519,
+ 2519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2520,
+ 2523
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2524,
+ 2524
+ ],
+ "mapped",
+ [
+ 2465,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2525,
+ 2525
+ ],
+ "mapped",
+ [
+ 2466,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2526,
+ 2526
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2527,
+ 2527
+ ],
+ "mapped",
+ [
+ 2479,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2528,
+ 2531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2532,
+ 2533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2534,
+ 2545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2546,
+ 2554
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2555,
+ 2555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2556,
+ 2560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2561,
+ 2561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2562,
+ 2562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2563,
+ 2563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2564,
+ 2564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2565,
+ 2570
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2571,
+ 2574
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2575,
+ 2576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2577,
+ 2578
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2579,
+ 2600
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2601,
+ 2601
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2602,
+ 2608
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2609,
+ 2609
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2610,
+ 2610
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2611,
+ 2611
+ ],
+ "mapped",
+ [
+ 2610,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2612,
+ 2612
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2613,
+ 2613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2614,
+ 2614
+ ],
+ "mapped",
+ [
+ 2616,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2615,
+ 2615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2616,
+ 2617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2618,
+ 2619
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2620,
+ 2620
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2621,
+ 2621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2622,
+ 2626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2627,
+ 2630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2631,
+ 2632
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2633,
+ 2634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2635,
+ 2637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2638,
+ 2640
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2641,
+ 2641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2642,
+ 2648
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2649,
+ 2649
+ ],
+ "mapped",
+ [
+ 2582,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2650,
+ 2650
+ ],
+ "mapped",
+ [
+ 2583,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2651,
+ 2651
+ ],
+ "mapped",
+ [
+ 2588,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2652,
+ 2652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2653,
+ 2653
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2654,
+ 2654
+ ],
+ "mapped",
+ [
+ 2603,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2655,
+ 2661
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2662,
+ 2676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2677,
+ 2677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2678,
+ 2688
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2689,
+ 2691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2692,
+ 2692
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2693,
+ 2699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2700,
+ 2700
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2701,
+ 2701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2702,
+ 2702
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2703,
+ 2705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2706,
+ 2706
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2707,
+ 2728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2729,
+ 2729
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2730,
+ 2736
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2737,
+ 2737
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2738,
+ 2739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2740,
+ 2740
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2741,
+ 2745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2746,
+ 2747
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2748,
+ 2757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2758,
+ 2758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2759,
+ 2761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2762,
+ 2762
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2763,
+ 2765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2766,
+ 2767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2768,
+ 2768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2769,
+ 2783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2784,
+ 2784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2785,
+ 2787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2788,
+ 2789
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2790,
+ 2799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2800,
+ 2800
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2801,
+ 2801
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2802,
+ 2808
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2809,
+ 2809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2810,
+ 2816
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2817,
+ 2819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2820,
+ 2820
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2821,
+ 2828
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2829,
+ 2830
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2831,
+ 2832
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2833,
+ 2834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2835,
+ 2856
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2857,
+ 2857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2858,
+ 2864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2865,
+ 2865
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2866,
+ 2867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2868,
+ 2868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2869,
+ 2869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2870,
+ 2873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2874,
+ 2875
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2876,
+ 2883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2884,
+ 2884
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2885,
+ 2886
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2887,
+ 2888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2889,
+ 2890
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2891,
+ 2893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2894,
+ 2901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2902,
+ 2903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2904,
+ 2907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2908,
+ 2908
+ ],
+ "mapped",
+ [
+ 2849,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2909,
+ 2909
+ ],
+ "mapped",
+ [
+ 2850,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2910,
+ 2910
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2911,
+ 2913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2914,
+ 2915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2916,
+ 2917
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2918,
+ 2927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2928,
+ 2928
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2929,
+ 2929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2930,
+ 2935
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2936,
+ 2945
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2946,
+ 2947
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2948,
+ 2948
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2949,
+ 2954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2955,
+ 2957
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2958,
+ 2960
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2961,
+ 2961
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2962,
+ 2965
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2966,
+ 2968
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2969,
+ 2970
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2971,
+ 2971
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2972,
+ 2972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2973,
+ 2973
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2974,
+ 2975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2976,
+ 2978
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2979,
+ 2980
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2981,
+ 2983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2984,
+ 2986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2987,
+ 2989
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2990,
+ 2997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2998,
+ 2998
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2999,
+ 3001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3002,
+ 3005
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3006,
+ 3010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3011,
+ 3013
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3014,
+ 3016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3017,
+ 3017
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3018,
+ 3021
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3022,
+ 3023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3024,
+ 3024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3025,
+ 3030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3031,
+ 3031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3032,
+ 3045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3046,
+ 3046
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3047,
+ 3055
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3056,
+ 3058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3059,
+ 3066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3067,
+ 3071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3072,
+ 3072
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3073,
+ 3075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3076,
+ 3076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3077,
+ 3084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3085,
+ 3085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3086,
+ 3088
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3089,
+ 3089
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3090,
+ 3112
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3113,
+ 3113
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3114,
+ 3123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3124,
+ 3124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3125,
+ 3129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3130,
+ 3132
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3133,
+ 3133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3134,
+ 3140
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3141,
+ 3141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3142,
+ 3144
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3145,
+ 3145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3146,
+ 3149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3150,
+ 3156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3157,
+ 3158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3159,
+ 3159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3160,
+ 3161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3162,
+ 3162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3163,
+ 3167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3168,
+ 3169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3170,
+ 3171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3172,
+ 3173
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3174,
+ 3183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3184,
+ 3191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3192,
+ 3199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3200,
+ 3200
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3201,
+ 3201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3202,
+ 3203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3204,
+ 3204
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3205,
+ 3212
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3213,
+ 3213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3214,
+ 3216
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3217,
+ 3217
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3218,
+ 3240
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3241,
+ 3241
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3242,
+ 3251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3252,
+ 3252
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3253,
+ 3257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3258,
+ 3259
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3260,
+ 3261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3262,
+ 3268
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3269,
+ 3269
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3270,
+ 3272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3273,
+ 3273
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3274,
+ 3277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3278,
+ 3284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3285,
+ 3286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3287,
+ 3293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3294,
+ 3294
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3295,
+ 3295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3296,
+ 3297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3298,
+ 3299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3300,
+ 3301
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3302,
+ 3311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3312,
+ 3312
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3313,
+ 3314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3315,
+ 3328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3329,
+ 3329
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3330,
+ 3331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3332,
+ 3332
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3333,
+ 3340
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3341,
+ 3341
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3342,
+ 3344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3345,
+ 3345
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3346,
+ 3368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3369,
+ 3369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3370,
+ 3385
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3386,
+ 3386
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3387,
+ 3388
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3389,
+ 3389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3390,
+ 3395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3396,
+ 3396
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3397,
+ 3397
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3398,
+ 3400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3401,
+ 3401
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3402,
+ 3405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3406,
+ 3406
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3407,
+ 3414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3415,
+ 3415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3416,
+ 3422
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3423,
+ 3423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3424,
+ 3425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3426,
+ 3427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3428,
+ 3429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3430,
+ 3439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3440,
+ 3445
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3446,
+ 3448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3449,
+ 3449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3450,
+ 3455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3456,
+ 3457
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3458,
+ 3459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3460,
+ 3460
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3461,
+ 3478
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3479,
+ 3481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3482,
+ 3505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3506,
+ 3506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3507,
+ 3515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3516,
+ 3516
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3517,
+ 3517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3518,
+ 3519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3520,
+ 3526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3527,
+ 3529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3530,
+ 3530
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3531,
+ 3534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3535,
+ 3540
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3541,
+ 3541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3542,
+ 3542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3543,
+ 3543
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3544,
+ 3551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3552,
+ 3557
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3558,
+ 3567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3568,
+ 3569
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3570,
+ 3571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3572,
+ 3572
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3573,
+ 3584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3585,
+ 3634
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3635,
+ 3635
+ ],
+ "mapped",
+ [
+ 3661,
+ 3634
+ ]
+ ],
+ [
+ [
+ 3636,
+ 3642
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3643,
+ 3646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3647,
+ 3647
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3648,
+ 3662
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3663,
+ 3663
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3664,
+ 3673
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3674,
+ 3675
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3676,
+ 3712
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3713,
+ 3714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3715,
+ 3715
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3716,
+ 3716
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3717,
+ 3718
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3719,
+ 3720
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3721,
+ 3721
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3722,
+ 3722
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3723,
+ 3724
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3725,
+ 3725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3726,
+ 3731
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3732,
+ 3735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3736,
+ 3736
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3737,
+ 3743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3744,
+ 3744
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3745,
+ 3747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3748,
+ 3748
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3749,
+ 3749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3750,
+ 3750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3751,
+ 3751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3752,
+ 3753
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3754,
+ 3755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3756,
+ 3756
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3757,
+ 3762
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3763,
+ 3763
+ ],
+ "mapped",
+ [
+ 3789,
+ 3762
+ ]
+ ],
+ [
+ [
+ 3764,
+ 3769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3770,
+ 3770
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3771,
+ 3773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3774,
+ 3775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3776,
+ 3780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3781,
+ 3781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3782,
+ 3782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3783,
+ 3783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3784,
+ 3789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3790,
+ 3791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3792,
+ 3801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3802,
+ 3803
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3804,
+ 3804
+ ],
+ "mapped",
+ [
+ 3755,
+ 3737
+ ]
+ ],
+ [
+ [
+ 3805,
+ 3805
+ ],
+ "mapped",
+ [
+ 3755,
+ 3745
+ ]
+ ],
+ [
+ [
+ 3806,
+ 3807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3808,
+ 3839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3840,
+ 3840
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3841,
+ 3850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3851,
+ 3851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3852,
+ 3852
+ ],
+ "mapped",
+ [
+ 3851
+ ]
+ ],
+ [
+ [
+ 3853,
+ 3863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3864,
+ 3865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3866,
+ 3871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3872,
+ 3881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3882,
+ 3892
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3893,
+ 3893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3894,
+ 3894
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3895,
+ 3895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3896,
+ 3896
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3897,
+ 3897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3898,
+ 3901
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3902,
+ 3906
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3907,
+ 3907
+ ],
+ "mapped",
+ [
+ 3906,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3908,
+ 3911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3912,
+ 3912
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3913,
+ 3916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3917,
+ 3917
+ ],
+ "mapped",
+ [
+ 3916,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3918,
+ 3921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3922,
+ 3922
+ ],
+ "mapped",
+ [
+ 3921,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3923,
+ 3926
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3927,
+ 3927
+ ],
+ "mapped",
+ [
+ 3926,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3928,
+ 3931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3932,
+ 3932
+ ],
+ "mapped",
+ [
+ 3931,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3933,
+ 3944
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3945,
+ 3945
+ ],
+ "mapped",
+ [
+ 3904,
+ 4021
+ ]
+ ],
+ [
+ [
+ 3946,
+ 3946
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3947,
+ 3948
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3949,
+ 3952
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3953,
+ 3954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3955,
+ 3955
+ ],
+ "mapped",
+ [
+ 3953,
+ 3954
+ ]
+ ],
+ [
+ [
+ 3956,
+ 3956
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3957,
+ 3957
+ ],
+ "mapped",
+ [
+ 3953,
+ 3956
+ ]
+ ],
+ [
+ [
+ 3958,
+ 3958
+ ],
+ "mapped",
+ [
+ 4018,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3959,
+ 3959
+ ],
+ "mapped",
+ [
+ 4018,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3960,
+ 3960
+ ],
+ "mapped",
+ [
+ 4019,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3961,
+ 3961
+ ],
+ "mapped",
+ [
+ 4019,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3962,
+ 3968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3969,
+ 3969
+ ],
+ "mapped",
+ [
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3970,
+ 3972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3973,
+ 3973
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3974,
+ 3979
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3980,
+ 3983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3984,
+ 3986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3987,
+ 3987
+ ],
+ "mapped",
+ [
+ 3986,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3988,
+ 3989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3990,
+ 3990
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3991,
+ 3991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3992,
+ 3992
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3993,
+ 3996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3997,
+ 3997
+ ],
+ "mapped",
+ [
+ 3996,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3998,
+ 4001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4002,
+ 4002
+ ],
+ "mapped",
+ [
+ 4001,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4003,
+ 4006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4007,
+ 4007
+ ],
+ "mapped",
+ [
+ 4006,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4008,
+ 4011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4012,
+ 4012
+ ],
+ "mapped",
+ [
+ 4011,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4013,
+ 4013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4014,
+ 4016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4017,
+ 4023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4024,
+ 4024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4025,
+ 4025
+ ],
+ "mapped",
+ [
+ 3984,
+ 4021
+ ]
+ ],
+ [
+ [
+ 4026,
+ 4028
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4029,
+ 4029
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4030,
+ 4037
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4038,
+ 4038
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4039,
+ 4044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4045,
+ 4045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4046,
+ 4046
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4047,
+ 4047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4048,
+ 4049
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4050,
+ 4052
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4053,
+ 4056
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4057,
+ 4058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4059,
+ 4095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4096,
+ 4129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4130,
+ 4130
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4131,
+ 4135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4136,
+ 4136
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4137,
+ 4138
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4139,
+ 4139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4140,
+ 4146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4147,
+ 4149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4150,
+ 4153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4154,
+ 4159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4160,
+ 4169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4170,
+ 4175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4176,
+ 4185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4186,
+ 4249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4250,
+ 4253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4254,
+ 4255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4256,
+ 4293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4294,
+ 4294
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4295,
+ 4295
+ ],
+ "mapped",
+ [
+ 11559
+ ]
+ ],
+ [
+ [
+ 4296,
+ 4300
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4301,
+ 4301
+ ],
+ "mapped",
+ [
+ 11565
+ ]
+ ],
+ [
+ [
+ 4302,
+ 4303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4304,
+ 4342
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4343,
+ 4344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4345,
+ 4346
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4347,
+ 4347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4348,
+ 4348
+ ],
+ "mapped",
+ [
+ 4316
+ ]
+ ],
+ [
+ [
+ 4349,
+ 4351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4352,
+ 4441
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4442,
+ 4446
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4447,
+ 4448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4449,
+ 4514
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4515,
+ 4519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4520,
+ 4601
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4602,
+ 4607
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4608,
+ 4614
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4615,
+ 4615
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4616,
+ 4678
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4679,
+ 4679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4680,
+ 4680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4681,
+ 4681
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4682,
+ 4685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4686,
+ 4687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4688,
+ 4694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4695,
+ 4695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4696,
+ 4696
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4697,
+ 4697
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4698,
+ 4701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4702,
+ 4703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4704,
+ 4742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4743,
+ 4743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4744,
+ 4744
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4745,
+ 4745
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4746,
+ 4749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4750,
+ 4751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4752,
+ 4782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4783,
+ 4783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4784,
+ 4784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4785,
+ 4785
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4786,
+ 4789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4790,
+ 4791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4792,
+ 4798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4799,
+ 4799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4800,
+ 4800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4801,
+ 4801
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4802,
+ 4805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4806,
+ 4807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4808,
+ 4814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4815,
+ 4815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4816,
+ 4822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4823,
+ 4823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4824,
+ 4846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4847,
+ 4847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4848,
+ 4878
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4879,
+ 4879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4880,
+ 4880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4881,
+ 4881
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4882,
+ 4885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4886,
+ 4887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4888,
+ 4894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4895,
+ 4895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4896,
+ 4934
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4935,
+ 4935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4936,
+ 4954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4955,
+ 4956
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4957,
+ 4958
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4959,
+ 4959
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4960,
+ 4960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4961,
+ 4988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4989,
+ 4991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4992,
+ 5007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5008,
+ 5017
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5018,
+ 5023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5024,
+ 5108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5109,
+ 5109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5110,
+ 5111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5112,
+ 5112
+ ],
+ "mapped",
+ [
+ 5104
+ ]
+ ],
+ [
+ [
+ 5113,
+ 5113
+ ],
+ "mapped",
+ [
+ 5105
+ ]
+ ],
+ [
+ [
+ 5114,
+ 5114
+ ],
+ "mapped",
+ [
+ 5106
+ ]
+ ],
+ [
+ [
+ 5115,
+ 5115
+ ],
+ "mapped",
+ [
+ 5107
+ ]
+ ],
+ [
+ [
+ 5116,
+ 5116
+ ],
+ "mapped",
+ [
+ 5108
+ ]
+ ],
+ [
+ [
+ 5117,
+ 5117
+ ],
+ "mapped",
+ [
+ 5109
+ ]
+ ],
+ [
+ [
+ 5118,
+ 5119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5120,
+ 5120
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5121,
+ 5740
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5741,
+ 5742
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5743,
+ 5750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5751,
+ 5759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5760,
+ 5760
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5761,
+ 5786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5787,
+ 5788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5789,
+ 5791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5792,
+ 5866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5867,
+ 5872
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5873,
+ 5880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5881,
+ 5887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5888,
+ 5900
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5901,
+ 5901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5902,
+ 5908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5909,
+ 5919
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5920,
+ 5940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5941,
+ 5942
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5943,
+ 5951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5952,
+ 5971
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5972,
+ 5983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5984,
+ 5996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5997,
+ 5997
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5998,
+ 6000
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6001,
+ 6001
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6002,
+ 6003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6004,
+ 6015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6016,
+ 6067
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6068,
+ 6069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6070,
+ 6099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6100,
+ 6102
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6103,
+ 6103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6104,
+ 6107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6108,
+ 6108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6109,
+ 6109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6110,
+ 6111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6112,
+ 6121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6122,
+ 6127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6128,
+ 6137
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6138,
+ 6143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6144,
+ 6149
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6150,
+ 6150
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6151,
+ 6154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6155,
+ 6157
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 6158,
+ 6158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6159,
+ 6159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6160,
+ 6169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6170,
+ 6175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6176,
+ 6263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6264,
+ 6271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6272,
+ 6313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6314,
+ 6314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6315,
+ 6319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6320,
+ 6389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6390,
+ 6399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6400,
+ 6428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6429,
+ 6430
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6431,
+ 6431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6432,
+ 6443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6444,
+ 6447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6448,
+ 6459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6460,
+ 6463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6464,
+ 6464
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6465,
+ 6467
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6468,
+ 6469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6470,
+ 6509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6510,
+ 6511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6512,
+ 6516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6517,
+ 6527
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6528,
+ 6569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6570,
+ 6571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6572,
+ 6575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6576,
+ 6601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6602,
+ 6607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6608,
+ 6617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6618,
+ 6618
+ ],
+ "valid",
+ [
+ ],
+ "XV8"
+ ],
+ [
+ [
+ 6619,
+ 6621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6622,
+ 6623
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6624,
+ 6655
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6656,
+ 6683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6684,
+ 6685
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6686,
+ 6687
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6688,
+ 6750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6751,
+ 6751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6752,
+ 6780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6781,
+ 6782
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6783,
+ 6793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6794,
+ 6799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6800,
+ 6809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6810,
+ 6815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6816,
+ 6822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6823,
+ 6823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6824,
+ 6829
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6830,
+ 6831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6832,
+ 6845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6846,
+ 6846
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6847,
+ 6911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6912,
+ 6987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6988,
+ 6991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6992,
+ 7001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7002,
+ 7018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7019,
+ 7027
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7028,
+ 7036
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7037,
+ 7039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7040,
+ 7082
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7083,
+ 7085
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7086,
+ 7097
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7098,
+ 7103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7104,
+ 7155
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7156,
+ 7163
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7164,
+ 7167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7168,
+ 7223
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7224,
+ 7226
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7227,
+ 7231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7232,
+ 7241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7242,
+ 7244
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7245,
+ 7293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7294,
+ 7295
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7296,
+ 7359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7360,
+ 7367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7368,
+ 7375
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7376,
+ 7378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7379,
+ 7379
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7380,
+ 7410
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7411,
+ 7414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7415,
+ 7415
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7416,
+ 7417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7418,
+ 7423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7424,
+ 7467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7468,
+ 7468
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7469,
+ 7469
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 7470,
+ 7470
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7471,
+ 7471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7472,
+ 7472
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7473,
+ 7473
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7474,
+ 7474
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 7475,
+ 7475
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7476,
+ 7476
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 7477,
+ 7477
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7478,
+ 7478
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 7479,
+ 7479
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7480,
+ 7480
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 7481,
+ 7481
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7482,
+ 7482
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 7483,
+ 7483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7484,
+ 7484
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7485,
+ 7485
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 7486,
+ 7486
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7487,
+ 7487
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7488,
+ 7488
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7489,
+ 7489
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7490,
+ 7490
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 7491,
+ 7491
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7492,
+ 7492
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 7493,
+ 7493
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 7494,
+ 7494
+ ],
+ "mapped",
+ [
+ 7426
+ ]
+ ],
+ [
+ [
+ 7495,
+ 7495
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7496,
+ 7496
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7497,
+ 7497
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7498,
+ 7498
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 7499,
+ 7499
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 7500,
+ 7500
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7501,
+ 7501
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7502,
+ 7502
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7503,
+ 7503
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7504,
+ 7504
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7505,
+ 7505
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 7506,
+ 7506
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7507,
+ 7507
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 7508,
+ 7508
+ ],
+ "mapped",
+ [
+ 7446
+ ]
+ ],
+ [
+ [
+ 7509,
+ 7509
+ ],
+ "mapped",
+ [
+ 7447
+ ]
+ ],
+ [
+ [
+ 7510,
+ 7510
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7511,
+ 7511
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7512,
+ 7512
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7513,
+ 7513
+ ],
+ "mapped",
+ [
+ 7453
+ ]
+ ],
+ [
+ [
+ 7514,
+ 7514
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 7515,
+ 7515
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7516,
+ 7516
+ ],
+ "mapped",
+ [
+ 7461
+ ]
+ ],
+ [
+ [
+ 7517,
+ 7517
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7518,
+ 7518
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7519,
+ 7519
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 7520,
+ 7520
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7521,
+ 7521
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7522,
+ 7522
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7523,
+ 7523
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7524,
+ 7524
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7525,
+ 7525
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7526,
+ 7526
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7527,
+ 7527
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7528,
+ 7528
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 7529,
+ 7529
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7530,
+ 7530
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7531,
+ 7531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7532,
+ 7543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7544,
+ 7544
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 7545,
+ 7578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7579,
+ 7579
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 7580,
+ 7580
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 7581,
+ 7581
+ ],
+ "mapped",
+ [
+ 597
+ ]
+ ],
+ [
+ [
+ 7582,
+ 7582
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 7583,
+ 7583
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7584,
+ 7584
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 7585,
+ 7585
+ ],
+ "mapped",
+ [
+ 607
+ ]
+ ],
+ [
+ [
+ 7586,
+ 7586
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 7587,
+ 7587
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 7588,
+ 7588
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 7589,
+ 7589
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 7590,
+ 7590
+ ],
+ "mapped",
+ [
+ 618
+ ]
+ ],
+ [
+ [
+ 7591,
+ 7591
+ ],
+ "mapped",
+ [
+ 7547
+ ]
+ ],
+ [
+ [
+ 7592,
+ 7592
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 7593,
+ 7593
+ ],
+ "mapped",
+ [
+ 621
+ ]
+ ],
+ [
+ [
+ 7594,
+ 7594
+ ],
+ "mapped",
+ [
+ 7557
+ ]
+ ],
+ [
+ [
+ 7595,
+ 7595
+ ],
+ "mapped",
+ [
+ 671
+ ]
+ ],
+ [
+ [
+ 7596,
+ 7596
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 7597,
+ 7597
+ ],
+ "mapped",
+ [
+ 624
+ ]
+ ],
+ [
+ [
+ 7598,
+ 7598
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 7599,
+ 7599
+ ],
+ "mapped",
+ [
+ 627
+ ]
+ ],
+ [
+ [
+ 7600,
+ 7600
+ ],
+ "mapped",
+ [
+ 628
+ ]
+ ],
+ [
+ [
+ 7601,
+ 7601
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 7602,
+ 7602
+ ],
+ "mapped",
+ [
+ 632
+ ]
+ ],
+ [
+ [
+ 7603,
+ 7603
+ ],
+ "mapped",
+ [
+ 642
+ ]
+ ],
+ [
+ [
+ 7604,
+ 7604
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 7605,
+ 7605
+ ],
+ "mapped",
+ [
+ 427
+ ]
+ ],
+ [
+ [
+ 7606,
+ 7606
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 7607,
+ 7607
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 7608,
+ 7608
+ ],
+ "mapped",
+ [
+ 7452
+ ]
+ ],
+ [
+ [
+ 7609,
+ 7609
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 7610,
+ 7610
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 7611,
+ 7611
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 7612,
+ 7612
+ ],
+ "mapped",
+ [
+ 656
+ ]
+ ],
+ [
+ [
+ 7613,
+ 7613
+ ],
+ "mapped",
+ [
+ 657
+ ]
+ ],
+ [
+ [
+ 7614,
+ 7614
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 7615,
+ 7615
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 7616,
+ 7619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7620,
+ 7626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7627,
+ 7654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7655,
+ 7669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7670,
+ 7675
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7676,
+ 7676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7677,
+ 7677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7678,
+ 7679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7680,
+ 7680
+ ],
+ "mapped",
+ [
+ 7681
+ ]
+ ],
+ [
+ [
+ 7681,
+ 7681
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7682,
+ 7682
+ ],
+ "mapped",
+ [
+ 7683
+ ]
+ ],
+ [
+ [
+ 7683,
+ 7683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7684,
+ 7684
+ ],
+ "mapped",
+ [
+ 7685
+ ]
+ ],
+ [
+ [
+ 7685,
+ 7685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7686,
+ 7686
+ ],
+ "mapped",
+ [
+ 7687
+ ]
+ ],
+ [
+ [
+ 7687,
+ 7687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7688,
+ 7688
+ ],
+ "mapped",
+ [
+ 7689
+ ]
+ ],
+ [
+ [
+ 7689,
+ 7689
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7690,
+ 7690
+ ],
+ "mapped",
+ [
+ 7691
+ ]
+ ],
+ [
+ [
+ 7691,
+ 7691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7692,
+ 7692
+ ],
+ "mapped",
+ [
+ 7693
+ ]
+ ],
+ [
+ [
+ 7693,
+ 7693
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7694,
+ 7694
+ ],
+ "mapped",
+ [
+ 7695
+ ]
+ ],
+ [
+ [
+ 7695,
+ 7695
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7696,
+ 7696
+ ],
+ "mapped",
+ [
+ 7697
+ ]
+ ],
+ [
+ [
+ 7697,
+ 7697
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7698,
+ 7698
+ ],
+ "mapped",
+ [
+ 7699
+ ]
+ ],
+ [
+ [
+ 7699,
+ 7699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7700,
+ 7700
+ ],
+ "mapped",
+ [
+ 7701
+ ]
+ ],
+ [
+ [
+ 7701,
+ 7701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7702,
+ 7702
+ ],
+ "mapped",
+ [
+ 7703
+ ]
+ ],
+ [
+ [
+ 7703,
+ 7703
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7704,
+ 7704
+ ],
+ "mapped",
+ [
+ 7705
+ ]
+ ],
+ [
+ [
+ 7705,
+ 7705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7706,
+ 7706
+ ],
+ "mapped",
+ [
+ 7707
+ ]
+ ],
+ [
+ [
+ 7707,
+ 7707
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7708,
+ 7708
+ ],
+ "mapped",
+ [
+ 7709
+ ]
+ ],
+ [
+ [
+ 7709,
+ 7709
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7710,
+ 7710
+ ],
+ "mapped",
+ [
+ 7711
+ ]
+ ],
+ [
+ [
+ 7711,
+ 7711
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7712,
+ 7712
+ ],
+ "mapped",
+ [
+ 7713
+ ]
+ ],
+ [
+ [
+ 7713,
+ 7713
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7714,
+ 7714
+ ],
+ "mapped",
+ [
+ 7715
+ ]
+ ],
+ [
+ [
+ 7715,
+ 7715
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7716,
+ 7716
+ ],
+ "mapped",
+ [
+ 7717
+ ]
+ ],
+ [
+ [
+ 7717,
+ 7717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7718,
+ 7718
+ ],
+ "mapped",
+ [
+ 7719
+ ]
+ ],
+ [
+ [
+ 7719,
+ 7719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7720,
+ 7720
+ ],
+ "mapped",
+ [
+ 7721
+ ]
+ ],
+ [
+ [
+ 7721,
+ 7721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7722,
+ 7722
+ ],
+ "mapped",
+ [
+ 7723
+ ]
+ ],
+ [
+ [
+ 7723,
+ 7723
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7724,
+ 7724
+ ],
+ "mapped",
+ [
+ 7725
+ ]
+ ],
+ [
+ [
+ 7725,
+ 7725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7726,
+ 7726
+ ],
+ "mapped",
+ [
+ 7727
+ ]
+ ],
+ [
+ [
+ 7727,
+ 7727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7728,
+ 7728
+ ],
+ "mapped",
+ [
+ 7729
+ ]
+ ],
+ [
+ [
+ 7729,
+ 7729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7730,
+ 7730
+ ],
+ "mapped",
+ [
+ 7731
+ ]
+ ],
+ [
+ [
+ 7731,
+ 7731
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7732,
+ 7732
+ ],
+ "mapped",
+ [
+ 7733
+ ]
+ ],
+ [
+ [
+ 7733,
+ 7733
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7734,
+ 7734
+ ],
+ "mapped",
+ [
+ 7735
+ ]
+ ],
+ [
+ [
+ 7735,
+ 7735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7736,
+ 7736
+ ],
+ "mapped",
+ [
+ 7737
+ ]
+ ],
+ [
+ [
+ 7737,
+ 7737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7738,
+ 7738
+ ],
+ "mapped",
+ [
+ 7739
+ ]
+ ],
+ [
+ [
+ 7739,
+ 7739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7740,
+ 7740
+ ],
+ "mapped",
+ [
+ 7741
+ ]
+ ],
+ [
+ [
+ 7741,
+ 7741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7742,
+ 7742
+ ],
+ "mapped",
+ [
+ 7743
+ ]
+ ],
+ [
+ [
+ 7743,
+ 7743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7744,
+ 7744
+ ],
+ "mapped",
+ [
+ 7745
+ ]
+ ],
+ [
+ [
+ 7745,
+ 7745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7746,
+ 7746
+ ],
+ "mapped",
+ [
+ 7747
+ ]
+ ],
+ [
+ [
+ 7747,
+ 7747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7748,
+ 7748
+ ],
+ "mapped",
+ [
+ 7749
+ ]
+ ],
+ [
+ [
+ 7749,
+ 7749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7750,
+ 7750
+ ],
+ "mapped",
+ [
+ 7751
+ ]
+ ],
+ [
+ [
+ 7751,
+ 7751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7752,
+ 7752
+ ],
+ "mapped",
+ [
+ 7753
+ ]
+ ],
+ [
+ [
+ 7753,
+ 7753
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7754,
+ 7754
+ ],
+ "mapped",
+ [
+ 7755
+ ]
+ ],
+ [
+ [
+ 7755,
+ 7755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7756,
+ 7756
+ ],
+ "mapped",
+ [
+ 7757
+ ]
+ ],
+ [
+ [
+ 7757,
+ 7757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7758,
+ 7758
+ ],
+ "mapped",
+ [
+ 7759
+ ]
+ ],
+ [
+ [
+ 7759,
+ 7759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7760,
+ 7760
+ ],
+ "mapped",
+ [
+ 7761
+ ]
+ ],
+ [
+ [
+ 7761,
+ 7761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7762,
+ 7762
+ ],
+ "mapped",
+ [
+ 7763
+ ]
+ ],
+ [
+ [
+ 7763,
+ 7763
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7764,
+ 7764
+ ],
+ "mapped",
+ [
+ 7765
+ ]
+ ],
+ [
+ [
+ 7765,
+ 7765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7766,
+ 7766
+ ],
+ "mapped",
+ [
+ 7767
+ ]
+ ],
+ [
+ [
+ 7767,
+ 7767
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7768,
+ 7768
+ ],
+ "mapped",
+ [
+ 7769
+ ]
+ ],
+ [
+ [
+ 7769,
+ 7769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7770,
+ 7770
+ ],
+ "mapped",
+ [
+ 7771
+ ]
+ ],
+ [
+ [
+ 7771,
+ 7771
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7772,
+ 7772
+ ],
+ "mapped",
+ [
+ 7773
+ ]
+ ],
+ [
+ [
+ 7773,
+ 7773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7774,
+ 7774
+ ],
+ "mapped",
+ [
+ 7775
+ ]
+ ],
+ [
+ [
+ 7775,
+ 7775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7776,
+ 7776
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7777,
+ 7777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7778,
+ 7778
+ ],
+ "mapped",
+ [
+ 7779
+ ]
+ ],
+ [
+ [
+ 7779,
+ 7779
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7780,
+ 7780
+ ],
+ "mapped",
+ [
+ 7781
+ ]
+ ],
+ [
+ [
+ 7781,
+ 7781
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7782,
+ 7782
+ ],
+ "mapped",
+ [
+ 7783
+ ]
+ ],
+ [
+ [
+ 7783,
+ 7783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7784,
+ 7784
+ ],
+ "mapped",
+ [
+ 7785
+ ]
+ ],
+ [
+ [
+ 7785,
+ 7785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7786,
+ 7786
+ ],
+ "mapped",
+ [
+ 7787
+ ]
+ ],
+ [
+ [
+ 7787,
+ 7787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7788,
+ 7788
+ ],
+ "mapped",
+ [
+ 7789
+ ]
+ ],
+ [
+ [
+ 7789,
+ 7789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7790,
+ 7790
+ ],
+ "mapped",
+ [
+ 7791
+ ]
+ ],
+ [
+ [
+ 7791,
+ 7791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7792,
+ 7792
+ ],
+ "mapped",
+ [
+ 7793
+ ]
+ ],
+ [
+ [
+ 7793,
+ 7793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7794,
+ 7794
+ ],
+ "mapped",
+ [
+ 7795
+ ]
+ ],
+ [
+ [
+ 7795,
+ 7795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7796,
+ 7796
+ ],
+ "mapped",
+ [
+ 7797
+ ]
+ ],
+ [
+ [
+ 7797,
+ 7797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7798,
+ 7798
+ ],
+ "mapped",
+ [
+ 7799
+ ]
+ ],
+ [
+ [
+ 7799,
+ 7799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7800,
+ 7800
+ ],
+ "mapped",
+ [
+ 7801
+ ]
+ ],
+ [
+ [
+ 7801,
+ 7801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7802,
+ 7802
+ ],
+ "mapped",
+ [
+ 7803
+ ]
+ ],
+ [
+ [
+ 7803,
+ 7803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7804,
+ 7804
+ ],
+ "mapped",
+ [
+ 7805
+ ]
+ ],
+ [
+ [
+ 7805,
+ 7805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7806,
+ 7806
+ ],
+ "mapped",
+ [
+ 7807
+ ]
+ ],
+ [
+ [
+ 7807,
+ 7807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7808,
+ 7808
+ ],
+ "mapped",
+ [
+ 7809
+ ]
+ ],
+ [
+ [
+ 7809,
+ 7809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7810,
+ 7810
+ ],
+ "mapped",
+ [
+ 7811
+ ]
+ ],
+ [
+ [
+ 7811,
+ 7811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7812,
+ 7812
+ ],
+ "mapped",
+ [
+ 7813
+ ]
+ ],
+ [
+ [
+ 7813,
+ 7813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7814,
+ 7814
+ ],
+ "mapped",
+ [
+ 7815
+ ]
+ ],
+ [
+ [
+ 7815,
+ 7815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7816,
+ 7816
+ ],
+ "mapped",
+ [
+ 7817
+ ]
+ ],
+ [
+ [
+ 7817,
+ 7817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7818,
+ 7818
+ ],
+ "mapped",
+ [
+ 7819
+ ]
+ ],
+ [
+ [
+ 7819,
+ 7819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7820,
+ 7820
+ ],
+ "mapped",
+ [
+ 7821
+ ]
+ ],
+ [
+ [
+ 7821,
+ 7821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7822,
+ 7822
+ ],
+ "mapped",
+ [
+ 7823
+ ]
+ ],
+ [
+ [
+ 7823,
+ 7823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7824,
+ 7824
+ ],
+ "mapped",
+ [
+ 7825
+ ]
+ ],
+ [
+ [
+ 7825,
+ 7825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7826,
+ 7826
+ ],
+ "mapped",
+ [
+ 7827
+ ]
+ ],
+ [
+ [
+ 7827,
+ 7827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7828,
+ 7828
+ ],
+ "mapped",
+ [
+ 7829
+ ]
+ ],
+ [
+ [
+ 7829,
+ 7833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7834,
+ 7834
+ ],
+ "mapped",
+ [
+ 97,
+ 702
+ ]
+ ],
+ [
+ [
+ 7835,
+ 7835
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7836,
+ 7837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7838,
+ 7838
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 7839,
+ 7839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7840,
+ 7840
+ ],
+ "mapped",
+ [
+ 7841
+ ]
+ ],
+ [
+ [
+ 7841,
+ 7841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7842,
+ 7842
+ ],
+ "mapped",
+ [
+ 7843
+ ]
+ ],
+ [
+ [
+ 7843,
+ 7843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7844,
+ 7844
+ ],
+ "mapped",
+ [
+ 7845
+ ]
+ ],
+ [
+ [
+ 7845,
+ 7845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7846,
+ 7846
+ ],
+ "mapped",
+ [
+ 7847
+ ]
+ ],
+ [
+ [
+ 7847,
+ 7847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7848,
+ 7848
+ ],
+ "mapped",
+ [
+ 7849
+ ]
+ ],
+ [
+ [
+ 7849,
+ 7849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7850,
+ 7850
+ ],
+ "mapped",
+ [
+ 7851
+ ]
+ ],
+ [
+ [
+ 7851,
+ 7851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7852,
+ 7852
+ ],
+ "mapped",
+ [
+ 7853
+ ]
+ ],
+ [
+ [
+ 7853,
+ 7853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7854,
+ 7854
+ ],
+ "mapped",
+ [
+ 7855
+ ]
+ ],
+ [
+ [
+ 7855,
+ 7855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7856,
+ 7856
+ ],
+ "mapped",
+ [
+ 7857
+ ]
+ ],
+ [
+ [
+ 7857,
+ 7857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7858,
+ 7858
+ ],
+ "mapped",
+ [
+ 7859
+ ]
+ ],
+ [
+ [
+ 7859,
+ 7859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7860,
+ 7860
+ ],
+ "mapped",
+ [
+ 7861
+ ]
+ ],
+ [
+ [
+ 7861,
+ 7861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7862,
+ 7862
+ ],
+ "mapped",
+ [
+ 7863
+ ]
+ ],
+ [
+ [
+ 7863,
+ 7863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7864,
+ 7864
+ ],
+ "mapped",
+ [
+ 7865
+ ]
+ ],
+ [
+ [
+ 7865,
+ 7865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7866,
+ 7866
+ ],
+ "mapped",
+ [
+ 7867
+ ]
+ ],
+ [
+ [
+ 7867,
+ 7867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7868,
+ 7868
+ ],
+ "mapped",
+ [
+ 7869
+ ]
+ ],
+ [
+ [
+ 7869,
+ 7869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7870,
+ 7870
+ ],
+ "mapped",
+ [
+ 7871
+ ]
+ ],
+ [
+ [
+ 7871,
+ 7871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7872,
+ 7872
+ ],
+ "mapped",
+ [
+ 7873
+ ]
+ ],
+ [
+ [
+ 7873,
+ 7873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7874,
+ 7874
+ ],
+ "mapped",
+ [
+ 7875
+ ]
+ ],
+ [
+ [
+ 7875,
+ 7875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7876,
+ 7876
+ ],
+ "mapped",
+ [
+ 7877
+ ]
+ ],
+ [
+ [
+ 7877,
+ 7877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7878,
+ 7878
+ ],
+ "mapped",
+ [
+ 7879
+ ]
+ ],
+ [
+ [
+ 7879,
+ 7879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7880,
+ 7880
+ ],
+ "mapped",
+ [
+ 7881
+ ]
+ ],
+ [
+ [
+ 7881,
+ 7881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7882,
+ 7882
+ ],
+ "mapped",
+ [
+ 7883
+ ]
+ ],
+ [
+ [
+ 7883,
+ 7883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7884,
+ 7884
+ ],
+ "mapped",
+ [
+ 7885
+ ]
+ ],
+ [
+ [
+ 7885,
+ 7885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7886,
+ 7886
+ ],
+ "mapped",
+ [
+ 7887
+ ]
+ ],
+ [
+ [
+ 7887,
+ 7887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7888,
+ 7888
+ ],
+ "mapped",
+ [
+ 7889
+ ]
+ ],
+ [
+ [
+ 7889,
+ 7889
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7890,
+ 7890
+ ],
+ "mapped",
+ [
+ 7891
+ ]
+ ],
+ [
+ [
+ 7891,
+ 7891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7892,
+ 7892
+ ],
+ "mapped",
+ [
+ 7893
+ ]
+ ],
+ [
+ [
+ 7893,
+ 7893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7894,
+ 7894
+ ],
+ "mapped",
+ [
+ 7895
+ ]
+ ],
+ [
+ [
+ 7895,
+ 7895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7896,
+ 7896
+ ],
+ "mapped",
+ [
+ 7897
+ ]
+ ],
+ [
+ [
+ 7897,
+ 7897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7898,
+ 7898
+ ],
+ "mapped",
+ [
+ 7899
+ ]
+ ],
+ [
+ [
+ 7899,
+ 7899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7900,
+ 7900
+ ],
+ "mapped",
+ [
+ 7901
+ ]
+ ],
+ [
+ [
+ 7901,
+ 7901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7902,
+ 7902
+ ],
+ "mapped",
+ [
+ 7903
+ ]
+ ],
+ [
+ [
+ 7903,
+ 7903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7904,
+ 7904
+ ],
+ "mapped",
+ [
+ 7905
+ ]
+ ],
+ [
+ [
+ 7905,
+ 7905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7906,
+ 7906
+ ],
+ "mapped",
+ [
+ 7907
+ ]
+ ],
+ [
+ [
+ 7907,
+ 7907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7908,
+ 7908
+ ],
+ "mapped",
+ [
+ 7909
+ ]
+ ],
+ [
+ [
+ 7909,
+ 7909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7910,
+ 7910
+ ],
+ "mapped",
+ [
+ 7911
+ ]
+ ],
+ [
+ [
+ 7911,
+ 7911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7912,
+ 7912
+ ],
+ "mapped",
+ [
+ 7913
+ ]
+ ],
+ [
+ [
+ 7913,
+ 7913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7914,
+ 7914
+ ],
+ "mapped",
+ [
+ 7915
+ ]
+ ],
+ [
+ [
+ 7915,
+ 7915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7916,
+ 7916
+ ],
+ "mapped",
+ [
+ 7917
+ ]
+ ],
+ [
+ [
+ 7917,
+ 7917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7918,
+ 7918
+ ],
+ "mapped",
+ [
+ 7919
+ ]
+ ],
+ [
+ [
+ 7919,
+ 7919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7920,
+ 7920
+ ],
+ "mapped",
+ [
+ 7921
+ ]
+ ],
+ [
+ [
+ 7921,
+ 7921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7922,
+ 7922
+ ],
+ "mapped",
+ [
+ 7923
+ ]
+ ],
+ [
+ [
+ 7923,
+ 7923
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7924,
+ 7924
+ ],
+ "mapped",
+ [
+ 7925
+ ]
+ ],
+ [
+ [
+ 7925,
+ 7925
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7926,
+ 7926
+ ],
+ "mapped",
+ [
+ 7927
+ ]
+ ],
+ [
+ [
+ 7927,
+ 7927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7928,
+ 7928
+ ],
+ "mapped",
+ [
+ 7929
+ ]
+ ],
+ [
+ [
+ 7929,
+ 7929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7930,
+ 7930
+ ],
+ "mapped",
+ [
+ 7931
+ ]
+ ],
+ [
+ [
+ 7931,
+ 7931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7932,
+ 7932
+ ],
+ "mapped",
+ [
+ 7933
+ ]
+ ],
+ [
+ [
+ 7933,
+ 7933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7934,
+ 7934
+ ],
+ "mapped",
+ [
+ 7935
+ ]
+ ],
+ [
+ [
+ 7935,
+ 7935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7936,
+ 7943
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7944,
+ 7944
+ ],
+ "mapped",
+ [
+ 7936
+ ]
+ ],
+ [
+ [
+ 7945,
+ 7945
+ ],
+ "mapped",
+ [
+ 7937
+ ]
+ ],
+ [
+ [
+ 7946,
+ 7946
+ ],
+ "mapped",
+ [
+ 7938
+ ]
+ ],
+ [
+ [
+ 7947,
+ 7947
+ ],
+ "mapped",
+ [
+ 7939
+ ]
+ ],
+ [
+ [
+ 7948,
+ 7948
+ ],
+ "mapped",
+ [
+ 7940
+ ]
+ ],
+ [
+ [
+ 7949,
+ 7949
+ ],
+ "mapped",
+ [
+ 7941
+ ]
+ ],
+ [
+ [
+ 7950,
+ 7950
+ ],
+ "mapped",
+ [
+ 7942
+ ]
+ ],
+ [
+ [
+ 7951,
+ 7951
+ ],
+ "mapped",
+ [
+ 7943
+ ]
+ ],
+ [
+ [
+ 7952,
+ 7957
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7958,
+ 7959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7960,
+ 7960
+ ],
+ "mapped",
+ [
+ 7952
+ ]
+ ],
+ [
+ [
+ 7961,
+ 7961
+ ],
+ "mapped",
+ [
+ 7953
+ ]
+ ],
+ [
+ [
+ 7962,
+ 7962
+ ],
+ "mapped",
+ [
+ 7954
+ ]
+ ],
+ [
+ [
+ 7963,
+ 7963
+ ],
+ "mapped",
+ [
+ 7955
+ ]
+ ],
+ [
+ [
+ 7964,
+ 7964
+ ],
+ "mapped",
+ [
+ 7956
+ ]
+ ],
+ [
+ [
+ 7965,
+ 7965
+ ],
+ "mapped",
+ [
+ 7957
+ ]
+ ],
+ [
+ [
+ 7966,
+ 7967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7968,
+ 7975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7976,
+ 7976
+ ],
+ "mapped",
+ [
+ 7968
+ ]
+ ],
+ [
+ [
+ 7977,
+ 7977
+ ],
+ "mapped",
+ [
+ 7969
+ ]
+ ],
+ [
+ [
+ 7978,
+ 7978
+ ],
+ "mapped",
+ [
+ 7970
+ ]
+ ],
+ [
+ [
+ 7979,
+ 7979
+ ],
+ "mapped",
+ [
+ 7971
+ ]
+ ],
+ [
+ [
+ 7980,
+ 7980
+ ],
+ "mapped",
+ [
+ 7972
+ ]
+ ],
+ [
+ [
+ 7981,
+ 7981
+ ],
+ "mapped",
+ [
+ 7973
+ ]
+ ],
+ [
+ [
+ 7982,
+ 7982
+ ],
+ "mapped",
+ [
+ 7974
+ ]
+ ],
+ [
+ [
+ 7983,
+ 7983
+ ],
+ "mapped",
+ [
+ 7975
+ ]
+ ],
+ [
+ [
+ 7984,
+ 7991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7992,
+ 7992
+ ],
+ "mapped",
+ [
+ 7984
+ ]
+ ],
+ [
+ [
+ 7993,
+ 7993
+ ],
+ "mapped",
+ [
+ 7985
+ ]
+ ],
+ [
+ [
+ 7994,
+ 7994
+ ],
+ "mapped",
+ [
+ 7986
+ ]
+ ],
+ [
+ [
+ 7995,
+ 7995
+ ],
+ "mapped",
+ [
+ 7987
+ ]
+ ],
+ [
+ [
+ 7996,
+ 7996
+ ],
+ "mapped",
+ [
+ 7988
+ ]
+ ],
+ [
+ [
+ 7997,
+ 7997
+ ],
+ "mapped",
+ [
+ 7989
+ ]
+ ],
+ [
+ [
+ 7998,
+ 7998
+ ],
+ "mapped",
+ [
+ 7990
+ ]
+ ],
+ [
+ [
+ 7999,
+ 7999
+ ],
+ "mapped",
+ [
+ 7991
+ ]
+ ],
+ [
+ [
+ 8000,
+ 8005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8006,
+ 8007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8008,
+ 8008
+ ],
+ "mapped",
+ [
+ 8000
+ ]
+ ],
+ [
+ [
+ 8009,
+ 8009
+ ],
+ "mapped",
+ [
+ 8001
+ ]
+ ],
+ [
+ [
+ 8010,
+ 8010
+ ],
+ "mapped",
+ [
+ 8002
+ ]
+ ],
+ [
+ [
+ 8011,
+ 8011
+ ],
+ "mapped",
+ [
+ 8003
+ ]
+ ],
+ [
+ [
+ 8012,
+ 8012
+ ],
+ "mapped",
+ [
+ 8004
+ ]
+ ],
+ [
+ [
+ 8013,
+ 8013
+ ],
+ "mapped",
+ [
+ 8005
+ ]
+ ],
+ [
+ [
+ 8014,
+ 8015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8016,
+ 8023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8024,
+ 8024
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8025,
+ 8025
+ ],
+ "mapped",
+ [
+ 8017
+ ]
+ ],
+ [
+ [
+ 8026,
+ 8026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8027,
+ 8027
+ ],
+ "mapped",
+ [
+ 8019
+ ]
+ ],
+ [
+ [
+ 8028,
+ 8028
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8029,
+ 8029
+ ],
+ "mapped",
+ [
+ 8021
+ ]
+ ],
+ [
+ [
+ 8030,
+ 8030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8031,
+ 8031
+ ],
+ "mapped",
+ [
+ 8023
+ ]
+ ],
+ [
+ [
+ 8032,
+ 8039
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8040,
+ 8040
+ ],
+ "mapped",
+ [
+ 8032
+ ]
+ ],
+ [
+ [
+ 8041,
+ 8041
+ ],
+ "mapped",
+ [
+ 8033
+ ]
+ ],
+ [
+ [
+ 8042,
+ 8042
+ ],
+ "mapped",
+ [
+ 8034
+ ]
+ ],
+ [
+ [
+ 8043,
+ 8043
+ ],
+ "mapped",
+ [
+ 8035
+ ]
+ ],
+ [
+ [
+ 8044,
+ 8044
+ ],
+ "mapped",
+ [
+ 8036
+ ]
+ ],
+ [
+ [
+ 8045,
+ 8045
+ ],
+ "mapped",
+ [
+ 8037
+ ]
+ ],
+ [
+ [
+ 8046,
+ 8046
+ ],
+ "mapped",
+ [
+ 8038
+ ]
+ ],
+ [
+ [
+ 8047,
+ 8047
+ ],
+ "mapped",
+ [
+ 8039
+ ]
+ ],
+ [
+ [
+ 8048,
+ 8048
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8049,
+ 8049
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8050,
+ 8050
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8051,
+ 8051
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8052,
+ 8052
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8053,
+ 8053
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8054,
+ 8054
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8055,
+ 8055
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8056,
+ 8056
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8057,
+ 8057
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8058,
+ 8058
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8059,
+ 8059
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8060,
+ 8060
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8061,
+ 8061
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8062,
+ 8063
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8064,
+ 8064
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8065,
+ 8065
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8066,
+ 8066
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8067,
+ 8067
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8068,
+ 8068
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8069,
+ 8069
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8070,
+ 8070
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8071,
+ 8071
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8072,
+ 8072
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8073,
+ 8073
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8074,
+ 8074
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8075,
+ 8075
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8076,
+ 8076
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8077,
+ 8077
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8078,
+ 8078
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8079,
+ 8079
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8080,
+ 8080
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8081,
+ 8081
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8082,
+ 8082
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8083,
+ 8083
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8084,
+ 8084
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8085,
+ 8085
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8086,
+ 8086
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8087,
+ 8087
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8088,
+ 8088
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8089,
+ 8089
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8090,
+ 8090
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8091,
+ 8091
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8092,
+ 8092
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8093,
+ 8093
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8094,
+ 8094
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8095,
+ 8095
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8096,
+ 8096
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8097,
+ 8097
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8098,
+ 8098
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8099,
+ 8099
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8100,
+ 8100
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8101,
+ 8101
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8102,
+ 8102
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8103,
+ 8103
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8104,
+ 8104
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8105,
+ 8105
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8106,
+ 8106
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8107,
+ 8107
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8108,
+ 8108
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8109,
+ 8109
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8110,
+ 8110
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8111,
+ 8111
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8112,
+ 8113
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8114,
+ 8114
+ ],
+ "mapped",
+ [
+ 8048,
+ 953
+ ]
+ ],
+ [
+ [
+ 8115,
+ 8115
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8116,
+ 8116
+ ],
+ "mapped",
+ [
+ 940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8117,
+ 8117
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8118,
+ 8118
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8119,
+ 8119
+ ],
+ "mapped",
+ [
+ 8118,
+ 953
+ ]
+ ],
+ [
+ [
+ 8120,
+ 8120
+ ],
+ "mapped",
+ [
+ 8112
+ ]
+ ],
+ [
+ [
+ 8121,
+ 8121
+ ],
+ "mapped",
+ [
+ 8113
+ ]
+ ],
+ [
+ [
+ 8122,
+ 8122
+ ],
+ "mapped",
+ [
+ 8048
+ ]
+ ],
+ [
+ [
+ 8123,
+ 8123
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8124,
+ 8124
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8125,
+ 8125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8126,
+ 8126
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 8127,
+ 8127
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8128,
+ 8128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 834
+ ]
+ ],
+ [
+ [
+ 8129,
+ 8129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 834
+ ]
+ ],
+ [
+ [
+ 8130,
+ 8130
+ ],
+ "mapped",
+ [
+ 8052,
+ 953
+ ]
+ ],
+ [
+ [
+ 8131,
+ 8131
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8132,
+ 8132
+ ],
+ "mapped",
+ [
+ 942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8133,
+ 8133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8134,
+ 8134
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8135,
+ 8135
+ ],
+ "mapped",
+ [
+ 8134,
+ 953
+ ]
+ ],
+ [
+ [
+ 8136,
+ 8136
+ ],
+ "mapped",
+ [
+ 8050
+ ]
+ ],
+ [
+ [
+ 8137,
+ 8137
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8138,
+ 8138
+ ],
+ "mapped",
+ [
+ 8052
+ ]
+ ],
+ [
+ [
+ 8139,
+ 8139
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8140,
+ 8140
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8141,
+ 8141
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 768
+ ]
+ ],
+ [
+ [
+ 8142,
+ 8142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 769
+ ]
+ ],
+ [
+ [
+ 8143,
+ 8143
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 834
+ ]
+ ],
+ [
+ [
+ 8144,
+ 8146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8147,
+ 8147
+ ],
+ "mapped",
+ [
+ 912
+ ]
+ ],
+ [
+ [
+ 8148,
+ 8149
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8150,
+ 8151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8152,
+ 8152
+ ],
+ "mapped",
+ [
+ 8144
+ ]
+ ],
+ [
+ [
+ 8153,
+ 8153
+ ],
+ "mapped",
+ [
+ 8145
+ ]
+ ],
+ [
+ [
+ 8154,
+ 8154
+ ],
+ "mapped",
+ [
+ 8054
+ ]
+ ],
+ [
+ [
+ 8155,
+ 8155
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8156,
+ 8156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8157,
+ 8157
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 768
+ ]
+ ],
+ [
+ [
+ 8158,
+ 8158
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 769
+ ]
+ ],
+ [
+ [
+ 8159,
+ 8159
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 834
+ ]
+ ],
+ [
+ [
+ 8160,
+ 8162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8163,
+ 8163
+ ],
+ "mapped",
+ [
+ 944
+ ]
+ ],
+ [
+ [
+ 8164,
+ 8167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8168,
+ 8168
+ ],
+ "mapped",
+ [
+ 8160
+ ]
+ ],
+ [
+ [
+ 8169,
+ 8169
+ ],
+ "mapped",
+ [
+ 8161
+ ]
+ ],
+ [
+ [
+ 8170,
+ 8170
+ ],
+ "mapped",
+ [
+ 8058
+ ]
+ ],
+ [
+ [
+ 8171,
+ 8171
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8172,
+ 8172
+ ],
+ "mapped",
+ [
+ 8165
+ ]
+ ],
+ [
+ [
+ 8173,
+ 8173
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 768
+ ]
+ ],
+ [
+ [
+ 8174,
+ 8174
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 8175,
+ 8175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 8176,
+ 8177
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8178,
+ 8178
+ ],
+ "mapped",
+ [
+ 8060,
+ 953
+ ]
+ ],
+ [
+ [
+ 8179,
+ 8179
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8180,
+ 8180
+ ],
+ "mapped",
+ [
+ 974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8181,
+ 8181
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8182,
+ 8182
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8183,
+ 8183
+ ],
+ "mapped",
+ [
+ 8182,
+ 953
+ ]
+ ],
+ [
+ [
+ 8184,
+ 8184
+ ],
+ "mapped",
+ [
+ 8056
+ ]
+ ],
+ [
+ [
+ 8185,
+ 8185
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8186,
+ 8186
+ ],
+ "mapped",
+ [
+ 8060
+ ]
+ ],
+ [
+ [
+ 8187,
+ 8187
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8188,
+ 8188
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8189,
+ 8189
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 8190,
+ 8190
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788
+ ]
+ ],
+ [
+ [
+ 8191,
+ 8191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8192,
+ 8202
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8203,
+ 8203
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8204,
+ 8205
+ ],
+ "deviation",
+ [
+ ]
+ ],
+ [
+ [
+ 8206,
+ 8207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8208,
+ 8208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8209,
+ 8209
+ ],
+ "mapped",
+ [
+ 8208
+ ]
+ ],
+ [
+ [
+ 8210,
+ 8214
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8215,
+ 8215
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 819
+ ]
+ ],
+ [
+ [
+ 8216,
+ 8227
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8228,
+ 8230
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8231,
+ 8231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8232,
+ 8238
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8239,
+ 8239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8240,
+ 8242
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8243,
+ 8243
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8244,
+ 8244
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8245,
+ 8245
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8246,
+ 8246
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8247,
+ 8247
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8248,
+ 8251
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8252,
+ 8252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 33
+ ]
+ ],
+ [
+ [
+ 8253,
+ 8253
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8254,
+ 8254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 8255,
+ 8262
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8263,
+ 8263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 63
+ ]
+ ],
+ [
+ [
+ 8264,
+ 8264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 33
+ ]
+ ],
+ [
+ [
+ 8265,
+ 8265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 63
+ ]
+ ],
+ [
+ [
+ 8266,
+ 8269
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8270,
+ 8274
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8275,
+ 8276
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8277,
+ 8278
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8279,
+ 8279
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8280,
+ 8286
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8287,
+ 8287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8288,
+ 8288
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8289,
+ 8291
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8292,
+ 8292
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8293,
+ 8293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8294,
+ 8297
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8298,
+ 8303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8304,
+ 8304
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8305,
+ 8305
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8306,
+ 8307
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8308,
+ 8308
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8309,
+ 8309
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8310,
+ 8310
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8311,
+ 8311
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8312,
+ 8312
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8313,
+ 8313
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8314,
+ 8314
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8315,
+ 8315
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8316,
+ 8316
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8317,
+ 8317
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8318,
+ 8318
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8319,
+ 8319
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8320,
+ 8320
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8321,
+ 8321
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 8322,
+ 8322
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 8323,
+ 8323
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 8324,
+ 8324
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8325,
+ 8325
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8326,
+ 8326
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8327,
+ 8327
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8328,
+ 8328
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8329,
+ 8329
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8330,
+ 8330
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8331,
+ 8331
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8332,
+ 8332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8333,
+ 8333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8334,
+ 8334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8335,
+ 8335
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8336,
+ 8336
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 8337,
+ 8337
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8338,
+ 8338
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8339,
+ 8339
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8340,
+ 8340
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 8341,
+ 8341
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8342,
+ 8342
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8343,
+ 8343
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8344,
+ 8344
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8345,
+ 8345
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8346,
+ 8346
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8347,
+ 8347
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 8348,
+ 8348
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 8349,
+ 8351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8352,
+ 8359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8360,
+ 8360
+ ],
+ "mapped",
+ [
+ 114,
+ 115
+ ]
+ ],
+ [
+ [
+ 8361,
+ 8362
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8363,
+ 8363
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8364,
+ 8364
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8365,
+ 8367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8368,
+ 8369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8370,
+ 8373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8374,
+ 8376
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8377,
+ 8377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8378,
+ 8378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8379,
+ 8381
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8382,
+ 8382
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8383,
+ 8399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8400,
+ 8417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8418,
+ 8419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8420,
+ 8426
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8427,
+ 8427
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8428,
+ 8431
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8432,
+ 8432
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8433,
+ 8447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8448,
+ 8448
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 99
+ ]
+ ],
+ [
+ [
+ 8449,
+ 8449
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 115
+ ]
+ ],
+ [
+ [
+ 8450,
+ 8450
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8451,
+ 8451
+ ],
+ "mapped",
+ [
+ 176,
+ 99
+ ]
+ ],
+ [
+ [
+ 8452,
+ 8452
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8453,
+ 8453
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 111
+ ]
+ ],
+ [
+ [
+ 8454,
+ 8454
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 117
+ ]
+ ],
+ [
+ [
+ 8455,
+ 8455
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 8456,
+ 8456
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8457,
+ 8457
+ ],
+ "mapped",
+ [
+ 176,
+ 102
+ ]
+ ],
+ [
+ [
+ 8458,
+ 8458
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 8459,
+ 8462
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8463,
+ 8463
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 8464,
+ 8465
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8466,
+ 8467
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8468,
+ 8468
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8469,
+ 8469
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8470,
+ 8470
+ ],
+ "mapped",
+ [
+ 110,
+ 111
+ ]
+ ],
+ [
+ [
+ 8471,
+ 8472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8473,
+ 8473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8474,
+ 8474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 8475,
+ 8477
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 8478,
+ 8479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8480,
+ 8480
+ ],
+ "mapped",
+ [
+ 115,
+ 109
+ ]
+ ],
+ [
+ [
+ 8481,
+ 8481
+ ],
+ "mapped",
+ [
+ 116,
+ 101,
+ 108
+ ]
+ ],
+ [
+ [
+ 8482,
+ 8482
+ ],
+ "mapped",
+ [
+ 116,
+ 109
+ ]
+ ],
+ [
+ [
+ 8483,
+ 8483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8484,
+ 8484
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8485,
+ 8485
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8486,
+ 8486
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 8487,
+ 8487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8488,
+ 8488
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8489,
+ 8489
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8490,
+ 8490
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8491,
+ 8491
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 8492,
+ 8492
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 8493,
+ 8493
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8494,
+ 8494
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8495,
+ 8496
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8497,
+ 8497
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 8498,
+ 8498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8499,
+ 8499
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8500,
+ 8500
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8501,
+ 8501
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 8502,
+ 8502
+ ],
+ "mapped",
+ [
+ 1489
+ ]
+ ],
+ [
+ [
+ 8503,
+ 8503
+ ],
+ "mapped",
+ [
+ 1490
+ ]
+ ],
+ [
+ [
+ 8504,
+ 8504
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 8505,
+ 8505
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8506,
+ 8506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8507,
+ 8507
+ ],
+ "mapped",
+ [
+ 102,
+ 97,
+ 120
+ ]
+ ],
+ [
+ [
+ 8508,
+ 8508
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8509,
+ 8510
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 8511,
+ 8511
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8512,
+ 8512
+ ],
+ "mapped",
+ [
+ 8721
+ ]
+ ],
+ [
+ [
+ 8513,
+ 8516
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8517,
+ 8518
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8519,
+ 8519
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8520,
+ 8520
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8521,
+ 8521
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 8522,
+ 8523
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8524,
+ 8524
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8525,
+ 8525
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8526,
+ 8526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8527,
+ 8527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8528,
+ 8528
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 55
+ ]
+ ],
+ [
+ [
+ 8529,
+ 8529
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 57
+ ]
+ ],
+ [
+ [
+ 8530,
+ 8530
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 8531,
+ 8531
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8532,
+ 8532
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8533,
+ 8533
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8534,
+ 8534
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8535,
+ 8535
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8536,
+ 8536
+ ],
+ "mapped",
+ [
+ 52,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8537,
+ 8537
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8538,
+ 8538
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8539,
+ 8539
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8540,
+ 8540
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8541,
+ 8541
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8542,
+ 8542
+ ],
+ "mapped",
+ [
+ 55,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8543,
+ 8543
+ ],
+ "mapped",
+ [
+ 49,
+ 8260
+ ]
+ ],
+ [
+ [
+ 8544,
+ 8544
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8545,
+ 8545
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8546,
+ 8546
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8547,
+ 8547
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8548,
+ 8548
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8549,
+ 8549
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8550,
+ 8550
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8551,
+ 8551
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8552,
+ 8552
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8553,
+ 8553
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8554,
+ 8554
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8555,
+ 8555
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8556,
+ 8556
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8557,
+ 8557
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8558,
+ 8558
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8559,
+ 8559
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8560,
+ 8560
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8561,
+ 8561
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8562,
+ 8562
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8563,
+ 8563
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8564,
+ 8564
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8565,
+ 8565
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8566,
+ 8566
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8567,
+ 8567
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8568,
+ 8568
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8569,
+ 8569
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8570,
+ 8570
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8571,
+ 8571
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8572,
+ 8572
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8573,
+ 8573
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8574,
+ 8574
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8575,
+ 8575
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8576,
+ 8578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8579,
+ 8579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8580,
+ 8580
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8581,
+ 8584
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8585,
+ 8585
+ ],
+ "mapped",
+ [
+ 48,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8586,
+ 8587
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8588,
+ 8591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8592,
+ 8682
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8683,
+ 8691
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8692,
+ 8703
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8704,
+ 8747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8748,
+ 8748
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8749,
+ 8749
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8750,
+ 8750
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8751,
+ 8751
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8752,
+ 8752
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8753,
+ 8799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8800,
+ 8800
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8801,
+ 8813
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8814,
+ 8815
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8816,
+ 8945
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8946,
+ 8959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8960,
+ 8960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8961,
+ 8961
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8962,
+ 9000
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9001,
+ 9001
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 9002,
+ 9002
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 9003,
+ 9082
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9083,
+ 9083
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9084,
+ 9084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9085,
+ 9114
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9115,
+ 9166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9167,
+ 9168
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9169,
+ 9179
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9180,
+ 9191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9192,
+ 9192
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9193,
+ 9203
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9204,
+ 9210
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9211,
+ 9215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9216,
+ 9252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9253,
+ 9254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9255,
+ 9279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9280,
+ 9290
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9291,
+ 9311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9312,
+ 9312
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 9313,
+ 9313
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 9314,
+ 9314
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 9315,
+ 9315
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 9316,
+ 9316
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 9317,
+ 9317
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 9318,
+ 9318
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 9319,
+ 9319
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 9320,
+ 9320
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 9321,
+ 9321
+ ],
+ "mapped",
+ [
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 9322,
+ 9322
+ ],
+ "mapped",
+ [
+ 49,
+ 49
+ ]
+ ],
+ [
+ [
+ 9323,
+ 9323
+ ],
+ "mapped",
+ [
+ 49,
+ 50
+ ]
+ ],
+ [
+ [
+ 9324,
+ 9324
+ ],
+ "mapped",
+ [
+ 49,
+ 51
+ ]
+ ],
+ [
+ [
+ 9325,
+ 9325
+ ],
+ "mapped",
+ [
+ 49,
+ 52
+ ]
+ ],
+ [
+ [
+ 9326,
+ 9326
+ ],
+ "mapped",
+ [
+ 49,
+ 53
+ ]
+ ],
+ [
+ [
+ 9327,
+ 9327
+ ],
+ "mapped",
+ [
+ 49,
+ 54
+ ]
+ ],
+ [
+ [
+ 9328,
+ 9328
+ ],
+ "mapped",
+ [
+ 49,
+ 55
+ ]
+ ],
+ [
+ [
+ 9329,
+ 9329
+ ],
+ "mapped",
+ [
+ 49,
+ 56
+ ]
+ ],
+ [
+ [
+ 9330,
+ 9330
+ ],
+ "mapped",
+ [
+ 49,
+ 57
+ ]
+ ],
+ [
+ [
+ 9331,
+ 9331
+ ],
+ "mapped",
+ [
+ 50,
+ 48
+ ]
+ ],
+ [
+ [
+ 9332,
+ 9332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9333,
+ 9333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9334,
+ 9334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9335,
+ 9335
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9336,
+ 9336
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9337,
+ 9337
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9338,
+ 9338
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9339,
+ 9339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9340,
+ 9340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9341,
+ 9341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9342,
+ 9342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9343,
+ 9343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9344,
+ 9344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9345,
+ 9345
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9346,
+ 9346
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9347,
+ 9347
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9348,
+ 9348
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9349,
+ 9349
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9350,
+ 9350
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9351,
+ 9351
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9352,
+ 9371
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9372,
+ 9372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 9373,
+ 9373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 9374,
+ 9374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 9375,
+ 9375
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 9376,
+ 9376
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 9377,
+ 9377
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 9378,
+ 9378
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 9379,
+ 9379
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 9380,
+ 9380
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 9381,
+ 9381
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 9382,
+ 9382
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 9383,
+ 9383
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 9384,
+ 9384
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 9385,
+ 9385
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 9386,
+ 9386
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 9387,
+ 9387
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 9388,
+ 9388
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 9389,
+ 9389
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 9390,
+ 9390
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 9391,
+ 9391
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 9392,
+ 9392
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 9393,
+ 9393
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 9394,
+ 9394
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 9395,
+ 9395
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 9396,
+ 9396
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 9397,
+ 9397
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 9398,
+ 9398
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9399,
+ 9399
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9400,
+ 9400
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9401,
+ 9401
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9402,
+ 9402
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9403,
+ 9403
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9404,
+ 9404
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9405,
+ 9405
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9406,
+ 9406
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9407,
+ 9407
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9408,
+ 9408
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9409,
+ 9409
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9410,
+ 9410
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9411,
+ 9411
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9412,
+ 9412
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9413,
+ 9413
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9414,
+ 9414
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9415,
+ 9415
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9416,
+ 9416
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9417,
+ 9417
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9418,
+ 9418
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9419,
+ 9419
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9420,
+ 9420
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9421,
+ 9421
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9422,
+ 9422
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9423,
+ 9423
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9424,
+ 9424
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9425,
+ 9425
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9426,
+ 9426
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9427,
+ 9427
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9428,
+ 9428
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9429,
+ 9429
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9430,
+ 9430
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9431,
+ 9431
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9432,
+ 9432
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9433,
+ 9433
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9434,
+ 9434
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9435,
+ 9435
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9436,
+ 9436
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9437,
+ 9437
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9438,
+ 9438
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9439,
+ 9439
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9440,
+ 9440
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9441,
+ 9441
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9442,
+ 9442
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9443,
+ 9443
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9444,
+ 9444
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9445,
+ 9445
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9446,
+ 9446
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9447,
+ 9447
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9448,
+ 9448
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9449,
+ 9449
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9450,
+ 9450
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 9451,
+ 9470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9471,
+ 9471
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9472,
+ 9621
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9622,
+ 9631
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9632,
+ 9711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9712,
+ 9719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9720,
+ 9727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9728,
+ 9747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9748,
+ 9749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9750,
+ 9751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9752,
+ 9752
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9753,
+ 9753
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9754,
+ 9839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9840,
+ 9841
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9842,
+ 9853
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9854,
+ 9855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9856,
+ 9865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9866,
+ 9873
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9874,
+ 9884
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9885,
+ 9885
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9886,
+ 9887
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9888,
+ 9889
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9890,
+ 9905
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9906,
+ 9906
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9907,
+ 9916
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9917,
+ 9919
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9920,
+ 9923
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9924,
+ 9933
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9934,
+ 9934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9935,
+ 9953
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9954,
+ 9954
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9955,
+ 9955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9956,
+ 9959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9960,
+ 9983
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9984,
+ 9984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9985,
+ 9988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9989,
+ 9989
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9990,
+ 9993
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9994,
+ 9995
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9996,
+ 10023
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10024,
+ 10024
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10025,
+ 10059
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10060,
+ 10060
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10061,
+ 10061
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10062,
+ 10062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10063,
+ 10066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10067,
+ 10069
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10070,
+ 10070
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10071,
+ 10071
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10072,
+ 10078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10079,
+ 10080
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10081,
+ 10087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10088,
+ 10101
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10102,
+ 10132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10133,
+ 10135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10136,
+ 10159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10160,
+ 10160
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10161,
+ 10174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10175,
+ 10175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10176,
+ 10182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10183,
+ 10186
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10187,
+ 10187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10188,
+ 10188
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10189,
+ 10189
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10190,
+ 10191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10192,
+ 10219
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10220,
+ 10223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10224,
+ 10239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10240,
+ 10495
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10496,
+ 10763
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10764,
+ 10764
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 10765,
+ 10867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10868,
+ 10868
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58,
+ 58,
+ 61
+ ]
+ ],
+ [
+ [
+ 10869,
+ 10869
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10870,
+ 10870
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10871,
+ 10971
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10972,
+ 10972
+ ],
+ "mapped",
+ [
+ 10973,
+ 824
+ ]
+ ],
+ [
+ [
+ 10973,
+ 11007
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11008,
+ 11021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11022,
+ 11027
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11028,
+ 11034
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11035,
+ 11039
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11040,
+ 11043
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11044,
+ 11084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11085,
+ 11087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11088,
+ 11092
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11093,
+ 11097
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11098,
+ 11123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11124,
+ 11125
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11126,
+ 11157
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11158,
+ 11159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11160,
+ 11193
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11194,
+ 11196
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11197,
+ 11208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11209,
+ 11209
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11210,
+ 11217
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11218,
+ 11243
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11244,
+ 11247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11248,
+ 11263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11264,
+ 11264
+ ],
+ "mapped",
+ [
+ 11312
+ ]
+ ],
+ [
+ [
+ 11265,
+ 11265
+ ],
+ "mapped",
+ [
+ 11313
+ ]
+ ],
+ [
+ [
+ 11266,
+ 11266
+ ],
+ "mapped",
+ [
+ 11314
+ ]
+ ],
+ [
+ [
+ 11267,
+ 11267
+ ],
+ "mapped",
+ [
+ 11315
+ ]
+ ],
+ [
+ [
+ 11268,
+ 11268
+ ],
+ "mapped",
+ [
+ 11316
+ ]
+ ],
+ [
+ [
+ 11269,
+ 11269
+ ],
+ "mapped",
+ [
+ 11317
+ ]
+ ],
+ [
+ [
+ 11270,
+ 11270
+ ],
+ "mapped",
+ [
+ 11318
+ ]
+ ],
+ [
+ [
+ 11271,
+ 11271
+ ],
+ "mapped",
+ [
+ 11319
+ ]
+ ],
+ [
+ [
+ 11272,
+ 11272
+ ],
+ "mapped",
+ [
+ 11320
+ ]
+ ],
+ [
+ [
+ 11273,
+ 11273
+ ],
+ "mapped",
+ [
+ 11321
+ ]
+ ],
+ [
+ [
+ 11274,
+ 11274
+ ],
+ "mapped",
+ [
+ 11322
+ ]
+ ],
+ [
+ [
+ 11275,
+ 11275
+ ],
+ "mapped",
+ [
+ 11323
+ ]
+ ],
+ [
+ [
+ 11276,
+ 11276
+ ],
+ "mapped",
+ [
+ 11324
+ ]
+ ],
+ [
+ [
+ 11277,
+ 11277
+ ],
+ "mapped",
+ [
+ 11325
+ ]
+ ],
+ [
+ [
+ 11278,
+ 11278
+ ],
+ "mapped",
+ [
+ 11326
+ ]
+ ],
+ [
+ [
+ 11279,
+ 11279
+ ],
+ "mapped",
+ [
+ 11327
+ ]
+ ],
+ [
+ [
+ 11280,
+ 11280
+ ],
+ "mapped",
+ [
+ 11328
+ ]
+ ],
+ [
+ [
+ 11281,
+ 11281
+ ],
+ "mapped",
+ [
+ 11329
+ ]
+ ],
+ [
+ [
+ 11282,
+ 11282
+ ],
+ "mapped",
+ [
+ 11330
+ ]
+ ],
+ [
+ [
+ 11283,
+ 11283
+ ],
+ "mapped",
+ [
+ 11331
+ ]
+ ],
+ [
+ [
+ 11284,
+ 11284
+ ],
+ "mapped",
+ [
+ 11332
+ ]
+ ],
+ [
+ [
+ 11285,
+ 11285
+ ],
+ "mapped",
+ [
+ 11333
+ ]
+ ],
+ [
+ [
+ 11286,
+ 11286
+ ],
+ "mapped",
+ [
+ 11334
+ ]
+ ],
+ [
+ [
+ 11287,
+ 11287
+ ],
+ "mapped",
+ [
+ 11335
+ ]
+ ],
+ [
+ [
+ 11288,
+ 11288
+ ],
+ "mapped",
+ [
+ 11336
+ ]
+ ],
+ [
+ [
+ 11289,
+ 11289
+ ],
+ "mapped",
+ [
+ 11337
+ ]
+ ],
+ [
+ [
+ 11290,
+ 11290
+ ],
+ "mapped",
+ [
+ 11338
+ ]
+ ],
+ [
+ [
+ 11291,
+ 11291
+ ],
+ "mapped",
+ [
+ 11339
+ ]
+ ],
+ [
+ [
+ 11292,
+ 11292
+ ],
+ "mapped",
+ [
+ 11340
+ ]
+ ],
+ [
+ [
+ 11293,
+ 11293
+ ],
+ "mapped",
+ [
+ 11341
+ ]
+ ],
+ [
+ [
+ 11294,
+ 11294
+ ],
+ "mapped",
+ [
+ 11342
+ ]
+ ],
+ [
+ [
+ 11295,
+ 11295
+ ],
+ "mapped",
+ [
+ 11343
+ ]
+ ],
+ [
+ [
+ 11296,
+ 11296
+ ],
+ "mapped",
+ [
+ 11344
+ ]
+ ],
+ [
+ [
+ 11297,
+ 11297
+ ],
+ "mapped",
+ [
+ 11345
+ ]
+ ],
+ [
+ [
+ 11298,
+ 11298
+ ],
+ "mapped",
+ [
+ 11346
+ ]
+ ],
+ [
+ [
+ 11299,
+ 11299
+ ],
+ "mapped",
+ [
+ 11347
+ ]
+ ],
+ [
+ [
+ 11300,
+ 11300
+ ],
+ "mapped",
+ [
+ 11348
+ ]
+ ],
+ [
+ [
+ 11301,
+ 11301
+ ],
+ "mapped",
+ [
+ 11349
+ ]
+ ],
+ [
+ [
+ 11302,
+ 11302
+ ],
+ "mapped",
+ [
+ 11350
+ ]
+ ],
+ [
+ [
+ 11303,
+ 11303
+ ],
+ "mapped",
+ [
+ 11351
+ ]
+ ],
+ [
+ [
+ 11304,
+ 11304
+ ],
+ "mapped",
+ [
+ 11352
+ ]
+ ],
+ [
+ [
+ 11305,
+ 11305
+ ],
+ "mapped",
+ [
+ 11353
+ ]
+ ],
+ [
+ [
+ 11306,
+ 11306
+ ],
+ "mapped",
+ [
+ 11354
+ ]
+ ],
+ [
+ [
+ 11307,
+ 11307
+ ],
+ "mapped",
+ [
+ 11355
+ ]
+ ],
+ [
+ [
+ 11308,
+ 11308
+ ],
+ "mapped",
+ [
+ 11356
+ ]
+ ],
+ [
+ [
+ 11309,
+ 11309
+ ],
+ "mapped",
+ [
+ 11357
+ ]
+ ],
+ [
+ [
+ 11310,
+ 11310
+ ],
+ "mapped",
+ [
+ 11358
+ ]
+ ],
+ [
+ [
+ 11311,
+ 11311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11312,
+ 11358
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11359,
+ 11359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11360,
+ 11360
+ ],
+ "mapped",
+ [
+ 11361
+ ]
+ ],
+ [
+ [
+ 11361,
+ 11361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11362,
+ 11362
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 11363,
+ 11363
+ ],
+ "mapped",
+ [
+ 7549
+ ]
+ ],
+ [
+ [
+ 11364,
+ 11364
+ ],
+ "mapped",
+ [
+ 637
+ ]
+ ],
+ [
+ [
+ 11365,
+ 11366
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11367,
+ 11367
+ ],
+ "mapped",
+ [
+ 11368
+ ]
+ ],
+ [
+ [
+ 11368,
+ 11368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11369,
+ 11369
+ ],
+ "mapped",
+ [
+ 11370
+ ]
+ ],
+ [
+ [
+ 11370,
+ 11370
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11371,
+ 11371
+ ],
+ "mapped",
+ [
+ 11372
+ ]
+ ],
+ [
+ [
+ 11372,
+ 11372
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11373,
+ 11373
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 11374,
+ 11374
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 11375,
+ 11375
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 11376,
+ 11376
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 11377,
+ 11377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11378,
+ 11378
+ ],
+ "mapped",
+ [
+ 11379
+ ]
+ ],
+ [
+ [
+ 11379,
+ 11379
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11380,
+ 11380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11381,
+ 11381
+ ],
+ "mapped",
+ [
+ 11382
+ ]
+ ],
+ [
+ [
+ 11382,
+ 11383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11384,
+ 11387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11388,
+ 11388
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 11389,
+ 11389
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 11390,
+ 11390
+ ],
+ "mapped",
+ [
+ 575
+ ]
+ ],
+ [
+ [
+ 11391,
+ 11391
+ ],
+ "mapped",
+ [
+ 576
+ ]
+ ],
+ [
+ [
+ 11392,
+ 11392
+ ],
+ "mapped",
+ [
+ 11393
+ ]
+ ],
+ [
+ [
+ 11393,
+ 11393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11394,
+ 11394
+ ],
+ "mapped",
+ [
+ 11395
+ ]
+ ],
+ [
+ [
+ 11395,
+ 11395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11396,
+ 11396
+ ],
+ "mapped",
+ [
+ 11397
+ ]
+ ],
+ [
+ [
+ 11397,
+ 11397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11398,
+ 11398
+ ],
+ "mapped",
+ [
+ 11399
+ ]
+ ],
+ [
+ [
+ 11399,
+ 11399
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11400,
+ 11400
+ ],
+ "mapped",
+ [
+ 11401
+ ]
+ ],
+ [
+ [
+ 11401,
+ 11401
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11402,
+ 11402
+ ],
+ "mapped",
+ [
+ 11403
+ ]
+ ],
+ [
+ [
+ 11403,
+ 11403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11404,
+ 11404
+ ],
+ "mapped",
+ [
+ 11405
+ ]
+ ],
+ [
+ [
+ 11405,
+ 11405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11406,
+ 11406
+ ],
+ "mapped",
+ [
+ 11407
+ ]
+ ],
+ [
+ [
+ 11407,
+ 11407
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11408,
+ 11408
+ ],
+ "mapped",
+ [
+ 11409
+ ]
+ ],
+ [
+ [
+ 11409,
+ 11409
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11410,
+ 11410
+ ],
+ "mapped",
+ [
+ 11411
+ ]
+ ],
+ [
+ [
+ 11411,
+ 11411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11412,
+ 11412
+ ],
+ "mapped",
+ [
+ 11413
+ ]
+ ],
+ [
+ [
+ 11413,
+ 11413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11414,
+ 11414
+ ],
+ "mapped",
+ [
+ 11415
+ ]
+ ],
+ [
+ [
+ 11415,
+ 11415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11416,
+ 11416
+ ],
+ "mapped",
+ [
+ 11417
+ ]
+ ],
+ [
+ [
+ 11417,
+ 11417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11418,
+ 11418
+ ],
+ "mapped",
+ [
+ 11419
+ ]
+ ],
+ [
+ [
+ 11419,
+ 11419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11420,
+ 11420
+ ],
+ "mapped",
+ [
+ 11421
+ ]
+ ],
+ [
+ [
+ 11421,
+ 11421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11422,
+ 11422
+ ],
+ "mapped",
+ [
+ 11423
+ ]
+ ],
+ [
+ [
+ 11423,
+ 11423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11424,
+ 11424
+ ],
+ "mapped",
+ [
+ 11425
+ ]
+ ],
+ [
+ [
+ 11425,
+ 11425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11426,
+ 11426
+ ],
+ "mapped",
+ [
+ 11427
+ ]
+ ],
+ [
+ [
+ 11427,
+ 11427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11428,
+ 11428
+ ],
+ "mapped",
+ [
+ 11429
+ ]
+ ],
+ [
+ [
+ 11429,
+ 11429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11430,
+ 11430
+ ],
+ "mapped",
+ [
+ 11431
+ ]
+ ],
+ [
+ [
+ 11431,
+ 11431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11432,
+ 11432
+ ],
+ "mapped",
+ [
+ 11433
+ ]
+ ],
+ [
+ [
+ 11433,
+ 11433
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11434,
+ 11434
+ ],
+ "mapped",
+ [
+ 11435
+ ]
+ ],
+ [
+ [
+ 11435,
+ 11435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11436,
+ 11436
+ ],
+ "mapped",
+ [
+ 11437
+ ]
+ ],
+ [
+ [
+ 11437,
+ 11437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11438,
+ 11438
+ ],
+ "mapped",
+ [
+ 11439
+ ]
+ ],
+ [
+ [
+ 11439,
+ 11439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11440,
+ 11440
+ ],
+ "mapped",
+ [
+ 11441
+ ]
+ ],
+ [
+ [
+ 11441,
+ 11441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11442,
+ 11442
+ ],
+ "mapped",
+ [
+ 11443
+ ]
+ ],
+ [
+ [
+ 11443,
+ 11443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11444,
+ 11444
+ ],
+ "mapped",
+ [
+ 11445
+ ]
+ ],
+ [
+ [
+ 11445,
+ 11445
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11446,
+ 11446
+ ],
+ "mapped",
+ [
+ 11447
+ ]
+ ],
+ [
+ [
+ 11447,
+ 11447
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11448,
+ 11448
+ ],
+ "mapped",
+ [
+ 11449
+ ]
+ ],
+ [
+ [
+ 11449,
+ 11449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11450,
+ 11450
+ ],
+ "mapped",
+ [
+ 11451
+ ]
+ ],
+ [
+ [
+ 11451,
+ 11451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11452,
+ 11452
+ ],
+ "mapped",
+ [
+ 11453
+ ]
+ ],
+ [
+ [
+ 11453,
+ 11453
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11454,
+ 11454
+ ],
+ "mapped",
+ [
+ 11455
+ ]
+ ],
+ [
+ [
+ 11455,
+ 11455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11456,
+ 11456
+ ],
+ "mapped",
+ [
+ 11457
+ ]
+ ],
+ [
+ [
+ 11457,
+ 11457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11458,
+ 11458
+ ],
+ "mapped",
+ [
+ 11459
+ ]
+ ],
+ [
+ [
+ 11459,
+ 11459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11460,
+ 11460
+ ],
+ "mapped",
+ [
+ 11461
+ ]
+ ],
+ [
+ [
+ 11461,
+ 11461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11462,
+ 11462
+ ],
+ "mapped",
+ [
+ 11463
+ ]
+ ],
+ [
+ [
+ 11463,
+ 11463
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11464,
+ 11464
+ ],
+ "mapped",
+ [
+ 11465
+ ]
+ ],
+ [
+ [
+ 11465,
+ 11465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11466,
+ 11466
+ ],
+ "mapped",
+ [
+ 11467
+ ]
+ ],
+ [
+ [
+ 11467,
+ 11467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11468,
+ 11468
+ ],
+ "mapped",
+ [
+ 11469
+ ]
+ ],
+ [
+ [
+ 11469,
+ 11469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11470,
+ 11470
+ ],
+ "mapped",
+ [
+ 11471
+ ]
+ ],
+ [
+ [
+ 11471,
+ 11471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11472,
+ 11472
+ ],
+ "mapped",
+ [
+ 11473
+ ]
+ ],
+ [
+ [
+ 11473,
+ 11473
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11474,
+ 11474
+ ],
+ "mapped",
+ [
+ 11475
+ ]
+ ],
+ [
+ [
+ 11475,
+ 11475
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11476,
+ 11476
+ ],
+ "mapped",
+ [
+ 11477
+ ]
+ ],
+ [
+ [
+ 11477,
+ 11477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11478,
+ 11478
+ ],
+ "mapped",
+ [
+ 11479
+ ]
+ ],
+ [
+ [
+ 11479,
+ 11479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11480,
+ 11480
+ ],
+ "mapped",
+ [
+ 11481
+ ]
+ ],
+ [
+ [
+ 11481,
+ 11481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11482,
+ 11482
+ ],
+ "mapped",
+ [
+ 11483
+ ]
+ ],
+ [
+ [
+ 11483,
+ 11483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11484,
+ 11484
+ ],
+ "mapped",
+ [
+ 11485
+ ]
+ ],
+ [
+ [
+ 11485,
+ 11485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11486,
+ 11486
+ ],
+ "mapped",
+ [
+ 11487
+ ]
+ ],
+ [
+ [
+ 11487,
+ 11487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11488,
+ 11488
+ ],
+ "mapped",
+ [
+ 11489
+ ]
+ ],
+ [
+ [
+ 11489,
+ 11489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11490,
+ 11490
+ ],
+ "mapped",
+ [
+ 11491
+ ]
+ ],
+ [
+ [
+ 11491,
+ 11492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11493,
+ 11498
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11499,
+ 11499
+ ],
+ "mapped",
+ [
+ 11500
+ ]
+ ],
+ [
+ [
+ 11500,
+ 11500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11501,
+ 11501
+ ],
+ "mapped",
+ [
+ 11502
+ ]
+ ],
+ [
+ [
+ 11502,
+ 11505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11506,
+ 11506
+ ],
+ "mapped",
+ [
+ 11507
+ ]
+ ],
+ [
+ [
+ 11507,
+ 11507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11508,
+ 11512
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11513,
+ 11519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11520,
+ 11557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11558,
+ 11558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11559,
+ 11559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11560,
+ 11564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11565,
+ 11565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11566,
+ 11567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11568,
+ 11621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11622,
+ 11623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11624,
+ 11630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11631,
+ 11631
+ ],
+ "mapped",
+ [
+ 11617
+ ]
+ ],
+ [
+ [
+ 11632,
+ 11632
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11633,
+ 11646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11647,
+ 11647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11648,
+ 11670
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11671,
+ 11679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11680,
+ 11686
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11687,
+ 11687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11688,
+ 11694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11695,
+ 11695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11696,
+ 11702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11703,
+ 11703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11704,
+ 11710
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11711,
+ 11711
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11712,
+ 11718
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11719,
+ 11719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11720,
+ 11726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11727,
+ 11727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11728,
+ 11734
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11735,
+ 11735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11736,
+ 11742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11743,
+ 11743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11744,
+ 11775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11776,
+ 11799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11800,
+ 11803
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11804,
+ 11805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11806,
+ 11822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11823,
+ 11823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11824,
+ 11824
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11825,
+ 11825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11826,
+ 11835
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11836,
+ 11842
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11843,
+ 11903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11904,
+ 11929
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11930,
+ 11930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11931,
+ 11934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11935,
+ 11935
+ ],
+ "mapped",
+ [
+ 27597
+ ]
+ ],
+ [
+ [
+ 11936,
+ 12018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12019,
+ 12019
+ ],
+ "mapped",
+ [
+ 40863
+ ]
+ ],
+ [
+ [
+ 12020,
+ 12031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12032,
+ 12032
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12033,
+ 12033
+ ],
+ "mapped",
+ [
+ 20008
+ ]
+ ],
+ [
+ [
+ 12034,
+ 12034
+ ],
+ "mapped",
+ [
+ 20022
+ ]
+ ],
+ [
+ [
+ 12035,
+ 12035
+ ],
+ "mapped",
+ [
+ 20031
+ ]
+ ],
+ [
+ [
+ 12036,
+ 12036
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12037,
+ 12037
+ ],
+ "mapped",
+ [
+ 20101
+ ]
+ ],
+ [
+ [
+ 12038,
+ 12038
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12039,
+ 12039
+ ],
+ "mapped",
+ [
+ 20128
+ ]
+ ],
+ [
+ [
+ 12040,
+ 12040
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12041,
+ 12041
+ ],
+ "mapped",
+ [
+ 20799
+ ]
+ ],
+ [
+ [
+ 12042,
+ 12042
+ ],
+ "mapped",
+ [
+ 20837
+ ]
+ ],
+ [
+ [
+ 12043,
+ 12043
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12044,
+ 12044
+ ],
+ "mapped",
+ [
+ 20866
+ ]
+ ],
+ [
+ [
+ 12045,
+ 12045
+ ],
+ "mapped",
+ [
+ 20886
+ ]
+ ],
+ [
+ [
+ 12046,
+ 12046
+ ],
+ "mapped",
+ [
+ 20907
+ ]
+ ],
+ [
+ [
+ 12047,
+ 12047
+ ],
+ "mapped",
+ [
+ 20960
+ ]
+ ],
+ [
+ [
+ 12048,
+ 12048
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 12049,
+ 12049
+ ],
+ "mapped",
+ [
+ 20992
+ ]
+ ],
+ [
+ [
+ 12050,
+ 12050
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 12051,
+ 12051
+ ],
+ "mapped",
+ [
+ 21241
+ ]
+ ],
+ [
+ [
+ 12052,
+ 12052
+ ],
+ "mapped",
+ [
+ 21269
+ ]
+ ],
+ [
+ [
+ 12053,
+ 12053
+ ],
+ "mapped",
+ [
+ 21274
+ ]
+ ],
+ [
+ [
+ 12054,
+ 12054
+ ],
+ "mapped",
+ [
+ 21304
+ ]
+ ],
+ [
+ [
+ 12055,
+ 12055
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12056,
+ 12056
+ ],
+ "mapped",
+ [
+ 21340
+ ]
+ ],
+ [
+ [
+ 12057,
+ 12057
+ ],
+ "mapped",
+ [
+ 21353
+ ]
+ ],
+ [
+ [
+ 12058,
+ 12058
+ ],
+ "mapped",
+ [
+ 21378
+ ]
+ ],
+ [
+ [
+ 12059,
+ 12059
+ ],
+ "mapped",
+ [
+ 21430
+ ]
+ ],
+ [
+ [
+ 12060,
+ 12060
+ ],
+ "mapped",
+ [
+ 21448
+ ]
+ ],
+ [
+ [
+ 12061,
+ 12061
+ ],
+ "mapped",
+ [
+ 21475
+ ]
+ ],
+ [
+ [
+ 12062,
+ 12062
+ ],
+ "mapped",
+ [
+ 22231
+ ]
+ ],
+ [
+ [
+ 12063,
+ 12063
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12064,
+ 12064
+ ],
+ "mapped",
+ [
+ 22763
+ ]
+ ],
+ [
+ [
+ 12065,
+ 12065
+ ],
+ "mapped",
+ [
+ 22786
+ ]
+ ],
+ [
+ [
+ 12066,
+ 12066
+ ],
+ "mapped",
+ [
+ 22794
+ ]
+ ],
+ [
+ [
+ 12067,
+ 12067
+ ],
+ "mapped",
+ [
+ 22805
+ ]
+ ],
+ [
+ [
+ 12068,
+ 12068
+ ],
+ "mapped",
+ [
+ 22823
+ ]
+ ],
+ [
+ [
+ 12069,
+ 12069
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12070,
+ 12070
+ ],
+ "mapped",
+ [
+ 23376
+ ]
+ ],
+ [
+ [
+ 12071,
+ 12071
+ ],
+ "mapped",
+ [
+ 23424
+ ]
+ ],
+ [
+ [
+ 12072,
+ 12072
+ ],
+ "mapped",
+ [
+ 23544
+ ]
+ ],
+ [
+ [
+ 12073,
+ 12073
+ ],
+ "mapped",
+ [
+ 23567
+ ]
+ ],
+ [
+ [
+ 12074,
+ 12074
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 12075,
+ 12075
+ ],
+ "mapped",
+ [
+ 23608
+ ]
+ ],
+ [
+ [
+ 12076,
+ 12076
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 12077,
+ 12077
+ ],
+ "mapped",
+ [
+ 23665
+ ]
+ ],
+ [
+ [
+ 12078,
+ 12078
+ ],
+ "mapped",
+ [
+ 24027
+ ]
+ ],
+ [
+ [
+ 12079,
+ 12079
+ ],
+ "mapped",
+ [
+ 24037
+ ]
+ ],
+ [
+ [
+ 12080,
+ 12080
+ ],
+ "mapped",
+ [
+ 24049
+ ]
+ ],
+ [
+ [
+ 12081,
+ 12081
+ ],
+ "mapped",
+ [
+ 24062
+ ]
+ ],
+ [
+ [
+ 12082,
+ 12082
+ ],
+ "mapped",
+ [
+ 24178
+ ]
+ ],
+ [
+ [
+ 12083,
+ 12083
+ ],
+ "mapped",
+ [
+ 24186
+ ]
+ ],
+ [
+ [
+ 12084,
+ 12084
+ ],
+ "mapped",
+ [
+ 24191
+ ]
+ ],
+ [
+ [
+ 12085,
+ 12085
+ ],
+ "mapped",
+ [
+ 24308
+ ]
+ ],
+ [
+ [
+ 12086,
+ 12086
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 12087,
+ 12087
+ ],
+ "mapped",
+ [
+ 24331
+ ]
+ ],
+ [
+ [
+ 12088,
+ 12088
+ ],
+ "mapped",
+ [
+ 24339
+ ]
+ ],
+ [
+ [
+ 12089,
+ 12089
+ ],
+ "mapped",
+ [
+ 24400
+ ]
+ ],
+ [
+ [
+ 12090,
+ 12090
+ ],
+ "mapped",
+ [
+ 24417
+ ]
+ ],
+ [
+ [
+ 12091,
+ 12091
+ ],
+ "mapped",
+ [
+ 24435
+ ]
+ ],
+ [
+ [
+ 12092,
+ 12092
+ ],
+ "mapped",
+ [
+ 24515
+ ]
+ ],
+ [
+ [
+ 12093,
+ 12093
+ ],
+ "mapped",
+ [
+ 25096
+ ]
+ ],
+ [
+ [
+ 12094,
+ 12094
+ ],
+ "mapped",
+ [
+ 25142
+ ]
+ ],
+ [
+ [
+ 12095,
+ 12095
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 12096,
+ 12096
+ ],
+ "mapped",
+ [
+ 25903
+ ]
+ ],
+ [
+ [
+ 12097,
+ 12097
+ ],
+ "mapped",
+ [
+ 25908
+ ]
+ ],
+ [
+ [
+ 12098,
+ 12098
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12099,
+ 12099
+ ],
+ "mapped",
+ [
+ 26007
+ ]
+ ],
+ [
+ [
+ 12100,
+ 12100
+ ],
+ "mapped",
+ [
+ 26020
+ ]
+ ],
+ [
+ [
+ 12101,
+ 12101
+ ],
+ "mapped",
+ [
+ 26041
+ ]
+ ],
+ [
+ [
+ 12102,
+ 12102
+ ],
+ "mapped",
+ [
+ 26080
+ ]
+ ],
+ [
+ [
+ 12103,
+ 12103
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12104,
+ 12104
+ ],
+ "mapped",
+ [
+ 26352
+ ]
+ ],
+ [
+ [
+ 12105,
+ 12105
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12106,
+ 12106
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12107,
+ 12107
+ ],
+ "mapped",
+ [
+ 27424
+ ]
+ ],
+ [
+ [
+ 12108,
+ 12108
+ ],
+ "mapped",
+ [
+ 27490
+ ]
+ ],
+ [
+ [
+ 12109,
+ 12109
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 12110,
+ 12110
+ ],
+ "mapped",
+ [
+ 27571
+ ]
+ ],
+ [
+ [
+ 12111,
+ 12111
+ ],
+ "mapped",
+ [
+ 27595
+ ]
+ ],
+ [
+ [
+ 12112,
+ 12112
+ ],
+ "mapped",
+ [
+ 27604
+ ]
+ ],
+ [
+ [
+ 12113,
+ 12113
+ ],
+ "mapped",
+ [
+ 27611
+ ]
+ ],
+ [
+ [
+ 12114,
+ 12114
+ ],
+ "mapped",
+ [
+ 27663
+ ]
+ ],
+ [
+ [
+ 12115,
+ 12115
+ ],
+ "mapped",
+ [
+ 27668
+ ]
+ ],
+ [
+ [
+ 12116,
+ 12116
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12117,
+ 12117
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12118,
+ 12118
+ ],
+ "mapped",
+ [
+ 29226
+ ]
+ ],
+ [
+ [
+ 12119,
+ 12119
+ ],
+ "mapped",
+ [
+ 29238
+ ]
+ ],
+ [
+ [
+ 12120,
+ 12120
+ ],
+ "mapped",
+ [
+ 29243
+ ]
+ ],
+ [
+ [
+ 12121,
+ 12121
+ ],
+ "mapped",
+ [
+ 29247
+ ]
+ ],
+ [
+ [
+ 12122,
+ 12122
+ ],
+ "mapped",
+ [
+ 29255
+ ]
+ ],
+ [
+ [
+ 12123,
+ 12123
+ ],
+ "mapped",
+ [
+ 29273
+ ]
+ ],
+ [
+ [
+ 12124,
+ 12124
+ ],
+ "mapped",
+ [
+ 29275
+ ]
+ ],
+ [
+ [
+ 12125,
+ 12125
+ ],
+ "mapped",
+ [
+ 29356
+ ]
+ ],
+ [
+ [
+ 12126,
+ 12126
+ ],
+ "mapped",
+ [
+ 29572
+ ]
+ ],
+ [
+ [
+ 12127,
+ 12127
+ ],
+ "mapped",
+ [
+ 29577
+ ]
+ ],
+ [
+ [
+ 12128,
+ 12128
+ ],
+ "mapped",
+ [
+ 29916
+ ]
+ ],
+ [
+ [
+ 12129,
+ 12129
+ ],
+ "mapped",
+ [
+ 29926
+ ]
+ ],
+ [
+ [
+ 12130,
+ 12130
+ ],
+ "mapped",
+ [
+ 29976
+ ]
+ ],
+ [
+ [
+ 12131,
+ 12131
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 12132,
+ 12132
+ ],
+ "mapped",
+ [
+ 29992
+ ]
+ ],
+ [
+ [
+ 12133,
+ 12133
+ ],
+ "mapped",
+ [
+ 30000
+ ]
+ ],
+ [
+ [
+ 12134,
+ 12134
+ ],
+ "mapped",
+ [
+ 30091
+ ]
+ ],
+ [
+ [
+ 12135,
+ 12135
+ ],
+ "mapped",
+ [
+ 30098
+ ]
+ ],
+ [
+ [
+ 12136,
+ 12136
+ ],
+ "mapped",
+ [
+ 30326
+ ]
+ ],
+ [
+ [
+ 12137,
+ 12137
+ ],
+ "mapped",
+ [
+ 30333
+ ]
+ ],
+ [
+ [
+ 12138,
+ 12138
+ ],
+ "mapped",
+ [
+ 30382
+ ]
+ ],
+ [
+ [
+ 12139,
+ 12139
+ ],
+ "mapped",
+ [
+ 30399
+ ]
+ ],
+ [
+ [
+ 12140,
+ 12140
+ ],
+ "mapped",
+ [
+ 30446
+ ]
+ ],
+ [
+ [
+ 12141,
+ 12141
+ ],
+ "mapped",
+ [
+ 30683
+ ]
+ ],
+ [
+ [
+ 12142,
+ 12142
+ ],
+ "mapped",
+ [
+ 30690
+ ]
+ ],
+ [
+ [
+ 12143,
+ 12143
+ ],
+ "mapped",
+ [
+ 30707
+ ]
+ ],
+ [
+ [
+ 12144,
+ 12144
+ ],
+ "mapped",
+ [
+ 31034
+ ]
+ ],
+ [
+ [
+ 12145,
+ 12145
+ ],
+ "mapped",
+ [
+ 31160
+ ]
+ ],
+ [
+ [
+ 12146,
+ 12146
+ ],
+ "mapped",
+ [
+ 31166
+ ]
+ ],
+ [
+ [
+ 12147,
+ 12147
+ ],
+ "mapped",
+ [
+ 31348
+ ]
+ ],
+ [
+ [
+ 12148,
+ 12148
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 12149,
+ 12149
+ ],
+ "mapped",
+ [
+ 31481
+ ]
+ ],
+ [
+ [
+ 12150,
+ 12150
+ ],
+ "mapped",
+ [
+ 31859
+ ]
+ ],
+ [
+ [
+ 12151,
+ 12151
+ ],
+ "mapped",
+ [
+ 31992
+ ]
+ ],
+ [
+ [
+ 12152,
+ 12152
+ ],
+ "mapped",
+ [
+ 32566
+ ]
+ ],
+ [
+ [
+ 12153,
+ 12153
+ ],
+ "mapped",
+ [
+ 32593
+ ]
+ ],
+ [
+ [
+ 12154,
+ 12154
+ ],
+ "mapped",
+ [
+ 32650
+ ]
+ ],
+ [
+ [
+ 12155,
+ 12155
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 12156,
+ 12156
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 12157,
+ 12157
+ ],
+ "mapped",
+ [
+ 32780
+ ]
+ ],
+ [
+ [
+ 12158,
+ 12158
+ ],
+ "mapped",
+ [
+ 32786
+ ]
+ ],
+ [
+ [
+ 12159,
+ 12159
+ ],
+ "mapped",
+ [
+ 32819
+ ]
+ ],
+ [
+ [
+ 12160,
+ 12160
+ ],
+ "mapped",
+ [
+ 32895
+ ]
+ ],
+ [
+ [
+ 12161,
+ 12161
+ ],
+ "mapped",
+ [
+ 32905
+ ]
+ ],
+ [
+ [
+ 12162,
+ 12162
+ ],
+ "mapped",
+ [
+ 33251
+ ]
+ ],
+ [
+ [
+ 12163,
+ 12163
+ ],
+ "mapped",
+ [
+ 33258
+ ]
+ ],
+ [
+ [
+ 12164,
+ 12164
+ ],
+ "mapped",
+ [
+ 33267
+ ]
+ ],
+ [
+ [
+ 12165,
+ 12165
+ ],
+ "mapped",
+ [
+ 33276
+ ]
+ ],
+ [
+ [
+ 12166,
+ 12166
+ ],
+ "mapped",
+ [
+ 33292
+ ]
+ ],
+ [
+ [
+ 12167,
+ 12167
+ ],
+ "mapped",
+ [
+ 33307
+ ]
+ ],
+ [
+ [
+ 12168,
+ 12168
+ ],
+ "mapped",
+ [
+ 33311
+ ]
+ ],
+ [
+ [
+ 12169,
+ 12169
+ ],
+ "mapped",
+ [
+ 33390
+ ]
+ ],
+ [
+ [
+ 12170,
+ 12170
+ ],
+ "mapped",
+ [
+ 33394
+ ]
+ ],
+ [
+ [
+ 12171,
+ 12171
+ ],
+ "mapped",
+ [
+ 33400
+ ]
+ ],
+ [
+ [
+ 12172,
+ 12172
+ ],
+ "mapped",
+ [
+ 34381
+ ]
+ ],
+ [
+ [
+ 12173,
+ 12173
+ ],
+ "mapped",
+ [
+ 34411
+ ]
+ ],
+ [
+ [
+ 12174,
+ 12174
+ ],
+ "mapped",
+ [
+ 34880
+ ]
+ ],
+ [
+ [
+ 12175,
+ 12175
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 12176,
+ 12176
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 12177,
+ 12177
+ ],
+ "mapped",
+ [
+ 35198
+ ]
+ ],
+ [
+ [
+ 12178,
+ 12178
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 12179,
+ 12179
+ ],
+ "mapped",
+ [
+ 35282
+ ]
+ ],
+ [
+ [
+ 12180,
+ 12180
+ ],
+ "mapped",
+ [
+ 35328
+ ]
+ ],
+ [
+ [
+ 12181,
+ 12181
+ ],
+ "mapped",
+ [
+ 35895
+ ]
+ ],
+ [
+ [
+ 12182,
+ 12182
+ ],
+ "mapped",
+ [
+ 35910
+ ]
+ ],
+ [
+ [
+ 12183,
+ 12183
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 12184,
+ 12184
+ ],
+ "mapped",
+ [
+ 35960
+ ]
+ ],
+ [
+ [
+ 12185,
+ 12185
+ ],
+ "mapped",
+ [
+ 35997
+ ]
+ ],
+ [
+ [
+ 12186,
+ 12186
+ ],
+ "mapped",
+ [
+ 36196
+ ]
+ ],
+ [
+ [
+ 12187,
+ 12187
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 12188,
+ 12188
+ ],
+ "mapped",
+ [
+ 36275
+ ]
+ ],
+ [
+ [
+ 12189,
+ 12189
+ ],
+ "mapped",
+ [
+ 36523
+ ]
+ ],
+ [
+ [
+ 12190,
+ 12190
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 12191,
+ 12191
+ ],
+ "mapped",
+ [
+ 36763
+ ]
+ ],
+ [
+ [
+ 12192,
+ 12192
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 12193,
+ 12193
+ ],
+ "mapped",
+ [
+ 36789
+ ]
+ ],
+ [
+ [
+ 12194,
+ 12194
+ ],
+ "mapped",
+ [
+ 37009
+ ]
+ ],
+ [
+ [
+ 12195,
+ 12195
+ ],
+ "mapped",
+ [
+ 37193
+ ]
+ ],
+ [
+ [
+ 12196,
+ 12196
+ ],
+ "mapped",
+ [
+ 37318
+ ]
+ ],
+ [
+ [
+ 12197,
+ 12197
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 12198,
+ 12198
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12199,
+ 12199
+ ],
+ "mapped",
+ [
+ 38263
+ ]
+ ],
+ [
+ [
+ 12200,
+ 12200
+ ],
+ "mapped",
+ [
+ 38272
+ ]
+ ],
+ [
+ [
+ 12201,
+ 12201
+ ],
+ "mapped",
+ [
+ 38428
+ ]
+ ],
+ [
+ [
+ 12202,
+ 12202
+ ],
+ "mapped",
+ [
+ 38582
+ ]
+ ],
+ [
+ [
+ 12203,
+ 12203
+ ],
+ "mapped",
+ [
+ 38585
+ ]
+ ],
+ [
+ [
+ 12204,
+ 12204
+ ],
+ "mapped",
+ [
+ 38632
+ ]
+ ],
+ [
+ [
+ 12205,
+ 12205
+ ],
+ "mapped",
+ [
+ 38737
+ ]
+ ],
+ [
+ [
+ 12206,
+ 12206
+ ],
+ "mapped",
+ [
+ 38750
+ ]
+ ],
+ [
+ [
+ 12207,
+ 12207
+ ],
+ "mapped",
+ [
+ 38754
+ ]
+ ],
+ [
+ [
+ 12208,
+ 12208
+ ],
+ "mapped",
+ [
+ 38761
+ ]
+ ],
+ [
+ [
+ 12209,
+ 12209
+ ],
+ "mapped",
+ [
+ 38859
+ ]
+ ],
+ [
+ [
+ 12210,
+ 12210
+ ],
+ "mapped",
+ [
+ 38893
+ ]
+ ],
+ [
+ [
+ 12211,
+ 12211
+ ],
+ "mapped",
+ [
+ 38899
+ ]
+ ],
+ [
+ [
+ 12212,
+ 12212
+ ],
+ "mapped",
+ [
+ 38913
+ ]
+ ],
+ [
+ [
+ 12213,
+ 12213
+ ],
+ "mapped",
+ [
+ 39080
+ ]
+ ],
+ [
+ [
+ 12214,
+ 12214
+ ],
+ "mapped",
+ [
+ 39131
+ ]
+ ],
+ [
+ [
+ 12215,
+ 12215
+ ],
+ "mapped",
+ [
+ 39135
+ ]
+ ],
+ [
+ [
+ 12216,
+ 12216
+ ],
+ "mapped",
+ [
+ 39318
+ ]
+ ],
+ [
+ [
+ 12217,
+ 12217
+ ],
+ "mapped",
+ [
+ 39321
+ ]
+ ],
+ [
+ [
+ 12218,
+ 12218
+ ],
+ "mapped",
+ [
+ 39340
+ ]
+ ],
+ [
+ [
+ 12219,
+ 12219
+ ],
+ "mapped",
+ [
+ 39592
+ ]
+ ],
+ [
+ [
+ 12220,
+ 12220
+ ],
+ "mapped",
+ [
+ 39640
+ ]
+ ],
+ [
+ [
+ 12221,
+ 12221
+ ],
+ "mapped",
+ [
+ 39647
+ ]
+ ],
+ [
+ [
+ 12222,
+ 12222
+ ],
+ "mapped",
+ [
+ 39717
+ ]
+ ],
+ [
+ [
+ 12223,
+ 12223
+ ],
+ "mapped",
+ [
+ 39727
+ ]
+ ],
+ [
+ [
+ 12224,
+ 12224
+ ],
+ "mapped",
+ [
+ 39730
+ ]
+ ],
+ [
+ [
+ 12225,
+ 12225
+ ],
+ "mapped",
+ [
+ 39740
+ ]
+ ],
+ [
+ [
+ 12226,
+ 12226
+ ],
+ "mapped",
+ [
+ 39770
+ ]
+ ],
+ [
+ [
+ 12227,
+ 12227
+ ],
+ "mapped",
+ [
+ 40165
+ ]
+ ],
+ [
+ [
+ 12228,
+ 12228
+ ],
+ "mapped",
+ [
+ 40565
+ ]
+ ],
+ [
+ [
+ 12229,
+ 12229
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 12230,
+ 12230
+ ],
+ "mapped",
+ [
+ 40613
+ ]
+ ],
+ [
+ [
+ 12231,
+ 12231
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 12232,
+ 12232
+ ],
+ "mapped",
+ [
+ 40643
+ ]
+ ],
+ [
+ [
+ 12233,
+ 12233
+ ],
+ "mapped",
+ [
+ 40653
+ ]
+ ],
+ [
+ [
+ 12234,
+ 12234
+ ],
+ "mapped",
+ [
+ 40657
+ ]
+ ],
+ [
+ [
+ 12235,
+ 12235
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 12236,
+ 12236
+ ],
+ "mapped",
+ [
+ 40701
+ ]
+ ],
+ [
+ [
+ 12237,
+ 12237
+ ],
+ "mapped",
+ [
+ 40718
+ ]
+ ],
+ [
+ [
+ 12238,
+ 12238
+ ],
+ "mapped",
+ [
+ 40723
+ ]
+ ],
+ [
+ [
+ 12239,
+ 12239
+ ],
+ "mapped",
+ [
+ 40736
+ ]
+ ],
+ [
+ [
+ 12240,
+ 12240
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 12241,
+ 12241
+ ],
+ "mapped",
+ [
+ 40778
+ ]
+ ],
+ [
+ [
+ 12242,
+ 12242
+ ],
+ "mapped",
+ [
+ 40786
+ ]
+ ],
+ [
+ [
+ 12243,
+ 12243
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 12244,
+ 12244
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 12245,
+ 12245
+ ],
+ "mapped",
+ [
+ 40864
+ ]
+ ],
+ [
+ [
+ 12246,
+ 12271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12272,
+ 12283
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12284,
+ 12287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12288,
+ 12288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 12289,
+ 12289
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12290,
+ 12290
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 12291,
+ 12292
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12293,
+ 12295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12296,
+ 12329
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12330,
+ 12333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12334,
+ 12341
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12342,
+ 12342
+ ],
+ "mapped",
+ [
+ 12306
+ ]
+ ],
+ [
+ [
+ 12343,
+ 12343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12344,
+ 12344
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12345,
+ 12345
+ ],
+ "mapped",
+ [
+ 21316
+ ]
+ ],
+ [
+ [
+ 12346,
+ 12346
+ ],
+ "mapped",
+ [
+ 21317
+ ]
+ ],
+ [
+ [
+ 12347,
+ 12347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12348,
+ 12348
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12349,
+ 12349
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12350,
+ 12350
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12351,
+ 12351
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12352,
+ 12352
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12353,
+ 12436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12437,
+ 12438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12439,
+ 12440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12441,
+ 12442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12443,
+ 12443
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12441
+ ]
+ ],
+ [
+ [
+ 12444,
+ 12444
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12442
+ ]
+ ],
+ [
+ [
+ 12445,
+ 12446
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12447,
+ 12447
+ ],
+ "mapped",
+ [
+ 12424,
+ 12426
+ ]
+ ],
+ [
+ [
+ 12448,
+ 12448
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12449,
+ 12542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12543,
+ 12543
+ ],
+ "mapped",
+ [
+ 12467,
+ 12488
+ ]
+ ],
+ [
+ [
+ 12544,
+ 12548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12549,
+ 12588
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12589,
+ 12589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12590,
+ 12592
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12593,
+ 12593
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12594,
+ 12594
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 12595,
+ 12595
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 12596,
+ 12596
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12597,
+ 12597
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 12598,
+ 12598
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 12599,
+ 12599
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12600,
+ 12600
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 12601,
+ 12601
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12602,
+ 12602
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 12603,
+ 12603
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 12604,
+ 12604
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 12605,
+ 12605
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 12606,
+ 12606
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 12607,
+ 12607
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 12608,
+ 12608
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 12609,
+ 12609
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12610,
+ 12610
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12611,
+ 12611
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 12612,
+ 12612
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 12613,
+ 12613
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12614,
+ 12614
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 12615,
+ 12615
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12616,
+ 12616
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12617,
+ 12617
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 12618,
+ 12618
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12619,
+ 12619
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12620,
+ 12620
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12621,
+ 12621
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12622,
+ 12622
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12623,
+ 12623
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 12624,
+ 12624
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 12625,
+ 12625
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 12626,
+ 12626
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 12627,
+ 12627
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 12628,
+ 12628
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 12629,
+ 12629
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 12630,
+ 12630
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 12631,
+ 12631
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 12632,
+ 12632
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 12633,
+ 12633
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 12634,
+ 12634
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 12635,
+ 12635
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 12636,
+ 12636
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 12637,
+ 12637
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 12638,
+ 12638
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 12639,
+ 12639
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 12640,
+ 12640
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 12641,
+ 12641
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 12642,
+ 12642
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 12643,
+ 12643
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 12644,
+ 12644
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12645,
+ 12645
+ ],
+ "mapped",
+ [
+ 4372
+ ]
+ ],
+ [
+ [
+ 12646,
+ 12646
+ ],
+ "mapped",
+ [
+ 4373
+ ]
+ ],
+ [
+ [
+ 12647,
+ 12647
+ ],
+ "mapped",
+ [
+ 4551
+ ]
+ ],
+ [
+ [
+ 12648,
+ 12648
+ ],
+ "mapped",
+ [
+ 4552
+ ]
+ ],
+ [
+ [
+ 12649,
+ 12649
+ ],
+ "mapped",
+ [
+ 4556
+ ]
+ ],
+ [
+ [
+ 12650,
+ 12650
+ ],
+ "mapped",
+ [
+ 4558
+ ]
+ ],
+ [
+ [
+ 12651,
+ 12651
+ ],
+ "mapped",
+ [
+ 4563
+ ]
+ ],
+ [
+ [
+ 12652,
+ 12652
+ ],
+ "mapped",
+ [
+ 4567
+ ]
+ ],
+ [
+ [
+ 12653,
+ 12653
+ ],
+ "mapped",
+ [
+ 4569
+ ]
+ ],
+ [
+ [
+ 12654,
+ 12654
+ ],
+ "mapped",
+ [
+ 4380
+ ]
+ ],
+ [
+ [
+ 12655,
+ 12655
+ ],
+ "mapped",
+ [
+ 4573
+ ]
+ ],
+ [
+ [
+ 12656,
+ 12656
+ ],
+ "mapped",
+ [
+ 4575
+ ]
+ ],
+ [
+ [
+ 12657,
+ 12657
+ ],
+ "mapped",
+ [
+ 4381
+ ]
+ ],
+ [
+ [
+ 12658,
+ 12658
+ ],
+ "mapped",
+ [
+ 4382
+ ]
+ ],
+ [
+ [
+ 12659,
+ 12659
+ ],
+ "mapped",
+ [
+ 4384
+ ]
+ ],
+ [
+ [
+ 12660,
+ 12660
+ ],
+ "mapped",
+ [
+ 4386
+ ]
+ ],
+ [
+ [
+ 12661,
+ 12661
+ ],
+ "mapped",
+ [
+ 4387
+ ]
+ ],
+ [
+ [
+ 12662,
+ 12662
+ ],
+ "mapped",
+ [
+ 4391
+ ]
+ ],
+ [
+ [
+ 12663,
+ 12663
+ ],
+ "mapped",
+ [
+ 4393
+ ]
+ ],
+ [
+ [
+ 12664,
+ 12664
+ ],
+ "mapped",
+ [
+ 4395
+ ]
+ ],
+ [
+ [
+ 12665,
+ 12665
+ ],
+ "mapped",
+ [
+ 4396
+ ]
+ ],
+ [
+ [
+ 12666,
+ 12666
+ ],
+ "mapped",
+ [
+ 4397
+ ]
+ ],
+ [
+ [
+ 12667,
+ 12667
+ ],
+ "mapped",
+ [
+ 4398
+ ]
+ ],
+ [
+ [
+ 12668,
+ 12668
+ ],
+ "mapped",
+ [
+ 4399
+ ]
+ ],
+ [
+ [
+ 12669,
+ 12669
+ ],
+ "mapped",
+ [
+ 4402
+ ]
+ ],
+ [
+ [
+ 12670,
+ 12670
+ ],
+ "mapped",
+ [
+ 4406
+ ]
+ ],
+ [
+ [
+ 12671,
+ 12671
+ ],
+ "mapped",
+ [
+ 4416
+ ]
+ ],
+ [
+ [
+ 12672,
+ 12672
+ ],
+ "mapped",
+ [
+ 4423
+ ]
+ ],
+ [
+ [
+ 12673,
+ 12673
+ ],
+ "mapped",
+ [
+ 4428
+ ]
+ ],
+ [
+ [
+ 12674,
+ 12674
+ ],
+ "mapped",
+ [
+ 4593
+ ]
+ ],
+ [
+ [
+ 12675,
+ 12675
+ ],
+ "mapped",
+ [
+ 4594
+ ]
+ ],
+ [
+ [
+ 12676,
+ 12676
+ ],
+ "mapped",
+ [
+ 4439
+ ]
+ ],
+ [
+ [
+ 12677,
+ 12677
+ ],
+ "mapped",
+ [
+ 4440
+ ]
+ ],
+ [
+ [
+ 12678,
+ 12678
+ ],
+ "mapped",
+ [
+ 4441
+ ]
+ ],
+ [
+ [
+ 12679,
+ 12679
+ ],
+ "mapped",
+ [
+ 4484
+ ]
+ ],
+ [
+ [
+ 12680,
+ 12680
+ ],
+ "mapped",
+ [
+ 4485
+ ]
+ ],
+ [
+ [
+ 12681,
+ 12681
+ ],
+ "mapped",
+ [
+ 4488
+ ]
+ ],
+ [
+ [
+ 12682,
+ 12682
+ ],
+ "mapped",
+ [
+ 4497
+ ]
+ ],
+ [
+ [
+ 12683,
+ 12683
+ ],
+ "mapped",
+ [
+ 4498
+ ]
+ ],
+ [
+ [
+ 12684,
+ 12684
+ ],
+ "mapped",
+ [
+ 4500
+ ]
+ ],
+ [
+ [
+ 12685,
+ 12685
+ ],
+ "mapped",
+ [
+ 4510
+ ]
+ ],
+ [
+ [
+ 12686,
+ 12686
+ ],
+ "mapped",
+ [
+ 4513
+ ]
+ ],
+ [
+ [
+ 12687,
+ 12687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12688,
+ 12689
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12690,
+ 12690
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12691,
+ 12691
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12692,
+ 12692
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12693,
+ 12693
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12694,
+ 12694
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12695,
+ 12695
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12696,
+ 12696
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12697,
+ 12697
+ ],
+ "mapped",
+ [
+ 30002
+ ]
+ ],
+ [
+ [
+ 12698,
+ 12698
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12699,
+ 12699
+ ],
+ "mapped",
+ [
+ 19993
+ ]
+ ],
+ [
+ [
+ 12700,
+ 12700
+ ],
+ "mapped",
+ [
+ 19969
+ ]
+ ],
+ [
+ [
+ 12701,
+ 12701
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 12702,
+ 12702
+ ],
+ "mapped",
+ [
+ 22320
+ ]
+ ],
+ [
+ [
+ 12703,
+ 12703
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12704,
+ 12727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12728,
+ 12730
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12731,
+ 12735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12736,
+ 12751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12752,
+ 12771
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12772,
+ 12783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12784,
+ 12799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12800,
+ 12800
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4352,
+ 41
+ ]
+ ],
+ [
+ [
+ 12801,
+ 12801
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4354,
+ 41
+ ]
+ ],
+ [
+ [
+ 12802,
+ 12802
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4355,
+ 41
+ ]
+ ],
+ [
+ [
+ 12803,
+ 12803
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4357,
+ 41
+ ]
+ ],
+ [
+ [
+ 12804,
+ 12804
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4358,
+ 41
+ ]
+ ],
+ [
+ [
+ 12805,
+ 12805
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4359,
+ 41
+ ]
+ ],
+ [
+ [
+ 12806,
+ 12806
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4361,
+ 41
+ ]
+ ],
+ [
+ [
+ 12807,
+ 12807
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4363,
+ 41
+ ]
+ ],
+ [
+ [
+ 12808,
+ 12808
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4364,
+ 41
+ ]
+ ],
+ [
+ [
+ 12809,
+ 12809
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4366,
+ 41
+ ]
+ ],
+ [
+ [
+ 12810,
+ 12810
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4367,
+ 41
+ ]
+ ],
+ [
+ [
+ 12811,
+ 12811
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4368,
+ 41
+ ]
+ ],
+ [
+ [
+ 12812,
+ 12812
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4369,
+ 41
+ ]
+ ],
+ [
+ [
+ 12813,
+ 12813
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4370,
+ 41
+ ]
+ ],
+ [
+ [
+ 12814,
+ 12814
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 44032,
+ 41
+ ]
+ ],
+ [
+ [
+ 12815,
+ 12815
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45208,
+ 41
+ ]
+ ],
+ [
+ [
+ 12816,
+ 12816
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45796,
+ 41
+ ]
+ ],
+ [
+ [
+ 12817,
+ 12817
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 46972,
+ 41
+ ]
+ ],
+ [
+ [
+ 12818,
+ 12818
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 47560,
+ 41
+ ]
+ ],
+ [
+ [
+ 12819,
+ 12819
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 48148,
+ 41
+ ]
+ ],
+ [
+ [
+ 12820,
+ 12820
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49324,
+ 41
+ ]
+ ],
+ [
+ [
+ 12821,
+ 12821
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50500,
+ 41
+ ]
+ ],
+ [
+ [
+ 12822,
+ 12822
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51088,
+ 41
+ ]
+ ],
+ [
+ [
+ 12823,
+ 12823
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52264,
+ 41
+ ]
+ ],
+ [
+ [
+ 12824,
+ 12824
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52852,
+ 41
+ ]
+ ],
+ [
+ [
+ 12825,
+ 12825
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53440,
+ 41
+ ]
+ ],
+ [
+ [
+ 12826,
+ 12826
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54028,
+ 41
+ ]
+ ],
+ [
+ [
+ 12827,
+ 12827
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54616,
+ 41
+ ]
+ ],
+ [
+ [
+ 12828,
+ 12828
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51452,
+ 41
+ ]
+ ],
+ [
+ [
+ 12829,
+ 12829
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 51204,
+ 41
+ ]
+ ],
+ [
+ [
+ 12830,
+ 12830
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 54980,
+ 41
+ ]
+ ],
+ [
+ [
+ 12831,
+ 12831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12832,
+ 12832
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19968,
+ 41
+ ]
+ ],
+ [
+ [
+ 12833,
+ 12833
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20108,
+ 41
+ ]
+ ],
+ [
+ [
+ 12834,
+ 12834
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19977,
+ 41
+ ]
+ ],
+ [
+ [
+ 12835,
+ 12835
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22235,
+ 41
+ ]
+ ],
+ [
+ [
+ 12836,
+ 12836
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20116,
+ 41
+ ]
+ ],
+ [
+ [
+ 12837,
+ 12837
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20845,
+ 41
+ ]
+ ],
+ [
+ [
+ 12838,
+ 12838
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19971,
+ 41
+ ]
+ ],
+ [
+ [
+ 12839,
+ 12839
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20843,
+ 41
+ ]
+ ],
+ [
+ [
+ 12840,
+ 12840
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20061,
+ 41
+ ]
+ ],
+ [
+ [
+ 12841,
+ 12841
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21313,
+ 41
+ ]
+ ],
+ [
+ [
+ 12842,
+ 12842
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26376,
+ 41
+ ]
+ ],
+ [
+ [
+ 12843,
+ 12843
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 28779,
+ 41
+ ]
+ ],
+ [
+ [
+ 12844,
+ 12844
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 27700,
+ 41
+ ]
+ ],
+ [
+ [
+ 12845,
+ 12845
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26408,
+ 41
+ ]
+ ],
+ [
+ [
+ 12846,
+ 12846
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 37329,
+ 41
+ ]
+ ],
+ [
+ [
+ 12847,
+ 12847
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22303,
+ 41
+ ]
+ ],
+ [
+ [
+ 12848,
+ 12848
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12849,
+ 12849
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26666,
+ 41
+ ]
+ ],
+ [
+ [
+ 12850,
+ 12850
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26377,
+ 41
+ ]
+ ],
+ [
+ [
+ 12851,
+ 12851
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31038,
+ 41
+ ]
+ ],
+ [
+ [
+ 12852,
+ 12852
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21517,
+ 41
+ ]
+ ],
+ [
+ [
+ 12853,
+ 12853
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 29305,
+ 41
+ ]
+ ],
+ [
+ [
+ 12854,
+ 12854
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36001,
+ 41
+ ]
+ ],
+ [
+ [
+ 12855,
+ 12855
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31069,
+ 41
+ ]
+ ],
+ [
+ [
+ 12856,
+ 12856
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21172,
+ 41
+ ]
+ ],
+ [
+ [
+ 12857,
+ 12857
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20195,
+ 41
+ ]
+ ],
+ [
+ [
+ 12858,
+ 12858
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21628,
+ 41
+ ]
+ ],
+ [
+ [
+ 12859,
+ 12859
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 23398,
+ 41
+ ]
+ ],
+ [
+ [
+ 12860,
+ 12860
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 30435,
+ 41
+ ]
+ ],
+ [
+ [
+ 12861,
+ 12861
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20225,
+ 41
+ ]
+ ],
+ [
+ [
+ 12862,
+ 12862
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36039,
+ 41
+ ]
+ ],
+ [
+ [
+ 12863,
+ 12863
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21332,
+ 41
+ ]
+ ],
+ [
+ [
+ 12864,
+ 12864
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12865,
+ 12865
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20241,
+ 41
+ ]
+ ],
+ [
+ [
+ 12866,
+ 12866
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33258,
+ 41
+ ]
+ ],
+ [
+ [
+ 12867,
+ 12867
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33267,
+ 41
+ ]
+ ],
+ [
+ [
+ 12868,
+ 12868
+ ],
+ "mapped",
+ [
+ 21839
+ ]
+ ],
+ [
+ [
+ 12869,
+ 12869
+ ],
+ "mapped",
+ [
+ 24188
+ ]
+ ],
+ [
+ [
+ 12870,
+ 12870
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12871,
+ 12871
+ ],
+ "mapped",
+ [
+ 31631
+ ]
+ ],
+ [
+ [
+ 12872,
+ 12879
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12880,
+ 12880
+ ],
+ "mapped",
+ [
+ 112,
+ 116,
+ 101
+ ]
+ ],
+ [
+ [
+ 12881,
+ 12881
+ ],
+ "mapped",
+ [
+ 50,
+ 49
+ ]
+ ],
+ [
+ [
+ 12882,
+ 12882
+ ],
+ "mapped",
+ [
+ 50,
+ 50
+ ]
+ ],
+ [
+ [
+ 12883,
+ 12883
+ ],
+ "mapped",
+ [
+ 50,
+ 51
+ ]
+ ],
+ [
+ [
+ 12884,
+ 12884
+ ],
+ "mapped",
+ [
+ 50,
+ 52
+ ]
+ ],
+ [
+ [
+ 12885,
+ 12885
+ ],
+ "mapped",
+ [
+ 50,
+ 53
+ ]
+ ],
+ [
+ [
+ 12886,
+ 12886
+ ],
+ "mapped",
+ [
+ 50,
+ 54
+ ]
+ ],
+ [
+ [
+ 12887,
+ 12887
+ ],
+ "mapped",
+ [
+ 50,
+ 55
+ ]
+ ],
+ [
+ [
+ 12888,
+ 12888
+ ],
+ "mapped",
+ [
+ 50,
+ 56
+ ]
+ ],
+ [
+ [
+ 12889,
+ 12889
+ ],
+ "mapped",
+ [
+ 50,
+ 57
+ ]
+ ],
+ [
+ [
+ 12890,
+ 12890
+ ],
+ "mapped",
+ [
+ 51,
+ 48
+ ]
+ ],
+ [
+ [
+ 12891,
+ 12891
+ ],
+ "mapped",
+ [
+ 51,
+ 49
+ ]
+ ],
+ [
+ [
+ 12892,
+ 12892
+ ],
+ "mapped",
+ [
+ 51,
+ 50
+ ]
+ ],
+ [
+ [
+ 12893,
+ 12893
+ ],
+ "mapped",
+ [
+ 51,
+ 51
+ ]
+ ],
+ [
+ [
+ 12894,
+ 12894
+ ],
+ "mapped",
+ [
+ 51,
+ 52
+ ]
+ ],
+ [
+ [
+ 12895,
+ 12895
+ ],
+ "mapped",
+ [
+ 51,
+ 53
+ ]
+ ],
+ [
+ [
+ 12896,
+ 12896
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12897,
+ 12897
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12898,
+ 12898
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12899,
+ 12899
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12900,
+ 12900
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12901,
+ 12901
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12902,
+ 12902
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12903,
+ 12903
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12904,
+ 12904
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12905,
+ 12905
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12906,
+ 12906
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12907,
+ 12907
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12908,
+ 12908
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12909,
+ 12909
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12910,
+ 12910
+ ],
+ "mapped",
+ [
+ 44032
+ ]
+ ],
+ [
+ [
+ 12911,
+ 12911
+ ],
+ "mapped",
+ [
+ 45208
+ ]
+ ],
+ [
+ [
+ 12912,
+ 12912
+ ],
+ "mapped",
+ [
+ 45796
+ ]
+ ],
+ [
+ [
+ 12913,
+ 12913
+ ],
+ "mapped",
+ [
+ 46972
+ ]
+ ],
+ [
+ [
+ 12914,
+ 12914
+ ],
+ "mapped",
+ [
+ 47560
+ ]
+ ],
+ [
+ [
+ 12915,
+ 12915
+ ],
+ "mapped",
+ [
+ 48148
+ ]
+ ],
+ [
+ [
+ 12916,
+ 12916
+ ],
+ "mapped",
+ [
+ 49324
+ ]
+ ],
+ [
+ [
+ 12917,
+ 12917
+ ],
+ "mapped",
+ [
+ 50500
+ ]
+ ],
+ [
+ [
+ 12918,
+ 12918
+ ],
+ "mapped",
+ [
+ 51088
+ ]
+ ],
+ [
+ [
+ 12919,
+ 12919
+ ],
+ "mapped",
+ [
+ 52264
+ ]
+ ],
+ [
+ [
+ 12920,
+ 12920
+ ],
+ "mapped",
+ [
+ 52852
+ ]
+ ],
+ [
+ [
+ 12921,
+ 12921
+ ],
+ "mapped",
+ [
+ 53440
+ ]
+ ],
+ [
+ [
+ 12922,
+ 12922
+ ],
+ "mapped",
+ [
+ 54028
+ ]
+ ],
+ [
+ [
+ 12923,
+ 12923
+ ],
+ "mapped",
+ [
+ 54616
+ ]
+ ],
+ [
+ [
+ 12924,
+ 12924
+ ],
+ "mapped",
+ [
+ 52280,
+ 44256
+ ]
+ ],
+ [
+ [
+ 12925,
+ 12925
+ ],
+ "mapped",
+ [
+ 51452,
+ 51032
+ ]
+ ],
+ [
+ [
+ 12926,
+ 12926
+ ],
+ "mapped",
+ [
+ 50864
+ ]
+ ],
+ [
+ [
+ 12927,
+ 12927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12928,
+ 12928
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12929,
+ 12929
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12930,
+ 12930
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12931,
+ 12931
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12932,
+ 12932
+ ],
+ "mapped",
+ [
+ 20116
+ ]
+ ],
+ [
+ [
+ 12933,
+ 12933
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 12934,
+ 12934
+ ],
+ "mapped",
+ [
+ 19971
+ ]
+ ],
+ [
+ [
+ 12935,
+ 12935
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12936,
+ 12936
+ ],
+ "mapped",
+ [
+ 20061
+ ]
+ ],
+ [
+ [
+ 12937,
+ 12937
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12938,
+ 12938
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12939,
+ 12939
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12940,
+ 12940
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12941,
+ 12941
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12942,
+ 12942
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12943,
+ 12943
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12944,
+ 12944
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12945,
+ 12945
+ ],
+ "mapped",
+ [
+ 26666
+ ]
+ ],
+ [
+ [
+ 12946,
+ 12946
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 12947,
+ 12947
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 12948,
+ 12948
+ ],
+ "mapped",
+ [
+ 21517
+ ]
+ ],
+ [
+ [
+ 12949,
+ 12949
+ ],
+ "mapped",
+ [
+ 29305
+ ]
+ ],
+ [
+ [
+ 12950,
+ 12950
+ ],
+ "mapped",
+ [
+ 36001
+ ]
+ ],
+ [
+ [
+ 12951,
+ 12951
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 12952,
+ 12952
+ ],
+ "mapped",
+ [
+ 21172
+ ]
+ ],
+ [
+ [
+ 12953,
+ 12953
+ ],
+ "mapped",
+ [
+ 31192
+ ]
+ ],
+ [
+ [
+ 12954,
+ 12954
+ ],
+ "mapped",
+ [
+ 30007
+ ]
+ ],
+ [
+ [
+ 12955,
+ 12955
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12956,
+ 12956
+ ],
+ "mapped",
+ [
+ 36969
+ ]
+ ],
+ [
+ [
+ 12957,
+ 12957
+ ],
+ "mapped",
+ [
+ 20778
+ ]
+ ],
+ [
+ [
+ 12958,
+ 12958
+ ],
+ "mapped",
+ [
+ 21360
+ ]
+ ],
+ [
+ [
+ 12959,
+ 12959
+ ],
+ "mapped",
+ [
+ 27880
+ ]
+ ],
+ [
+ [
+ 12960,
+ 12960
+ ],
+ "mapped",
+ [
+ 38917
+ ]
+ ],
+ [
+ [
+ 12961,
+ 12961
+ ],
+ "mapped",
+ [
+ 20241
+ ]
+ ],
+ [
+ [
+ 12962,
+ 12962
+ ],
+ "mapped",
+ [
+ 20889
+ ]
+ ],
+ [
+ [
+ 12963,
+ 12963
+ ],
+ "mapped",
+ [
+ 27491
+ ]
+ ],
+ [
+ [
+ 12964,
+ 12964
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12965,
+ 12965
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12966,
+ 12966
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12967,
+ 12967
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 12968,
+ 12968
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 12969,
+ 12969
+ ],
+ "mapped",
+ [
+ 21307
+ ]
+ ],
+ [
+ [
+ 12970,
+ 12970
+ ],
+ "mapped",
+ [
+ 23447
+ ]
+ ],
+ [
+ [
+ 12971,
+ 12971
+ ],
+ "mapped",
+ [
+ 23398
+ ]
+ ],
+ [
+ [
+ 12972,
+ 12972
+ ],
+ "mapped",
+ [
+ 30435
+ ]
+ ],
+ [
+ [
+ 12973,
+ 12973
+ ],
+ "mapped",
+ [
+ 20225
+ ]
+ ],
+ [
+ [
+ 12974,
+ 12974
+ ],
+ "mapped",
+ [
+ 36039
+ ]
+ ],
+ [
+ [
+ 12975,
+ 12975
+ ],
+ "mapped",
+ [
+ 21332
+ ]
+ ],
+ [
+ [
+ 12976,
+ 12976
+ ],
+ "mapped",
+ [
+ 22812
+ ]
+ ],
+ [
+ [
+ 12977,
+ 12977
+ ],
+ "mapped",
+ [
+ 51,
+ 54
+ ]
+ ],
+ [
+ [
+ 12978,
+ 12978
+ ],
+ "mapped",
+ [
+ 51,
+ 55
+ ]
+ ],
+ [
+ [
+ 12979,
+ 12979
+ ],
+ "mapped",
+ [
+ 51,
+ 56
+ ]
+ ],
+ [
+ [
+ 12980,
+ 12980
+ ],
+ "mapped",
+ [
+ 51,
+ 57
+ ]
+ ],
+ [
+ [
+ 12981,
+ 12981
+ ],
+ "mapped",
+ [
+ 52,
+ 48
+ ]
+ ],
+ [
+ [
+ 12982,
+ 12982
+ ],
+ "mapped",
+ [
+ 52,
+ 49
+ ]
+ ],
+ [
+ [
+ 12983,
+ 12983
+ ],
+ "mapped",
+ [
+ 52,
+ 50
+ ]
+ ],
+ [
+ [
+ 12984,
+ 12984
+ ],
+ "mapped",
+ [
+ 52,
+ 51
+ ]
+ ],
+ [
+ [
+ 12985,
+ 12985
+ ],
+ "mapped",
+ [
+ 52,
+ 52
+ ]
+ ],
+ [
+ [
+ 12986,
+ 12986
+ ],
+ "mapped",
+ [
+ 52,
+ 53
+ ]
+ ],
+ [
+ [
+ 12987,
+ 12987
+ ],
+ "mapped",
+ [
+ 52,
+ 54
+ ]
+ ],
+ [
+ [
+ 12988,
+ 12988
+ ],
+ "mapped",
+ [
+ 52,
+ 55
+ ]
+ ],
+ [
+ [
+ 12989,
+ 12989
+ ],
+ "mapped",
+ [
+ 52,
+ 56
+ ]
+ ],
+ [
+ [
+ 12990,
+ 12990
+ ],
+ "mapped",
+ [
+ 52,
+ 57
+ ]
+ ],
+ [
+ [
+ 12991,
+ 12991
+ ],
+ "mapped",
+ [
+ 53,
+ 48
+ ]
+ ],
+ [
+ [
+ 12992,
+ 12992
+ ],
+ "mapped",
+ [
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12993,
+ 12993
+ ],
+ "mapped",
+ [
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12994,
+ 12994
+ ],
+ "mapped",
+ [
+ 51,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12995,
+ 12995
+ ],
+ "mapped",
+ [
+ 52,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12996,
+ 12996
+ ],
+ "mapped",
+ [
+ 53,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12997,
+ 12997
+ ],
+ "mapped",
+ [
+ 54,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12998,
+ 12998
+ ],
+ "mapped",
+ [
+ 55,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12999,
+ 12999
+ ],
+ "mapped",
+ [
+ 56,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13000,
+ 13000
+ ],
+ "mapped",
+ [
+ 57,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13001,
+ 13001
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13002,
+ 13002
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13003,
+ 13003
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13004,
+ 13004
+ ],
+ "mapped",
+ [
+ 104,
+ 103
+ ]
+ ],
+ [
+ [
+ 13005,
+ 13005
+ ],
+ "mapped",
+ [
+ 101,
+ 114,
+ 103
+ ]
+ ],
+ [
+ [
+ 13006,
+ 13006
+ ],
+ "mapped",
+ [
+ 101,
+ 118
+ ]
+ ],
+ [
+ [
+ 13007,
+ 13007
+ ],
+ "mapped",
+ [
+ 108,
+ 116,
+ 100
+ ]
+ ],
+ [
+ [
+ 13008,
+ 13008
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 13009,
+ 13009
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 13010,
+ 13010
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 13011,
+ 13011
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 13012,
+ 13012
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 13013,
+ 13013
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 13014,
+ 13014
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 13015,
+ 13015
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 13016,
+ 13016
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 13017,
+ 13017
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 13018,
+ 13018
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 13019,
+ 13019
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 13020,
+ 13020
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 13021,
+ 13021
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 13022,
+ 13022
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 13023,
+ 13023
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 13024,
+ 13024
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 13025,
+ 13025
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 13026,
+ 13026
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 13027,
+ 13027
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 13028,
+ 13028
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 13029,
+ 13029
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 13030,
+ 13030
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 13031,
+ 13031
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 13032,
+ 13032
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 13033,
+ 13033
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 13034,
+ 13034
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 13035,
+ 13035
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 13036,
+ 13036
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 13037,
+ 13037
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 13038,
+ 13038
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 13039,
+ 13039
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 13040,
+ 13040
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 13041,
+ 13041
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 13042,
+ 13042
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 13043,
+ 13043
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 13044,
+ 13044
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 13045,
+ 13045
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 13046,
+ 13046
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 13047,
+ 13047
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 13048,
+ 13048
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 13049,
+ 13049
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 13050,
+ 13050
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 13051,
+ 13051
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 13052,
+ 13052
+ ],
+ "mapped",
+ [
+ 12528
+ ]
+ ],
+ [
+ [
+ 13053,
+ 13053
+ ],
+ "mapped",
+ [
+ 12529
+ ]
+ ],
+ [
+ [
+ 13054,
+ 13054
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 13055,
+ 13055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13056,
+ 13056
+ ],
+ "mapped",
+ [
+ 12450,
+ 12497,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13057,
+ 13057
+ ],
+ "mapped",
+ [
+ 12450,
+ 12523,
+ 12501,
+ 12449
+ ]
+ ],
+ [
+ [
+ 13058,
+ 13058
+ ],
+ "mapped",
+ [
+ 12450,
+ 12531,
+ 12506,
+ 12450
+ ]
+ ],
+ [
+ [
+ 13059,
+ 13059
+ ],
+ "mapped",
+ [
+ 12450,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13060,
+ 13060
+ ],
+ "mapped",
+ [
+ 12452,
+ 12491,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13061,
+ 13061
+ ],
+ "mapped",
+ [
+ 12452,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13062,
+ 13062
+ ],
+ "mapped",
+ [
+ 12454,
+ 12457,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13063,
+ 13063
+ ],
+ "mapped",
+ [
+ 12456,
+ 12473,
+ 12463,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13064,
+ 13064
+ ],
+ "mapped",
+ [
+ 12456,
+ 12540,
+ 12459,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13065,
+ 13065
+ ],
+ "mapped",
+ [
+ 12458,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13066,
+ 13066
+ ],
+ "mapped",
+ [
+ 12458,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13067,
+ 13067
+ ],
+ "mapped",
+ [
+ 12459,
+ 12452,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13068,
+ 13068
+ ],
+ "mapped",
+ [
+ 12459,
+ 12521,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13069,
+ 13069
+ ],
+ "mapped",
+ [
+ 12459,
+ 12525,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13070,
+ 13070
+ ],
+ "mapped",
+ [
+ 12460,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13071,
+ 13071
+ ],
+ "mapped",
+ [
+ 12460,
+ 12531,
+ 12510
+ ]
+ ],
+ [
+ [
+ 13072,
+ 13072
+ ],
+ "mapped",
+ [
+ 12462,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13073,
+ 13073
+ ],
+ "mapped",
+ [
+ 12462,
+ 12491,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13074,
+ 13074
+ ],
+ "mapped",
+ [
+ 12461,
+ 12517,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13075,
+ 13075
+ ],
+ "mapped",
+ [
+ 12462,
+ 12523,
+ 12480,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13076,
+ 13076
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13077,
+ 13077
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13078,
+ 13078
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13079,
+ 13079
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13080,
+ 13080
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13081,
+ 13081
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13082,
+ 13082
+ ],
+ "mapped",
+ [
+ 12463,
+ 12523,
+ 12476,
+ 12452,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13083,
+ 13083
+ ],
+ "mapped",
+ [
+ 12463,
+ 12525,
+ 12540,
+ 12493
+ ]
+ ],
+ [
+ [
+ 13084,
+ 13084
+ ],
+ "mapped",
+ [
+ 12465,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13085,
+ 13085
+ ],
+ "mapped",
+ [
+ 12467,
+ 12523,
+ 12490
+ ]
+ ],
+ [
+ [
+ 13086,
+ 13086
+ ],
+ "mapped",
+ [
+ 12467,
+ 12540,
+ 12509
+ ]
+ ],
+ [
+ [
+ 13087,
+ 13087
+ ],
+ "mapped",
+ [
+ 12469,
+ 12452,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13088,
+ 13088
+ ],
+ "mapped",
+ [
+ 12469,
+ 12531,
+ 12481,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13089,
+ 13089
+ ],
+ "mapped",
+ [
+ 12471,
+ 12522,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13090,
+ 13090
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13091,
+ 13091
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13092,
+ 13092
+ ],
+ "mapped",
+ [
+ 12480,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13093,
+ 13093
+ ],
+ "mapped",
+ [
+ 12487,
+ 12471
+ ]
+ ],
+ [
+ [
+ 13094,
+ 13094
+ ],
+ "mapped",
+ [
+ 12489,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13095,
+ 13095
+ ],
+ "mapped",
+ [
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13096,
+ 13096
+ ],
+ "mapped",
+ [
+ 12490,
+ 12494
+ ]
+ ],
+ [
+ [
+ 13097,
+ 13097
+ ],
+ "mapped",
+ [
+ 12494,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13098,
+ 13098
+ ],
+ "mapped",
+ [
+ 12495,
+ 12452,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13099,
+ 13099
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13100,
+ 13100
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13101,
+ 13101
+ ],
+ "mapped",
+ [
+ 12496,
+ 12540,
+ 12524,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13102,
+ 13102
+ ],
+ "mapped",
+ [
+ 12500,
+ 12450,
+ 12473,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13103,
+ 13103
+ ],
+ "mapped",
+ [
+ 12500,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13104,
+ 13104
+ ],
+ "mapped",
+ [
+ 12500,
+ 12467
+ ]
+ ],
+ [
+ [
+ 13105,
+ 13105
+ ],
+ "mapped",
+ [
+ 12499,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13106,
+ 13106
+ ],
+ "mapped",
+ [
+ 12501,
+ 12449,
+ 12521,
+ 12483,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13107,
+ 13107
+ ],
+ "mapped",
+ [
+ 12501,
+ 12451,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13108,
+ 13108
+ ],
+ "mapped",
+ [
+ 12502,
+ 12483,
+ 12471,
+ 12455,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13109,
+ 13109
+ ],
+ "mapped",
+ [
+ 12501,
+ 12521,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13110,
+ 13110
+ ],
+ "mapped",
+ [
+ 12504,
+ 12463,
+ 12479,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13111,
+ 13111
+ ],
+ "mapped",
+ [
+ 12506,
+ 12477
+ ]
+ ],
+ [
+ [
+ 13112,
+ 13112
+ ],
+ "mapped",
+ [
+ 12506,
+ 12491,
+ 12498
+ ]
+ ],
+ [
+ [
+ 13113,
+ 13113
+ ],
+ "mapped",
+ [
+ 12504,
+ 12523,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13114,
+ 13114
+ ],
+ "mapped",
+ [
+ 12506,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13115,
+ 13115
+ ],
+ "mapped",
+ [
+ 12506,
+ 12540,
+ 12472
+ ]
+ ],
+ [
+ [
+ 13116,
+ 13116
+ ],
+ "mapped",
+ [
+ 12505,
+ 12540,
+ 12479
+ ]
+ ],
+ [
+ [
+ 13117,
+ 13117
+ ],
+ "mapped",
+ [
+ 12509,
+ 12452,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13118,
+ 13118
+ ],
+ "mapped",
+ [
+ 12508,
+ 12523,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13119,
+ 13119
+ ],
+ "mapped",
+ [
+ 12507,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13120,
+ 13120
+ ],
+ "mapped",
+ [
+ 12509,
+ 12531,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13121,
+ 13121
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13122,
+ 13122
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13123,
+ 13123
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12463,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13124,
+ 13124
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13125,
+ 13125
+ ],
+ "mapped",
+ [
+ 12510,
+ 12483,
+ 12495
+ ]
+ ],
+ [
+ [
+ 13126,
+ 13126
+ ],
+ "mapped",
+ [
+ 12510,
+ 12523,
+ 12463
+ ]
+ ],
+ [
+ [
+ 13127,
+ 13127
+ ],
+ "mapped",
+ [
+ 12510,
+ 12531,
+ 12471,
+ 12519,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13128,
+ 13128
+ ],
+ "mapped",
+ [
+ 12511,
+ 12463,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13129,
+ 13129
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13130,
+ 13130
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522,
+ 12496,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13131,
+ 13131
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13132,
+ 13132
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13133,
+ 13133
+ ],
+ "mapped",
+ [
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13134,
+ 13134
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13135,
+ 13135
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13136,
+ 13136
+ ],
+ "mapped",
+ [
+ 12518,
+ 12450,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13137,
+ 13137
+ ],
+ "mapped",
+ [
+ 12522,
+ 12483,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13138,
+ 13138
+ ],
+ "mapped",
+ [
+ 12522,
+ 12521
+ ]
+ ],
+ [
+ [
+ 13139,
+ 13139
+ ],
+ "mapped",
+ [
+ 12523,
+ 12500,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13140,
+ 13140
+ ],
+ "mapped",
+ [
+ 12523,
+ 12540,
+ 12502,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13141,
+ 13141
+ ],
+ "mapped",
+ [
+ 12524,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13142,
+ 13142
+ ],
+ "mapped",
+ [
+ 12524,
+ 12531,
+ 12488,
+ 12466,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13143,
+ 13143
+ ],
+ "mapped",
+ [
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13144,
+ 13144
+ ],
+ "mapped",
+ [
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13145,
+ 13145
+ ],
+ "mapped",
+ [
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13146,
+ 13146
+ ],
+ "mapped",
+ [
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13147,
+ 13147
+ ],
+ "mapped",
+ [
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13148,
+ 13148
+ ],
+ "mapped",
+ [
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13149,
+ 13149
+ ],
+ "mapped",
+ [
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13150,
+ 13150
+ ],
+ "mapped",
+ [
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13151,
+ 13151
+ ],
+ "mapped",
+ [
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13152,
+ 13152
+ ],
+ "mapped",
+ [
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13153,
+ 13153
+ ],
+ "mapped",
+ [
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13154,
+ 13154
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13155,
+ 13155
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13156,
+ 13156
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13157,
+ 13157
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13158,
+ 13158
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13159,
+ 13159
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13160,
+ 13160
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13161,
+ 13161
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13162,
+ 13162
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13163,
+ 13163
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13164,
+ 13164
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13165,
+ 13165
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13166,
+ 13166
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13167,
+ 13167
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13168,
+ 13168
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13169,
+ 13169
+ ],
+ "mapped",
+ [
+ 104,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13170,
+ 13170
+ ],
+ "mapped",
+ [
+ 100,
+ 97
+ ]
+ ],
+ [
+ [
+ 13171,
+ 13171
+ ],
+ "mapped",
+ [
+ 97,
+ 117
+ ]
+ ],
+ [
+ [
+ 13172,
+ 13172
+ ],
+ "mapped",
+ [
+ 98,
+ 97,
+ 114
+ ]
+ ],
+ [
+ [
+ 13173,
+ 13173
+ ],
+ "mapped",
+ [
+ 111,
+ 118
+ ]
+ ],
+ [
+ [
+ 13174,
+ 13174
+ ],
+ "mapped",
+ [
+ 112,
+ 99
+ ]
+ ],
+ [
+ [
+ 13175,
+ 13175
+ ],
+ "mapped",
+ [
+ 100,
+ 109
+ ]
+ ],
+ [
+ [
+ 13176,
+ 13176
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13177,
+ 13177
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13178,
+ 13178
+ ],
+ "mapped",
+ [
+ 105,
+ 117
+ ]
+ ],
+ [
+ [
+ 13179,
+ 13179
+ ],
+ "mapped",
+ [
+ 24179,
+ 25104
+ ]
+ ],
+ [
+ [
+ 13180,
+ 13180
+ ],
+ "mapped",
+ [
+ 26157,
+ 21644
+ ]
+ ],
+ [
+ [
+ 13181,
+ 13181
+ ],
+ "mapped",
+ [
+ 22823,
+ 27491
+ ]
+ ],
+ [
+ [
+ 13182,
+ 13182
+ ],
+ "mapped",
+ [
+ 26126,
+ 27835
+ ]
+ ],
+ [
+ [
+ 13183,
+ 13183
+ ],
+ "mapped",
+ [
+ 26666,
+ 24335,
+ 20250,
+ 31038
+ ]
+ ],
+ [
+ [
+ 13184,
+ 13184
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13185,
+ 13185
+ ],
+ "mapped",
+ [
+ 110,
+ 97
+ ]
+ ],
+ [
+ [
+ 13186,
+ 13186
+ ],
+ "mapped",
+ [
+ 956,
+ 97
+ ]
+ ],
+ [
+ [
+ 13187,
+ 13187
+ ],
+ "mapped",
+ [
+ 109,
+ 97
+ ]
+ ],
+ [
+ [
+ 13188,
+ 13188
+ ],
+ "mapped",
+ [
+ 107,
+ 97
+ ]
+ ],
+ [
+ [
+ 13189,
+ 13189
+ ],
+ "mapped",
+ [
+ 107,
+ 98
+ ]
+ ],
+ [
+ [
+ 13190,
+ 13190
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13191,
+ 13191
+ ],
+ "mapped",
+ [
+ 103,
+ 98
+ ]
+ ],
+ [
+ [
+ 13192,
+ 13192
+ ],
+ "mapped",
+ [
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13193,
+ 13193
+ ],
+ "mapped",
+ [
+ 107,
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13194,
+ 13194
+ ],
+ "mapped",
+ [
+ 112,
+ 102
+ ]
+ ],
+ [
+ [
+ 13195,
+ 13195
+ ],
+ "mapped",
+ [
+ 110,
+ 102
+ ]
+ ],
+ [
+ [
+ 13196,
+ 13196
+ ],
+ "mapped",
+ [
+ 956,
+ 102
+ ]
+ ],
+ [
+ [
+ 13197,
+ 13197
+ ],
+ "mapped",
+ [
+ 956,
+ 103
+ ]
+ ],
+ [
+ [
+ 13198,
+ 13198
+ ],
+ "mapped",
+ [
+ 109,
+ 103
+ ]
+ ],
+ [
+ [
+ 13199,
+ 13199
+ ],
+ "mapped",
+ [
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13200,
+ 13200
+ ],
+ "mapped",
+ [
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13201,
+ 13201
+ ],
+ "mapped",
+ [
+ 107,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13202,
+ 13202
+ ],
+ "mapped",
+ [
+ 109,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13203,
+ 13203
+ ],
+ "mapped",
+ [
+ 103,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13204,
+ 13204
+ ],
+ "mapped",
+ [
+ 116,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13205,
+ 13205
+ ],
+ "mapped",
+ [
+ 956,
+ 108
+ ]
+ ],
+ [
+ [
+ 13206,
+ 13206
+ ],
+ "mapped",
+ [
+ 109,
+ 108
+ ]
+ ],
+ [
+ [
+ 13207,
+ 13207
+ ],
+ "mapped",
+ [
+ 100,
+ 108
+ ]
+ ],
+ [
+ [
+ 13208,
+ 13208
+ ],
+ "mapped",
+ [
+ 107,
+ 108
+ ]
+ ],
+ [
+ [
+ 13209,
+ 13209
+ ],
+ "mapped",
+ [
+ 102,
+ 109
+ ]
+ ],
+ [
+ [
+ 13210,
+ 13210
+ ],
+ "mapped",
+ [
+ 110,
+ 109
+ ]
+ ],
+ [
+ [
+ 13211,
+ 13211
+ ],
+ "mapped",
+ [
+ 956,
+ 109
+ ]
+ ],
+ [
+ [
+ 13212,
+ 13212
+ ],
+ "mapped",
+ [
+ 109,
+ 109
+ ]
+ ],
+ [
+ [
+ 13213,
+ 13213
+ ],
+ "mapped",
+ [
+ 99,
+ 109
+ ]
+ ],
+ [
+ [
+ 13214,
+ 13214
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13215,
+ 13215
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13216,
+ 13216
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13217,
+ 13217
+ ],
+ "mapped",
+ [
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13218,
+ 13218
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13219,
+ 13219
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13220,
+ 13220
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13221,
+ 13221
+ ],
+ "mapped",
+ [
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13222,
+ 13222
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13223,
+ 13223
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13224,
+ 13224
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13225,
+ 13225
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13226,
+ 13226
+ ],
+ "mapped",
+ [
+ 107,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13227,
+ 13227
+ ],
+ "mapped",
+ [
+ 109,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13228,
+ 13228
+ ],
+ "mapped",
+ [
+ 103,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13229,
+ 13229
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100
+ ]
+ ],
+ [
+ [
+ 13230,
+ 13230
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13231,
+ 13231
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13232,
+ 13232
+ ],
+ "mapped",
+ [
+ 112,
+ 115
+ ]
+ ],
+ [
+ [
+ 13233,
+ 13233
+ ],
+ "mapped",
+ [
+ 110,
+ 115
+ ]
+ ],
+ [
+ [
+ 13234,
+ 13234
+ ],
+ "mapped",
+ [
+ 956,
+ 115
+ ]
+ ],
+ [
+ [
+ 13235,
+ 13235
+ ],
+ "mapped",
+ [
+ 109,
+ 115
+ ]
+ ],
+ [
+ [
+ 13236,
+ 13236
+ ],
+ "mapped",
+ [
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 13237,
+ 13237
+ ],
+ "mapped",
+ [
+ 110,
+ 118
+ ]
+ ],
+ [
+ [
+ 13238,
+ 13238
+ ],
+ "mapped",
+ [
+ 956,
+ 118
+ ]
+ ],
+ [
+ [
+ 13239,
+ 13239
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13240,
+ 13240
+ ],
+ "mapped",
+ [
+ 107,
+ 118
+ ]
+ ],
+ [
+ [
+ 13241,
+ 13241
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13242,
+ 13242
+ ],
+ "mapped",
+ [
+ 112,
+ 119
+ ]
+ ],
+ [
+ [
+ 13243,
+ 13243
+ ],
+ "mapped",
+ [
+ 110,
+ 119
+ ]
+ ],
+ [
+ [
+ 13244,
+ 13244
+ ],
+ "mapped",
+ [
+ 956,
+ 119
+ ]
+ ],
+ [
+ [
+ 13245,
+ 13245
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13246,
+ 13246
+ ],
+ "mapped",
+ [
+ 107,
+ 119
+ ]
+ ],
+ [
+ [
+ 13247,
+ 13247
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13248,
+ 13248
+ ],
+ "mapped",
+ [
+ 107,
+ 969
+ ]
+ ],
+ [
+ [
+ 13249,
+ 13249
+ ],
+ "mapped",
+ [
+ 109,
+ 969
+ ]
+ ],
+ [
+ [
+ 13250,
+ 13250
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13251,
+ 13251
+ ],
+ "mapped",
+ [
+ 98,
+ 113
+ ]
+ ],
+ [
+ [
+ 13252,
+ 13252
+ ],
+ "mapped",
+ [
+ 99,
+ 99
+ ]
+ ],
+ [
+ [
+ 13253,
+ 13253
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 13254,
+ 13254
+ ],
+ "mapped",
+ [
+ 99,
+ 8725,
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13255,
+ 13255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13256,
+ 13256
+ ],
+ "mapped",
+ [
+ 100,
+ 98
+ ]
+ ],
+ [
+ [
+ 13257,
+ 13257
+ ],
+ "mapped",
+ [
+ 103,
+ 121
+ ]
+ ],
+ [
+ [
+ 13258,
+ 13258
+ ],
+ "mapped",
+ [
+ 104,
+ 97
+ ]
+ ],
+ [
+ [
+ 13259,
+ 13259
+ ],
+ "mapped",
+ [
+ 104,
+ 112
+ ]
+ ],
+ [
+ [
+ 13260,
+ 13260
+ ],
+ "mapped",
+ [
+ 105,
+ 110
+ ]
+ ],
+ [
+ [
+ 13261,
+ 13261
+ ],
+ "mapped",
+ [
+ 107,
+ 107
+ ]
+ ],
+ [
+ [
+ 13262,
+ 13262
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13263,
+ 13263
+ ],
+ "mapped",
+ [
+ 107,
+ 116
+ ]
+ ],
+ [
+ [
+ 13264,
+ 13264
+ ],
+ "mapped",
+ [
+ 108,
+ 109
+ ]
+ ],
+ [
+ [
+ 13265,
+ 13265
+ ],
+ "mapped",
+ [
+ 108,
+ 110
+ ]
+ ],
+ [
+ [
+ 13266,
+ 13266
+ ],
+ "mapped",
+ [
+ 108,
+ 111,
+ 103
+ ]
+ ],
+ [
+ [
+ 13267,
+ 13267
+ ],
+ "mapped",
+ [
+ 108,
+ 120
+ ]
+ ],
+ [
+ [
+ 13268,
+ 13268
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13269,
+ 13269
+ ],
+ "mapped",
+ [
+ 109,
+ 105,
+ 108
+ ]
+ ],
+ [
+ [
+ 13270,
+ 13270
+ ],
+ "mapped",
+ [
+ 109,
+ 111,
+ 108
+ ]
+ ],
+ [
+ [
+ 13271,
+ 13271
+ ],
+ "mapped",
+ [
+ 112,
+ 104
+ ]
+ ],
+ [
+ [
+ 13272,
+ 13272
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13273,
+ 13273
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 109
+ ]
+ ],
+ [
+ [
+ 13274,
+ 13274
+ ],
+ "mapped",
+ [
+ 112,
+ 114
+ ]
+ ],
+ [
+ [
+ 13275,
+ 13275
+ ],
+ "mapped",
+ [
+ 115,
+ 114
+ ]
+ ],
+ [
+ [
+ 13276,
+ 13276
+ ],
+ "mapped",
+ [
+ 115,
+ 118
+ ]
+ ],
+ [
+ [
+ 13277,
+ 13277
+ ],
+ "mapped",
+ [
+ 119,
+ 98
+ ]
+ ],
+ [
+ [
+ 13278,
+ 13278
+ ],
+ "mapped",
+ [
+ 118,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13279,
+ 13279
+ ],
+ "mapped",
+ [
+ 97,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13280,
+ 13280
+ ],
+ "mapped",
+ [
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13281,
+ 13281
+ ],
+ "mapped",
+ [
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13282,
+ 13282
+ ],
+ "mapped",
+ [
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13283,
+ 13283
+ ],
+ "mapped",
+ [
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13284,
+ 13284
+ ],
+ "mapped",
+ [
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13285,
+ 13285
+ ],
+ "mapped",
+ [
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13286,
+ 13286
+ ],
+ "mapped",
+ [
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13287,
+ 13287
+ ],
+ "mapped",
+ [
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13288,
+ 13288
+ ],
+ "mapped",
+ [
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13289,
+ 13289
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13290,
+ 13290
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13291,
+ 13291
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13292,
+ 13292
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13293,
+ 13293
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13294,
+ 13294
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13295,
+ 13295
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13296,
+ 13296
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13297,
+ 13297
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13298,
+ 13298
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13299,
+ 13299
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13300,
+ 13300
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13301,
+ 13301
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13302,
+ 13302
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13303,
+ 13303
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13304,
+ 13304
+ ],
+ "mapped",
+ [
+ 50,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13305,
+ 13305
+ ],
+ "mapped",
+ [
+ 50,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13306,
+ 13306
+ ],
+ "mapped",
+ [
+ 50,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13307,
+ 13307
+ ],
+ "mapped",
+ [
+ 50,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13308,
+ 13308
+ ],
+ "mapped",
+ [
+ 50,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13309,
+ 13309
+ ],
+ "mapped",
+ [
+ 51,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13310,
+ 13310
+ ],
+ "mapped",
+ [
+ 51,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13311,
+ 13311
+ ],
+ "mapped",
+ [
+ 103,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13312,
+ 19893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 19894,
+ 19903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 19904,
+ 19967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 19968,
+ 40869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40870,
+ 40891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40892,
+ 40899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40900,
+ 40907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40908,
+ 40908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40909,
+ 40917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40918,
+ 40959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 40960,
+ 42124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42125,
+ 42127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42128,
+ 42145
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42146,
+ 42147
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42148,
+ 42163
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42164,
+ 42164
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42165,
+ 42176
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42177,
+ 42177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42178,
+ 42180
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42181,
+ 42181
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42182,
+ 42182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42183,
+ 42191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42192,
+ 42237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42238,
+ 42239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42240,
+ 42508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42509,
+ 42511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42512,
+ 42539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42540,
+ 42559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42560,
+ 42560
+ ],
+ "mapped",
+ [
+ 42561
+ ]
+ ],
+ [
+ [
+ 42561,
+ 42561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42562,
+ 42562
+ ],
+ "mapped",
+ [
+ 42563
+ ]
+ ],
+ [
+ [
+ 42563,
+ 42563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42564,
+ 42564
+ ],
+ "mapped",
+ [
+ 42565
+ ]
+ ],
+ [
+ [
+ 42565,
+ 42565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42566,
+ 42566
+ ],
+ "mapped",
+ [
+ 42567
+ ]
+ ],
+ [
+ [
+ 42567,
+ 42567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42568,
+ 42568
+ ],
+ "mapped",
+ [
+ 42569
+ ]
+ ],
+ [
+ [
+ 42569,
+ 42569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42570,
+ 42570
+ ],
+ "mapped",
+ [
+ 42571
+ ]
+ ],
+ [
+ [
+ 42571,
+ 42571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42572,
+ 42572
+ ],
+ "mapped",
+ [
+ 42573
+ ]
+ ],
+ [
+ [
+ 42573,
+ 42573
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42574,
+ 42574
+ ],
+ "mapped",
+ [
+ 42575
+ ]
+ ],
+ [
+ [
+ 42575,
+ 42575
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42576,
+ 42576
+ ],
+ "mapped",
+ [
+ 42577
+ ]
+ ],
+ [
+ [
+ 42577,
+ 42577
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42578,
+ 42578
+ ],
+ "mapped",
+ [
+ 42579
+ ]
+ ],
+ [
+ [
+ 42579,
+ 42579
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42580,
+ 42580
+ ],
+ "mapped",
+ [
+ 42581
+ ]
+ ],
+ [
+ [
+ 42581,
+ 42581
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42582,
+ 42582
+ ],
+ "mapped",
+ [
+ 42583
+ ]
+ ],
+ [
+ [
+ 42583,
+ 42583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42584,
+ 42584
+ ],
+ "mapped",
+ [
+ 42585
+ ]
+ ],
+ [
+ [
+ 42585,
+ 42585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42586,
+ 42586
+ ],
+ "mapped",
+ [
+ 42587
+ ]
+ ],
+ [
+ [
+ 42587,
+ 42587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42588,
+ 42588
+ ],
+ "mapped",
+ [
+ 42589
+ ]
+ ],
+ [
+ [
+ 42589,
+ 42589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42590,
+ 42590
+ ],
+ "mapped",
+ [
+ 42591
+ ]
+ ],
+ [
+ [
+ 42591,
+ 42591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42592,
+ 42592
+ ],
+ "mapped",
+ [
+ 42593
+ ]
+ ],
+ [
+ [
+ 42593,
+ 42593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42594,
+ 42594
+ ],
+ "mapped",
+ [
+ 42595
+ ]
+ ],
+ [
+ [
+ 42595,
+ 42595
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42596,
+ 42596
+ ],
+ "mapped",
+ [
+ 42597
+ ]
+ ],
+ [
+ [
+ 42597,
+ 42597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42598,
+ 42598
+ ],
+ "mapped",
+ [
+ 42599
+ ]
+ ],
+ [
+ [
+ 42599,
+ 42599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42600,
+ 42600
+ ],
+ "mapped",
+ [
+ 42601
+ ]
+ ],
+ [
+ [
+ 42601,
+ 42601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42602,
+ 42602
+ ],
+ "mapped",
+ [
+ 42603
+ ]
+ ],
+ [
+ [
+ 42603,
+ 42603
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42604,
+ 42604
+ ],
+ "mapped",
+ [
+ 42605
+ ]
+ ],
+ [
+ [
+ 42605,
+ 42607
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42608,
+ 42611
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42612,
+ 42619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42620,
+ 42621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42622,
+ 42622
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42623,
+ 42623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42624,
+ 42624
+ ],
+ "mapped",
+ [
+ 42625
+ ]
+ ],
+ [
+ [
+ 42625,
+ 42625
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42626,
+ 42626
+ ],
+ "mapped",
+ [
+ 42627
+ ]
+ ],
+ [
+ [
+ 42627,
+ 42627
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42628,
+ 42628
+ ],
+ "mapped",
+ [
+ 42629
+ ]
+ ],
+ [
+ [
+ 42629,
+ 42629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42630,
+ 42630
+ ],
+ "mapped",
+ [
+ 42631
+ ]
+ ],
+ [
+ [
+ 42631,
+ 42631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42632,
+ 42632
+ ],
+ "mapped",
+ [
+ 42633
+ ]
+ ],
+ [
+ [
+ 42633,
+ 42633
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42634,
+ 42634
+ ],
+ "mapped",
+ [
+ 42635
+ ]
+ ],
+ [
+ [
+ 42635,
+ 42635
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42636,
+ 42636
+ ],
+ "mapped",
+ [
+ 42637
+ ]
+ ],
+ [
+ [
+ 42637,
+ 42637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42638,
+ 42638
+ ],
+ "mapped",
+ [
+ 42639
+ ]
+ ],
+ [
+ [
+ 42639,
+ 42639
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42640,
+ 42640
+ ],
+ "mapped",
+ [
+ 42641
+ ]
+ ],
+ [
+ [
+ 42641,
+ 42641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42642,
+ 42642
+ ],
+ "mapped",
+ [
+ 42643
+ ]
+ ],
+ [
+ [
+ 42643,
+ 42643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42644,
+ 42644
+ ],
+ "mapped",
+ [
+ 42645
+ ]
+ ],
+ [
+ [
+ 42645,
+ 42645
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42646,
+ 42646
+ ],
+ "mapped",
+ [
+ 42647
+ ]
+ ],
+ [
+ [
+ 42647,
+ 42647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42648,
+ 42648
+ ],
+ "mapped",
+ [
+ 42649
+ ]
+ ],
+ [
+ [
+ 42649,
+ 42649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42650,
+ 42650
+ ],
+ "mapped",
+ [
+ 42651
+ ]
+ ],
+ [
+ [
+ 42651,
+ 42651
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42652,
+ 42652
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 42653,
+ 42653
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 42654,
+ 42654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42655,
+ 42655
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42656,
+ 42725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42726,
+ 42735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42736,
+ 42737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42738,
+ 42743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42744,
+ 42751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42752,
+ 42774
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42775,
+ 42778
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42779,
+ 42783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42784,
+ 42785
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42786,
+ 42786
+ ],
+ "mapped",
+ [
+ 42787
+ ]
+ ],
+ [
+ [
+ 42787,
+ 42787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42788,
+ 42788
+ ],
+ "mapped",
+ [
+ 42789
+ ]
+ ],
+ [
+ [
+ 42789,
+ 42789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42790,
+ 42790
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 42791,
+ 42791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42792,
+ 42792
+ ],
+ "mapped",
+ [
+ 42793
+ ]
+ ],
+ [
+ [
+ 42793,
+ 42793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42794,
+ 42794
+ ],
+ "mapped",
+ [
+ 42795
+ ]
+ ],
+ [
+ [
+ 42795,
+ 42795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42796,
+ 42796
+ ],
+ "mapped",
+ [
+ 42797
+ ]
+ ],
+ [
+ [
+ 42797,
+ 42797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42798,
+ 42798
+ ],
+ "mapped",
+ [
+ 42799
+ ]
+ ],
+ [
+ [
+ 42799,
+ 42801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42802,
+ 42802
+ ],
+ "mapped",
+ [
+ 42803
+ ]
+ ],
+ [
+ [
+ 42803,
+ 42803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42804,
+ 42804
+ ],
+ "mapped",
+ [
+ 42805
+ ]
+ ],
+ [
+ [
+ 42805,
+ 42805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42806,
+ 42806
+ ],
+ "mapped",
+ [
+ 42807
+ ]
+ ],
+ [
+ [
+ 42807,
+ 42807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42808,
+ 42808
+ ],
+ "mapped",
+ [
+ 42809
+ ]
+ ],
+ [
+ [
+ 42809,
+ 42809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42810,
+ 42810
+ ],
+ "mapped",
+ [
+ 42811
+ ]
+ ],
+ [
+ [
+ 42811,
+ 42811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42812,
+ 42812
+ ],
+ "mapped",
+ [
+ 42813
+ ]
+ ],
+ [
+ [
+ 42813,
+ 42813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42814,
+ 42814
+ ],
+ "mapped",
+ [
+ 42815
+ ]
+ ],
+ [
+ [
+ 42815,
+ 42815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42816,
+ 42816
+ ],
+ "mapped",
+ [
+ 42817
+ ]
+ ],
+ [
+ [
+ 42817,
+ 42817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42818,
+ 42818
+ ],
+ "mapped",
+ [
+ 42819
+ ]
+ ],
+ [
+ [
+ 42819,
+ 42819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42820,
+ 42820
+ ],
+ "mapped",
+ [
+ 42821
+ ]
+ ],
+ [
+ [
+ 42821,
+ 42821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42822,
+ 42822
+ ],
+ "mapped",
+ [
+ 42823
+ ]
+ ],
+ [
+ [
+ 42823,
+ 42823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42824,
+ 42824
+ ],
+ "mapped",
+ [
+ 42825
+ ]
+ ],
+ [
+ [
+ 42825,
+ 42825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42826,
+ 42826
+ ],
+ "mapped",
+ [
+ 42827
+ ]
+ ],
+ [
+ [
+ 42827,
+ 42827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42828,
+ 42828
+ ],
+ "mapped",
+ [
+ 42829
+ ]
+ ],
+ [
+ [
+ 42829,
+ 42829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42830,
+ 42830
+ ],
+ "mapped",
+ [
+ 42831
+ ]
+ ],
+ [
+ [
+ 42831,
+ 42831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42832,
+ 42832
+ ],
+ "mapped",
+ [
+ 42833
+ ]
+ ],
+ [
+ [
+ 42833,
+ 42833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42834,
+ 42834
+ ],
+ "mapped",
+ [
+ 42835
+ ]
+ ],
+ [
+ [
+ 42835,
+ 42835
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42836,
+ 42836
+ ],
+ "mapped",
+ [
+ 42837
+ ]
+ ],
+ [
+ [
+ 42837,
+ 42837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42838,
+ 42838
+ ],
+ "mapped",
+ [
+ 42839
+ ]
+ ],
+ [
+ [
+ 42839,
+ 42839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42840,
+ 42840
+ ],
+ "mapped",
+ [
+ 42841
+ ]
+ ],
+ [
+ [
+ 42841,
+ 42841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42842,
+ 42842
+ ],
+ "mapped",
+ [
+ 42843
+ ]
+ ],
+ [
+ [
+ 42843,
+ 42843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42844,
+ 42844
+ ],
+ "mapped",
+ [
+ 42845
+ ]
+ ],
+ [
+ [
+ 42845,
+ 42845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42846,
+ 42846
+ ],
+ "mapped",
+ [
+ 42847
+ ]
+ ],
+ [
+ [
+ 42847,
+ 42847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42848,
+ 42848
+ ],
+ "mapped",
+ [
+ 42849
+ ]
+ ],
+ [
+ [
+ 42849,
+ 42849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42850,
+ 42850
+ ],
+ "mapped",
+ [
+ 42851
+ ]
+ ],
+ [
+ [
+ 42851,
+ 42851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42852,
+ 42852
+ ],
+ "mapped",
+ [
+ 42853
+ ]
+ ],
+ [
+ [
+ 42853,
+ 42853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42854,
+ 42854
+ ],
+ "mapped",
+ [
+ 42855
+ ]
+ ],
+ [
+ [
+ 42855,
+ 42855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42856,
+ 42856
+ ],
+ "mapped",
+ [
+ 42857
+ ]
+ ],
+ [
+ [
+ 42857,
+ 42857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42858,
+ 42858
+ ],
+ "mapped",
+ [
+ 42859
+ ]
+ ],
+ [
+ [
+ 42859,
+ 42859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42860,
+ 42860
+ ],
+ "mapped",
+ [
+ 42861
+ ]
+ ],
+ [
+ [
+ 42861,
+ 42861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42862,
+ 42862
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42863,
+ 42863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42864,
+ 42864
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42865,
+ 42872
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42873,
+ 42873
+ ],
+ "mapped",
+ [
+ 42874
+ ]
+ ],
+ [
+ [
+ 42874,
+ 42874
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42875,
+ 42875
+ ],
+ "mapped",
+ [
+ 42876
+ ]
+ ],
+ [
+ [
+ 42876,
+ 42876
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42877,
+ 42877
+ ],
+ "mapped",
+ [
+ 7545
+ ]
+ ],
+ [
+ [
+ 42878,
+ 42878
+ ],
+ "mapped",
+ [
+ 42879
+ ]
+ ],
+ [
+ [
+ 42879,
+ 42879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42880,
+ 42880
+ ],
+ "mapped",
+ [
+ 42881
+ ]
+ ],
+ [
+ [
+ 42881,
+ 42881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42882,
+ 42882
+ ],
+ "mapped",
+ [
+ 42883
+ ]
+ ],
+ [
+ [
+ 42883,
+ 42883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42884,
+ 42884
+ ],
+ "mapped",
+ [
+ 42885
+ ]
+ ],
+ [
+ [
+ 42885,
+ 42885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42886,
+ 42886
+ ],
+ "mapped",
+ [
+ 42887
+ ]
+ ],
+ [
+ [
+ 42887,
+ 42888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42889,
+ 42890
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42891,
+ 42891
+ ],
+ "mapped",
+ [
+ 42892
+ ]
+ ],
+ [
+ [
+ 42892,
+ 42892
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42893,
+ 42893
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 42894,
+ 42894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42895,
+ 42895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42896,
+ 42896
+ ],
+ "mapped",
+ [
+ 42897
+ ]
+ ],
+ [
+ [
+ 42897,
+ 42897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42898,
+ 42898
+ ],
+ "mapped",
+ [
+ 42899
+ ]
+ ],
+ [
+ [
+ 42899,
+ 42899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42900,
+ 42901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42902,
+ 42902
+ ],
+ "mapped",
+ [
+ 42903
+ ]
+ ],
+ [
+ [
+ 42903,
+ 42903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42904,
+ 42904
+ ],
+ "mapped",
+ [
+ 42905
+ ]
+ ],
+ [
+ [
+ 42905,
+ 42905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42906,
+ 42906
+ ],
+ "mapped",
+ [
+ 42907
+ ]
+ ],
+ [
+ [
+ 42907,
+ 42907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42908,
+ 42908
+ ],
+ "mapped",
+ [
+ 42909
+ ]
+ ],
+ [
+ [
+ 42909,
+ 42909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42910,
+ 42910
+ ],
+ "mapped",
+ [
+ 42911
+ ]
+ ],
+ [
+ [
+ 42911,
+ 42911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42912,
+ 42912
+ ],
+ "mapped",
+ [
+ 42913
+ ]
+ ],
+ [
+ [
+ 42913,
+ 42913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42914,
+ 42914
+ ],
+ "mapped",
+ [
+ 42915
+ ]
+ ],
+ [
+ [
+ 42915,
+ 42915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42916,
+ 42916
+ ],
+ "mapped",
+ [
+ 42917
+ ]
+ ],
+ [
+ [
+ 42917,
+ 42917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42918,
+ 42918
+ ],
+ "mapped",
+ [
+ 42919
+ ]
+ ],
+ [
+ [
+ 42919,
+ 42919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42920,
+ 42920
+ ],
+ "mapped",
+ [
+ 42921
+ ]
+ ],
+ [
+ [
+ 42921,
+ 42921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42922,
+ 42922
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 42923,
+ 42923
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 42924,
+ 42924
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 42925,
+ 42925
+ ],
+ "mapped",
+ [
+ 620
+ ]
+ ],
+ [
+ [
+ 42926,
+ 42927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42928,
+ 42928
+ ],
+ "mapped",
+ [
+ 670
+ ]
+ ],
+ [
+ [
+ 42929,
+ 42929
+ ],
+ "mapped",
+ [
+ 647
+ ]
+ ],
+ [
+ [
+ 42930,
+ 42930
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 42931,
+ 42931
+ ],
+ "mapped",
+ [
+ 43859
+ ]
+ ],
+ [
+ [
+ 42932,
+ 42932
+ ],
+ "mapped",
+ [
+ 42933
+ ]
+ ],
+ [
+ [
+ 42933,
+ 42933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42934,
+ 42934
+ ],
+ "mapped",
+ [
+ 42935
+ ]
+ ],
+ [
+ [
+ 42935,
+ 42935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42936,
+ 42998
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42999,
+ 42999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43000,
+ 43000
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 43001,
+ 43001
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 43002,
+ 43002
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43003,
+ 43007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43008,
+ 43047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43048,
+ 43051
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43052,
+ 43055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43056,
+ 43065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43066,
+ 43071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43072,
+ 43123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43124,
+ 43127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43128,
+ 43135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43136,
+ 43204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43205,
+ 43213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43214,
+ 43215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43216,
+ 43225
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43226,
+ 43231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43232,
+ 43255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43256,
+ 43258
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43259,
+ 43259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43260,
+ 43260
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43261,
+ 43261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43262,
+ 43263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43264,
+ 43309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43310,
+ 43311
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43312,
+ 43347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43348,
+ 43358
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43359,
+ 43359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43360,
+ 43388
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43389,
+ 43391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43392,
+ 43456
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43457,
+ 43469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43470,
+ 43470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43471,
+ 43481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43482,
+ 43485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43486,
+ 43487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43488,
+ 43518
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43519,
+ 43519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43520,
+ 43574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43575,
+ 43583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43584,
+ 43597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43598,
+ 43599
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43600,
+ 43609
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43610,
+ 43611
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43612,
+ 43615
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43616,
+ 43638
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43639,
+ 43641
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43642,
+ 43643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43644,
+ 43647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43648,
+ 43714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43715,
+ 43738
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43739,
+ 43741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43742,
+ 43743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43744,
+ 43759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43760,
+ 43761
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43762,
+ 43766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43767,
+ 43776
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43777,
+ 43782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43783,
+ 43784
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43785,
+ 43790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43791,
+ 43792
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43793,
+ 43798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43799,
+ 43807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43808,
+ 43814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43815,
+ 43815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43816,
+ 43822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43823,
+ 43823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43824,
+ 43866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43867,
+ 43867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43868,
+ 43868
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 43869,
+ 43869
+ ],
+ "mapped",
+ [
+ 43831
+ ]
+ ],
+ [
+ [
+ 43870,
+ 43870
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 43871,
+ 43871
+ ],
+ "mapped",
+ [
+ 43858
+ ]
+ ],
+ [
+ [
+ 43872,
+ 43875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43876,
+ 43877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43878,
+ 43887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43888,
+ 43888
+ ],
+ "mapped",
+ [
+ 5024
+ ]
+ ],
+ [
+ [
+ 43889,
+ 43889
+ ],
+ "mapped",
+ [
+ 5025
+ ]
+ ],
+ [
+ [
+ 43890,
+ 43890
+ ],
+ "mapped",
+ [
+ 5026
+ ]
+ ],
+ [
+ [
+ 43891,
+ 43891
+ ],
+ "mapped",
+ [
+ 5027
+ ]
+ ],
+ [
+ [
+ 43892,
+ 43892
+ ],
+ "mapped",
+ [
+ 5028
+ ]
+ ],
+ [
+ [
+ 43893,
+ 43893
+ ],
+ "mapped",
+ [
+ 5029
+ ]
+ ],
+ [
+ [
+ 43894,
+ 43894
+ ],
+ "mapped",
+ [
+ 5030
+ ]
+ ],
+ [
+ [
+ 43895,
+ 43895
+ ],
+ "mapped",
+ [
+ 5031
+ ]
+ ],
+ [
+ [
+ 43896,
+ 43896
+ ],
+ "mapped",
+ [
+ 5032
+ ]
+ ],
+ [
+ [
+ 43897,
+ 43897
+ ],
+ "mapped",
+ [
+ 5033
+ ]
+ ],
+ [
+ [
+ 43898,
+ 43898
+ ],
+ "mapped",
+ [
+ 5034
+ ]
+ ],
+ [
+ [
+ 43899,
+ 43899
+ ],
+ "mapped",
+ [
+ 5035
+ ]
+ ],
+ [
+ [
+ 43900,
+ 43900
+ ],
+ "mapped",
+ [
+ 5036
+ ]
+ ],
+ [
+ [
+ 43901,
+ 43901
+ ],
+ "mapped",
+ [
+ 5037
+ ]
+ ],
+ [
+ [
+ 43902,
+ 43902
+ ],
+ "mapped",
+ [
+ 5038
+ ]
+ ],
+ [
+ [
+ 43903,
+ 43903
+ ],
+ "mapped",
+ [
+ 5039
+ ]
+ ],
+ [
+ [
+ 43904,
+ 43904
+ ],
+ "mapped",
+ [
+ 5040
+ ]
+ ],
+ [
+ [
+ 43905,
+ 43905
+ ],
+ "mapped",
+ [
+ 5041
+ ]
+ ],
+ [
+ [
+ 43906,
+ 43906
+ ],
+ "mapped",
+ [
+ 5042
+ ]
+ ],
+ [
+ [
+ 43907,
+ 43907
+ ],
+ "mapped",
+ [
+ 5043
+ ]
+ ],
+ [
+ [
+ 43908,
+ 43908
+ ],
+ "mapped",
+ [
+ 5044
+ ]
+ ],
+ [
+ [
+ 43909,
+ 43909
+ ],
+ "mapped",
+ [
+ 5045
+ ]
+ ],
+ [
+ [
+ 43910,
+ 43910
+ ],
+ "mapped",
+ [
+ 5046
+ ]
+ ],
+ [
+ [
+ 43911,
+ 43911
+ ],
+ "mapped",
+ [
+ 5047
+ ]
+ ],
+ [
+ [
+ 43912,
+ 43912
+ ],
+ "mapped",
+ [
+ 5048
+ ]
+ ],
+ [
+ [
+ 43913,
+ 43913
+ ],
+ "mapped",
+ [
+ 5049
+ ]
+ ],
+ [
+ [
+ 43914,
+ 43914
+ ],
+ "mapped",
+ [
+ 5050
+ ]
+ ],
+ [
+ [
+ 43915,
+ 43915
+ ],
+ "mapped",
+ [
+ 5051
+ ]
+ ],
+ [
+ [
+ 43916,
+ 43916
+ ],
+ "mapped",
+ [
+ 5052
+ ]
+ ],
+ [
+ [
+ 43917,
+ 43917
+ ],
+ "mapped",
+ [
+ 5053
+ ]
+ ],
+ [
+ [
+ 43918,
+ 43918
+ ],
+ "mapped",
+ [
+ 5054
+ ]
+ ],
+ [
+ [
+ 43919,
+ 43919
+ ],
+ "mapped",
+ [
+ 5055
+ ]
+ ],
+ [
+ [
+ 43920,
+ 43920
+ ],
+ "mapped",
+ [
+ 5056
+ ]
+ ],
+ [
+ [
+ 43921,
+ 43921
+ ],
+ "mapped",
+ [
+ 5057
+ ]
+ ],
+ [
+ [
+ 43922,
+ 43922
+ ],
+ "mapped",
+ [
+ 5058
+ ]
+ ],
+ [
+ [
+ 43923,
+ 43923
+ ],
+ "mapped",
+ [
+ 5059
+ ]
+ ],
+ [
+ [
+ 43924,
+ 43924
+ ],
+ "mapped",
+ [
+ 5060
+ ]
+ ],
+ [
+ [
+ 43925,
+ 43925
+ ],
+ "mapped",
+ [
+ 5061
+ ]
+ ],
+ [
+ [
+ 43926,
+ 43926
+ ],
+ "mapped",
+ [
+ 5062
+ ]
+ ],
+ [
+ [
+ 43927,
+ 43927
+ ],
+ "mapped",
+ [
+ 5063
+ ]
+ ],
+ [
+ [
+ 43928,
+ 43928
+ ],
+ "mapped",
+ [
+ 5064
+ ]
+ ],
+ [
+ [
+ 43929,
+ 43929
+ ],
+ "mapped",
+ [
+ 5065
+ ]
+ ],
+ [
+ [
+ 43930,
+ 43930
+ ],
+ "mapped",
+ [
+ 5066
+ ]
+ ],
+ [
+ [
+ 43931,
+ 43931
+ ],
+ "mapped",
+ [
+ 5067
+ ]
+ ],
+ [
+ [
+ 43932,
+ 43932
+ ],
+ "mapped",
+ [
+ 5068
+ ]
+ ],
+ [
+ [
+ 43933,
+ 43933
+ ],
+ "mapped",
+ [
+ 5069
+ ]
+ ],
+ [
+ [
+ 43934,
+ 43934
+ ],
+ "mapped",
+ [
+ 5070
+ ]
+ ],
+ [
+ [
+ 43935,
+ 43935
+ ],
+ "mapped",
+ [
+ 5071
+ ]
+ ],
+ [
+ [
+ 43936,
+ 43936
+ ],
+ "mapped",
+ [
+ 5072
+ ]
+ ],
+ [
+ [
+ 43937,
+ 43937
+ ],
+ "mapped",
+ [
+ 5073
+ ]
+ ],
+ [
+ [
+ 43938,
+ 43938
+ ],
+ "mapped",
+ [
+ 5074
+ ]
+ ],
+ [
+ [
+ 43939,
+ 43939
+ ],
+ "mapped",
+ [
+ 5075
+ ]
+ ],
+ [
+ [
+ 43940,
+ 43940
+ ],
+ "mapped",
+ [
+ 5076
+ ]
+ ],
+ [
+ [
+ 43941,
+ 43941
+ ],
+ "mapped",
+ [
+ 5077
+ ]
+ ],
+ [
+ [
+ 43942,
+ 43942
+ ],
+ "mapped",
+ [
+ 5078
+ ]
+ ],
+ [
+ [
+ 43943,
+ 43943
+ ],
+ "mapped",
+ [
+ 5079
+ ]
+ ],
+ [
+ [
+ 43944,
+ 43944
+ ],
+ "mapped",
+ [
+ 5080
+ ]
+ ],
+ [
+ [
+ 43945,
+ 43945
+ ],
+ "mapped",
+ [
+ 5081
+ ]
+ ],
+ [
+ [
+ 43946,
+ 43946
+ ],
+ "mapped",
+ [
+ 5082
+ ]
+ ],
+ [
+ [
+ 43947,
+ 43947
+ ],
+ "mapped",
+ [
+ 5083
+ ]
+ ],
+ [
+ [
+ 43948,
+ 43948
+ ],
+ "mapped",
+ [
+ 5084
+ ]
+ ],
+ [
+ [
+ 43949,
+ 43949
+ ],
+ "mapped",
+ [
+ 5085
+ ]
+ ],
+ [
+ [
+ 43950,
+ 43950
+ ],
+ "mapped",
+ [
+ 5086
+ ]
+ ],
+ [
+ [
+ 43951,
+ 43951
+ ],
+ "mapped",
+ [
+ 5087
+ ]
+ ],
+ [
+ [
+ 43952,
+ 43952
+ ],
+ "mapped",
+ [
+ 5088
+ ]
+ ],
+ [
+ [
+ 43953,
+ 43953
+ ],
+ "mapped",
+ [
+ 5089
+ ]
+ ],
+ [
+ [
+ 43954,
+ 43954
+ ],
+ "mapped",
+ [
+ 5090
+ ]
+ ],
+ [
+ [
+ 43955,
+ 43955
+ ],
+ "mapped",
+ [
+ 5091
+ ]
+ ],
+ [
+ [
+ 43956,
+ 43956
+ ],
+ "mapped",
+ [
+ 5092
+ ]
+ ],
+ [
+ [
+ 43957,
+ 43957
+ ],
+ "mapped",
+ [
+ 5093
+ ]
+ ],
+ [
+ [
+ 43958,
+ 43958
+ ],
+ "mapped",
+ [
+ 5094
+ ]
+ ],
+ [
+ [
+ 43959,
+ 43959
+ ],
+ "mapped",
+ [
+ 5095
+ ]
+ ],
+ [
+ [
+ 43960,
+ 43960
+ ],
+ "mapped",
+ [
+ 5096
+ ]
+ ],
+ [
+ [
+ 43961,
+ 43961
+ ],
+ "mapped",
+ [
+ 5097
+ ]
+ ],
+ [
+ [
+ 43962,
+ 43962
+ ],
+ "mapped",
+ [
+ 5098
+ ]
+ ],
+ [
+ [
+ 43963,
+ 43963
+ ],
+ "mapped",
+ [
+ 5099
+ ]
+ ],
+ [
+ [
+ 43964,
+ 43964
+ ],
+ "mapped",
+ [
+ 5100
+ ]
+ ],
+ [
+ [
+ 43965,
+ 43965
+ ],
+ "mapped",
+ [
+ 5101
+ ]
+ ],
+ [
+ [
+ 43966,
+ 43966
+ ],
+ "mapped",
+ [
+ 5102
+ ]
+ ],
+ [
+ [
+ 43967,
+ 43967
+ ],
+ "mapped",
+ [
+ 5103
+ ]
+ ],
+ [
+ [
+ 43968,
+ 44010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44011,
+ 44011
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 44012,
+ 44013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44014,
+ 44015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44016,
+ 44025
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44026,
+ 44031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44032,
+ 55203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 55204,
+ 55215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55216,
+ 55238
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55239,
+ 55242
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55243,
+ 55291
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55292,
+ 55295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55296,
+ 57343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 57344,
+ 63743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 63744,
+ 63744
+ ],
+ "mapped",
+ [
+ 35912
+ ]
+ ],
+ [
+ [
+ 63745,
+ 63745
+ ],
+ "mapped",
+ [
+ 26356
+ ]
+ ],
+ [
+ [
+ 63746,
+ 63746
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 63747,
+ 63747
+ ],
+ "mapped",
+ [
+ 36040
+ ]
+ ],
+ [
+ [
+ 63748,
+ 63748
+ ],
+ "mapped",
+ [
+ 28369
+ ]
+ ],
+ [
+ [
+ 63749,
+ 63749
+ ],
+ "mapped",
+ [
+ 20018
+ ]
+ ],
+ [
+ [
+ 63750,
+ 63750
+ ],
+ "mapped",
+ [
+ 21477
+ ]
+ ],
+ [
+ [
+ 63751,
+ 63752
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 63753,
+ 63753
+ ],
+ "mapped",
+ [
+ 22865
+ ]
+ ],
+ [
+ [
+ 63754,
+ 63754
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 63755,
+ 63755
+ ],
+ "mapped",
+ [
+ 21895
+ ]
+ ],
+ [
+ [
+ 63756,
+ 63756
+ ],
+ "mapped",
+ [
+ 22856
+ ]
+ ],
+ [
+ [
+ 63757,
+ 63757
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 63758,
+ 63758
+ ],
+ "mapped",
+ [
+ 30313
+ ]
+ ],
+ [
+ [
+ 63759,
+ 63759
+ ],
+ "mapped",
+ [
+ 32645
+ ]
+ ],
+ [
+ [
+ 63760,
+ 63760
+ ],
+ "mapped",
+ [
+ 34367
+ ]
+ ],
+ [
+ [
+ 63761,
+ 63761
+ ],
+ "mapped",
+ [
+ 34746
+ ]
+ ],
+ [
+ [
+ 63762,
+ 63762
+ ],
+ "mapped",
+ [
+ 35064
+ ]
+ ],
+ [
+ [
+ 63763,
+ 63763
+ ],
+ "mapped",
+ [
+ 37007
+ ]
+ ],
+ [
+ [
+ 63764,
+ 63764
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63765,
+ 63765
+ ],
+ "mapped",
+ [
+ 27931
+ ]
+ ],
+ [
+ [
+ 63766,
+ 63766
+ ],
+ "mapped",
+ [
+ 28889
+ ]
+ ],
+ [
+ [
+ 63767,
+ 63767
+ ],
+ "mapped",
+ [
+ 29662
+ ]
+ ],
+ [
+ [
+ 63768,
+ 63768
+ ],
+ "mapped",
+ [
+ 33853
+ ]
+ ],
+ [
+ [
+ 63769,
+ 63769
+ ],
+ "mapped",
+ [
+ 37226
+ ]
+ ],
+ [
+ [
+ 63770,
+ 63770
+ ],
+ "mapped",
+ [
+ 39409
+ ]
+ ],
+ [
+ [
+ 63771,
+ 63771
+ ],
+ "mapped",
+ [
+ 20098
+ ]
+ ],
+ [
+ [
+ 63772,
+ 63772
+ ],
+ "mapped",
+ [
+ 21365
+ ]
+ ],
+ [
+ [
+ 63773,
+ 63773
+ ],
+ "mapped",
+ [
+ 27396
+ ]
+ ],
+ [
+ [
+ 63774,
+ 63774
+ ],
+ "mapped",
+ [
+ 29211
+ ]
+ ],
+ [
+ [
+ 63775,
+ 63775
+ ],
+ "mapped",
+ [
+ 34349
+ ]
+ ],
+ [
+ [
+ 63776,
+ 63776
+ ],
+ "mapped",
+ [
+ 40478
+ ]
+ ],
+ [
+ [
+ 63777,
+ 63777
+ ],
+ "mapped",
+ [
+ 23888
+ ]
+ ],
+ [
+ [
+ 63778,
+ 63778
+ ],
+ "mapped",
+ [
+ 28651
+ ]
+ ],
+ [
+ [
+ 63779,
+ 63779
+ ],
+ "mapped",
+ [
+ 34253
+ ]
+ ],
+ [
+ [
+ 63780,
+ 63780
+ ],
+ "mapped",
+ [
+ 35172
+ ]
+ ],
+ [
+ [
+ 63781,
+ 63781
+ ],
+ "mapped",
+ [
+ 25289
+ ]
+ ],
+ [
+ [
+ 63782,
+ 63782
+ ],
+ "mapped",
+ [
+ 33240
+ ]
+ ],
+ [
+ [
+ 63783,
+ 63783
+ ],
+ "mapped",
+ [
+ 34847
+ ]
+ ],
+ [
+ [
+ 63784,
+ 63784
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 63785,
+ 63785
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 63786,
+ 63786
+ ],
+ "mapped",
+ [
+ 28010
+ ]
+ ],
+ [
+ [
+ 63787,
+ 63787
+ ],
+ "mapped",
+ [
+ 29436
+ ]
+ ],
+ [
+ [
+ 63788,
+ 63788
+ ],
+ "mapped",
+ [
+ 37070
+ ]
+ ],
+ [
+ [
+ 63789,
+ 63789
+ ],
+ "mapped",
+ [
+ 20358
+ ]
+ ],
+ [
+ [
+ 63790,
+ 63790
+ ],
+ "mapped",
+ [
+ 20919
+ ]
+ ],
+ [
+ [
+ 63791,
+ 63791
+ ],
+ "mapped",
+ [
+ 21214
+ ]
+ ],
+ [
+ [
+ 63792,
+ 63792
+ ],
+ "mapped",
+ [
+ 25796
+ ]
+ ],
+ [
+ [
+ 63793,
+ 63793
+ ],
+ "mapped",
+ [
+ 27347
+ ]
+ ],
+ [
+ [
+ 63794,
+ 63794
+ ],
+ "mapped",
+ [
+ 29200
+ ]
+ ],
+ [
+ [
+ 63795,
+ 63795
+ ],
+ "mapped",
+ [
+ 30439
+ ]
+ ],
+ [
+ [
+ 63796,
+ 63796
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 63797,
+ 63797
+ ],
+ "mapped",
+ [
+ 34310
+ ]
+ ],
+ [
+ [
+ 63798,
+ 63798
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 63799,
+ 63799
+ ],
+ "mapped",
+ [
+ 36335
+ ]
+ ],
+ [
+ [
+ 63800,
+ 63800
+ ],
+ "mapped",
+ [
+ 38706
+ ]
+ ],
+ [
+ [
+ 63801,
+ 63801
+ ],
+ "mapped",
+ [
+ 39791
+ ]
+ ],
+ [
+ [
+ 63802,
+ 63802
+ ],
+ "mapped",
+ [
+ 40442
+ ]
+ ],
+ [
+ [
+ 63803,
+ 63803
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 63804,
+ 63804
+ ],
+ "mapped",
+ [
+ 31103
+ ]
+ ],
+ [
+ [
+ 63805,
+ 63805
+ ],
+ "mapped",
+ [
+ 32160
+ ]
+ ],
+ [
+ [
+ 63806,
+ 63806
+ ],
+ "mapped",
+ [
+ 33737
+ ]
+ ],
+ [
+ [
+ 63807,
+ 63807
+ ],
+ "mapped",
+ [
+ 37636
+ ]
+ ],
+ [
+ [
+ 63808,
+ 63808
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 63809,
+ 63809
+ ],
+ "mapped",
+ [
+ 35542
+ ]
+ ],
+ [
+ [
+ 63810,
+ 63810
+ ],
+ "mapped",
+ [
+ 22751
+ ]
+ ],
+ [
+ [
+ 63811,
+ 63811
+ ],
+ "mapped",
+ [
+ 24324
+ ]
+ ],
+ [
+ [
+ 63812,
+ 63812
+ ],
+ "mapped",
+ [
+ 31840
+ ]
+ ],
+ [
+ [
+ 63813,
+ 63813
+ ],
+ "mapped",
+ [
+ 32894
+ ]
+ ],
+ [
+ [
+ 63814,
+ 63814
+ ],
+ "mapped",
+ [
+ 29282
+ ]
+ ],
+ [
+ [
+ 63815,
+ 63815
+ ],
+ "mapped",
+ [
+ 30922
+ ]
+ ],
+ [
+ [
+ 63816,
+ 63816
+ ],
+ "mapped",
+ [
+ 36034
+ ]
+ ],
+ [
+ [
+ 63817,
+ 63817
+ ],
+ "mapped",
+ [
+ 38647
+ ]
+ ],
+ [
+ [
+ 63818,
+ 63818
+ ],
+ "mapped",
+ [
+ 22744
+ ]
+ ],
+ [
+ [
+ 63819,
+ 63819
+ ],
+ "mapped",
+ [
+ 23650
+ ]
+ ],
+ [
+ [
+ 63820,
+ 63820
+ ],
+ "mapped",
+ [
+ 27155
+ ]
+ ],
+ [
+ [
+ 63821,
+ 63821
+ ],
+ "mapped",
+ [
+ 28122
+ ]
+ ],
+ [
+ [
+ 63822,
+ 63822
+ ],
+ "mapped",
+ [
+ 28431
+ ]
+ ],
+ [
+ [
+ 63823,
+ 63823
+ ],
+ "mapped",
+ [
+ 32047
+ ]
+ ],
+ [
+ [
+ 63824,
+ 63824
+ ],
+ "mapped",
+ [
+ 32311
+ ]
+ ],
+ [
+ [
+ 63825,
+ 63825
+ ],
+ "mapped",
+ [
+ 38475
+ ]
+ ],
+ [
+ [
+ 63826,
+ 63826
+ ],
+ "mapped",
+ [
+ 21202
+ ]
+ ],
+ [
+ [
+ 63827,
+ 63827
+ ],
+ "mapped",
+ [
+ 32907
+ ]
+ ],
+ [
+ [
+ 63828,
+ 63828
+ ],
+ "mapped",
+ [
+ 20956
+ ]
+ ],
+ [
+ [
+ 63829,
+ 63829
+ ],
+ "mapped",
+ [
+ 20940
+ ]
+ ],
+ [
+ [
+ 63830,
+ 63830
+ ],
+ "mapped",
+ [
+ 31260
+ ]
+ ],
+ [
+ [
+ 63831,
+ 63831
+ ],
+ "mapped",
+ [
+ 32190
+ ]
+ ],
+ [
+ [
+ 63832,
+ 63832
+ ],
+ "mapped",
+ [
+ 33777
+ ]
+ ],
+ [
+ [
+ 63833,
+ 63833
+ ],
+ "mapped",
+ [
+ 38517
+ ]
+ ],
+ [
+ [
+ 63834,
+ 63834
+ ],
+ "mapped",
+ [
+ 35712
+ ]
+ ],
+ [
+ [
+ 63835,
+ 63835
+ ],
+ "mapped",
+ [
+ 25295
+ ]
+ ],
+ [
+ [
+ 63836,
+ 63836
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63837,
+ 63837
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 63838,
+ 63838
+ ],
+ "mapped",
+ [
+ 20025
+ ]
+ ],
+ [
+ [
+ 63839,
+ 63839
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63840,
+ 63840
+ ],
+ "mapped",
+ [
+ 24594
+ ]
+ ],
+ [
+ [
+ 63841,
+ 63841
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63842,
+ 63842
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 63843,
+ 63843
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 63844,
+ 63844
+ ],
+ "mapped",
+ [
+ 30971
+ ]
+ ],
+ [
+ [
+ 63845,
+ 63845
+ ],
+ "mapped",
+ [
+ 20415
+ ]
+ ],
+ [
+ [
+ 63846,
+ 63846
+ ],
+ "mapped",
+ [
+ 24489
+ ]
+ ],
+ [
+ [
+ 63847,
+ 63847
+ ],
+ "mapped",
+ [
+ 19981
+ ]
+ ],
+ [
+ [
+ 63848,
+ 63848
+ ],
+ "mapped",
+ [
+ 27852
+ ]
+ ],
+ [
+ [
+ 63849,
+ 63849
+ ],
+ "mapped",
+ [
+ 25976
+ ]
+ ],
+ [
+ [
+ 63850,
+ 63850
+ ],
+ "mapped",
+ [
+ 32034
+ ]
+ ],
+ [
+ [
+ 63851,
+ 63851
+ ],
+ "mapped",
+ [
+ 21443
+ ]
+ ],
+ [
+ [
+ 63852,
+ 63852
+ ],
+ "mapped",
+ [
+ 22622
+ ]
+ ],
+ [
+ [
+ 63853,
+ 63853
+ ],
+ "mapped",
+ [
+ 30465
+ ]
+ ],
+ [
+ [
+ 63854,
+ 63854
+ ],
+ "mapped",
+ [
+ 33865
+ ]
+ ],
+ [
+ [
+ 63855,
+ 63855
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63856,
+ 63856
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 63857,
+ 63857
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 63858,
+ 63858
+ ],
+ "mapped",
+ [
+ 27784
+ ]
+ ],
+ [
+ [
+ 63859,
+ 63859
+ ],
+ "mapped",
+ [
+ 25342
+ ]
+ ],
+ [
+ [
+ 63860,
+ 63860
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 63861,
+ 63861
+ ],
+ "mapped",
+ [
+ 25504
+ ]
+ ],
+ [
+ [
+ 63862,
+ 63862
+ ],
+ "mapped",
+ [
+ 30053
+ ]
+ ],
+ [
+ [
+ 63863,
+ 63863
+ ],
+ "mapped",
+ [
+ 20142
+ ]
+ ],
+ [
+ [
+ 63864,
+ 63864
+ ],
+ "mapped",
+ [
+ 20841
+ ]
+ ],
+ [
+ [
+ 63865,
+ 63865
+ ],
+ "mapped",
+ [
+ 20937
+ ]
+ ],
+ [
+ [
+ 63866,
+ 63866
+ ],
+ "mapped",
+ [
+ 26753
+ ]
+ ],
+ [
+ [
+ 63867,
+ 63867
+ ],
+ "mapped",
+ [
+ 31975
+ ]
+ ],
+ [
+ [
+ 63868,
+ 63868
+ ],
+ "mapped",
+ [
+ 33391
+ ]
+ ],
+ [
+ [
+ 63869,
+ 63869
+ ],
+ "mapped",
+ [
+ 35538
+ ]
+ ],
+ [
+ [
+ 63870,
+ 63870
+ ],
+ "mapped",
+ [
+ 37327
+ ]
+ ],
+ [
+ [
+ 63871,
+ 63871
+ ],
+ "mapped",
+ [
+ 21237
+ ]
+ ],
+ [
+ [
+ 63872,
+ 63872
+ ],
+ "mapped",
+ [
+ 21570
+ ]
+ ],
+ [
+ [
+ 63873,
+ 63873
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 63874,
+ 63874
+ ],
+ "mapped",
+ [
+ 24300
+ ]
+ ],
+ [
+ [
+ 63875,
+ 63875
+ ],
+ "mapped",
+ [
+ 26053
+ ]
+ ],
+ [
+ [
+ 63876,
+ 63876
+ ],
+ "mapped",
+ [
+ 28670
+ ]
+ ],
+ [
+ [
+ 63877,
+ 63877
+ ],
+ "mapped",
+ [
+ 31018
+ ]
+ ],
+ [
+ [
+ 63878,
+ 63878
+ ],
+ "mapped",
+ [
+ 38317
+ ]
+ ],
+ [
+ [
+ 63879,
+ 63879
+ ],
+ "mapped",
+ [
+ 39530
+ ]
+ ],
+ [
+ [
+ 63880,
+ 63880
+ ],
+ "mapped",
+ [
+ 40599
+ ]
+ ],
+ [
+ [
+ 63881,
+ 63881
+ ],
+ "mapped",
+ [
+ 40654
+ ]
+ ],
+ [
+ [
+ 63882,
+ 63882
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 63883,
+ 63883
+ ],
+ "mapped",
+ [
+ 26310
+ ]
+ ],
+ [
+ [
+ 63884,
+ 63884
+ ],
+ "mapped",
+ [
+ 27511
+ ]
+ ],
+ [
+ [
+ 63885,
+ 63885
+ ],
+ "mapped",
+ [
+ 36706
+ ]
+ ],
+ [
+ [
+ 63886,
+ 63886
+ ],
+ "mapped",
+ [
+ 24180
+ ]
+ ],
+ [
+ [
+ 63887,
+ 63887
+ ],
+ "mapped",
+ [
+ 24976
+ ]
+ ],
+ [
+ [
+ 63888,
+ 63888
+ ],
+ "mapped",
+ [
+ 25088
+ ]
+ ],
+ [
+ [
+ 63889,
+ 63889
+ ],
+ "mapped",
+ [
+ 25754
+ ]
+ ],
+ [
+ [
+ 63890,
+ 63890
+ ],
+ "mapped",
+ [
+ 28451
+ ]
+ ],
+ [
+ [
+ 63891,
+ 63891
+ ],
+ "mapped",
+ [
+ 29001
+ ]
+ ],
+ [
+ [
+ 63892,
+ 63892
+ ],
+ "mapped",
+ [
+ 29833
+ ]
+ ],
+ [
+ [
+ 63893,
+ 63893
+ ],
+ "mapped",
+ [
+ 31178
+ ]
+ ],
+ [
+ [
+ 63894,
+ 63894
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 63895,
+ 63895
+ ],
+ "mapped",
+ [
+ 32879
+ ]
+ ],
+ [
+ [
+ 63896,
+ 63896
+ ],
+ "mapped",
+ [
+ 36646
+ ]
+ ],
+ [
+ [
+ 63897,
+ 63897
+ ],
+ "mapped",
+ [
+ 34030
+ ]
+ ],
+ [
+ [
+ 63898,
+ 63898
+ ],
+ "mapped",
+ [
+ 36899
+ ]
+ ],
+ [
+ [
+ 63899,
+ 63899
+ ],
+ "mapped",
+ [
+ 37706
+ ]
+ ],
+ [
+ [
+ 63900,
+ 63900
+ ],
+ "mapped",
+ [
+ 21015
+ ]
+ ],
+ [
+ [
+ 63901,
+ 63901
+ ],
+ "mapped",
+ [
+ 21155
+ ]
+ ],
+ [
+ [
+ 63902,
+ 63902
+ ],
+ "mapped",
+ [
+ 21693
+ ]
+ ],
+ [
+ [
+ 63903,
+ 63903
+ ],
+ "mapped",
+ [
+ 28872
+ ]
+ ],
+ [
+ [
+ 63904,
+ 63904
+ ],
+ "mapped",
+ [
+ 35010
+ ]
+ ],
+ [
+ [
+ 63905,
+ 63905
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63906,
+ 63906
+ ],
+ "mapped",
+ [
+ 24265
+ ]
+ ],
+ [
+ [
+ 63907,
+ 63907
+ ],
+ "mapped",
+ [
+ 24565
+ ]
+ ],
+ [
+ [
+ 63908,
+ 63908
+ ],
+ "mapped",
+ [
+ 25467
+ ]
+ ],
+ [
+ [
+ 63909,
+ 63909
+ ],
+ "mapped",
+ [
+ 27566
+ ]
+ ],
+ [
+ [
+ 63910,
+ 63910
+ ],
+ "mapped",
+ [
+ 31806
+ ]
+ ],
+ [
+ [
+ 63911,
+ 63911
+ ],
+ "mapped",
+ [
+ 29557
+ ]
+ ],
+ [
+ [
+ 63912,
+ 63912
+ ],
+ "mapped",
+ [
+ 20196
+ ]
+ ],
+ [
+ [
+ 63913,
+ 63913
+ ],
+ "mapped",
+ [
+ 22265
+ ]
+ ],
+ [
+ [
+ 63914,
+ 63914
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63915,
+ 63915
+ ],
+ "mapped",
+ [
+ 23994
+ ]
+ ],
+ [
+ [
+ 63916,
+ 63916
+ ],
+ "mapped",
+ [
+ 24604
+ ]
+ ],
+ [
+ [
+ 63917,
+ 63917
+ ],
+ "mapped",
+ [
+ 29618
+ ]
+ ],
+ [
+ [
+ 63918,
+ 63918
+ ],
+ "mapped",
+ [
+ 29801
+ ]
+ ],
+ [
+ [
+ 63919,
+ 63919
+ ],
+ "mapped",
+ [
+ 32666
+ ]
+ ],
+ [
+ [
+ 63920,
+ 63920
+ ],
+ "mapped",
+ [
+ 32838
+ ]
+ ],
+ [
+ [
+ 63921,
+ 63921
+ ],
+ "mapped",
+ [
+ 37428
+ ]
+ ],
+ [
+ [
+ 63922,
+ 63922
+ ],
+ "mapped",
+ [
+ 38646
+ ]
+ ],
+ [
+ [
+ 63923,
+ 63923
+ ],
+ "mapped",
+ [
+ 38728
+ ]
+ ],
+ [
+ [
+ 63924,
+ 63924
+ ],
+ "mapped",
+ [
+ 38936
+ ]
+ ],
+ [
+ [
+ 63925,
+ 63925
+ ],
+ "mapped",
+ [
+ 20363
+ ]
+ ],
+ [
+ [
+ 63926,
+ 63926
+ ],
+ "mapped",
+ [
+ 31150
+ ]
+ ],
+ [
+ [
+ 63927,
+ 63927
+ ],
+ "mapped",
+ [
+ 37300
+ ]
+ ],
+ [
+ [
+ 63928,
+ 63928
+ ],
+ "mapped",
+ [
+ 38584
+ ]
+ ],
+ [
+ [
+ 63929,
+ 63929
+ ],
+ "mapped",
+ [
+ 24801
+ ]
+ ],
+ [
+ [
+ 63930,
+ 63930
+ ],
+ "mapped",
+ [
+ 20102
+ ]
+ ],
+ [
+ [
+ 63931,
+ 63931
+ ],
+ "mapped",
+ [
+ 20698
+ ]
+ ],
+ [
+ [
+ 63932,
+ 63932
+ ],
+ "mapped",
+ [
+ 23534
+ ]
+ ],
+ [
+ [
+ 63933,
+ 63933
+ ],
+ "mapped",
+ [
+ 23615
+ ]
+ ],
+ [
+ [
+ 63934,
+ 63934
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 63935,
+ 63935
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63936,
+ 63936
+ ],
+ "mapped",
+ [
+ 29134
+ ]
+ ],
+ [
+ [
+ 63937,
+ 63937
+ ],
+ "mapped",
+ [
+ 30274
+ ]
+ ],
+ [
+ [
+ 63938,
+ 63938
+ ],
+ "mapped",
+ [
+ 34044
+ ]
+ ],
+ [
+ [
+ 63939,
+ 63939
+ ],
+ "mapped",
+ [
+ 36988
+ ]
+ ],
+ [
+ [
+ 63940,
+ 63940
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 63941,
+ 63941
+ ],
+ "mapped",
+ [
+ 26248
+ ]
+ ],
+ [
+ [
+ 63942,
+ 63942
+ ],
+ "mapped",
+ [
+ 38446
+ ]
+ ],
+ [
+ [
+ 63943,
+ 63943
+ ],
+ "mapped",
+ [
+ 21129
+ ]
+ ],
+ [
+ [
+ 63944,
+ 63944
+ ],
+ "mapped",
+ [
+ 26491
+ ]
+ ],
+ [
+ [
+ 63945,
+ 63945
+ ],
+ "mapped",
+ [
+ 26611
+ ]
+ ],
+ [
+ [
+ 63946,
+ 63946
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 63947,
+ 63947
+ ],
+ "mapped",
+ [
+ 28316
+ ]
+ ],
+ [
+ [
+ 63948,
+ 63948
+ ],
+ "mapped",
+ [
+ 29705
+ ]
+ ],
+ [
+ [
+ 63949,
+ 63949
+ ],
+ "mapped",
+ [
+ 30041
+ ]
+ ],
+ [
+ [
+ 63950,
+ 63950
+ ],
+ "mapped",
+ [
+ 30827
+ ]
+ ],
+ [
+ [
+ 63951,
+ 63951
+ ],
+ "mapped",
+ [
+ 32016
+ ]
+ ],
+ [
+ [
+ 63952,
+ 63952
+ ],
+ "mapped",
+ [
+ 39006
+ ]
+ ],
+ [
+ [
+ 63953,
+ 63953
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 63954,
+ 63954
+ ],
+ "mapped",
+ [
+ 25134
+ ]
+ ],
+ [
+ [
+ 63955,
+ 63955
+ ],
+ "mapped",
+ [
+ 38520
+ ]
+ ],
+ [
+ [
+ 63956,
+ 63956
+ ],
+ "mapped",
+ [
+ 20523
+ ]
+ ],
+ [
+ [
+ 63957,
+ 63957
+ ],
+ "mapped",
+ [
+ 23833
+ ]
+ ],
+ [
+ [
+ 63958,
+ 63958
+ ],
+ "mapped",
+ [
+ 28138
+ ]
+ ],
+ [
+ [
+ 63959,
+ 63959
+ ],
+ "mapped",
+ [
+ 36650
+ ]
+ ],
+ [
+ [
+ 63960,
+ 63960
+ ],
+ "mapped",
+ [
+ 24459
+ ]
+ ],
+ [
+ [
+ 63961,
+ 63961
+ ],
+ "mapped",
+ [
+ 24900
+ ]
+ ],
+ [
+ [
+ 63962,
+ 63962
+ ],
+ "mapped",
+ [
+ 26647
+ ]
+ ],
+ [
+ [
+ 63963,
+ 63963
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63964,
+ 63964
+ ],
+ "mapped",
+ [
+ 38534
+ ]
+ ],
+ [
+ [
+ 63965,
+ 63965
+ ],
+ "mapped",
+ [
+ 21033
+ ]
+ ],
+ [
+ [
+ 63966,
+ 63966
+ ],
+ "mapped",
+ [
+ 21519
+ ]
+ ],
+ [
+ [
+ 63967,
+ 63967
+ ],
+ "mapped",
+ [
+ 23653
+ ]
+ ],
+ [
+ [
+ 63968,
+ 63968
+ ],
+ "mapped",
+ [
+ 26131
+ ]
+ ],
+ [
+ [
+ 63969,
+ 63969
+ ],
+ "mapped",
+ [
+ 26446
+ ]
+ ],
+ [
+ [
+ 63970,
+ 63970
+ ],
+ "mapped",
+ [
+ 26792
+ ]
+ ],
+ [
+ [
+ 63971,
+ 63971
+ ],
+ "mapped",
+ [
+ 27877
+ ]
+ ],
+ [
+ [
+ 63972,
+ 63972
+ ],
+ "mapped",
+ [
+ 29702
+ ]
+ ],
+ [
+ [
+ 63973,
+ 63973
+ ],
+ "mapped",
+ [
+ 30178
+ ]
+ ],
+ [
+ [
+ 63974,
+ 63974
+ ],
+ "mapped",
+ [
+ 32633
+ ]
+ ],
+ [
+ [
+ 63975,
+ 63975
+ ],
+ "mapped",
+ [
+ 35023
+ ]
+ ],
+ [
+ [
+ 63976,
+ 63976
+ ],
+ "mapped",
+ [
+ 35041
+ ]
+ ],
+ [
+ [
+ 63977,
+ 63977
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 63978,
+ 63978
+ ],
+ "mapped",
+ [
+ 38626
+ ]
+ ],
+ [
+ [
+ 63979,
+ 63979
+ ],
+ "mapped",
+ [
+ 21311
+ ]
+ ],
+ [
+ [
+ 63980,
+ 63980
+ ],
+ "mapped",
+ [
+ 28346
+ ]
+ ],
+ [
+ [
+ 63981,
+ 63981
+ ],
+ "mapped",
+ [
+ 21533
+ ]
+ ],
+ [
+ [
+ 63982,
+ 63982
+ ],
+ "mapped",
+ [
+ 29136
+ ]
+ ],
+ [
+ [
+ 63983,
+ 63983
+ ],
+ "mapped",
+ [
+ 29848
+ ]
+ ],
+ [
+ [
+ 63984,
+ 63984
+ ],
+ "mapped",
+ [
+ 34298
+ ]
+ ],
+ [
+ [
+ 63985,
+ 63985
+ ],
+ "mapped",
+ [
+ 38563
+ ]
+ ],
+ [
+ [
+ 63986,
+ 63986
+ ],
+ "mapped",
+ [
+ 40023
+ ]
+ ],
+ [
+ [
+ 63987,
+ 63987
+ ],
+ "mapped",
+ [
+ 40607
+ ]
+ ],
+ [
+ [
+ 63988,
+ 63988
+ ],
+ "mapped",
+ [
+ 26519
+ ]
+ ],
+ [
+ [
+ 63989,
+ 63989
+ ],
+ "mapped",
+ [
+ 28107
+ ]
+ ],
+ [
+ [
+ 63990,
+ 63990
+ ],
+ "mapped",
+ [
+ 33256
+ ]
+ ],
+ [
+ [
+ 63991,
+ 63991
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 63992,
+ 63992
+ ],
+ "mapped",
+ [
+ 31520
+ ]
+ ],
+ [
+ [
+ 63993,
+ 63993
+ ],
+ "mapped",
+ [
+ 31890
+ ]
+ ],
+ [
+ [
+ 63994,
+ 63994
+ ],
+ "mapped",
+ [
+ 29376
+ ]
+ ],
+ [
+ [
+ 63995,
+ 63995
+ ],
+ "mapped",
+ [
+ 28825
+ ]
+ ],
+ [
+ [
+ 63996,
+ 63996
+ ],
+ "mapped",
+ [
+ 35672
+ ]
+ ],
+ [
+ [
+ 63997,
+ 63997
+ ],
+ "mapped",
+ [
+ 20160
+ ]
+ ],
+ [
+ [
+ 63998,
+ 63998
+ ],
+ "mapped",
+ [
+ 33590
+ ]
+ ],
+ [
+ [
+ 63999,
+ 63999
+ ],
+ "mapped",
+ [
+ 21050
+ ]
+ ],
+ [
+ [
+ 64000,
+ 64000
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 64001,
+ 64001
+ ],
+ "mapped",
+ [
+ 24230
+ ]
+ ],
+ [
+ [
+ 64002,
+ 64002
+ ],
+ "mapped",
+ [
+ 25299
+ ]
+ ],
+ [
+ [
+ 64003,
+ 64003
+ ],
+ "mapped",
+ [
+ 31958
+ ]
+ ],
+ [
+ [
+ 64004,
+ 64004
+ ],
+ "mapped",
+ [
+ 23429
+ ]
+ ],
+ [
+ [
+ 64005,
+ 64005
+ ],
+ "mapped",
+ [
+ 27934
+ ]
+ ],
+ [
+ [
+ 64006,
+ 64006
+ ],
+ "mapped",
+ [
+ 26292
+ ]
+ ],
+ [
+ [
+ 64007,
+ 64007
+ ],
+ "mapped",
+ [
+ 36667
+ ]
+ ],
+ [
+ [
+ 64008,
+ 64008
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 64009,
+ 64009
+ ],
+ "mapped",
+ [
+ 38477
+ ]
+ ],
+ [
+ [
+ 64010,
+ 64010
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 64011,
+ 64011
+ ],
+ "mapped",
+ [
+ 24275
+ ]
+ ],
+ [
+ [
+ 64012,
+ 64012
+ ],
+ "mapped",
+ [
+ 20800
+ ]
+ ],
+ [
+ [
+ 64013,
+ 64013
+ ],
+ "mapped",
+ [
+ 21952
+ ]
+ ],
+ [
+ [
+ 64014,
+ 64015
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64016,
+ 64016
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64017,
+ 64017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64018,
+ 64018
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64019,
+ 64020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64021,
+ 64021
+ ],
+ "mapped",
+ [
+ 20958
+ ]
+ ],
+ [
+ [
+ 64022,
+ 64022
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64023,
+ 64023
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64024,
+ 64024
+ ],
+ "mapped",
+ [
+ 31036
+ ]
+ ],
+ [
+ [
+ 64025,
+ 64025
+ ],
+ "mapped",
+ [
+ 31070
+ ]
+ ],
+ [
+ [
+ 64026,
+ 64026
+ ],
+ "mapped",
+ [
+ 31077
+ ]
+ ],
+ [
+ [
+ 64027,
+ 64027
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 64028,
+ 64028
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64029,
+ 64029
+ ],
+ "mapped",
+ [
+ 31934
+ ]
+ ],
+ [
+ [
+ 64030,
+ 64030
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 64031,
+ 64031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64032,
+ 64032
+ ],
+ "mapped",
+ [
+ 34322
+ ]
+ ],
+ [
+ [
+ 64033,
+ 64033
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64034,
+ 64034
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64035,
+ 64036
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64037,
+ 64037
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64038,
+ 64038
+ ],
+ "mapped",
+ [
+ 37117
+ ]
+ ],
+ [
+ [
+ 64039,
+ 64041
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64042,
+ 64042
+ ],
+ "mapped",
+ [
+ 39151
+ ]
+ ],
+ [
+ [
+ 64043,
+ 64043
+ ],
+ "mapped",
+ [
+ 39164
+ ]
+ ],
+ [
+ [
+ 64044,
+ 64044
+ ],
+ "mapped",
+ [
+ 39208
+ ]
+ ],
+ [
+ [
+ 64045,
+ 64045
+ ],
+ "mapped",
+ [
+ 40372
+ ]
+ ],
+ [
+ [
+ 64046,
+ 64046
+ ],
+ "mapped",
+ [
+ 37086
+ ]
+ ],
+ [
+ [
+ 64047,
+ 64047
+ ],
+ "mapped",
+ [
+ 38583
+ ]
+ ],
+ [
+ [
+ 64048,
+ 64048
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 64049,
+ 64049
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 64050,
+ 64050
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 64051,
+ 64051
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 64052,
+ 64052
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 64053,
+ 64053
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 64054,
+ 64054
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64055,
+ 64055
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 64056,
+ 64056
+ ],
+ "mapped",
+ [
+ 22120
+ ]
+ ],
+ [
+ [
+ 64057,
+ 64057
+ ],
+ "mapped",
+ [
+ 22592
+ ]
+ ],
+ [
+ [
+ 64058,
+ 64058
+ ],
+ "mapped",
+ [
+ 22696
+ ]
+ ],
+ [
+ [
+ 64059,
+ 64059
+ ],
+ "mapped",
+ [
+ 23652
+ ]
+ ],
+ [
+ [
+ 64060,
+ 64060
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 64061,
+ 64061
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 64062,
+ 64062
+ ],
+ "mapped",
+ [
+ 24936
+ ]
+ ],
+ [
+ [
+ 64063,
+ 64063
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64064,
+ 64064
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64065,
+ 64065
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 64066,
+ 64066
+ ],
+ "mapped",
+ [
+ 26082
+ ]
+ ],
+ [
+ [
+ 64067,
+ 64067
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 64068,
+ 64068
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 64069,
+ 64069
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 64070,
+ 64070
+ ],
+ "mapped",
+ [
+ 28186
+ ]
+ ],
+ [
+ [
+ 64071,
+ 64071
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64072,
+ 64072
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64073,
+ 64073
+ ],
+ "mapped",
+ [
+ 29227
+ ]
+ ],
+ [
+ [
+ 64074,
+ 64074
+ ],
+ "mapped",
+ [
+ 29730
+ ]
+ ],
+ [
+ [
+ 64075,
+ 64075
+ ],
+ "mapped",
+ [
+ 30865
+ ]
+ ],
+ [
+ [
+ 64076,
+ 64076
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 64077,
+ 64077
+ ],
+ "mapped",
+ [
+ 31049
+ ]
+ ],
+ [
+ [
+ 64078,
+ 64078
+ ],
+ "mapped",
+ [
+ 31048
+ ]
+ ],
+ [
+ [
+ 64079,
+ 64079
+ ],
+ "mapped",
+ [
+ 31056
+ ]
+ ],
+ [
+ [
+ 64080,
+ 64080
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 64081,
+ 64081
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 64082,
+ 64082
+ ],
+ "mapped",
+ [
+ 31117
+ ]
+ ],
+ [
+ [
+ 64083,
+ 64083
+ ],
+ "mapped",
+ [
+ 31118
+ ]
+ ],
+ [
+ [
+ 64084,
+ 64084
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 64085,
+ 64085
+ ],
+ "mapped",
+ [
+ 31361
+ ]
+ ],
+ [
+ [
+ 64086,
+ 64086
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64087,
+ 64087
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64088,
+ 64088
+ ],
+ "mapped",
+ [
+ 32265
+ ]
+ ],
+ [
+ [
+ 64089,
+ 64089
+ ],
+ "mapped",
+ [
+ 32321
+ ]
+ ],
+ [
+ [
+ 64090,
+ 64090
+ ],
+ "mapped",
+ [
+ 32626
+ ]
+ ],
+ [
+ [
+ 64091,
+ 64091
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64092,
+ 64092
+ ],
+ "mapped",
+ [
+ 33261
+ ]
+ ],
+ [
+ [
+ 64093,
+ 64094
+ ],
+ "mapped",
+ [
+ 33401
+ ]
+ ],
+ [
+ [
+ 64095,
+ 64095
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 64096,
+ 64096
+ ],
+ "mapped",
+ [
+ 35088
+ ]
+ ],
+ [
+ [
+ 64097,
+ 64097
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64098,
+ 64098
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64099,
+ 64099
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64100,
+ 64100
+ ],
+ "mapped",
+ [
+ 36051
+ ]
+ ],
+ [
+ [
+ 64101,
+ 64101
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64102,
+ 64102
+ ],
+ "mapped",
+ [
+ 36790
+ ]
+ ],
+ [
+ [
+ 64103,
+ 64103
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64104,
+ 64104
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64105,
+ 64105
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64106,
+ 64106
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64107,
+ 64107
+ ],
+ "mapped",
+ [
+ 24693
+ ]
+ ],
+ [
+ [
+ 64108,
+ 64108
+ ],
+ "mapped",
+ [
+ 148206
+ ]
+ ],
+ [
+ [
+ 64109,
+ 64109
+ ],
+ "mapped",
+ [
+ 33304
+ ]
+ ],
+ [
+ [
+ 64110,
+ 64111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64112,
+ 64112
+ ],
+ "mapped",
+ [
+ 20006
+ ]
+ ],
+ [
+ [
+ 64113,
+ 64113
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 64114,
+ 64114
+ ],
+ "mapped",
+ [
+ 20840
+ ]
+ ],
+ [
+ [
+ 64115,
+ 64115
+ ],
+ "mapped",
+ [
+ 20352
+ ]
+ ],
+ [
+ [
+ 64116,
+ 64116
+ ],
+ "mapped",
+ [
+ 20805
+ ]
+ ],
+ [
+ [
+ 64117,
+ 64117
+ ],
+ "mapped",
+ [
+ 20864
+ ]
+ ],
+ [
+ [
+ 64118,
+ 64118
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 64119,
+ 64119
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 64120,
+ 64120
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64121,
+ 64121
+ ],
+ "mapped",
+ [
+ 21845
+ ]
+ ],
+ [
+ [
+ 64122,
+ 64122
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 64123,
+ 64123
+ ],
+ "mapped",
+ [
+ 21986
+ ]
+ ],
+ [
+ [
+ 64124,
+ 64124
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64125,
+ 64125
+ ],
+ "mapped",
+ [
+ 22707
+ ]
+ ],
+ [
+ [
+ 64126,
+ 64126
+ ],
+ "mapped",
+ [
+ 22852
+ ]
+ ],
+ [
+ [
+ 64127,
+ 64127
+ ],
+ "mapped",
+ [
+ 22868
+ ]
+ ],
+ [
+ [
+ 64128,
+ 64128
+ ],
+ "mapped",
+ [
+ 23138
+ ]
+ ],
+ [
+ [
+ 64129,
+ 64129
+ ],
+ "mapped",
+ [
+ 23336
+ ]
+ ],
+ [
+ [
+ 64130,
+ 64130
+ ],
+ "mapped",
+ [
+ 24274
+ ]
+ ],
+ [
+ [
+ 64131,
+ 64131
+ ],
+ "mapped",
+ [
+ 24281
+ ]
+ ],
+ [
+ [
+ 64132,
+ 64132
+ ],
+ "mapped",
+ [
+ 24425
+ ]
+ ],
+ [
+ [
+ 64133,
+ 64133
+ ],
+ "mapped",
+ [
+ 24493
+ ]
+ ],
+ [
+ [
+ 64134,
+ 64134
+ ],
+ "mapped",
+ [
+ 24792
+ ]
+ ],
+ [
+ [
+ 64135,
+ 64135
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 64136,
+ 64136
+ ],
+ "mapped",
+ [
+ 24840
+ ]
+ ],
+ [
+ [
+ 64137,
+ 64137
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64138,
+ 64138
+ ],
+ "mapped",
+ [
+ 24928
+ ]
+ ],
+ [
+ [
+ 64139,
+ 64139
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64140,
+ 64140
+ ],
+ "mapped",
+ [
+ 25140
+ ]
+ ],
+ [
+ [
+ 64141,
+ 64141
+ ],
+ "mapped",
+ [
+ 25540
+ ]
+ ],
+ [
+ [
+ 64142,
+ 64142
+ ],
+ "mapped",
+ [
+ 25628
+ ]
+ ],
+ [
+ [
+ 64143,
+ 64143
+ ],
+ "mapped",
+ [
+ 25682
+ ]
+ ],
+ [
+ [
+ 64144,
+ 64144
+ ],
+ "mapped",
+ [
+ 25942
+ ]
+ ],
+ [
+ [
+ 64145,
+ 64145
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64146,
+ 64146
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 64147,
+ 64147
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 64148,
+ 64148
+ ],
+ "mapped",
+ [
+ 26454
+ ]
+ ],
+ [
+ [
+ 64149,
+ 64149
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 64150,
+ 64150
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 64151,
+ 64151
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 64152,
+ 64152
+ ],
+ "mapped",
+ [
+ 28379
+ ]
+ ],
+ [
+ [
+ 64153,
+ 64153
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 64154,
+ 64154
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64155,
+ 64155
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 64156,
+ 64156
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64157,
+ 64157
+ ],
+ "mapped",
+ [
+ 30631
+ ]
+ ],
+ [
+ [
+ 64158,
+ 64158
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 64159,
+ 64159
+ ],
+ "mapped",
+ [
+ 29359
+ ]
+ ],
+ [
+ [
+ 64160,
+ 64160
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64161,
+ 64161
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 64162,
+ 64162
+ ],
+ "mapped",
+ [
+ 29958
+ ]
+ ],
+ [
+ [
+ 64163,
+ 64163
+ ],
+ "mapped",
+ [
+ 30011
+ ]
+ ],
+ [
+ [
+ 64164,
+ 64164
+ ],
+ "mapped",
+ [
+ 30237
+ ]
+ ],
+ [
+ [
+ 64165,
+ 64165
+ ],
+ "mapped",
+ [
+ 30239
+ ]
+ ],
+ [
+ [
+ 64166,
+ 64166
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64167,
+ 64167
+ ],
+ "mapped",
+ [
+ 30427
+ ]
+ ],
+ [
+ [
+ 64168,
+ 64168
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 64169,
+ 64169
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 64170,
+ 64170
+ ],
+ "mapped",
+ [
+ 30528
+ ]
+ ],
+ [
+ [
+ 64171,
+ 64171
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 64172,
+ 64172
+ ],
+ "mapped",
+ [
+ 31409
+ ]
+ ],
+ [
+ [
+ 64173,
+ 64173
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64174,
+ 64174
+ ],
+ "mapped",
+ [
+ 31867
+ ]
+ ],
+ [
+ [
+ 64175,
+ 64175
+ ],
+ "mapped",
+ [
+ 32091
+ ]
+ ],
+ [
+ [
+ 64176,
+ 64176
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64177,
+ 64177
+ ],
+ "mapped",
+ [
+ 32574
+ ]
+ ],
+ [
+ [
+ 64178,
+ 64178
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64179,
+ 64179
+ ],
+ "mapped",
+ [
+ 33618
+ ]
+ ],
+ [
+ [
+ 64180,
+ 64180
+ ],
+ "mapped",
+ [
+ 33775
+ ]
+ ],
+ [
+ [
+ 64181,
+ 64181
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 64182,
+ 64182
+ ],
+ "mapped",
+ [
+ 35137
+ ]
+ ],
+ [
+ [
+ 64183,
+ 64183
+ ],
+ "mapped",
+ [
+ 35206
+ ]
+ ],
+ [
+ [
+ 64184,
+ 64184
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64185,
+ 64185
+ ],
+ "mapped",
+ [
+ 35519
+ ]
+ ],
+ [
+ [
+ 64186,
+ 64186
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64187,
+ 64187
+ ],
+ "mapped",
+ [
+ 35531
+ ]
+ ],
+ [
+ [
+ 64188,
+ 64188
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64189,
+ 64189
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 64190,
+ 64190
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 64191,
+ 64191
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64192,
+ 64192
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 64193,
+ 64193
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64194,
+ 64194
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 64195,
+ 64195
+ ],
+ "mapped",
+ [
+ 36978
+ ]
+ ],
+ [
+ [
+ 64196,
+ 64196
+ ],
+ "mapped",
+ [
+ 37273
+ ]
+ ],
+ [
+ [
+ 64197,
+ 64197
+ ],
+ "mapped",
+ [
+ 37494
+ ]
+ ],
+ [
+ [
+ 64198,
+ 64198
+ ],
+ "mapped",
+ [
+ 38524
+ ]
+ ],
+ [
+ [
+ 64199,
+ 64199
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64200,
+ 64200
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64201,
+ 64201
+ ],
+ "mapped",
+ [
+ 38875
+ ]
+ ],
+ [
+ [
+ 64202,
+ 64202
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64203,
+ 64203
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 64204,
+ 64204
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64205,
+ 64205
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 64206,
+ 64206
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 64207,
+ 64207
+ ],
+ "mapped",
+ [
+ 141386
+ ]
+ ],
+ [
+ [
+ 64208,
+ 64208
+ ],
+ "mapped",
+ [
+ 141380
+ ]
+ ],
+ [
+ [
+ 64209,
+ 64209
+ ],
+ "mapped",
+ [
+ 144341
+ ]
+ ],
+ [
+ [
+ 64210,
+ 64210
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 64211,
+ 64211
+ ],
+ "mapped",
+ [
+ 16408
+ ]
+ ],
+ [
+ [
+ 64212,
+ 64212
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 64213,
+ 64213
+ ],
+ "mapped",
+ [
+ 152137
+ ]
+ ],
+ [
+ [
+ 64214,
+ 64214
+ ],
+ "mapped",
+ [
+ 154832
+ ]
+ ],
+ [
+ [
+ 64215,
+ 64215
+ ],
+ "mapped",
+ [
+ 163539
+ ]
+ ],
+ [
+ [
+ 64216,
+ 64216
+ ],
+ "mapped",
+ [
+ 40771
+ ]
+ ],
+ [
+ [
+ 64217,
+ 64217
+ ],
+ "mapped",
+ [
+ 40846
+ ]
+ ],
+ [
+ [
+ 64218,
+ 64255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64256,
+ 64256
+ ],
+ "mapped",
+ [
+ 102,
+ 102
+ ]
+ ],
+ [
+ [
+ 64257,
+ 64257
+ ],
+ "mapped",
+ [
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64258,
+ 64258
+ ],
+ "mapped",
+ [
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64259,
+ 64259
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64260,
+ 64260
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64261,
+ 64262
+ ],
+ "mapped",
+ [
+ 115,
+ 116
+ ]
+ ],
+ [
+ [
+ 64263,
+ 64274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64275,
+ 64275
+ ],
+ "mapped",
+ [
+ 1396,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64276,
+ 64276
+ ],
+ "mapped",
+ [
+ 1396,
+ 1381
+ ]
+ ],
+ [
+ [
+ 64277,
+ 64277
+ ],
+ "mapped",
+ [
+ 1396,
+ 1387
+ ]
+ ],
+ [
+ [
+ 64278,
+ 64278
+ ],
+ "mapped",
+ [
+ 1406,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64279,
+ 64279
+ ],
+ "mapped",
+ [
+ 1396,
+ 1389
+ ]
+ ],
+ [
+ [
+ 64280,
+ 64284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64285,
+ 64285
+ ],
+ "mapped",
+ [
+ 1497,
+ 1460
+ ]
+ ],
+ [
+ [
+ 64286,
+ 64286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64287,
+ 64287
+ ],
+ "mapped",
+ [
+ 1522,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64288,
+ 64288
+ ],
+ "mapped",
+ [
+ 1506
+ ]
+ ],
+ [
+ [
+ 64289,
+ 64289
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 64290,
+ 64290
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 64291,
+ 64291
+ ],
+ "mapped",
+ [
+ 1492
+ ]
+ ],
+ [
+ [
+ 64292,
+ 64292
+ ],
+ "mapped",
+ [
+ 1499
+ ]
+ ],
+ [
+ [
+ 64293,
+ 64293
+ ],
+ "mapped",
+ [
+ 1500
+ ]
+ ],
+ [
+ [
+ 64294,
+ 64294
+ ],
+ "mapped",
+ [
+ 1501
+ ]
+ ],
+ [
+ [
+ 64295,
+ 64295
+ ],
+ "mapped",
+ [
+ 1512
+ ]
+ ],
+ [
+ [
+ 64296,
+ 64296
+ ],
+ "mapped",
+ [
+ 1514
+ ]
+ ],
+ [
+ [
+ 64297,
+ 64297
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 64298,
+ 64298
+ ],
+ "mapped",
+ [
+ 1513,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64299,
+ 64299
+ ],
+ "mapped",
+ [
+ 1513,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64300,
+ 64300
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64301,
+ 64301
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64302,
+ 64302
+ ],
+ "mapped",
+ [
+ 1488,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64303,
+ 64303
+ ],
+ "mapped",
+ [
+ 1488,
+ 1464
+ ]
+ ],
+ [
+ [
+ 64304,
+ 64304
+ ],
+ "mapped",
+ [
+ 1488,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64305,
+ 64305
+ ],
+ "mapped",
+ [
+ 1489,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64306,
+ 64306
+ ],
+ "mapped",
+ [
+ 1490,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64307,
+ 64307
+ ],
+ "mapped",
+ [
+ 1491,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64308,
+ 64308
+ ],
+ "mapped",
+ [
+ 1492,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64309,
+ 64309
+ ],
+ "mapped",
+ [
+ 1493,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64310,
+ 64310
+ ],
+ "mapped",
+ [
+ 1494,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64311,
+ 64311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64312,
+ 64312
+ ],
+ "mapped",
+ [
+ 1496,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64313,
+ 64313
+ ],
+ "mapped",
+ [
+ 1497,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64314,
+ 64314
+ ],
+ "mapped",
+ [
+ 1498,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64315,
+ 64315
+ ],
+ "mapped",
+ [
+ 1499,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64316,
+ 64316
+ ],
+ "mapped",
+ [
+ 1500,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64317,
+ 64317
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64318,
+ 64318
+ ],
+ "mapped",
+ [
+ 1502,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64319,
+ 64319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64320,
+ 64320
+ ],
+ "mapped",
+ [
+ 1504,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64321,
+ 64321
+ ],
+ "mapped",
+ [
+ 1505,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64322,
+ 64322
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64323,
+ 64323
+ ],
+ "mapped",
+ [
+ 1507,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64324,
+ 64324
+ ],
+ "mapped",
+ [
+ 1508,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64325,
+ 64325
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64326,
+ 64326
+ ],
+ "mapped",
+ [
+ 1510,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64327,
+ 64327
+ ],
+ "mapped",
+ [
+ 1511,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64328,
+ 64328
+ ],
+ "mapped",
+ [
+ 1512,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64329,
+ 64329
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64330,
+ 64330
+ ],
+ "mapped",
+ [
+ 1514,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64331,
+ 64331
+ ],
+ "mapped",
+ [
+ 1493,
+ 1465
+ ]
+ ],
+ [
+ [
+ 64332,
+ 64332
+ ],
+ "mapped",
+ [
+ 1489,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64333,
+ 64333
+ ],
+ "mapped",
+ [
+ 1499,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64334,
+ 64334
+ ],
+ "mapped",
+ [
+ 1508,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64335,
+ 64335
+ ],
+ "mapped",
+ [
+ 1488,
+ 1500
+ ]
+ ],
+ [
+ [
+ 64336,
+ 64337
+ ],
+ "mapped",
+ [
+ 1649
+ ]
+ ],
+ [
+ [
+ 64338,
+ 64341
+ ],
+ "mapped",
+ [
+ 1659
+ ]
+ ],
+ [
+ [
+ 64342,
+ 64345
+ ],
+ "mapped",
+ [
+ 1662
+ ]
+ ],
+ [
+ [
+ 64346,
+ 64349
+ ],
+ "mapped",
+ [
+ 1664
+ ]
+ ],
+ [
+ [
+ 64350,
+ 64353
+ ],
+ "mapped",
+ [
+ 1658
+ ]
+ ],
+ [
+ [
+ 64354,
+ 64357
+ ],
+ "mapped",
+ [
+ 1663
+ ]
+ ],
+ [
+ [
+ 64358,
+ 64361
+ ],
+ "mapped",
+ [
+ 1657
+ ]
+ ],
+ [
+ [
+ 64362,
+ 64365
+ ],
+ "mapped",
+ [
+ 1700
+ ]
+ ],
+ [
+ [
+ 64366,
+ 64369
+ ],
+ "mapped",
+ [
+ 1702
+ ]
+ ],
+ [
+ [
+ 64370,
+ 64373
+ ],
+ "mapped",
+ [
+ 1668
+ ]
+ ],
+ [
+ [
+ 64374,
+ 64377
+ ],
+ "mapped",
+ [
+ 1667
+ ]
+ ],
+ [
+ [
+ 64378,
+ 64381
+ ],
+ "mapped",
+ [
+ 1670
+ ]
+ ],
+ [
+ [
+ 64382,
+ 64385
+ ],
+ "mapped",
+ [
+ 1671
+ ]
+ ],
+ [
+ [
+ 64386,
+ 64387
+ ],
+ "mapped",
+ [
+ 1677
+ ]
+ ],
+ [
+ [
+ 64388,
+ 64389
+ ],
+ "mapped",
+ [
+ 1676
+ ]
+ ],
+ [
+ [
+ 64390,
+ 64391
+ ],
+ "mapped",
+ [
+ 1678
+ ]
+ ],
+ [
+ [
+ 64392,
+ 64393
+ ],
+ "mapped",
+ [
+ 1672
+ ]
+ ],
+ [
+ [
+ 64394,
+ 64395
+ ],
+ "mapped",
+ [
+ 1688
+ ]
+ ],
+ [
+ [
+ 64396,
+ 64397
+ ],
+ "mapped",
+ [
+ 1681
+ ]
+ ],
+ [
+ [
+ 64398,
+ 64401
+ ],
+ "mapped",
+ [
+ 1705
+ ]
+ ],
+ [
+ [
+ 64402,
+ 64405
+ ],
+ "mapped",
+ [
+ 1711
+ ]
+ ],
+ [
+ [
+ 64406,
+ 64409
+ ],
+ "mapped",
+ [
+ 1715
+ ]
+ ],
+ [
+ [
+ 64410,
+ 64413
+ ],
+ "mapped",
+ [
+ 1713
+ ]
+ ],
+ [
+ [
+ 64414,
+ 64415
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 64416,
+ 64419
+ ],
+ "mapped",
+ [
+ 1723
+ ]
+ ],
+ [
+ [
+ 64420,
+ 64421
+ ],
+ "mapped",
+ [
+ 1728
+ ]
+ ],
+ [
+ [
+ 64422,
+ 64425
+ ],
+ "mapped",
+ [
+ 1729
+ ]
+ ],
+ [
+ [
+ 64426,
+ 64429
+ ],
+ "mapped",
+ [
+ 1726
+ ]
+ ],
+ [
+ [
+ 64430,
+ 64431
+ ],
+ "mapped",
+ [
+ 1746
+ ]
+ ],
+ [
+ [
+ 64432,
+ 64433
+ ],
+ "mapped",
+ [
+ 1747
+ ]
+ ],
+ [
+ [
+ 64434,
+ 64449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64450,
+ 64466
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64467,
+ 64470
+ ],
+ "mapped",
+ [
+ 1709
+ ]
+ ],
+ [
+ [
+ 64471,
+ 64472
+ ],
+ "mapped",
+ [
+ 1735
+ ]
+ ],
+ [
+ [
+ 64473,
+ 64474
+ ],
+ "mapped",
+ [
+ 1734
+ ]
+ ],
+ [
+ [
+ 64475,
+ 64476
+ ],
+ "mapped",
+ [
+ 1736
+ ]
+ ],
+ [
+ [
+ 64477,
+ 64477
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 64478,
+ 64479
+ ],
+ "mapped",
+ [
+ 1739
+ ]
+ ],
+ [
+ [
+ 64480,
+ 64481
+ ],
+ "mapped",
+ [
+ 1733
+ ]
+ ],
+ [
+ [
+ 64482,
+ 64483
+ ],
+ "mapped",
+ [
+ 1737
+ ]
+ ],
+ [
+ [
+ 64484,
+ 64487
+ ],
+ "mapped",
+ [
+ 1744
+ ]
+ ],
+ [
+ [
+ 64488,
+ 64489
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 64490,
+ 64491
+ ],
+ "mapped",
+ [
+ 1574,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64492,
+ 64493
+ ],
+ "mapped",
+ [
+ 1574,
+ 1749
+ ]
+ ],
+ [
+ [
+ 64494,
+ 64495
+ ],
+ "mapped",
+ [
+ 1574,
+ 1608
+ ]
+ ],
+ [
+ [
+ 64496,
+ 64497
+ ],
+ "mapped",
+ [
+ 1574,
+ 1735
+ ]
+ ],
+ [
+ [
+ 64498,
+ 64499
+ ],
+ "mapped",
+ [
+ 1574,
+ 1734
+ ]
+ ],
+ [
+ [
+ 64500,
+ 64501
+ ],
+ "mapped",
+ [
+ 1574,
+ 1736
+ ]
+ ],
+ [
+ [
+ 64502,
+ 64504
+ ],
+ "mapped",
+ [
+ 1574,
+ 1744
+ ]
+ ],
+ [
+ [
+ 64505,
+ 64507
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64508,
+ 64511
+ ],
+ "mapped",
+ [
+ 1740
+ ]
+ ],
+ [
+ [
+ 64512,
+ 64512
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64513,
+ 64513
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64514,
+ 64514
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64515,
+ 64515
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64516,
+ 64516
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64517,
+ 64517
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64518,
+ 64518
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64519,
+ 64519
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64520,
+ 64520
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64521,
+ 64521
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64522,
+ 64522
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64523,
+ 64523
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64524,
+ 64524
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64525,
+ 64525
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64526,
+ 64526
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64527,
+ 64527
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64528,
+ 64528
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64529,
+ 64529
+ ],
+ "mapped",
+ [
+ 1579,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64530,
+ 64530
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64531,
+ 64531
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64532,
+ 64532
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64533,
+ 64533
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64534,
+ 64534
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64535,
+ 64535
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64536,
+ 64536
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64537,
+ 64537
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64538,
+ 64538
+ ],
+ "mapped",
+ [
+ 1582,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64539,
+ 64539
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64540,
+ 64540
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64541,
+ 64541
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64542,
+ 64542
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64543,
+ 64543
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64544,
+ 64544
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64545,
+ 64545
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64546,
+ 64546
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64547,
+ 64547
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64548,
+ 64548
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64549,
+ 64549
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64550,
+ 64550
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64551,
+ 64551
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64552,
+ 64552
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64553,
+ 64553
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64554,
+ 64554
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64555,
+ 64555
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64556,
+ 64556
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64557,
+ 64557
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64558,
+ 64558
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64559,
+ 64559
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64560,
+ 64560
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64561,
+ 64561
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64562,
+ 64562
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64563,
+ 64563
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64564,
+ 64564
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64565,
+ 64565
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64566,
+ 64566
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64567,
+ 64567
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64568,
+ 64568
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64569,
+ 64569
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64570,
+ 64570
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64571,
+ 64571
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64572,
+ 64572
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64573,
+ 64573
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64574,
+ 64574
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64575,
+ 64575
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64576,
+ 64576
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64577,
+ 64577
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64578,
+ 64578
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64579,
+ 64579
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64580,
+ 64580
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64581,
+ 64581
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64582,
+ 64582
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64583,
+ 64583
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64584,
+ 64584
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64585,
+ 64585
+ ],
+ "mapped",
+ [
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64586,
+ 64586
+ ],
+ "mapped",
+ [
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64587,
+ 64587
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64588,
+ 64588
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64589,
+ 64589
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64590,
+ 64590
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64591,
+ 64591
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64592,
+ 64592
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64593,
+ 64593
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64594,
+ 64594
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64595,
+ 64595
+ ],
+ "mapped",
+ [
+ 1607,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64596,
+ 64596
+ ],
+ "mapped",
+ [
+ 1607,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64597,
+ 64597
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64598,
+ 64598
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64599,
+ 64599
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64600,
+ 64600
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64601,
+ 64601
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64602,
+ 64602
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64603,
+ 64603
+ ],
+ "mapped",
+ [
+ 1584,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64604,
+ 64604
+ ],
+ "mapped",
+ [
+ 1585,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64605,
+ 64605
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64606,
+ 64606
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64607,
+ 64607
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64608,
+ 64608
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64609,
+ 64609
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64610,
+ 64610
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64611,
+ 64611
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64612,
+ 64612
+ ],
+ "mapped",
+ [
+ 1574,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64613,
+ 64613
+ ],
+ "mapped",
+ [
+ 1574,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64614,
+ 64614
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64615,
+ 64615
+ ],
+ "mapped",
+ [
+ 1574,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64616,
+ 64616
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64617,
+ 64617
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64618,
+ 64618
+ ],
+ "mapped",
+ [
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64619,
+ 64619
+ ],
+ "mapped",
+ [
+ 1576,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64620,
+ 64620
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64621,
+ 64621
+ ],
+ "mapped",
+ [
+ 1576,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64622,
+ 64622
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64623,
+ 64623
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64624,
+ 64624
+ ],
+ "mapped",
+ [
+ 1578,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64625,
+ 64625
+ ],
+ "mapped",
+ [
+ 1578,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64626,
+ 64626
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64627,
+ 64627
+ ],
+ "mapped",
+ [
+ 1578,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64628,
+ 64628
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64629,
+ 64629
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64630,
+ 64630
+ ],
+ "mapped",
+ [
+ 1579,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64631,
+ 64631
+ ],
+ "mapped",
+ [
+ 1579,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64632,
+ 64632
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64633,
+ 64633
+ ],
+ "mapped",
+ [
+ 1579,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64634,
+ 64634
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64635,
+ 64635
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64636,
+ 64636
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64637,
+ 64637
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64638,
+ 64638
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64639,
+ 64639
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64640,
+ 64640
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64641,
+ 64641
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64642,
+ 64642
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64643,
+ 64643
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64644,
+ 64644
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64645,
+ 64645
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64646,
+ 64646
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64647,
+ 64647
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64648,
+ 64648
+ ],
+ "mapped",
+ [
+ 1605,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64649,
+ 64649
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64650,
+ 64650
+ ],
+ "mapped",
+ [
+ 1606,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64651,
+ 64651
+ ],
+ "mapped",
+ [
+ 1606,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64652,
+ 64652
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64653,
+ 64653
+ ],
+ "mapped",
+ [
+ 1606,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64654,
+ 64654
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64655,
+ 64655
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64656,
+ 64656
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64657,
+ 64657
+ ],
+ "mapped",
+ [
+ 1610,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64658,
+ 64658
+ ],
+ "mapped",
+ [
+ 1610,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64659,
+ 64659
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64660,
+ 64660
+ ],
+ "mapped",
+ [
+ 1610,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64661,
+ 64661
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64662,
+ 64662
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64663,
+ 64663
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64664,
+ 64664
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64665,
+ 64665
+ ],
+ "mapped",
+ [
+ 1574,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64666,
+ 64666
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64667,
+ 64667
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64668,
+ 64668
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64669,
+ 64669
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64670,
+ 64670
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64671,
+ 64671
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64672,
+ 64672
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64673,
+ 64673
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64674,
+ 64674
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64675,
+ 64675
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64676,
+ 64676
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64677,
+ 64677
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64678,
+ 64678
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64679,
+ 64679
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64680,
+ 64680
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64681,
+ 64681
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64682,
+ 64682
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64683,
+ 64683
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64684,
+ 64684
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64685,
+ 64685
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64686,
+ 64686
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64687,
+ 64687
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64688,
+ 64688
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64689,
+ 64689
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64690,
+ 64690
+ ],
+ "mapped",
+ [
+ 1589,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64691,
+ 64691
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64692,
+ 64692
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64693,
+ 64693
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64694,
+ 64694
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64695,
+ 64695
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64696,
+ 64696
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64697,
+ 64697
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64698,
+ 64698
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64699,
+ 64699
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64700,
+ 64700
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64701,
+ 64701
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64702,
+ 64702
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64703,
+ 64703
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64704,
+ 64704
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64705,
+ 64705
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64706,
+ 64706
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64707,
+ 64707
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64708,
+ 64708
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64709,
+ 64709
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64710,
+ 64710
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64711,
+ 64711
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64712,
+ 64712
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64713,
+ 64713
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64714,
+ 64714
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64715,
+ 64715
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64716,
+ 64716
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64717,
+ 64717
+ ],
+ "mapped",
+ [
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64718,
+ 64718
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64719,
+ 64719
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64720,
+ 64720
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64721,
+ 64721
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64722,
+ 64722
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64723,
+ 64723
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64724,
+ 64724
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64725,
+ 64725
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64726,
+ 64726
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64727,
+ 64727
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64728,
+ 64728
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64729,
+ 64729
+ ],
+ "mapped",
+ [
+ 1607,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64730,
+ 64730
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64731,
+ 64731
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64732,
+ 64732
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64733,
+ 64733
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64734,
+ 64734
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64735,
+ 64735
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64736,
+ 64736
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64737,
+ 64737
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64738,
+ 64738
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64739,
+ 64739
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64740,
+ 64740
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64741,
+ 64741
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64742,
+ 64742
+ ],
+ "mapped",
+ [
+ 1579,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64743,
+ 64743
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64744,
+ 64744
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64745,
+ 64745
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64746,
+ 64746
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64747,
+ 64747
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64748,
+ 64748
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64749,
+ 64749
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64750,
+ 64750
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64751,
+ 64751
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64752,
+ 64752
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64753,
+ 64753
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64754,
+ 64754
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64755,
+ 64755
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64756,
+ 64756
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64757,
+ 64757
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64758,
+ 64758
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64759,
+ 64759
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64760,
+ 64760
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64761,
+ 64761
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64762,
+ 64762
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64763,
+ 64763
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64764,
+ 64764
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64765,
+ 64765
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64766,
+ 64766
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64767,
+ 64767
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64768,
+ 64768
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64769,
+ 64769
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64770,
+ 64770
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64771,
+ 64771
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64772,
+ 64772
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64773,
+ 64773
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64774,
+ 64774
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64775,
+ 64775
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64776,
+ 64776
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64777,
+ 64777
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64778,
+ 64778
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64779,
+ 64779
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64780,
+ 64780
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64781,
+ 64781
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64782,
+ 64782
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64783,
+ 64783
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64784,
+ 64784
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64785,
+ 64785
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64786,
+ 64786
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64787,
+ 64787
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64788,
+ 64788
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64789,
+ 64789
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64790,
+ 64790
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64791,
+ 64791
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64792,
+ 64792
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64793,
+ 64793
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64794,
+ 64794
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64795,
+ 64795
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64796,
+ 64796
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64797,
+ 64797
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64798,
+ 64798
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64799,
+ 64799
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64800,
+ 64800
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64801,
+ 64801
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64802,
+ 64802
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64803,
+ 64803
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64804,
+ 64804
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64805,
+ 64805
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64806,
+ 64806
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64807,
+ 64807
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64808,
+ 64808
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64809,
+ 64809
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64810,
+ 64810
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64811,
+ 64811
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64812,
+ 64812
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64813,
+ 64813
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64814,
+ 64814
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64815,
+ 64815
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64816,
+ 64816
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64817,
+ 64817
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64818,
+ 64818
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64819,
+ 64819
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64820,
+ 64820
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64821,
+ 64821
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64822,
+ 64822
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64823,
+ 64823
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64824,
+ 64824
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64825,
+ 64825
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64826,
+ 64826
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64827,
+ 64827
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64828,
+ 64829
+ ],
+ "mapped",
+ [
+ 1575,
+ 1611
+ ]
+ ],
+ [
+ [
+ 64830,
+ 64831
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64832,
+ 64847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64848,
+ 64848
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64849,
+ 64850
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64851,
+ 64851
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64852,
+ 64852
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64853,
+ 64853
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64854,
+ 64854
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64855,
+ 64855
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64856,
+ 64857
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64858,
+ 64858
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64859,
+ 64859
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64860,
+ 64860
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64861,
+ 64861
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64862,
+ 64862
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64863,
+ 64864
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64865,
+ 64865
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64866,
+ 64867
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64868,
+ 64869
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64870,
+ 64870
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64871,
+ 64872
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64873,
+ 64873
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64874,
+ 64875
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64876,
+ 64877
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64878,
+ 64878
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64879,
+ 64880
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64881,
+ 64882
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64883,
+ 64883
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64884,
+ 64884
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64885,
+ 64885
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64886,
+ 64887
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64888,
+ 64888
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64889,
+ 64889
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64890,
+ 64890
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64891,
+ 64891
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64892,
+ 64893
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64894,
+ 64894
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64895,
+ 64895
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64896,
+ 64896
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64897,
+ 64897
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64898,
+ 64898
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64899,
+ 64900
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64901,
+ 64902
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64903,
+ 64904
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64905,
+ 64905
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64906,
+ 64906
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64907,
+ 64907
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64908,
+ 64908
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64909,
+ 64909
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64910,
+ 64910
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64911,
+ 64911
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64912,
+ 64913
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64914,
+ 64914
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64915,
+ 64915
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64916,
+ 64916
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64917,
+ 64917
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64918,
+ 64918
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64919,
+ 64920
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64921,
+ 64921
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64922,
+ 64922
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64923,
+ 64923
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64924,
+ 64925
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64926,
+ 64926
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64927,
+ 64927
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64928,
+ 64928
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64929,
+ 64929
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64930,
+ 64930
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64931,
+ 64931
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64932,
+ 64932
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64933,
+ 64933
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64934,
+ 64934
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64935,
+ 64935
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64936,
+ 64936
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64937,
+ 64937
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64938,
+ 64938
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64939,
+ 64939
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64940,
+ 64940
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64941,
+ 64941
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64942,
+ 64942
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64943,
+ 64943
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64944,
+ 64944
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64945,
+ 64945
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64946,
+ 64946
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64947,
+ 64947
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64948,
+ 64948
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64949,
+ 64949
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64950,
+ 64950
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64951,
+ 64951
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64952,
+ 64952
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64953,
+ 64953
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64954,
+ 64954
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64955,
+ 64955
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64956,
+ 64956
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64957,
+ 64957
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64958,
+ 64958
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64959,
+ 64959
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64960,
+ 64960
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64961,
+ 64961
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64962,
+ 64962
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64963,
+ 64963
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64964,
+ 64964
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64965,
+ 64965
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64966,
+ 64966
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64967,
+ 64967
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64968,
+ 64975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64976,
+ 65007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65008,
+ 65008
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65009,
+ 65009
+ ],
+ "mapped",
+ [
+ 1602,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65010,
+ 65010
+ ],
+ "mapped",
+ [
+ 1575,
+ 1604,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65011,
+ 65011
+ ],
+ "mapped",
+ [
+ 1575,
+ 1603,
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 65012,
+ 65012
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605,
+ 1583
+ ]
+ ],
+ [
+ [
+ 65013,
+ 65013
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65014,
+ 65014
+ ],
+ "mapped",
+ [
+ 1585,
+ 1587,
+ 1608,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65015,
+ 65015
+ ],
+ "mapped",
+ [
+ 1593,
+ 1604,
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65016,
+ 65016
+ ],
+ "mapped",
+ [
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65017,
+ 65017
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 65018,
+ 65018
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1589,
+ 1604,
+ 1609,
+ 32,
+ 1575,
+ 1604,
+ 1604,
+ 1607,
+ 32,
+ 1593,
+ 1604,
+ 1610,
+ 1607,
+ 32,
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65019,
+ 65019
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1580,
+ 1604,
+ 32,
+ 1580,
+ 1604,
+ 1575,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65020,
+ 65020
+ ],
+ "mapped",
+ [
+ 1585,
+ 1740,
+ 1575,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65021,
+ 65021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65022,
+ 65023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65024,
+ 65039
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65040,
+ 65040
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65041,
+ 65041
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65042,
+ 65042
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65043,
+ 65043
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65044,
+ 65044
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65045,
+ 65045
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65046,
+ 65046
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65047,
+ 65047
+ ],
+ "mapped",
+ [
+ 12310
+ ]
+ ],
+ [
+ [
+ 65048,
+ 65048
+ ],
+ "mapped",
+ [
+ 12311
+ ]
+ ],
+ [
+ [
+ 65049,
+ 65049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65050,
+ 65055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65056,
+ 65059
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65060,
+ 65062
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65063,
+ 65069
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65070,
+ 65071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65072,
+ 65072
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65073,
+ 65073
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65074,
+ 65074
+ ],
+ "mapped",
+ [
+ 8211
+ ]
+ ],
+ [
+ [
+ 65075,
+ 65076
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65077,
+ 65077
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65078,
+ 65078
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65079,
+ 65079
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65080,
+ 65080
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65081,
+ 65081
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65082,
+ 65082
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65083,
+ 65083
+ ],
+ "mapped",
+ [
+ 12304
+ ]
+ ],
+ [
+ [
+ 65084,
+ 65084
+ ],
+ "mapped",
+ [
+ 12305
+ ]
+ ],
+ [
+ [
+ 65085,
+ 65085
+ ],
+ "mapped",
+ [
+ 12298
+ ]
+ ],
+ [
+ [
+ 65086,
+ 65086
+ ],
+ "mapped",
+ [
+ 12299
+ ]
+ ],
+ [
+ [
+ 65087,
+ 65087
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 65088,
+ 65088
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 65089,
+ 65089
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65090,
+ 65090
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65091,
+ 65091
+ ],
+ "mapped",
+ [
+ 12302
+ ]
+ ],
+ [
+ [
+ 65092,
+ 65092
+ ],
+ "mapped",
+ [
+ 12303
+ ]
+ ],
+ [
+ [
+ 65093,
+ 65094
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65095,
+ 65095
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65096,
+ 65096
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65097,
+ 65100
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 65101,
+ 65103
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65104,
+ 65104
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65105,
+ 65105
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65106,
+ 65106
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65107,
+ 65107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65108,
+ 65108
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65109,
+ 65109
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65110,
+ 65110
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65111,
+ 65111
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65112,
+ 65112
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65113,
+ 65113
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65114,
+ 65114
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65115,
+ 65115
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65116,
+ 65116
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65117,
+ 65117
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65118,
+ 65118
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65119,
+ 65119
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65120,
+ 65120
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65121,
+ 65121
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65122,
+ 65122
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65123,
+ 65123
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65124,
+ 65124
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65125,
+ 65125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65126,
+ 65126
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65127,
+ 65127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65128,
+ 65128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65129,
+ 65129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65130,
+ 65130
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65131,
+ 65131
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65132,
+ 65135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65136,
+ 65136
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65137,
+ 65137
+ ],
+ "mapped",
+ [
+ 1600,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65138,
+ 65138
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612
+ ]
+ ],
+ [
+ [
+ 65139,
+ 65139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65140,
+ 65140
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613
+ ]
+ ],
+ [
+ [
+ 65141,
+ 65141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65142,
+ 65142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65143,
+ 65143
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65144,
+ 65144
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65145,
+ 65145
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65146,
+ 65146
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65147,
+ 65147
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65148,
+ 65148
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65149,
+ 65149
+ ],
+ "mapped",
+ [
+ 1600,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65150,
+ 65150
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65151,
+ 65151
+ ],
+ "mapped",
+ [
+ 1600,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65152,
+ 65152
+ ],
+ "mapped",
+ [
+ 1569
+ ]
+ ],
+ [
+ [
+ 65153,
+ 65154
+ ],
+ "mapped",
+ [
+ 1570
+ ]
+ ],
+ [
+ [
+ 65155,
+ 65156
+ ],
+ "mapped",
+ [
+ 1571
+ ]
+ ],
+ [
+ [
+ 65157,
+ 65158
+ ],
+ "mapped",
+ [
+ 1572
+ ]
+ ],
+ [
+ [
+ 65159,
+ 65160
+ ],
+ "mapped",
+ [
+ 1573
+ ]
+ ],
+ [
+ [
+ 65161,
+ 65164
+ ],
+ "mapped",
+ [
+ 1574
+ ]
+ ],
+ [
+ [
+ 65165,
+ 65166
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 65167,
+ 65170
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 65171,
+ 65172
+ ],
+ "mapped",
+ [
+ 1577
+ ]
+ ],
+ [
+ [
+ 65173,
+ 65176
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 65177,
+ 65180
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 65181,
+ 65184
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 65185,
+ 65188
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 65189,
+ 65192
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 65193,
+ 65194
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 65195,
+ 65196
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 65197,
+ 65198
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 65199,
+ 65200
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 65201,
+ 65204
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 65205,
+ 65208
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 65209,
+ 65212
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 65213,
+ 65216
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 65217,
+ 65220
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 65221,
+ 65224
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 65225,
+ 65228
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 65229,
+ 65232
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 65233,
+ 65236
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 65237,
+ 65240
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 65241,
+ 65244
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 65245,
+ 65248
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 65249,
+ 65252
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 65253,
+ 65256
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 65257,
+ 65260
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 65261,
+ 65262
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 65263,
+ 65264
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 65265,
+ 65268
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 65269,
+ 65270
+ ],
+ "mapped",
+ [
+ 1604,
+ 1570
+ ]
+ ],
+ [
+ [
+ 65271,
+ 65272
+ ],
+ "mapped",
+ [
+ 1604,
+ 1571
+ ]
+ ],
+ [
+ [
+ 65273,
+ 65274
+ ],
+ "mapped",
+ [
+ 1604,
+ 1573
+ ]
+ ],
+ [
+ [
+ 65275,
+ 65276
+ ],
+ "mapped",
+ [
+ 1604,
+ 1575
+ ]
+ ],
+ [
+ [
+ 65277,
+ 65278
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65279,
+ 65279
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65280,
+ 65280
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65281,
+ 65281
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65282,
+ 65282
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 34
+ ]
+ ],
+ [
+ [
+ 65283,
+ 65283
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65284,
+ 65284
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65285,
+ 65285
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65286,
+ 65286
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65287,
+ 65287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 39
+ ]
+ ],
+ [
+ [
+ 65288,
+ 65288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65289,
+ 65289
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65290,
+ 65290
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65291,
+ 65291
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65292,
+ 65292
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65293,
+ 65293
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65294,
+ 65294
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65295,
+ 65295
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 47
+ ]
+ ],
+ [
+ [
+ 65296,
+ 65296
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 65297,
+ 65297
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 65298,
+ 65298
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 65299,
+ 65299
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 65300,
+ 65300
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 65301,
+ 65301
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 65302,
+ 65302
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 65303,
+ 65303
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 65304,
+ 65304
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 65305,
+ 65305
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 65306,
+ 65306
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65307,
+ 65307
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65308,
+ 65308
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65309,
+ 65309
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65310,
+ 65310
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65311,
+ 65311
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65312,
+ 65312
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65313,
+ 65313
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65314,
+ 65314
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65315,
+ 65315
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65316,
+ 65316
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65317,
+ 65317
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65318,
+ 65318
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65319,
+ 65319
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65320,
+ 65320
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65321,
+ 65321
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65322,
+ 65322
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65323,
+ 65323
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65324,
+ 65324
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65325,
+ 65325
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65326,
+ 65326
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65327,
+ 65327
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65328,
+ 65328
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65329,
+ 65329
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65330,
+ 65330
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65331,
+ 65331
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65332,
+ 65332
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65333,
+ 65333
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65334,
+ 65334
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65335,
+ 65335
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65336,
+ 65336
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65337,
+ 65337
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65338,
+ 65338
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65339,
+ 65339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65340,
+ 65340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65341,
+ 65341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65342,
+ 65342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 94
+ ]
+ ],
+ [
+ [
+ 65343,
+ 65343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65344,
+ 65344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 65345,
+ 65345
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65346,
+ 65346
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65347,
+ 65347
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65348,
+ 65348
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65349,
+ 65349
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65350,
+ 65350
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65351,
+ 65351
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65352,
+ 65352
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65353,
+ 65353
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65354,
+ 65354
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65355,
+ 65355
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65356,
+ 65356
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65357,
+ 65357
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65358,
+ 65358
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65359,
+ 65359
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65360,
+ 65360
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65361,
+ 65361
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65362,
+ 65362
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65363,
+ 65363
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65364,
+ 65364
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65365,
+ 65365
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65366,
+ 65366
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65367,
+ 65367
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65368,
+ 65368
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65369,
+ 65369
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65370,
+ 65370
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65371,
+ 65371
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65372,
+ 65372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 124
+ ]
+ ],
+ [
+ [
+ 65373,
+ 65373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65374,
+ 65374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 126
+ ]
+ ],
+ [
+ [
+ 65375,
+ 65375
+ ],
+ "mapped",
+ [
+ 10629
+ ]
+ ],
+ [
+ [
+ 65376,
+ 65376
+ ],
+ "mapped",
+ [
+ 10630
+ ]
+ ],
+ [
+ [
+ 65377,
+ 65377
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65378,
+ 65378
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65379,
+ 65379
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65380,
+ 65380
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65381,
+ 65381
+ ],
+ "mapped",
+ [
+ 12539
+ ]
+ ],
+ [
+ [
+ 65382,
+ 65382
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 65383,
+ 65383
+ ],
+ "mapped",
+ [
+ 12449
+ ]
+ ],
+ [
+ [
+ 65384,
+ 65384
+ ],
+ "mapped",
+ [
+ 12451
+ ]
+ ],
+ [
+ [
+ 65385,
+ 65385
+ ],
+ "mapped",
+ [
+ 12453
+ ]
+ ],
+ [
+ [
+ 65386,
+ 65386
+ ],
+ "mapped",
+ [
+ 12455
+ ]
+ ],
+ [
+ [
+ 65387,
+ 65387
+ ],
+ "mapped",
+ [
+ 12457
+ ]
+ ],
+ [
+ [
+ 65388,
+ 65388
+ ],
+ "mapped",
+ [
+ 12515
+ ]
+ ],
+ [
+ [
+ 65389,
+ 65389
+ ],
+ "mapped",
+ [
+ 12517
+ ]
+ ],
+ [
+ [
+ 65390,
+ 65390
+ ],
+ "mapped",
+ [
+ 12519
+ ]
+ ],
+ [
+ [
+ 65391,
+ 65391
+ ],
+ "mapped",
+ [
+ 12483
+ ]
+ ],
+ [
+ [
+ 65392,
+ 65392
+ ],
+ "mapped",
+ [
+ 12540
+ ]
+ ],
+ [
+ [
+ 65393,
+ 65393
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 65394,
+ 65394
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 65395,
+ 65395
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 65396,
+ 65396
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 65397,
+ 65397
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 65398,
+ 65398
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 65399,
+ 65399
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 65400,
+ 65400
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 65401,
+ 65401
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 65402,
+ 65402
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 65403,
+ 65403
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 65404,
+ 65404
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 65405,
+ 65405
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 65406,
+ 65406
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 65407,
+ 65407
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 65408,
+ 65408
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 65409,
+ 65409
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 65410,
+ 65410
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 65411,
+ 65411
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 65412,
+ 65412
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 65413,
+ 65413
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 65414,
+ 65414
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 65415,
+ 65415
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 65416,
+ 65416
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 65417,
+ 65417
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 65418,
+ 65418
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 65419,
+ 65419
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 65420,
+ 65420
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 65421,
+ 65421
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 65422,
+ 65422
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 65423,
+ 65423
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 65424,
+ 65424
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 65425,
+ 65425
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 65426,
+ 65426
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 65427,
+ 65427
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 65428,
+ 65428
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 65429,
+ 65429
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 65430,
+ 65430
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 65431,
+ 65431
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 65432,
+ 65432
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 65433,
+ 65433
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 65434,
+ 65434
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 65435,
+ 65435
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 65436,
+ 65436
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 65437,
+ 65437
+ ],
+ "mapped",
+ [
+ 12531
+ ]
+ ],
+ [
+ [
+ 65438,
+ 65438
+ ],
+ "mapped",
+ [
+ 12441
+ ]
+ ],
+ [
+ [
+ 65439,
+ 65439
+ ],
+ "mapped",
+ [
+ 12442
+ ]
+ ],
+ [
+ [
+ 65440,
+ 65440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65441,
+ 65441
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 65442,
+ 65442
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 65443,
+ 65443
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 65444,
+ 65444
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 65445,
+ 65445
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 65446,
+ 65446
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 65447,
+ 65447
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 65448,
+ 65448
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 65449,
+ 65449
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 65450,
+ 65450
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 65451,
+ 65451
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 65452,
+ 65452
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 65453,
+ 65453
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 65454,
+ 65454
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 65455,
+ 65455
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 65456,
+ 65456
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 65457,
+ 65457
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 65458,
+ 65458
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 65459,
+ 65459
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 65460,
+ 65460
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 65461,
+ 65461
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 65462,
+ 65462
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 65463,
+ 65463
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 65464,
+ 65464
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 65465,
+ 65465
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 65466,
+ 65466
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 65467,
+ 65467
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 65468,
+ 65468
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 65469,
+ 65469
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 65470,
+ 65470
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 65471,
+ 65473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65474,
+ 65474
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 65475,
+ 65475
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 65476,
+ 65476
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 65477,
+ 65477
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 65478,
+ 65478
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 65479,
+ 65479
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 65480,
+ 65481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65482,
+ 65482
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 65483,
+ 65483
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 65484,
+ 65484
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 65485,
+ 65485
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 65486,
+ 65486
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 65487,
+ 65487
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 65488,
+ 65489
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65490,
+ 65490
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 65491,
+ 65491
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 65492,
+ 65492
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 65493,
+ 65493
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 65494,
+ 65494
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 65495,
+ 65495
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 65496,
+ 65497
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65498,
+ 65498
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 65499,
+ 65499
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 65500,
+ 65500
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 65501,
+ 65503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65504,
+ 65504
+ ],
+ "mapped",
+ [
+ 162
+ ]
+ ],
+ [
+ [
+ 65505,
+ 65505
+ ],
+ "mapped",
+ [
+ 163
+ ]
+ ],
+ [
+ [
+ 65506,
+ 65506
+ ],
+ "mapped",
+ [
+ 172
+ ]
+ ],
+ [
+ [
+ 65507,
+ 65507
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 65508,
+ 65508
+ ],
+ "mapped",
+ [
+ 166
+ ]
+ ],
+ [
+ [
+ 65509,
+ 65509
+ ],
+ "mapped",
+ [
+ 165
+ ]
+ ],
+ [
+ [
+ 65510,
+ 65510
+ ],
+ "mapped",
+ [
+ 8361
+ ]
+ ],
+ [
+ [
+ 65511,
+ 65511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65512,
+ 65512
+ ],
+ "mapped",
+ [
+ 9474
+ ]
+ ],
+ [
+ [
+ 65513,
+ 65513
+ ],
+ "mapped",
+ [
+ 8592
+ ]
+ ],
+ [
+ [
+ 65514,
+ 65514
+ ],
+ "mapped",
+ [
+ 8593
+ ]
+ ],
+ [
+ [
+ 65515,
+ 65515
+ ],
+ "mapped",
+ [
+ 8594
+ ]
+ ],
+ [
+ [
+ 65516,
+ 65516
+ ],
+ "mapped",
+ [
+ 8595
+ ]
+ ],
+ [
+ [
+ 65517,
+ 65517
+ ],
+ "mapped",
+ [
+ 9632
+ ]
+ ],
+ [
+ [
+ 65518,
+ 65518
+ ],
+ "mapped",
+ [
+ 9675
+ ]
+ ],
+ [
+ [
+ 65519,
+ 65528
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65529,
+ 65531
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65532,
+ 65532
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65533,
+ 65533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65534,
+ 65535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65536,
+ 65547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65548,
+ 65548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65549,
+ 65574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65575,
+ 65575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65576,
+ 65594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65595,
+ 65595
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65596,
+ 65597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65598,
+ 65598
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65599,
+ 65613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65614,
+ 65615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65616,
+ 65629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65630,
+ 65663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65664,
+ 65786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65787,
+ 65791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65792,
+ 65794
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65795,
+ 65798
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65799,
+ 65843
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65844,
+ 65846
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65847,
+ 65855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65856,
+ 65930
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65931,
+ 65932
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65933,
+ 65935
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65936,
+ 65947
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65948,
+ 65951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65952,
+ 65952
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65953,
+ 65999
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66000,
+ 66044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66045,
+ 66045
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66046,
+ 66175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66176,
+ 66204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66205,
+ 66207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66208,
+ 66256
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66257,
+ 66271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66272,
+ 66272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66273,
+ 66299
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66300,
+ 66303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66304,
+ 66334
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66335,
+ 66335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66336,
+ 66339
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66340,
+ 66351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66352,
+ 66368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66369,
+ 66369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66370,
+ 66377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66378,
+ 66378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66379,
+ 66383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66384,
+ 66426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66427,
+ 66431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66432,
+ 66461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66462,
+ 66462
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66463,
+ 66463
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66464,
+ 66499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66500,
+ 66503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66504,
+ 66511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66512,
+ 66517
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66518,
+ 66559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66560,
+ 66560
+ ],
+ "mapped",
+ [
+ 66600
+ ]
+ ],
+ [
+ [
+ 66561,
+ 66561
+ ],
+ "mapped",
+ [
+ 66601
+ ]
+ ],
+ [
+ [
+ 66562,
+ 66562
+ ],
+ "mapped",
+ [
+ 66602
+ ]
+ ],
+ [
+ [
+ 66563,
+ 66563
+ ],
+ "mapped",
+ [
+ 66603
+ ]
+ ],
+ [
+ [
+ 66564,
+ 66564
+ ],
+ "mapped",
+ [
+ 66604
+ ]
+ ],
+ [
+ [
+ 66565,
+ 66565
+ ],
+ "mapped",
+ [
+ 66605
+ ]
+ ],
+ [
+ [
+ 66566,
+ 66566
+ ],
+ "mapped",
+ [
+ 66606
+ ]
+ ],
+ [
+ [
+ 66567,
+ 66567
+ ],
+ "mapped",
+ [
+ 66607
+ ]
+ ],
+ [
+ [
+ 66568,
+ 66568
+ ],
+ "mapped",
+ [
+ 66608
+ ]
+ ],
+ [
+ [
+ 66569,
+ 66569
+ ],
+ "mapped",
+ [
+ 66609
+ ]
+ ],
+ [
+ [
+ 66570,
+ 66570
+ ],
+ "mapped",
+ [
+ 66610
+ ]
+ ],
+ [
+ [
+ 66571,
+ 66571
+ ],
+ "mapped",
+ [
+ 66611
+ ]
+ ],
+ [
+ [
+ 66572,
+ 66572
+ ],
+ "mapped",
+ [
+ 66612
+ ]
+ ],
+ [
+ [
+ 66573,
+ 66573
+ ],
+ "mapped",
+ [
+ 66613
+ ]
+ ],
+ [
+ [
+ 66574,
+ 66574
+ ],
+ "mapped",
+ [
+ 66614
+ ]
+ ],
+ [
+ [
+ 66575,
+ 66575
+ ],
+ "mapped",
+ [
+ 66615
+ ]
+ ],
+ [
+ [
+ 66576,
+ 66576
+ ],
+ "mapped",
+ [
+ 66616
+ ]
+ ],
+ [
+ [
+ 66577,
+ 66577
+ ],
+ "mapped",
+ [
+ 66617
+ ]
+ ],
+ [
+ [
+ 66578,
+ 66578
+ ],
+ "mapped",
+ [
+ 66618
+ ]
+ ],
+ [
+ [
+ 66579,
+ 66579
+ ],
+ "mapped",
+ [
+ 66619
+ ]
+ ],
+ [
+ [
+ 66580,
+ 66580
+ ],
+ "mapped",
+ [
+ 66620
+ ]
+ ],
+ [
+ [
+ 66581,
+ 66581
+ ],
+ "mapped",
+ [
+ 66621
+ ]
+ ],
+ [
+ [
+ 66582,
+ 66582
+ ],
+ "mapped",
+ [
+ 66622
+ ]
+ ],
+ [
+ [
+ 66583,
+ 66583
+ ],
+ "mapped",
+ [
+ 66623
+ ]
+ ],
+ [
+ [
+ 66584,
+ 66584
+ ],
+ "mapped",
+ [
+ 66624
+ ]
+ ],
+ [
+ [
+ 66585,
+ 66585
+ ],
+ "mapped",
+ [
+ 66625
+ ]
+ ],
+ [
+ [
+ 66586,
+ 66586
+ ],
+ "mapped",
+ [
+ 66626
+ ]
+ ],
+ [
+ [
+ 66587,
+ 66587
+ ],
+ "mapped",
+ [
+ 66627
+ ]
+ ],
+ [
+ [
+ 66588,
+ 66588
+ ],
+ "mapped",
+ [
+ 66628
+ ]
+ ],
+ [
+ [
+ 66589,
+ 66589
+ ],
+ "mapped",
+ [
+ 66629
+ ]
+ ],
+ [
+ [
+ 66590,
+ 66590
+ ],
+ "mapped",
+ [
+ 66630
+ ]
+ ],
+ [
+ [
+ 66591,
+ 66591
+ ],
+ "mapped",
+ [
+ 66631
+ ]
+ ],
+ [
+ [
+ 66592,
+ 66592
+ ],
+ "mapped",
+ [
+ 66632
+ ]
+ ],
+ [
+ [
+ 66593,
+ 66593
+ ],
+ "mapped",
+ [
+ 66633
+ ]
+ ],
+ [
+ [
+ 66594,
+ 66594
+ ],
+ "mapped",
+ [
+ 66634
+ ]
+ ],
+ [
+ [
+ 66595,
+ 66595
+ ],
+ "mapped",
+ [
+ 66635
+ ]
+ ],
+ [
+ [
+ 66596,
+ 66596
+ ],
+ "mapped",
+ [
+ 66636
+ ]
+ ],
+ [
+ [
+ 66597,
+ 66597
+ ],
+ "mapped",
+ [
+ 66637
+ ]
+ ],
+ [
+ [
+ 66598,
+ 66598
+ ],
+ "mapped",
+ [
+ 66638
+ ]
+ ],
+ [
+ [
+ 66599,
+ 66599
+ ],
+ "mapped",
+ [
+ 66639
+ ]
+ ],
+ [
+ [
+ 66600,
+ 66637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66638,
+ 66717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66718,
+ 66719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66720,
+ 66729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66730,
+ 66815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66816,
+ 66855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66856,
+ 66863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66864,
+ 66915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66916,
+ 66926
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66927,
+ 66927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66928,
+ 67071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67072,
+ 67382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67383,
+ 67391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67392,
+ 67413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67414,
+ 67423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67424,
+ 67431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67432,
+ 67583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67584,
+ 67589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67590,
+ 67591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67592,
+ 67592
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67593,
+ 67593
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67594,
+ 67637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67638,
+ 67638
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67639,
+ 67640
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67641,
+ 67643
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67644,
+ 67644
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67645,
+ 67646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67647,
+ 67647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67648,
+ 67669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67670,
+ 67670
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67671,
+ 67679
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67680,
+ 67702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67703,
+ 67711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67712,
+ 67742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67743,
+ 67750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67751,
+ 67759
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67760,
+ 67807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67808,
+ 67826
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67827,
+ 67827
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67828,
+ 67829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67830,
+ 67834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67835,
+ 67839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67840,
+ 67861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67862,
+ 67865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67866,
+ 67867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67868,
+ 67870
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67871,
+ 67871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67872,
+ 67897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67898,
+ 67902
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67903,
+ 67903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67904,
+ 67967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67968,
+ 68023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68024,
+ 68027
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68028,
+ 68029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68030,
+ 68031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68032,
+ 68047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68048,
+ 68049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68050,
+ 68095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68096,
+ 68099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68100,
+ 68100
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68101,
+ 68102
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68103,
+ 68107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68108,
+ 68115
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68116,
+ 68116
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68117,
+ 68119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68120,
+ 68120
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68121,
+ 68147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68148,
+ 68151
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68152,
+ 68154
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68155,
+ 68158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68159,
+ 68159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68160,
+ 68167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68168,
+ 68175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68176,
+ 68184
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68185,
+ 68191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68192,
+ 68220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68221,
+ 68223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68224,
+ 68252
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68253,
+ 68255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68256,
+ 68287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68288,
+ 68295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68296,
+ 68296
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68297,
+ 68326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68327,
+ 68330
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68331,
+ 68342
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68343,
+ 68351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68352,
+ 68405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68406,
+ 68408
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68409,
+ 68415
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68416,
+ 68437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68438,
+ 68439
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68440,
+ 68447
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68448,
+ 68466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68467,
+ 68471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68472,
+ 68479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68480,
+ 68497
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68498,
+ 68504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68505,
+ 68508
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68509,
+ 68520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68521,
+ 68527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68528,
+ 68607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68608,
+ 68680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68681,
+ 68735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68736,
+ 68736
+ ],
+ "mapped",
+ [
+ 68800
+ ]
+ ],
+ [
+ [
+ 68737,
+ 68737
+ ],
+ "mapped",
+ [
+ 68801
+ ]
+ ],
+ [
+ [
+ 68738,
+ 68738
+ ],
+ "mapped",
+ [
+ 68802
+ ]
+ ],
+ [
+ [
+ 68739,
+ 68739
+ ],
+ "mapped",
+ [
+ 68803
+ ]
+ ],
+ [
+ [
+ 68740,
+ 68740
+ ],
+ "mapped",
+ [
+ 68804
+ ]
+ ],
+ [
+ [
+ 68741,
+ 68741
+ ],
+ "mapped",
+ [
+ 68805
+ ]
+ ],
+ [
+ [
+ 68742,
+ 68742
+ ],
+ "mapped",
+ [
+ 68806
+ ]
+ ],
+ [
+ [
+ 68743,
+ 68743
+ ],
+ "mapped",
+ [
+ 68807
+ ]
+ ],
+ [
+ [
+ 68744,
+ 68744
+ ],
+ "mapped",
+ [
+ 68808
+ ]
+ ],
+ [
+ [
+ 68745,
+ 68745
+ ],
+ "mapped",
+ [
+ 68809
+ ]
+ ],
+ [
+ [
+ 68746,
+ 68746
+ ],
+ "mapped",
+ [
+ 68810
+ ]
+ ],
+ [
+ [
+ 68747,
+ 68747
+ ],
+ "mapped",
+ [
+ 68811
+ ]
+ ],
+ [
+ [
+ 68748,
+ 68748
+ ],
+ "mapped",
+ [
+ 68812
+ ]
+ ],
+ [
+ [
+ 68749,
+ 68749
+ ],
+ "mapped",
+ [
+ 68813
+ ]
+ ],
+ [
+ [
+ 68750,
+ 68750
+ ],
+ "mapped",
+ [
+ 68814
+ ]
+ ],
+ [
+ [
+ 68751,
+ 68751
+ ],
+ "mapped",
+ [
+ 68815
+ ]
+ ],
+ [
+ [
+ 68752,
+ 68752
+ ],
+ "mapped",
+ [
+ 68816
+ ]
+ ],
+ [
+ [
+ 68753,
+ 68753
+ ],
+ "mapped",
+ [
+ 68817
+ ]
+ ],
+ [
+ [
+ 68754,
+ 68754
+ ],
+ "mapped",
+ [
+ 68818
+ ]
+ ],
+ [
+ [
+ 68755,
+ 68755
+ ],
+ "mapped",
+ [
+ 68819
+ ]
+ ],
+ [
+ [
+ 68756,
+ 68756
+ ],
+ "mapped",
+ [
+ 68820
+ ]
+ ],
+ [
+ [
+ 68757,
+ 68757
+ ],
+ "mapped",
+ [
+ 68821
+ ]
+ ],
+ [
+ [
+ 68758,
+ 68758
+ ],
+ "mapped",
+ [
+ 68822
+ ]
+ ],
+ [
+ [
+ 68759,
+ 68759
+ ],
+ "mapped",
+ [
+ 68823
+ ]
+ ],
+ [
+ [
+ 68760,
+ 68760
+ ],
+ "mapped",
+ [
+ 68824
+ ]
+ ],
+ [
+ [
+ 68761,
+ 68761
+ ],
+ "mapped",
+ [
+ 68825
+ ]
+ ],
+ [
+ [
+ 68762,
+ 68762
+ ],
+ "mapped",
+ [
+ 68826
+ ]
+ ],
+ [
+ [
+ 68763,
+ 68763
+ ],
+ "mapped",
+ [
+ 68827
+ ]
+ ],
+ [
+ [
+ 68764,
+ 68764
+ ],
+ "mapped",
+ [
+ 68828
+ ]
+ ],
+ [
+ [
+ 68765,
+ 68765
+ ],
+ "mapped",
+ [
+ 68829
+ ]
+ ],
+ [
+ [
+ 68766,
+ 68766
+ ],
+ "mapped",
+ [
+ 68830
+ ]
+ ],
+ [
+ [
+ 68767,
+ 68767
+ ],
+ "mapped",
+ [
+ 68831
+ ]
+ ],
+ [
+ [
+ 68768,
+ 68768
+ ],
+ "mapped",
+ [
+ 68832
+ ]
+ ],
+ [
+ [
+ 68769,
+ 68769
+ ],
+ "mapped",
+ [
+ 68833
+ ]
+ ],
+ [
+ [
+ 68770,
+ 68770
+ ],
+ "mapped",
+ [
+ 68834
+ ]
+ ],
+ [
+ [
+ 68771,
+ 68771
+ ],
+ "mapped",
+ [
+ 68835
+ ]
+ ],
+ [
+ [
+ 68772,
+ 68772
+ ],
+ "mapped",
+ [
+ 68836
+ ]
+ ],
+ [
+ [
+ 68773,
+ 68773
+ ],
+ "mapped",
+ [
+ 68837
+ ]
+ ],
+ [
+ [
+ 68774,
+ 68774
+ ],
+ "mapped",
+ [
+ 68838
+ ]
+ ],
+ [
+ [
+ 68775,
+ 68775
+ ],
+ "mapped",
+ [
+ 68839
+ ]
+ ],
+ [
+ [
+ 68776,
+ 68776
+ ],
+ "mapped",
+ [
+ 68840
+ ]
+ ],
+ [
+ [
+ 68777,
+ 68777
+ ],
+ "mapped",
+ [
+ 68841
+ ]
+ ],
+ [
+ [
+ 68778,
+ 68778
+ ],
+ "mapped",
+ [
+ 68842
+ ]
+ ],
+ [
+ [
+ 68779,
+ 68779
+ ],
+ "mapped",
+ [
+ 68843
+ ]
+ ],
+ [
+ [
+ 68780,
+ 68780
+ ],
+ "mapped",
+ [
+ 68844
+ ]
+ ],
+ [
+ [
+ 68781,
+ 68781
+ ],
+ "mapped",
+ [
+ 68845
+ ]
+ ],
+ [
+ [
+ 68782,
+ 68782
+ ],
+ "mapped",
+ [
+ 68846
+ ]
+ ],
+ [
+ [
+ 68783,
+ 68783
+ ],
+ "mapped",
+ [
+ 68847
+ ]
+ ],
+ [
+ [
+ 68784,
+ 68784
+ ],
+ "mapped",
+ [
+ 68848
+ ]
+ ],
+ [
+ [
+ 68785,
+ 68785
+ ],
+ "mapped",
+ [
+ 68849
+ ]
+ ],
+ [
+ [
+ 68786,
+ 68786
+ ],
+ "mapped",
+ [
+ 68850
+ ]
+ ],
+ [
+ [
+ 68787,
+ 68799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68800,
+ 68850
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68851,
+ 68857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68858,
+ 68863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68864,
+ 69215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69216,
+ 69246
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69247,
+ 69631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69632,
+ 69702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69703,
+ 69709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69710,
+ 69713
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69714,
+ 69733
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69734,
+ 69743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69744,
+ 69758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69759,
+ 69759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69760,
+ 69818
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69819,
+ 69820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69821,
+ 69821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69822,
+ 69825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69826,
+ 69839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69840,
+ 69864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69865,
+ 69871
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69872,
+ 69881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69882,
+ 69887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69888,
+ 69940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69941,
+ 69941
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69942,
+ 69951
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69952,
+ 69955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69956,
+ 69967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69968,
+ 70003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70004,
+ 70005
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70006,
+ 70006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70007,
+ 70015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70016,
+ 70084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70085,
+ 70088
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70089,
+ 70089
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70090,
+ 70092
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70093,
+ 70093
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70094,
+ 70095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70096,
+ 70105
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70106,
+ 70106
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70107,
+ 70107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70108,
+ 70108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70109,
+ 70111
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70112,
+ 70112
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70113,
+ 70132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70133,
+ 70143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70144,
+ 70161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70162,
+ 70162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70163,
+ 70199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70200,
+ 70205
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70206,
+ 70271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70272,
+ 70278
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70279,
+ 70279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70280,
+ 70280
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70281,
+ 70281
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70282,
+ 70285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70286,
+ 70286
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70287,
+ 70301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70302,
+ 70302
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70303,
+ 70312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70313,
+ 70313
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70314,
+ 70319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70320,
+ 70378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70379,
+ 70383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70384,
+ 70393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70394,
+ 70399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70400,
+ 70400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70401,
+ 70403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70404,
+ 70404
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70405,
+ 70412
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70413,
+ 70414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70415,
+ 70416
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70417,
+ 70418
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70419,
+ 70440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70441,
+ 70441
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70442,
+ 70448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70449,
+ 70449
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70450,
+ 70451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70452,
+ 70452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70453,
+ 70457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70458,
+ 70459
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70460,
+ 70468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70469,
+ 70470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70471,
+ 70472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70473,
+ 70474
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70475,
+ 70477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70478,
+ 70479
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70480,
+ 70480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70481,
+ 70486
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70487,
+ 70487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70488,
+ 70492
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70493,
+ 70499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70500,
+ 70501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70502,
+ 70508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70509,
+ 70511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70512,
+ 70516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70517,
+ 70783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70784,
+ 70853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70854,
+ 70854
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70855,
+ 70855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70856,
+ 70863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70864,
+ 70873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70874,
+ 71039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71040,
+ 71093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71094,
+ 71095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71096,
+ 71104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71105,
+ 71113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71114,
+ 71127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71128,
+ 71133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71134,
+ 71167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71168,
+ 71232
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71233,
+ 71235
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71236,
+ 71236
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71237,
+ 71247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71248,
+ 71257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71258,
+ 71295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71296,
+ 71351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71352,
+ 71359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71360,
+ 71369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71370,
+ 71423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71424,
+ 71449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71450,
+ 71452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71453,
+ 71467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71468,
+ 71471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71472,
+ 71481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71482,
+ 71487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71488,
+ 71839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71840,
+ 71840
+ ],
+ "mapped",
+ [
+ 71872
+ ]
+ ],
+ [
+ [
+ 71841,
+ 71841
+ ],
+ "mapped",
+ [
+ 71873
+ ]
+ ],
+ [
+ [
+ 71842,
+ 71842
+ ],
+ "mapped",
+ [
+ 71874
+ ]
+ ],
+ [
+ [
+ 71843,
+ 71843
+ ],
+ "mapped",
+ [
+ 71875
+ ]
+ ],
+ [
+ [
+ 71844,
+ 71844
+ ],
+ "mapped",
+ [
+ 71876
+ ]
+ ],
+ [
+ [
+ 71845,
+ 71845
+ ],
+ "mapped",
+ [
+ 71877
+ ]
+ ],
+ [
+ [
+ 71846,
+ 71846
+ ],
+ "mapped",
+ [
+ 71878
+ ]
+ ],
+ [
+ [
+ 71847,
+ 71847
+ ],
+ "mapped",
+ [
+ 71879
+ ]
+ ],
+ [
+ [
+ 71848,
+ 71848
+ ],
+ "mapped",
+ [
+ 71880
+ ]
+ ],
+ [
+ [
+ 71849,
+ 71849
+ ],
+ "mapped",
+ [
+ 71881
+ ]
+ ],
+ [
+ [
+ 71850,
+ 71850
+ ],
+ "mapped",
+ [
+ 71882
+ ]
+ ],
+ [
+ [
+ 71851,
+ 71851
+ ],
+ "mapped",
+ [
+ 71883
+ ]
+ ],
+ [
+ [
+ 71852,
+ 71852
+ ],
+ "mapped",
+ [
+ 71884
+ ]
+ ],
+ [
+ [
+ 71853,
+ 71853
+ ],
+ "mapped",
+ [
+ 71885
+ ]
+ ],
+ [
+ [
+ 71854,
+ 71854
+ ],
+ "mapped",
+ [
+ 71886
+ ]
+ ],
+ [
+ [
+ 71855,
+ 71855
+ ],
+ "mapped",
+ [
+ 71887
+ ]
+ ],
+ [
+ [
+ 71856,
+ 71856
+ ],
+ "mapped",
+ [
+ 71888
+ ]
+ ],
+ [
+ [
+ 71857,
+ 71857
+ ],
+ "mapped",
+ [
+ 71889
+ ]
+ ],
+ [
+ [
+ 71858,
+ 71858
+ ],
+ "mapped",
+ [
+ 71890
+ ]
+ ],
+ [
+ [
+ 71859,
+ 71859
+ ],
+ "mapped",
+ [
+ 71891
+ ]
+ ],
+ [
+ [
+ 71860,
+ 71860
+ ],
+ "mapped",
+ [
+ 71892
+ ]
+ ],
+ [
+ [
+ 71861,
+ 71861
+ ],
+ "mapped",
+ [
+ 71893
+ ]
+ ],
+ [
+ [
+ 71862,
+ 71862
+ ],
+ "mapped",
+ [
+ 71894
+ ]
+ ],
+ [
+ [
+ 71863,
+ 71863
+ ],
+ "mapped",
+ [
+ 71895
+ ]
+ ],
+ [
+ [
+ 71864,
+ 71864
+ ],
+ "mapped",
+ [
+ 71896
+ ]
+ ],
+ [
+ [
+ 71865,
+ 71865
+ ],
+ "mapped",
+ [
+ 71897
+ ]
+ ],
+ [
+ [
+ 71866,
+ 71866
+ ],
+ "mapped",
+ [
+ 71898
+ ]
+ ],
+ [
+ [
+ 71867,
+ 71867
+ ],
+ "mapped",
+ [
+ 71899
+ ]
+ ],
+ [
+ [
+ 71868,
+ 71868
+ ],
+ "mapped",
+ [
+ 71900
+ ]
+ ],
+ [
+ [
+ 71869,
+ 71869
+ ],
+ "mapped",
+ [
+ 71901
+ ]
+ ],
+ [
+ [
+ 71870,
+ 71870
+ ],
+ "mapped",
+ [
+ 71902
+ ]
+ ],
+ [
+ [
+ 71871,
+ 71871
+ ],
+ "mapped",
+ [
+ 71903
+ ]
+ ],
+ [
+ [
+ 71872,
+ 71913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71914,
+ 71922
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71923,
+ 71934
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71935,
+ 71935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71936,
+ 72383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 72384,
+ 72440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 72441,
+ 73727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 73728,
+ 74606
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74607,
+ 74648
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74649,
+ 74649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74650,
+ 74751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74752,
+ 74850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74851,
+ 74862
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74863,
+ 74863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74864,
+ 74867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74868,
+ 74868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74869,
+ 74879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74880,
+ 75075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 75076,
+ 77823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 77824,
+ 78894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 78895,
+ 82943
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 82944,
+ 83526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 83527,
+ 92159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92160,
+ 92728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92729,
+ 92735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92736,
+ 92766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92767,
+ 92767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92768,
+ 92777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92778,
+ 92781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92782,
+ 92783
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92784,
+ 92879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92880,
+ 92909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92910,
+ 92911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92912,
+ 92916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92917,
+ 92917
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92918,
+ 92927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92928,
+ 92982
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92983,
+ 92991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92992,
+ 92995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92996,
+ 92997
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92998,
+ 93007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93008,
+ 93017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93018,
+ 93018
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93019,
+ 93025
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 93026,
+ 93026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93027,
+ 93047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93048,
+ 93052
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93053,
+ 93071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93072,
+ 93951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93952,
+ 94020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94021,
+ 94031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94032,
+ 94078
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94079,
+ 94094
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94095,
+ 94111
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94112,
+ 110591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 110592,
+ 110593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 110594,
+ 113663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113664,
+ 113770
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113771,
+ 113775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113776,
+ 113788
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113789,
+ 113791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113792,
+ 113800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113801,
+ 113807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113808,
+ 113817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113818,
+ 113819
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113820,
+ 113820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113821,
+ 113822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113823,
+ 113823
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113824,
+ 113827
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 113828,
+ 118783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 118784,
+ 119029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119030,
+ 119039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119040,
+ 119078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119079,
+ 119080
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119081,
+ 119081
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119082,
+ 119133
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119134,
+ 119134
+ ],
+ "mapped",
+ [
+ 119127,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119135,
+ 119135
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119136,
+ 119136
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119137,
+ 119137
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119138,
+ 119138
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119152
+ ]
+ ],
+ [
+ [
+ 119139,
+ 119139
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119153
+ ]
+ ],
+ [
+ [
+ 119140,
+ 119140
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119154
+ ]
+ ],
+ [
+ [
+ 119141,
+ 119154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119155,
+ 119162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119163,
+ 119226
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119227,
+ 119227
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119228,
+ 119228
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119229,
+ 119229
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119230,
+ 119230
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119231,
+ 119231
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119232,
+ 119232
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119233,
+ 119261
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119262,
+ 119272
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119273,
+ 119295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119296,
+ 119365
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119366,
+ 119551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119552,
+ 119638
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119639,
+ 119647
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119648,
+ 119665
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119666,
+ 119807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119808,
+ 119808
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119809,
+ 119809
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119810,
+ 119810
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119811,
+ 119811
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119812,
+ 119812
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119813,
+ 119813
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119814,
+ 119814
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119815,
+ 119815
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119816,
+ 119816
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119817,
+ 119817
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119818,
+ 119818
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119819,
+ 119819
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119820,
+ 119820
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119821,
+ 119821
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119822,
+ 119822
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119823,
+ 119823
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119824,
+ 119824
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119825,
+ 119825
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119826,
+ 119826
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119827,
+ 119827
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119828,
+ 119828
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119829,
+ 119829
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119830,
+ 119830
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119831,
+ 119831
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119832,
+ 119832
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119833,
+ 119833
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119834,
+ 119834
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119835,
+ 119835
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119836,
+ 119836
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119837,
+ 119837
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119838,
+ 119838
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119839,
+ 119839
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119840,
+ 119840
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119841,
+ 119841
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119842,
+ 119842
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119843,
+ 119843
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119844,
+ 119844
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119845,
+ 119845
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119846,
+ 119846
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119847,
+ 119847
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119848,
+ 119848
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119849,
+ 119849
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119850,
+ 119850
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119851,
+ 119851
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119852,
+ 119852
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119853,
+ 119853
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119854,
+ 119854
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119855,
+ 119855
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119856,
+ 119856
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119857,
+ 119857
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119858,
+ 119858
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119859,
+ 119859
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119860,
+ 119860
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119861,
+ 119861
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119862,
+ 119862
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119863,
+ 119863
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119864,
+ 119864
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119865,
+ 119865
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119866,
+ 119866
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119867,
+ 119867
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119868,
+ 119868
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119869,
+ 119869
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119870,
+ 119870
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119871,
+ 119871
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119872,
+ 119872
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119873,
+ 119873
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119874,
+ 119874
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119875,
+ 119875
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119876,
+ 119876
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119877,
+ 119877
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119878,
+ 119878
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119879,
+ 119879
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119880,
+ 119880
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119881,
+ 119881
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119882,
+ 119882
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119883,
+ 119883
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119884,
+ 119884
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119885,
+ 119885
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119886,
+ 119886
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119887,
+ 119887
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119888,
+ 119888
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119889,
+ 119889
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119890,
+ 119890
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119891,
+ 119891
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119892,
+ 119892
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119893,
+ 119893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119894,
+ 119894
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119895,
+ 119895
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119896,
+ 119896
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119897,
+ 119897
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119898,
+ 119898
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119899,
+ 119899
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119900,
+ 119900
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119901,
+ 119901
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119902,
+ 119902
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119903,
+ 119903
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119904,
+ 119904
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119905,
+ 119905
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119906,
+ 119906
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119907,
+ 119907
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119908,
+ 119908
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119909,
+ 119909
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119910,
+ 119910
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119911,
+ 119911
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119912,
+ 119912
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119913,
+ 119913
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119914,
+ 119914
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119915,
+ 119915
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119916,
+ 119916
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119917,
+ 119917
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119918,
+ 119918
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119919,
+ 119919
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119920,
+ 119920
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119921,
+ 119921
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119922,
+ 119922
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119923,
+ 119923
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119924,
+ 119924
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119925,
+ 119925
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119926,
+ 119926
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119927,
+ 119927
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119928,
+ 119928
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119929,
+ 119929
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119930,
+ 119930
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119931,
+ 119931
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119932,
+ 119932
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119933,
+ 119933
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119934,
+ 119934
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119935,
+ 119935
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119936,
+ 119936
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119937,
+ 119937
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119938,
+ 119938
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119939,
+ 119939
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119940,
+ 119940
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119941,
+ 119941
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119942,
+ 119942
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119943,
+ 119943
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119944,
+ 119944
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119945,
+ 119945
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119946,
+ 119946
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119947,
+ 119947
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119948,
+ 119948
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119949,
+ 119949
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119950,
+ 119950
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119951,
+ 119951
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119952,
+ 119952
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119953,
+ 119953
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119954,
+ 119954
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119955,
+ 119955
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119956,
+ 119956
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119957,
+ 119957
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119958,
+ 119958
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119959,
+ 119959
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119960,
+ 119960
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119961,
+ 119961
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119962,
+ 119962
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119963,
+ 119963
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119964,
+ 119964
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119965,
+ 119965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119966,
+ 119966
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119967,
+ 119967
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119968,
+ 119969
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119970,
+ 119970
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119971,
+ 119972
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119973,
+ 119973
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119974,
+ 119974
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119975,
+ 119976
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119977,
+ 119977
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119978,
+ 119978
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119979,
+ 119979
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119980,
+ 119980
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119981,
+ 119981
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119982,
+ 119982
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119983,
+ 119983
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119984,
+ 119984
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119985,
+ 119985
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119986,
+ 119986
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119987,
+ 119987
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119988,
+ 119988
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119989,
+ 119989
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119990,
+ 119990
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119991,
+ 119991
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119992,
+ 119992
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119993,
+ 119993
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119994,
+ 119994
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119995,
+ 119995
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119996,
+ 119996
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119997,
+ 119997
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119998,
+ 119998
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119999,
+ 119999
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120000,
+ 120000
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120001,
+ 120001
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120002,
+ 120002
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120003,
+ 120003
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120004,
+ 120004
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120005,
+ 120005
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120006,
+ 120006
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120007,
+ 120007
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120008,
+ 120008
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120009,
+ 120009
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120010,
+ 120010
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120011,
+ 120011
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120012,
+ 120012
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120013,
+ 120013
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120014,
+ 120014
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120015,
+ 120015
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120016,
+ 120016
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120017,
+ 120017
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120018,
+ 120018
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120019,
+ 120019
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120020,
+ 120020
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120021,
+ 120021
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120022,
+ 120022
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120023,
+ 120023
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120024,
+ 120024
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120025,
+ 120025
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120026,
+ 120026
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120027,
+ 120027
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120028,
+ 120028
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120029,
+ 120029
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120030,
+ 120030
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120031,
+ 120031
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120032,
+ 120032
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120033,
+ 120033
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120034,
+ 120034
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120035,
+ 120035
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120036,
+ 120036
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120037,
+ 120037
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120038,
+ 120038
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120039,
+ 120039
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120040,
+ 120040
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120041,
+ 120041
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120042,
+ 120042
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120043,
+ 120043
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120044,
+ 120044
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120045,
+ 120045
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120046,
+ 120046
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120047,
+ 120047
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120048,
+ 120048
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120049,
+ 120049
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120050,
+ 120050
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120051,
+ 120051
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120052,
+ 120052
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120053,
+ 120053
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120054,
+ 120054
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120055,
+ 120055
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120056,
+ 120056
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120057,
+ 120057
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120058,
+ 120058
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120059,
+ 120059
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120060,
+ 120060
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120061,
+ 120061
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120062,
+ 120062
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120063,
+ 120063
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120064,
+ 120064
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120065,
+ 120065
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120066,
+ 120066
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120067,
+ 120067
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120068,
+ 120068
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120069,
+ 120069
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120070,
+ 120070
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120071,
+ 120071
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120072,
+ 120072
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120073,
+ 120073
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120074,
+ 120074
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120075,
+ 120076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120077,
+ 120077
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120078,
+ 120078
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120079,
+ 120079
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120080,
+ 120080
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120081,
+ 120081
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120082,
+ 120082
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120083,
+ 120083
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120084,
+ 120084
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120085,
+ 120085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120086,
+ 120086
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120087,
+ 120087
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120088,
+ 120088
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120089,
+ 120089
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120090,
+ 120090
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120091,
+ 120091
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120092,
+ 120092
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120093,
+ 120093
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120094,
+ 120094
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120095,
+ 120095
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120096,
+ 120096
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120097,
+ 120097
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120098,
+ 120098
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120099,
+ 120099
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120100,
+ 120100
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120101,
+ 120101
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120102,
+ 120102
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120103,
+ 120103
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120104,
+ 120104
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120105,
+ 120105
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120106,
+ 120106
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120107,
+ 120107
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120108,
+ 120108
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120109,
+ 120109
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120110,
+ 120110
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120111,
+ 120111
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120112,
+ 120112
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120113,
+ 120113
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120114,
+ 120114
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120115,
+ 120115
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120116,
+ 120116
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120117,
+ 120117
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120118,
+ 120118
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120119,
+ 120119
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120120,
+ 120120
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120121,
+ 120121
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120122,
+ 120122
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120123,
+ 120123
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120124,
+ 120124
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120125,
+ 120125
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120126,
+ 120126
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120127,
+ 120127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120128,
+ 120128
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120129,
+ 120129
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120130,
+ 120130
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120131,
+ 120131
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120132,
+ 120132
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120133,
+ 120133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120134,
+ 120134
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120135,
+ 120137
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120138,
+ 120138
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120139,
+ 120139
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120140,
+ 120140
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120141,
+ 120141
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120142,
+ 120142
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120143,
+ 120143
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120144,
+ 120144
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120145,
+ 120145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120146,
+ 120146
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120147,
+ 120147
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120148,
+ 120148
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120149,
+ 120149
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120150,
+ 120150
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120151,
+ 120151
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120152,
+ 120152
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120153,
+ 120153
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120154,
+ 120154
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120155,
+ 120155
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120156,
+ 120156
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120157,
+ 120157
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120158,
+ 120158
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120159,
+ 120159
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120160,
+ 120160
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120161,
+ 120161
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120162,
+ 120162
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120163,
+ 120163
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120164,
+ 120164
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120165,
+ 120165
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120166,
+ 120166
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120167,
+ 120167
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120168,
+ 120168
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120169,
+ 120169
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120170,
+ 120170
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120171,
+ 120171
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120172,
+ 120172
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120173,
+ 120173
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120174,
+ 120174
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120175,
+ 120175
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120176,
+ 120176
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120177,
+ 120177
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120178,
+ 120178
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120179,
+ 120179
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120180,
+ 120180
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120181,
+ 120181
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120182,
+ 120182
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120183,
+ 120183
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120184,
+ 120184
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120185,
+ 120185
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120186,
+ 120186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120187,
+ 120187
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120188,
+ 120188
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120189,
+ 120189
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120190,
+ 120190
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120191,
+ 120191
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120192,
+ 120192
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120193,
+ 120193
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120194,
+ 120194
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120195,
+ 120195
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120196,
+ 120196
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120197,
+ 120197
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120198,
+ 120198
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120199,
+ 120199
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120200,
+ 120200
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120201,
+ 120201
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120202,
+ 120202
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120203,
+ 120203
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120204,
+ 120204
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120205,
+ 120205
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120206,
+ 120206
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120207,
+ 120207
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120208,
+ 120208
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120209,
+ 120209
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120210,
+ 120210
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120211,
+ 120211
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120212,
+ 120212
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120213,
+ 120213
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120214,
+ 120214
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120215,
+ 120215
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120216,
+ 120216
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120217,
+ 120217
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120218,
+ 120218
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120219,
+ 120219
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120220,
+ 120220
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120221,
+ 120221
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120222,
+ 120222
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120223,
+ 120223
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120224,
+ 120224
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120225,
+ 120225
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120226,
+ 120226
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120227,
+ 120227
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120228,
+ 120228
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120229,
+ 120229
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120230,
+ 120230
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120231,
+ 120231
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120232,
+ 120232
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120233,
+ 120233
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120234,
+ 120234
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120235,
+ 120235
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120236,
+ 120236
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120237,
+ 120237
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120238,
+ 120238
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120239,
+ 120239
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120240,
+ 120240
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120241,
+ 120241
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120242,
+ 120242
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120243,
+ 120243
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120244,
+ 120244
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120245,
+ 120245
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120246,
+ 120246
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120247,
+ 120247
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120248,
+ 120248
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120249,
+ 120249
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120250,
+ 120250
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120251,
+ 120251
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120252,
+ 120252
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120253,
+ 120253
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120254,
+ 120254
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120255,
+ 120255
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120256,
+ 120256
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120257,
+ 120257
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120258,
+ 120258
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120259,
+ 120259
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120260,
+ 120260
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120261,
+ 120261
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120262,
+ 120262
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120263,
+ 120263
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120264,
+ 120264
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120265,
+ 120265
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120266,
+ 120266
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120267,
+ 120267
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120268,
+ 120268
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120269,
+ 120269
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120270,
+ 120270
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120271,
+ 120271
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120272,
+ 120272
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120273,
+ 120273
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120274,
+ 120274
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120275,
+ 120275
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120276,
+ 120276
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120277,
+ 120277
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120278,
+ 120278
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120279,
+ 120279
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120280,
+ 120280
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120281,
+ 120281
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120282,
+ 120282
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120283,
+ 120283
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120284,
+ 120284
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120285,
+ 120285
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120286,
+ 120286
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120287,
+ 120287
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120288,
+ 120288
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120289,
+ 120289
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120290,
+ 120290
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120291,
+ 120291
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120292,
+ 120292
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120293,
+ 120293
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120294,
+ 120294
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120295,
+ 120295
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120296,
+ 120296
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120297,
+ 120297
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120298,
+ 120298
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120299,
+ 120299
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120300,
+ 120300
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120301,
+ 120301
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120302,
+ 120302
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120303,
+ 120303
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120304,
+ 120304
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120305,
+ 120305
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120306,
+ 120306
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120307,
+ 120307
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120308,
+ 120308
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120309,
+ 120309
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120310,
+ 120310
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120311,
+ 120311
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120312,
+ 120312
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120313,
+ 120313
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120314,
+ 120314
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120315,
+ 120315
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120316,
+ 120316
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120317,
+ 120317
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120318,
+ 120318
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120319,
+ 120319
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120320,
+ 120320
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120321,
+ 120321
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120322,
+ 120322
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120323,
+ 120323
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120324,
+ 120324
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120325,
+ 120325
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120326,
+ 120326
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120327,
+ 120327
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120328,
+ 120328
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120329,
+ 120329
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120330,
+ 120330
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120331,
+ 120331
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120332,
+ 120332
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120333,
+ 120333
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120334,
+ 120334
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120335,
+ 120335
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120336,
+ 120336
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120337,
+ 120337
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120338,
+ 120338
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120339,
+ 120339
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120340,
+ 120340
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120341,
+ 120341
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120342,
+ 120342
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120343,
+ 120343
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120344,
+ 120344
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120345,
+ 120345
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120346,
+ 120346
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120347,
+ 120347
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120348,
+ 120348
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120349,
+ 120349
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120350,
+ 120350
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120351,
+ 120351
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120352,
+ 120352
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120353,
+ 120353
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120354,
+ 120354
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120355,
+ 120355
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120356,
+ 120356
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120357,
+ 120357
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120358,
+ 120358
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120359,
+ 120359
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120360,
+ 120360
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120361,
+ 120361
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120362,
+ 120362
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120363,
+ 120363
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120364,
+ 120364
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120365,
+ 120365
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120366,
+ 120366
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120367,
+ 120367
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120368,
+ 120368
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120369,
+ 120369
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120370,
+ 120370
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120371,
+ 120371
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120372,
+ 120372
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120373,
+ 120373
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120374,
+ 120374
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120375,
+ 120375
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120376,
+ 120376
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120377,
+ 120377
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120378,
+ 120378
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120379,
+ 120379
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120380,
+ 120380
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120381,
+ 120381
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120382,
+ 120382
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120383,
+ 120383
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120384,
+ 120384
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120385,
+ 120385
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120386,
+ 120386
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120387,
+ 120387
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120388,
+ 120388
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120389,
+ 120389
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120390,
+ 120390
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120391,
+ 120391
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120392,
+ 120392
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120393,
+ 120393
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120394,
+ 120394
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120395,
+ 120395
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120396,
+ 120396
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120397,
+ 120397
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120398,
+ 120398
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120399,
+ 120399
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120400,
+ 120400
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120401,
+ 120401
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120402,
+ 120402
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120403,
+ 120403
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120404,
+ 120404
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120405,
+ 120405
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120406,
+ 120406
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120407,
+ 120407
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120408,
+ 120408
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120409,
+ 120409
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120410,
+ 120410
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120411,
+ 120411
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120412,
+ 120412
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120413,
+ 120413
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120414,
+ 120414
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120415,
+ 120415
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120416,
+ 120416
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120417,
+ 120417
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120418,
+ 120418
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120419,
+ 120419
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120420,
+ 120420
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120421,
+ 120421
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120422,
+ 120422
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120423,
+ 120423
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120424,
+ 120424
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120425,
+ 120425
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120426,
+ 120426
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120427,
+ 120427
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120428,
+ 120428
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120429,
+ 120429
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120430,
+ 120430
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120431,
+ 120431
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120432,
+ 120432
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120433,
+ 120433
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120434,
+ 120434
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120435,
+ 120435
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120436,
+ 120436
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120437,
+ 120437
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120438,
+ 120438
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120439,
+ 120439
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120440,
+ 120440
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120441,
+ 120441
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120442,
+ 120442
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120443,
+ 120443
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120444,
+ 120444
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120445,
+ 120445
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120446,
+ 120446
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120447,
+ 120447
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120448,
+ 120448
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120449,
+ 120449
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120450,
+ 120450
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120451,
+ 120451
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120452,
+ 120452
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120453,
+ 120453
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120454,
+ 120454
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120455,
+ 120455
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120456,
+ 120456
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120457,
+ 120457
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120458,
+ 120458
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120459,
+ 120459
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120460,
+ 120460
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120461,
+ 120461
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120462,
+ 120462
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120463,
+ 120463
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120464,
+ 120464
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120465,
+ 120465
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120466,
+ 120466
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120467,
+ 120467
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120468,
+ 120468
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120469,
+ 120469
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120470,
+ 120470
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120471,
+ 120471
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120472,
+ 120472
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120473,
+ 120473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120474,
+ 120474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120475,
+ 120475
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120476,
+ 120476
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120477,
+ 120477
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120478,
+ 120478
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120479,
+ 120479
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120480,
+ 120480
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120481,
+ 120481
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120482,
+ 120482
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120483,
+ 120483
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120484,
+ 120484
+ ],
+ "mapped",
+ [
+ 305
+ ]
+ ],
+ [
+ [
+ 120485,
+ 120485
+ ],
+ "mapped",
+ [
+ 567
+ ]
+ ],
+ [
+ [
+ 120486,
+ 120487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120488,
+ 120488
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120489,
+ 120489
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120490,
+ 120490
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120491,
+ 120491
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120492,
+ 120492
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120493,
+ 120493
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120494,
+ 120494
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120495,
+ 120495
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120496,
+ 120496
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120497,
+ 120497
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120498,
+ 120498
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120499,
+ 120499
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120500,
+ 120500
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120501,
+ 120501
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120502,
+ 120502
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120503,
+ 120503
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120504,
+ 120504
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120505,
+ 120505
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120506,
+ 120506
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120507,
+ 120507
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120508,
+ 120508
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120509,
+ 120509
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120510,
+ 120510
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120511,
+ 120511
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120512,
+ 120512
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120513,
+ 120513
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120514,
+ 120514
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120515,
+ 120515
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120516,
+ 120516
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120517,
+ 120517
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120518,
+ 120518
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120519,
+ 120519
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120520,
+ 120520
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120521,
+ 120521
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120522,
+ 120522
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120523,
+ 120523
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120524,
+ 120524
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120525,
+ 120525
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120526,
+ 120526
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120527,
+ 120527
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120528,
+ 120528
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120529,
+ 120529
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120530,
+ 120530
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120531,
+ 120532
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120533,
+ 120533
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120534,
+ 120534
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120535,
+ 120535
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120536,
+ 120536
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120537,
+ 120537
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120538,
+ 120538
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120539,
+ 120539
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120540,
+ 120540
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120541,
+ 120541
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120542,
+ 120542
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120543,
+ 120543
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120544,
+ 120544
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120545,
+ 120545
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120546,
+ 120546
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120547,
+ 120547
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120548,
+ 120548
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120549,
+ 120549
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120550,
+ 120550
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120551,
+ 120551
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120552,
+ 120552
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120553,
+ 120553
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120554,
+ 120554
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120555,
+ 120555
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120556,
+ 120556
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120557,
+ 120557
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120558,
+ 120558
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120559,
+ 120559
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120560,
+ 120560
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120561,
+ 120561
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120562,
+ 120562
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120563,
+ 120563
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120564,
+ 120564
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120565,
+ 120565
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120566,
+ 120566
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120567,
+ 120567
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120568,
+ 120568
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120569,
+ 120569
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120570,
+ 120570
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120571,
+ 120571
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120572,
+ 120572
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120573,
+ 120573
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120574,
+ 120574
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120575,
+ 120575
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120576,
+ 120576
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120577,
+ 120577
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120578,
+ 120578
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120579,
+ 120579
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120580,
+ 120580
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120581,
+ 120581
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120582,
+ 120582
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120583,
+ 120583
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120584,
+ 120584
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120585,
+ 120585
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120586,
+ 120586
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120587,
+ 120587
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120588,
+ 120588
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120589,
+ 120590
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120591,
+ 120591
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120592,
+ 120592
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120593,
+ 120593
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120594,
+ 120594
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120595,
+ 120595
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120596,
+ 120596
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120597,
+ 120597
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120598,
+ 120598
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120599,
+ 120599
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120600,
+ 120600
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120601,
+ 120601
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120602,
+ 120602
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120603,
+ 120603
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120604,
+ 120604
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120605,
+ 120605
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120606,
+ 120606
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120607,
+ 120607
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120608,
+ 120608
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120609,
+ 120609
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120610,
+ 120610
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120611,
+ 120611
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120612,
+ 120612
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120613,
+ 120613
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120614,
+ 120614
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120615,
+ 120615
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120616,
+ 120616
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120617,
+ 120617
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120618,
+ 120618
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120619,
+ 120619
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120620,
+ 120620
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120621,
+ 120621
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120622,
+ 120622
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120623,
+ 120623
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120624,
+ 120624
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120625,
+ 120625
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120626,
+ 120626
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120627,
+ 120627
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120628,
+ 120628
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120629,
+ 120629
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120630,
+ 120630
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120631,
+ 120631
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120632,
+ 120632
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120633,
+ 120633
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120634,
+ 120634
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120635,
+ 120635
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120636,
+ 120636
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120637,
+ 120637
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120638,
+ 120638
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120639,
+ 120639
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120640,
+ 120640
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120641,
+ 120641
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120642,
+ 120642
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120643,
+ 120643
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120644,
+ 120644
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120645,
+ 120645
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120646,
+ 120646
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120647,
+ 120648
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120649,
+ 120649
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120650,
+ 120650
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120651,
+ 120651
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120652,
+ 120652
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120653,
+ 120653
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120654,
+ 120654
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120655,
+ 120655
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120656,
+ 120656
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120657,
+ 120657
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120658,
+ 120658
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120659,
+ 120659
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120660,
+ 120660
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120661,
+ 120661
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120662,
+ 120662
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120663,
+ 120663
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120664,
+ 120664
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120665,
+ 120665
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120666,
+ 120666
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120667,
+ 120667
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120668,
+ 120668
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120669,
+ 120669
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120670,
+ 120670
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120671,
+ 120671
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120672,
+ 120672
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120673,
+ 120673
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120674,
+ 120674
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120675,
+ 120675
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120676,
+ 120676
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120677,
+ 120677
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120678,
+ 120678
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120679,
+ 120679
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120680,
+ 120680
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120681,
+ 120681
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120682,
+ 120682
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120683,
+ 120683
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120684,
+ 120684
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120685,
+ 120685
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120686,
+ 120686
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120687,
+ 120687
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120688,
+ 120688
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120689,
+ 120689
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120690,
+ 120690
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120691,
+ 120691
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120692,
+ 120692
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120693,
+ 120693
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120694,
+ 120694
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120695,
+ 120695
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120696,
+ 120696
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120697,
+ 120697
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120698,
+ 120698
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120699,
+ 120699
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120700,
+ 120700
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120701,
+ 120701
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120702,
+ 120702
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120703,
+ 120703
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120704,
+ 120704
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120705,
+ 120706
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120707,
+ 120707
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120708,
+ 120708
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120709,
+ 120709
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120710,
+ 120710
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120711,
+ 120711
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120712,
+ 120712
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120713,
+ 120713
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120714,
+ 120714
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120715,
+ 120715
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120716,
+ 120716
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120717,
+ 120717
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120718,
+ 120718
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120719,
+ 120719
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120720,
+ 120720
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120721,
+ 120721
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120722,
+ 120722
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120723,
+ 120723
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120724,
+ 120724
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120725,
+ 120725
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120726,
+ 120726
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120727,
+ 120727
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120728,
+ 120728
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120729,
+ 120729
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120730,
+ 120730
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120731,
+ 120731
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120732,
+ 120732
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120733,
+ 120733
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120734,
+ 120734
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120735,
+ 120735
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120736,
+ 120736
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120737,
+ 120737
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120738,
+ 120738
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120739,
+ 120739
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120740,
+ 120740
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120741,
+ 120741
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120742,
+ 120742
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120743,
+ 120743
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120744,
+ 120744
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120745,
+ 120745
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120746,
+ 120746
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120747,
+ 120747
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120748,
+ 120748
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120749,
+ 120749
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120750,
+ 120750
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120751,
+ 120751
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120752,
+ 120752
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120753,
+ 120753
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120754,
+ 120754
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120755,
+ 120755
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120756,
+ 120756
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120757,
+ 120757
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120758,
+ 120758
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120759,
+ 120759
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120760,
+ 120760
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120761,
+ 120761
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120762,
+ 120762
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120763,
+ 120764
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120765,
+ 120765
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120766,
+ 120766
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120767,
+ 120767
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120768,
+ 120768
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120769,
+ 120769
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120770,
+ 120770
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120771,
+ 120771
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120772,
+ 120772
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120773,
+ 120773
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120774,
+ 120774
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120775,
+ 120775
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120776,
+ 120776
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120777,
+ 120777
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120778,
+ 120779
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 120780,
+ 120781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120782,
+ 120782
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120783,
+ 120783
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120784,
+ 120784
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120785,
+ 120785
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120786,
+ 120786
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120787,
+ 120787
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120788,
+ 120788
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120789,
+ 120789
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120790,
+ 120790
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120791,
+ 120791
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120792,
+ 120792
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120793,
+ 120793
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120794,
+ 120794
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120795,
+ 120795
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120796,
+ 120796
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120797,
+ 120797
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120798,
+ 120798
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120799,
+ 120799
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120800,
+ 120800
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120801,
+ 120801
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120802,
+ 120802
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120803,
+ 120803
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120804,
+ 120804
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120805,
+ 120805
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120806,
+ 120806
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120807,
+ 120807
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120808,
+ 120808
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120809,
+ 120809
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120810,
+ 120810
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120811,
+ 120811
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120812,
+ 120812
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120813,
+ 120813
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120814,
+ 120814
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120815,
+ 120815
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120816,
+ 120816
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120817,
+ 120817
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120818,
+ 120818
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120819,
+ 120819
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120820,
+ 120820
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120821,
+ 120821
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120822,
+ 120822
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120823,
+ 120823
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120824,
+ 120824
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120825,
+ 120825
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120826,
+ 120826
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120827,
+ 120827
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120828,
+ 120828
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120829,
+ 120829
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120830,
+ 120830
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120831,
+ 120831
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120832,
+ 121343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121344,
+ 121398
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121399,
+ 121402
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121403,
+ 121452
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121453,
+ 121460
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121461,
+ 121461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121462,
+ 121475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121476,
+ 121476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121477,
+ 121483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121484,
+ 121498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121499,
+ 121503
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121504,
+ 121504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121505,
+ 121519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121520,
+ 124927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 124928,
+ 125124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125125,
+ 125126
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 125127,
+ 125135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 125136,
+ 125142
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125143,
+ 126463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126464,
+ 126464
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126465,
+ 126465
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126466,
+ 126466
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126467,
+ 126467
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126468,
+ 126468
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126469,
+ 126469
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126470,
+ 126470
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126471,
+ 126471
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126472,
+ 126472
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126473,
+ 126473
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126474,
+ 126474
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126475,
+ 126475
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126476,
+ 126476
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126477,
+ 126477
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126478,
+ 126478
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126479,
+ 126479
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126480,
+ 126480
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126481,
+ 126481
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126482,
+ 126482
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126483,
+ 126483
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126484,
+ 126484
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126485,
+ 126485
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126486,
+ 126486
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126487,
+ 126487
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126488,
+ 126488
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126489,
+ 126489
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126490,
+ 126490
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126491,
+ 126491
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126492,
+ 126492
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126493,
+ 126493
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126494,
+ 126494
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126495,
+ 126495
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126496,
+ 126496
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126497,
+ 126497
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126498,
+ 126498
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126499,
+ 126499
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126500,
+ 126500
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126501,
+ 126502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126503,
+ 126503
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126504,
+ 126504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126505,
+ 126505
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126506,
+ 126506
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126507,
+ 126507
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126508,
+ 126508
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126509,
+ 126509
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126510,
+ 126510
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126511,
+ 126511
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126512,
+ 126512
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126513,
+ 126513
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126514,
+ 126514
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126515,
+ 126515
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126516,
+ 126516
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126517,
+ 126517
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126518,
+ 126518
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126519,
+ 126519
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126520,
+ 126520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126521,
+ 126521
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126522,
+ 126522
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126523,
+ 126523
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126524,
+ 126529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126530,
+ 126530
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126531,
+ 126534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126535,
+ 126535
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126536,
+ 126536
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126537,
+ 126537
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126538,
+ 126538
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126539,
+ 126539
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126540,
+ 126540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126541,
+ 126541
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126542,
+ 126542
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126543,
+ 126543
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126544,
+ 126544
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126545,
+ 126545
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126546,
+ 126546
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126547,
+ 126547
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126548,
+ 126548
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126549,
+ 126550
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126551,
+ 126551
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126552,
+ 126552
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126553,
+ 126553
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126554,
+ 126554
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126555,
+ 126555
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126556,
+ 126556
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126557,
+ 126557
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126558,
+ 126558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126559,
+ 126559
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126560,
+ 126560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126561,
+ 126561
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126562,
+ 126562
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126563,
+ 126563
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126564,
+ 126564
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126565,
+ 126566
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126567,
+ 126567
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126568,
+ 126568
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126569,
+ 126569
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126570,
+ 126570
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126571,
+ 126571
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126572,
+ 126572
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126573,
+ 126573
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126574,
+ 126574
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126575,
+ 126575
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126576,
+ 126576
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126577,
+ 126577
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126578,
+ 126578
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126579,
+ 126579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126580,
+ 126580
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126581,
+ 126581
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126582,
+ 126582
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126583,
+ 126583
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126584,
+ 126584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126585,
+ 126585
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126586,
+ 126586
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126587,
+ 126587
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126588,
+ 126588
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126589,
+ 126589
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126590,
+ 126590
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126591,
+ 126591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126592,
+ 126592
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126593,
+ 126593
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126594,
+ 126594
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126595,
+ 126595
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126596,
+ 126596
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126597,
+ 126597
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126598,
+ 126598
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126599,
+ 126599
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126600,
+ 126600
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126601,
+ 126601
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126602,
+ 126602
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126603,
+ 126603
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126604,
+ 126604
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126605,
+ 126605
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126606,
+ 126606
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126607,
+ 126607
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126608,
+ 126608
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126609,
+ 126609
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126610,
+ 126610
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126611,
+ 126611
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126612,
+ 126612
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126613,
+ 126613
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126614,
+ 126614
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126615,
+ 126615
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126616,
+ 126616
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126617,
+ 126617
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126618,
+ 126618
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126619,
+ 126619
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126620,
+ 126624
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126625,
+ 126625
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126626,
+ 126626
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126627,
+ 126627
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126628,
+ 126628
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126629,
+ 126629
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126630,
+ 126630
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126631,
+ 126631
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126632,
+ 126632
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126633,
+ 126633
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126634,
+ 126634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126635,
+ 126635
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126636,
+ 126636
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126637,
+ 126637
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126638,
+ 126638
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126639,
+ 126639
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126640,
+ 126640
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126641,
+ 126641
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126642,
+ 126642
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126643,
+ 126643
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126644,
+ 126644
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126645,
+ 126645
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126646,
+ 126646
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126647,
+ 126647
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126648,
+ 126648
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126649,
+ 126649
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126650,
+ 126650
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126651,
+ 126651
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126652,
+ 126703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126704,
+ 126705
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 126706,
+ 126975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126976,
+ 127019
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127020,
+ 127023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127024,
+ 127123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127124,
+ 127135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127136,
+ 127150
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127151,
+ 127152
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127153,
+ 127166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127167,
+ 127167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127168,
+ 127168
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127169,
+ 127183
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127184,
+ 127184
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127185,
+ 127199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127200,
+ 127221
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127222,
+ 127231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127232,
+ 127232
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127233,
+ 127233
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 48,
+ 44
+ ]
+ ],
+ [
+ [
+ 127234,
+ 127234
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 49,
+ 44
+ ]
+ ],
+ [
+ [
+ 127235,
+ 127235
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 50,
+ 44
+ ]
+ ],
+ [
+ [
+ 127236,
+ 127236
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 51,
+ 44
+ ]
+ ],
+ [
+ [
+ 127237,
+ 127237
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 52,
+ 44
+ ]
+ ],
+ [
+ [
+ 127238,
+ 127238
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 53,
+ 44
+ ]
+ ],
+ [
+ [
+ 127239,
+ 127239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 54,
+ 44
+ ]
+ ],
+ [
+ [
+ 127240,
+ 127240
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 55,
+ 44
+ ]
+ ],
+ [
+ [
+ 127241,
+ 127241
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 56,
+ 44
+ ]
+ ],
+ [
+ [
+ 127242,
+ 127242
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 57,
+ 44
+ ]
+ ],
+ [
+ [
+ 127243,
+ 127244
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127245,
+ 127247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127248,
+ 127248
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 127249,
+ 127249
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 127250,
+ 127250
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 127251,
+ 127251
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 127252,
+ 127252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 127253,
+ 127253
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 127254,
+ 127254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 127255,
+ 127255
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 127256,
+ 127256
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 127257,
+ 127257
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 127258,
+ 127258
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 127259,
+ 127259
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 127260,
+ 127260
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 127261,
+ 127261
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 127262,
+ 127262
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 127263,
+ 127263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 127264,
+ 127264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 127265,
+ 127265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 127266,
+ 127266
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 127267,
+ 127267
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 127268,
+ 127268
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 127269,
+ 127269
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 127270,
+ 127270
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 127271,
+ 127271
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 127272,
+ 127272
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 127273,
+ 127273
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 127274,
+ 127274
+ ],
+ "mapped",
+ [
+ 12308,
+ 115,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127275,
+ 127275
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127276,
+ 127276
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127277,
+ 127277
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 127278,
+ 127278
+ ],
+ "mapped",
+ [
+ 119,
+ 122
+ ]
+ ],
+ [
+ [
+ 127279,
+ 127279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127280,
+ 127280
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 127281,
+ 127281
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 127282,
+ 127282
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127283,
+ 127283
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 127284,
+ 127284
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 127285,
+ 127285
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 127286,
+ 127286
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 127287,
+ 127287
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 127288,
+ 127288
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 127289,
+ 127289
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 127290,
+ 127290
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 127291,
+ 127291
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 127292,
+ 127292
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 127293,
+ 127293
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 127294,
+ 127294
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 127295,
+ 127295
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 127296,
+ 127296
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 127297,
+ 127297
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127298,
+ 127298
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 127299,
+ 127299
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 127300,
+ 127300
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 127301,
+ 127301
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 127302,
+ 127302
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 127303,
+ 127303
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 127304,
+ 127304
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 127305,
+ 127305
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 127306,
+ 127306
+ ],
+ "mapped",
+ [
+ 104,
+ 118
+ ]
+ ],
+ [
+ [
+ 127307,
+ 127307
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 127308,
+ 127308
+ ],
+ "mapped",
+ [
+ 115,
+ 100
+ ]
+ ],
+ [
+ [
+ 127309,
+ 127309
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 127310,
+ 127310
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 127311,
+ 127311
+ ],
+ "mapped",
+ [
+ 119,
+ 99
+ ]
+ ],
+ [
+ [
+ 127312,
+ 127318
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127319,
+ 127319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127320,
+ 127326
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127327,
+ 127327
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127328,
+ 127337
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127338,
+ 127338
+ ],
+ "mapped",
+ [
+ 109,
+ 99
+ ]
+ ],
+ [
+ [
+ 127339,
+ 127339
+ ],
+ "mapped",
+ [
+ 109,
+ 100
+ ]
+ ],
+ [
+ [
+ 127340,
+ 127343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127344,
+ 127352
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127353,
+ 127353
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127354,
+ 127354
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127355,
+ 127356
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127357,
+ 127358
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127359,
+ 127359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127360,
+ 127369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127370,
+ 127373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127374,
+ 127375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127376,
+ 127376
+ ],
+ "mapped",
+ [
+ 100,
+ 106
+ ]
+ ],
+ [
+ [
+ 127377,
+ 127386
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127387,
+ 127461
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127462,
+ 127487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127488,
+ 127488
+ ],
+ "mapped",
+ [
+ 12411,
+ 12363
+ ]
+ ],
+ [
+ [
+ 127489,
+ 127489
+ ],
+ "mapped",
+ [
+ 12467,
+ 12467
+ ]
+ ],
+ [
+ [
+ 127490,
+ 127490
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 127491,
+ 127503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127504,
+ 127504
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 127505,
+ 127505
+ ],
+ "mapped",
+ [
+ 23383
+ ]
+ ],
+ [
+ [
+ 127506,
+ 127506
+ ],
+ "mapped",
+ [
+ 21452
+ ]
+ ],
+ [
+ [
+ 127507,
+ 127507
+ ],
+ "mapped",
+ [
+ 12487
+ ]
+ ],
+ [
+ [
+ 127508,
+ 127508
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 127509,
+ 127509
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 127510,
+ 127510
+ ],
+ "mapped",
+ [
+ 35299
+ ]
+ ],
+ [
+ [
+ 127511,
+ 127511
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 127512,
+ 127512
+ ],
+ "mapped",
+ [
+ 20132
+ ]
+ ],
+ [
+ [
+ 127513,
+ 127513
+ ],
+ "mapped",
+ [
+ 26144
+ ]
+ ],
+ [
+ [
+ 127514,
+ 127514
+ ],
+ "mapped",
+ [
+ 28961
+ ]
+ ],
+ [
+ [
+ 127515,
+ 127515
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 127516,
+ 127516
+ ],
+ "mapped",
+ [
+ 21069
+ ]
+ ],
+ [
+ [
+ 127517,
+ 127517
+ ],
+ "mapped",
+ [
+ 24460
+ ]
+ ],
+ [
+ [
+ 127518,
+ 127518
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 127519,
+ 127519
+ ],
+ "mapped",
+ [
+ 26032
+ ]
+ ],
+ [
+ [
+ 127520,
+ 127520
+ ],
+ "mapped",
+ [
+ 21021
+ ]
+ ],
+ [
+ [
+ 127521,
+ 127521
+ ],
+ "mapped",
+ [
+ 32066
+ ]
+ ],
+ [
+ [
+ 127522,
+ 127522
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 127523,
+ 127523
+ ],
+ "mapped",
+ [
+ 36009
+ ]
+ ],
+ [
+ [
+ 127524,
+ 127524
+ ],
+ "mapped",
+ [
+ 22768
+ ]
+ ],
+ [
+ [
+ 127525,
+ 127525
+ ],
+ "mapped",
+ [
+ 21561
+ ]
+ ],
+ [
+ [
+ 127526,
+ 127526
+ ],
+ "mapped",
+ [
+ 28436
+ ]
+ ],
+ [
+ [
+ 127527,
+ 127527
+ ],
+ "mapped",
+ [
+ 25237
+ ]
+ ],
+ [
+ [
+ 127528,
+ 127528
+ ],
+ "mapped",
+ [
+ 25429
+ ]
+ ],
+ [
+ [
+ 127529,
+ 127529
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 127530,
+ 127530
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 127531,
+ 127531
+ ],
+ "mapped",
+ [
+ 36938
+ ]
+ ],
+ [
+ [
+ 127532,
+ 127532
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 127533,
+ 127533
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 127534,
+ 127534
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 127535,
+ 127535
+ ],
+ "mapped",
+ [
+ 25351
+ ]
+ ],
+ [
+ [
+ 127536,
+ 127536
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 127537,
+ 127537
+ ],
+ "mapped",
+ [
+ 25171
+ ]
+ ],
+ [
+ [
+ 127538,
+ 127538
+ ],
+ "mapped",
+ [
+ 31105
+ ]
+ ],
+ [
+ [
+ 127539,
+ 127539
+ ],
+ "mapped",
+ [
+ 31354
+ ]
+ ],
+ [
+ [
+ 127540,
+ 127540
+ ],
+ "mapped",
+ [
+ 21512
+ ]
+ ],
+ [
+ [
+ 127541,
+ 127541
+ ],
+ "mapped",
+ [
+ 28288
+ ]
+ ],
+ [
+ [
+ 127542,
+ 127542
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 127543,
+ 127543
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 127544,
+ 127544
+ ],
+ "mapped",
+ [
+ 30003
+ ]
+ ],
+ [
+ [
+ 127545,
+ 127545
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 127546,
+ 127546
+ ],
+ "mapped",
+ [
+ 21942
+ ]
+ ],
+ [
+ [
+ 127547,
+ 127551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127552,
+ 127552
+ ],
+ "mapped",
+ [
+ 12308,
+ 26412,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127553,
+ 127553
+ ],
+ "mapped",
+ [
+ 12308,
+ 19977,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127554,
+ 127554
+ ],
+ "mapped",
+ [
+ 12308,
+ 20108,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127555,
+ 127555
+ ],
+ "mapped",
+ [
+ 12308,
+ 23433,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127556,
+ 127556
+ ],
+ "mapped",
+ [
+ 12308,
+ 28857,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127557,
+ 127557
+ ],
+ "mapped",
+ [
+ 12308,
+ 25171,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127558,
+ 127558
+ ],
+ "mapped",
+ [
+ 12308,
+ 30423,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127559,
+ 127559
+ ],
+ "mapped",
+ [
+ 12308,
+ 21213,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127560,
+ 127560
+ ],
+ "mapped",
+ [
+ 12308,
+ 25943,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127561,
+ 127567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127568,
+ 127568
+ ],
+ "mapped",
+ [
+ 24471
+ ]
+ ],
+ [
+ [
+ 127569,
+ 127569
+ ],
+ "mapped",
+ [
+ 21487
+ ]
+ ],
+ [
+ [
+ 127570,
+ 127743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127744,
+ 127776
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127777,
+ 127788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127789,
+ 127791
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127792,
+ 127797
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127798,
+ 127798
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127799,
+ 127868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127869,
+ 127869
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127870,
+ 127871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127872,
+ 127891
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127892,
+ 127903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127904,
+ 127940
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127941,
+ 127941
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127942,
+ 127946
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127947,
+ 127950
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127951,
+ 127955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127956,
+ 127967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127968,
+ 127984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127985,
+ 127991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127992,
+ 127999
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128000,
+ 128062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128063,
+ 128063
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128064,
+ 128064
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128065,
+ 128065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128066,
+ 128247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128248,
+ 128248
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128249,
+ 128252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128253,
+ 128254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128255,
+ 128255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128256,
+ 128317
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128318,
+ 128319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128320,
+ 128323
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128324,
+ 128330
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128331,
+ 128335
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128336,
+ 128359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128360,
+ 128377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128378,
+ 128378
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128379,
+ 128419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128420,
+ 128420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128421,
+ 128506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128507,
+ 128511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128512,
+ 128512
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128513,
+ 128528
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128529,
+ 128529
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128530,
+ 128532
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128533,
+ 128533
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128534,
+ 128534
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128535,
+ 128535
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128536,
+ 128536
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128537,
+ 128537
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128538,
+ 128538
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128539,
+ 128539
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128540,
+ 128542
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128543,
+ 128543
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128544,
+ 128549
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128550,
+ 128551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128552,
+ 128555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128556,
+ 128556
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128557,
+ 128557
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128558,
+ 128559
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128560,
+ 128563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128564,
+ 128564
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128565,
+ 128576
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128577,
+ 128578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128579,
+ 128580
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128581,
+ 128591
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128592,
+ 128639
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128640,
+ 128709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128710,
+ 128719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128720,
+ 128720
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128721,
+ 128735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128736,
+ 128748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128749,
+ 128751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128752,
+ 128755
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128756,
+ 128767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128768,
+ 128883
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128884,
+ 128895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128896,
+ 128980
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128981,
+ 129023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129024,
+ 129035
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129036,
+ 129039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129040,
+ 129095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129096,
+ 129103
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129104,
+ 129113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129114,
+ 129119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129120,
+ 129159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129160,
+ 129167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129168,
+ 129197
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129198,
+ 129295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129296,
+ 129304
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129305,
+ 129407
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129408,
+ 129412
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129413,
+ 129471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129472,
+ 129472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129473,
+ 131069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131070,
+ 131071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131072,
+ 173782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 173783,
+ 173823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 173824,
+ 177972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 177973,
+ 177983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 177984,
+ 178205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 178206,
+ 178207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 178208,
+ 183969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 183970,
+ 194559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194560,
+ 194560
+ ],
+ "mapped",
+ [
+ 20029
+ ]
+ ],
+ [
+ [
+ 194561,
+ 194561
+ ],
+ "mapped",
+ [
+ 20024
+ ]
+ ],
+ [
+ [
+ 194562,
+ 194562
+ ],
+ "mapped",
+ [
+ 20033
+ ]
+ ],
+ [
+ [
+ 194563,
+ 194563
+ ],
+ "mapped",
+ [
+ 131362
+ ]
+ ],
+ [
+ [
+ 194564,
+ 194564
+ ],
+ "mapped",
+ [
+ 20320
+ ]
+ ],
+ [
+ [
+ 194565,
+ 194565
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 194566,
+ 194566
+ ],
+ "mapped",
+ [
+ 20411
+ ]
+ ],
+ [
+ [
+ 194567,
+ 194567
+ ],
+ "mapped",
+ [
+ 20482
+ ]
+ ],
+ [
+ [
+ 194568,
+ 194568
+ ],
+ "mapped",
+ [
+ 20602
+ ]
+ ],
+ [
+ [
+ 194569,
+ 194569
+ ],
+ "mapped",
+ [
+ 20633
+ ]
+ ],
+ [
+ [
+ 194570,
+ 194570
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 194571,
+ 194571
+ ],
+ "mapped",
+ [
+ 20687
+ ]
+ ],
+ [
+ [
+ 194572,
+ 194572
+ ],
+ "mapped",
+ [
+ 13470
+ ]
+ ],
+ [
+ [
+ 194573,
+ 194573
+ ],
+ "mapped",
+ [
+ 132666
+ ]
+ ],
+ [
+ [
+ 194574,
+ 194574
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 194575,
+ 194575
+ ],
+ "mapped",
+ [
+ 20820
+ ]
+ ],
+ [
+ [
+ 194576,
+ 194576
+ ],
+ "mapped",
+ [
+ 20836
+ ]
+ ],
+ [
+ [
+ 194577,
+ 194577
+ ],
+ "mapped",
+ [
+ 20855
+ ]
+ ],
+ [
+ [
+ 194578,
+ 194578
+ ],
+ "mapped",
+ [
+ 132380
+ ]
+ ],
+ [
+ [
+ 194579,
+ 194579
+ ],
+ "mapped",
+ [
+ 13497
+ ]
+ ],
+ [
+ [
+ 194580,
+ 194580
+ ],
+ "mapped",
+ [
+ 20839
+ ]
+ ],
+ [
+ [
+ 194581,
+ 194581
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 194582,
+ 194582
+ ],
+ "mapped",
+ [
+ 132427
+ ]
+ ],
+ [
+ [
+ 194583,
+ 194583
+ ],
+ "mapped",
+ [
+ 20887
+ ]
+ ],
+ [
+ [
+ 194584,
+ 194584
+ ],
+ "mapped",
+ [
+ 20900
+ ]
+ ],
+ [
+ [
+ 194585,
+ 194585
+ ],
+ "mapped",
+ [
+ 20172
+ ]
+ ],
+ [
+ [
+ 194586,
+ 194586
+ ],
+ "mapped",
+ [
+ 20908
+ ]
+ ],
+ [
+ [
+ 194587,
+ 194587
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 194588,
+ 194588
+ ],
+ "mapped",
+ [
+ 168415
+ ]
+ ],
+ [
+ [
+ 194589,
+ 194589
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 194590,
+ 194590
+ ],
+ "mapped",
+ [
+ 20995
+ ]
+ ],
+ [
+ [
+ 194591,
+ 194591
+ ],
+ "mapped",
+ [
+ 13535
+ ]
+ ],
+ [
+ [
+ 194592,
+ 194592
+ ],
+ "mapped",
+ [
+ 21051
+ ]
+ ],
+ [
+ [
+ 194593,
+ 194593
+ ],
+ "mapped",
+ [
+ 21062
+ ]
+ ],
+ [
+ [
+ 194594,
+ 194594
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 194595,
+ 194595
+ ],
+ "mapped",
+ [
+ 21111
+ ]
+ ],
+ [
+ [
+ 194596,
+ 194596
+ ],
+ "mapped",
+ [
+ 13589
+ ]
+ ],
+ [
+ [
+ 194597,
+ 194597
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 194598,
+ 194598
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 194599,
+ 194599
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 194600,
+ 194600
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 194601,
+ 194601
+ ],
+ "mapped",
+ [
+ 21253
+ ]
+ ],
+ [
+ [
+ 194602,
+ 194602
+ ],
+ "mapped",
+ [
+ 21254
+ ]
+ ],
+ [
+ [
+ 194603,
+ 194603
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 194604,
+ 194604
+ ],
+ "mapped",
+ [
+ 21321
+ ]
+ ],
+ [
+ [
+ 194605,
+ 194605
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 194606,
+ 194606
+ ],
+ "mapped",
+ [
+ 21338
+ ]
+ ],
+ [
+ [
+ 194607,
+ 194607
+ ],
+ "mapped",
+ [
+ 21363
+ ]
+ ],
+ [
+ [
+ 194608,
+ 194608
+ ],
+ "mapped",
+ [
+ 21373
+ ]
+ ],
+ [
+ [
+ 194609,
+ 194611
+ ],
+ "mapped",
+ [
+ 21375
+ ]
+ ],
+ [
+ [
+ 194612,
+ 194612
+ ],
+ "mapped",
+ [
+ 133676
+ ]
+ ],
+ [
+ [
+ 194613,
+ 194613
+ ],
+ "mapped",
+ [
+ 28784
+ ]
+ ],
+ [
+ [
+ 194614,
+ 194614
+ ],
+ "mapped",
+ [
+ 21450
+ ]
+ ],
+ [
+ [
+ 194615,
+ 194615
+ ],
+ "mapped",
+ [
+ 21471
+ ]
+ ],
+ [
+ [
+ 194616,
+ 194616
+ ],
+ "mapped",
+ [
+ 133987
+ ]
+ ],
+ [
+ [
+ 194617,
+ 194617
+ ],
+ "mapped",
+ [
+ 21483
+ ]
+ ],
+ [
+ [
+ 194618,
+ 194618
+ ],
+ "mapped",
+ [
+ 21489
+ ]
+ ],
+ [
+ [
+ 194619,
+ 194619
+ ],
+ "mapped",
+ [
+ 21510
+ ]
+ ],
+ [
+ [
+ 194620,
+ 194620
+ ],
+ "mapped",
+ [
+ 21662
+ ]
+ ],
+ [
+ [
+ 194621,
+ 194621
+ ],
+ "mapped",
+ [
+ 21560
+ ]
+ ],
+ [
+ [
+ 194622,
+ 194622
+ ],
+ "mapped",
+ [
+ 21576
+ ]
+ ],
+ [
+ [
+ 194623,
+ 194623
+ ],
+ "mapped",
+ [
+ 21608
+ ]
+ ],
+ [
+ [
+ 194624,
+ 194624
+ ],
+ "mapped",
+ [
+ 21666
+ ]
+ ],
+ [
+ [
+ 194625,
+ 194625
+ ],
+ "mapped",
+ [
+ 21750
+ ]
+ ],
+ [
+ [
+ 194626,
+ 194626
+ ],
+ "mapped",
+ [
+ 21776
+ ]
+ ],
+ [
+ [
+ 194627,
+ 194627
+ ],
+ "mapped",
+ [
+ 21843
+ ]
+ ],
+ [
+ [
+ 194628,
+ 194628
+ ],
+ "mapped",
+ [
+ 21859
+ ]
+ ],
+ [
+ [
+ 194629,
+ 194630
+ ],
+ "mapped",
+ [
+ 21892
+ ]
+ ],
+ [
+ [
+ 194631,
+ 194631
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 194632,
+ 194632
+ ],
+ "mapped",
+ [
+ 21931
+ ]
+ ],
+ [
+ [
+ 194633,
+ 194633
+ ],
+ "mapped",
+ [
+ 21939
+ ]
+ ],
+ [
+ [
+ 194634,
+ 194634
+ ],
+ "mapped",
+ [
+ 21954
+ ]
+ ],
+ [
+ [
+ 194635,
+ 194635
+ ],
+ "mapped",
+ [
+ 22294
+ ]
+ ],
+ [
+ [
+ 194636,
+ 194636
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 194637,
+ 194637
+ ],
+ "mapped",
+ [
+ 22295
+ ]
+ ],
+ [
+ [
+ 194638,
+ 194638
+ ],
+ "mapped",
+ [
+ 22097
+ ]
+ ],
+ [
+ [
+ 194639,
+ 194639
+ ],
+ "mapped",
+ [
+ 22132
+ ]
+ ],
+ [
+ [
+ 194640,
+ 194640
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 194641,
+ 194641
+ ],
+ "mapped",
+ [
+ 22766
+ ]
+ ],
+ [
+ [
+ 194642,
+ 194642
+ ],
+ "mapped",
+ [
+ 22478
+ ]
+ ],
+ [
+ [
+ 194643,
+ 194643
+ ],
+ "mapped",
+ [
+ 22516
+ ]
+ ],
+ [
+ [
+ 194644,
+ 194644
+ ],
+ "mapped",
+ [
+ 22541
+ ]
+ ],
+ [
+ [
+ 194645,
+ 194645
+ ],
+ "mapped",
+ [
+ 22411
+ ]
+ ],
+ [
+ [
+ 194646,
+ 194646
+ ],
+ "mapped",
+ [
+ 22578
+ ]
+ ],
+ [
+ [
+ 194647,
+ 194647
+ ],
+ "mapped",
+ [
+ 22577
+ ]
+ ],
+ [
+ [
+ 194648,
+ 194648
+ ],
+ "mapped",
+ [
+ 22700
+ ]
+ ],
+ [
+ [
+ 194649,
+ 194649
+ ],
+ "mapped",
+ [
+ 136420
+ ]
+ ],
+ [
+ [
+ 194650,
+ 194650
+ ],
+ "mapped",
+ [
+ 22770
+ ]
+ ],
+ [
+ [
+ 194651,
+ 194651
+ ],
+ "mapped",
+ [
+ 22775
+ ]
+ ],
+ [
+ [
+ 194652,
+ 194652
+ ],
+ "mapped",
+ [
+ 22790
+ ]
+ ],
+ [
+ [
+ 194653,
+ 194653
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 194654,
+ 194654
+ ],
+ "mapped",
+ [
+ 22818
+ ]
+ ],
+ [
+ [
+ 194655,
+ 194655
+ ],
+ "mapped",
+ [
+ 22882
+ ]
+ ],
+ [
+ [
+ 194656,
+ 194656
+ ],
+ "mapped",
+ [
+ 136872
+ ]
+ ],
+ [
+ [
+ 194657,
+ 194657
+ ],
+ "mapped",
+ [
+ 136938
+ ]
+ ],
+ [
+ [
+ 194658,
+ 194658
+ ],
+ "mapped",
+ [
+ 23020
+ ]
+ ],
+ [
+ [
+ 194659,
+ 194659
+ ],
+ "mapped",
+ [
+ 23067
+ ]
+ ],
+ [
+ [
+ 194660,
+ 194660
+ ],
+ "mapped",
+ [
+ 23079
+ ]
+ ],
+ [
+ [
+ 194661,
+ 194661
+ ],
+ "mapped",
+ [
+ 23000
+ ]
+ ],
+ [
+ [
+ 194662,
+ 194662
+ ],
+ "mapped",
+ [
+ 23142
+ ]
+ ],
+ [
+ [
+ 194663,
+ 194663
+ ],
+ "mapped",
+ [
+ 14062
+ ]
+ ],
+ [
+ [
+ 194664,
+ 194664
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194665,
+ 194665
+ ],
+ "mapped",
+ [
+ 23304
+ ]
+ ],
+ [
+ [
+ 194666,
+ 194667
+ ],
+ "mapped",
+ [
+ 23358
+ ]
+ ],
+ [
+ [
+ 194668,
+ 194668
+ ],
+ "mapped",
+ [
+ 137672
+ ]
+ ],
+ [
+ [
+ 194669,
+ 194669
+ ],
+ "mapped",
+ [
+ 23491
+ ]
+ ],
+ [
+ [
+ 194670,
+ 194670
+ ],
+ "mapped",
+ [
+ 23512
+ ]
+ ],
+ [
+ [
+ 194671,
+ 194671
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 194672,
+ 194672
+ ],
+ "mapped",
+ [
+ 23539
+ ]
+ ],
+ [
+ [
+ 194673,
+ 194673
+ ],
+ "mapped",
+ [
+ 138008
+ ]
+ ],
+ [
+ [
+ 194674,
+ 194674
+ ],
+ "mapped",
+ [
+ 23551
+ ]
+ ],
+ [
+ [
+ 194675,
+ 194675
+ ],
+ "mapped",
+ [
+ 23558
+ ]
+ ],
+ [
+ [
+ 194676,
+ 194676
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194677,
+ 194677
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 194678,
+ 194678
+ ],
+ "mapped",
+ [
+ 14209
+ ]
+ ],
+ [
+ [
+ 194679,
+ 194679
+ ],
+ "mapped",
+ [
+ 23648
+ ]
+ ],
+ [
+ [
+ 194680,
+ 194680
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 194681,
+ 194681
+ ],
+ "mapped",
+ [
+ 23744
+ ]
+ ],
+ [
+ [
+ 194682,
+ 194682
+ ],
+ "mapped",
+ [
+ 23693
+ ]
+ ],
+ [
+ [
+ 194683,
+ 194683
+ ],
+ "mapped",
+ [
+ 138724
+ ]
+ ],
+ [
+ [
+ 194684,
+ 194684
+ ],
+ "mapped",
+ [
+ 23875
+ ]
+ ],
+ [
+ [
+ 194685,
+ 194685
+ ],
+ "mapped",
+ [
+ 138726
+ ]
+ ],
+ [
+ [
+ 194686,
+ 194686
+ ],
+ "mapped",
+ [
+ 23918
+ ]
+ ],
+ [
+ [
+ 194687,
+ 194687
+ ],
+ "mapped",
+ [
+ 23915
+ ]
+ ],
+ [
+ [
+ 194688,
+ 194688
+ ],
+ "mapped",
+ [
+ 23932
+ ]
+ ],
+ [
+ [
+ 194689,
+ 194689
+ ],
+ "mapped",
+ [
+ 24033
+ ]
+ ],
+ [
+ [
+ 194690,
+ 194690
+ ],
+ "mapped",
+ [
+ 24034
+ ]
+ ],
+ [
+ [
+ 194691,
+ 194691
+ ],
+ "mapped",
+ [
+ 14383
+ ]
+ ],
+ [
+ [
+ 194692,
+ 194692
+ ],
+ "mapped",
+ [
+ 24061
+ ]
+ ],
+ [
+ [
+ 194693,
+ 194693
+ ],
+ "mapped",
+ [
+ 24104
+ ]
+ ],
+ [
+ [
+ 194694,
+ 194694
+ ],
+ "mapped",
+ [
+ 24125
+ ]
+ ],
+ [
+ [
+ 194695,
+ 194695
+ ],
+ "mapped",
+ [
+ 24169
+ ]
+ ],
+ [
+ [
+ 194696,
+ 194696
+ ],
+ "mapped",
+ [
+ 14434
+ ]
+ ],
+ [
+ [
+ 194697,
+ 194697
+ ],
+ "mapped",
+ [
+ 139651
+ ]
+ ],
+ [
+ [
+ 194698,
+ 194698
+ ],
+ "mapped",
+ [
+ 14460
+ ]
+ ],
+ [
+ [
+ 194699,
+ 194699
+ ],
+ "mapped",
+ [
+ 24240
+ ]
+ ],
+ [
+ [
+ 194700,
+ 194700
+ ],
+ "mapped",
+ [
+ 24243
+ ]
+ ],
+ [
+ [
+ 194701,
+ 194701
+ ],
+ "mapped",
+ [
+ 24246
+ ]
+ ],
+ [
+ [
+ 194702,
+ 194702
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 194703,
+ 194703
+ ],
+ "mapped",
+ [
+ 172946
+ ]
+ ],
+ [
+ [
+ 194704,
+ 194704
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 194705,
+ 194706
+ ],
+ "mapped",
+ [
+ 140081
+ ]
+ ],
+ [
+ [
+ 194707,
+ 194707
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194708,
+ 194709
+ ],
+ "mapped",
+ [
+ 24354
+ ]
+ ],
+ [
+ [
+ 194710,
+ 194710
+ ],
+ "mapped",
+ [
+ 14535
+ ]
+ ],
+ [
+ [
+ 194711,
+ 194711
+ ],
+ "mapped",
+ [
+ 144056
+ ]
+ ],
+ [
+ [
+ 194712,
+ 194712
+ ],
+ "mapped",
+ [
+ 156122
+ ]
+ ],
+ [
+ [
+ 194713,
+ 194713
+ ],
+ "mapped",
+ [
+ 24418
+ ]
+ ],
+ [
+ [
+ 194714,
+ 194714
+ ],
+ "mapped",
+ [
+ 24427
+ ]
+ ],
+ [
+ [
+ 194715,
+ 194715
+ ],
+ "mapped",
+ [
+ 14563
+ ]
+ ],
+ [
+ [
+ 194716,
+ 194716
+ ],
+ "mapped",
+ [
+ 24474
+ ]
+ ],
+ [
+ [
+ 194717,
+ 194717
+ ],
+ "mapped",
+ [
+ 24525
+ ]
+ ],
+ [
+ [
+ 194718,
+ 194718
+ ],
+ "mapped",
+ [
+ 24535
+ ]
+ ],
+ [
+ [
+ 194719,
+ 194719
+ ],
+ "mapped",
+ [
+ 24569
+ ]
+ ],
+ [
+ [
+ 194720,
+ 194720
+ ],
+ "mapped",
+ [
+ 24705
+ ]
+ ],
+ [
+ [
+ 194721,
+ 194721
+ ],
+ "mapped",
+ [
+ 14650
+ ]
+ ],
+ [
+ [
+ 194722,
+ 194722
+ ],
+ "mapped",
+ [
+ 14620
+ ]
+ ],
+ [
+ [
+ 194723,
+ 194723
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 194724,
+ 194724
+ ],
+ "mapped",
+ [
+ 141012
+ ]
+ ],
+ [
+ [
+ 194725,
+ 194725
+ ],
+ "mapped",
+ [
+ 24775
+ ]
+ ],
+ [
+ [
+ 194726,
+ 194726
+ ],
+ "mapped",
+ [
+ 24904
+ ]
+ ],
+ [
+ [
+ 194727,
+ 194727
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194728,
+ 194728
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 194729,
+ 194729
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194730,
+ 194730
+ ],
+ "mapped",
+ [
+ 24954
+ ]
+ ],
+ [
+ [
+ 194731,
+ 194731
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 194732,
+ 194732
+ ],
+ "mapped",
+ [
+ 25010
+ ]
+ ],
+ [
+ [
+ 194733,
+ 194733
+ ],
+ "mapped",
+ [
+ 24996
+ ]
+ ],
+ [
+ [
+ 194734,
+ 194734
+ ],
+ "mapped",
+ [
+ 25007
+ ]
+ ],
+ [
+ [
+ 194735,
+ 194735
+ ],
+ "mapped",
+ [
+ 25054
+ ]
+ ],
+ [
+ [
+ 194736,
+ 194736
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 194737,
+ 194737
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 194738,
+ 194738
+ ],
+ "mapped",
+ [
+ 25104
+ ]
+ ],
+ [
+ [
+ 194739,
+ 194739
+ ],
+ "mapped",
+ [
+ 25115
+ ]
+ ],
+ [
+ [
+ 194740,
+ 194740
+ ],
+ "mapped",
+ [
+ 25181
+ ]
+ ],
+ [
+ [
+ 194741,
+ 194741
+ ],
+ "mapped",
+ [
+ 25265
+ ]
+ ],
+ [
+ [
+ 194742,
+ 194742
+ ],
+ "mapped",
+ [
+ 25300
+ ]
+ ],
+ [
+ [
+ 194743,
+ 194743
+ ],
+ "mapped",
+ [
+ 25424
+ ]
+ ],
+ [
+ [
+ 194744,
+ 194744
+ ],
+ "mapped",
+ [
+ 142092
+ ]
+ ],
+ [
+ [
+ 194745,
+ 194745
+ ],
+ "mapped",
+ [
+ 25405
+ ]
+ ],
+ [
+ [
+ 194746,
+ 194746
+ ],
+ "mapped",
+ [
+ 25340
+ ]
+ ],
+ [
+ [
+ 194747,
+ 194747
+ ],
+ "mapped",
+ [
+ 25448
+ ]
+ ],
+ [
+ [
+ 194748,
+ 194748
+ ],
+ "mapped",
+ [
+ 25475
+ ]
+ ],
+ [
+ [
+ 194749,
+ 194749
+ ],
+ "mapped",
+ [
+ 25572
+ ]
+ ],
+ [
+ [
+ 194750,
+ 194750
+ ],
+ "mapped",
+ [
+ 142321
+ ]
+ ],
+ [
+ [
+ 194751,
+ 194751
+ ],
+ "mapped",
+ [
+ 25634
+ ]
+ ],
+ [
+ [
+ 194752,
+ 194752
+ ],
+ "mapped",
+ [
+ 25541
+ ]
+ ],
+ [
+ [
+ 194753,
+ 194753
+ ],
+ "mapped",
+ [
+ 25513
+ ]
+ ],
+ [
+ [
+ 194754,
+ 194754
+ ],
+ "mapped",
+ [
+ 14894
+ ]
+ ],
+ [
+ [
+ 194755,
+ 194755
+ ],
+ "mapped",
+ [
+ 25705
+ ]
+ ],
+ [
+ [
+ 194756,
+ 194756
+ ],
+ "mapped",
+ [
+ 25726
+ ]
+ ],
+ [
+ [
+ 194757,
+ 194757
+ ],
+ "mapped",
+ [
+ 25757
+ ]
+ ],
+ [
+ [
+ 194758,
+ 194758
+ ],
+ "mapped",
+ [
+ 25719
+ ]
+ ],
+ [
+ [
+ 194759,
+ 194759
+ ],
+ "mapped",
+ [
+ 14956
+ ]
+ ],
+ [
+ [
+ 194760,
+ 194760
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 194761,
+ 194761
+ ],
+ "mapped",
+ [
+ 25964
+ ]
+ ],
+ [
+ [
+ 194762,
+ 194762
+ ],
+ "mapped",
+ [
+ 143370
+ ]
+ ],
+ [
+ [
+ 194763,
+ 194763
+ ],
+ "mapped",
+ [
+ 26083
+ ]
+ ],
+ [
+ [
+ 194764,
+ 194764
+ ],
+ "mapped",
+ [
+ 26360
+ ]
+ ],
+ [
+ [
+ 194765,
+ 194765
+ ],
+ "mapped",
+ [
+ 26185
+ ]
+ ],
+ [
+ [
+ 194766,
+ 194766
+ ],
+ "mapped",
+ [
+ 15129
+ ]
+ ],
+ [
+ [
+ 194767,
+ 194767
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 194768,
+ 194768
+ ],
+ "mapped",
+ [
+ 15112
+ ]
+ ],
+ [
+ [
+ 194769,
+ 194769
+ ],
+ "mapped",
+ [
+ 15076
+ ]
+ ],
+ [
+ [
+ 194770,
+ 194770
+ ],
+ "mapped",
+ [
+ 20882
+ ]
+ ],
+ [
+ [
+ 194771,
+ 194771
+ ],
+ "mapped",
+ [
+ 20885
+ ]
+ ],
+ [
+ [
+ 194772,
+ 194772
+ ],
+ "mapped",
+ [
+ 26368
+ ]
+ ],
+ [
+ [
+ 194773,
+ 194773
+ ],
+ "mapped",
+ [
+ 26268
+ ]
+ ],
+ [
+ [
+ 194774,
+ 194774
+ ],
+ "mapped",
+ [
+ 32941
+ ]
+ ],
+ [
+ [
+ 194775,
+ 194775
+ ],
+ "mapped",
+ [
+ 17369
+ ]
+ ],
+ [
+ [
+ 194776,
+ 194776
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 194777,
+ 194777
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 194778,
+ 194778
+ ],
+ "mapped",
+ [
+ 26401
+ ]
+ ],
+ [
+ [
+ 194779,
+ 194779
+ ],
+ "mapped",
+ [
+ 26462
+ ]
+ ],
+ [
+ [
+ 194780,
+ 194780
+ ],
+ "mapped",
+ [
+ 26451
+ ]
+ ],
+ [
+ [
+ 194781,
+ 194781
+ ],
+ "mapped",
+ [
+ 144323
+ ]
+ ],
+ [
+ [
+ 194782,
+ 194782
+ ],
+ "mapped",
+ [
+ 15177
+ ]
+ ],
+ [
+ [
+ 194783,
+ 194783
+ ],
+ "mapped",
+ [
+ 26618
+ ]
+ ],
+ [
+ [
+ 194784,
+ 194784
+ ],
+ "mapped",
+ [
+ 26501
+ ]
+ ],
+ [
+ [
+ 194785,
+ 194785
+ ],
+ "mapped",
+ [
+ 26706
+ ]
+ ],
+ [
+ [
+ 194786,
+ 194786
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 194787,
+ 194787
+ ],
+ "mapped",
+ [
+ 144493
+ ]
+ ],
+ [
+ [
+ 194788,
+ 194788
+ ],
+ "mapped",
+ [
+ 26766
+ ]
+ ],
+ [
+ [
+ 194789,
+ 194789
+ ],
+ "mapped",
+ [
+ 26655
+ ]
+ ],
+ [
+ [
+ 194790,
+ 194790
+ ],
+ "mapped",
+ [
+ 26900
+ ]
+ ],
+ [
+ [
+ 194791,
+ 194791
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 194792,
+ 194792
+ ],
+ "mapped",
+ [
+ 26946
+ ]
+ ],
+ [
+ [
+ 194793,
+ 194793
+ ],
+ "mapped",
+ [
+ 27043
+ ]
+ ],
+ [
+ [
+ 194794,
+ 194794
+ ],
+ "mapped",
+ [
+ 27114
+ ]
+ ],
+ [
+ [
+ 194795,
+ 194795
+ ],
+ "mapped",
+ [
+ 27304
+ ]
+ ],
+ [
+ [
+ 194796,
+ 194796
+ ],
+ "mapped",
+ [
+ 145059
+ ]
+ ],
+ [
+ [
+ 194797,
+ 194797
+ ],
+ "mapped",
+ [
+ 27355
+ ]
+ ],
+ [
+ [
+ 194798,
+ 194798
+ ],
+ "mapped",
+ [
+ 15384
+ ]
+ ],
+ [
+ [
+ 194799,
+ 194799
+ ],
+ "mapped",
+ [
+ 27425
+ ]
+ ],
+ [
+ [
+ 194800,
+ 194800
+ ],
+ "mapped",
+ [
+ 145575
+ ]
+ ],
+ [
+ [
+ 194801,
+ 194801
+ ],
+ "mapped",
+ [
+ 27476
+ ]
+ ],
+ [
+ [
+ 194802,
+ 194802
+ ],
+ "mapped",
+ [
+ 15438
+ ]
+ ],
+ [
+ [
+ 194803,
+ 194803
+ ],
+ "mapped",
+ [
+ 27506
+ ]
+ ],
+ [
+ [
+ 194804,
+ 194804
+ ],
+ "mapped",
+ [
+ 27551
+ ]
+ ],
+ [
+ [
+ 194805,
+ 194805
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 194806,
+ 194806
+ ],
+ "mapped",
+ [
+ 27579
+ ]
+ ],
+ [
+ [
+ 194807,
+ 194807
+ ],
+ "mapped",
+ [
+ 146061
+ ]
+ ],
+ [
+ [
+ 194808,
+ 194808
+ ],
+ "mapped",
+ [
+ 138507
+ ]
+ ],
+ [
+ [
+ 194809,
+ 194809
+ ],
+ "mapped",
+ [
+ 146170
+ ]
+ ],
+ [
+ [
+ 194810,
+ 194810
+ ],
+ "mapped",
+ [
+ 27726
+ ]
+ ],
+ [
+ [
+ 194811,
+ 194811
+ ],
+ "mapped",
+ [
+ 146620
+ ]
+ ],
+ [
+ [
+ 194812,
+ 194812
+ ],
+ "mapped",
+ [
+ 27839
+ ]
+ ],
+ [
+ [
+ 194813,
+ 194813
+ ],
+ "mapped",
+ [
+ 27853
+ ]
+ ],
+ [
+ [
+ 194814,
+ 194814
+ ],
+ "mapped",
+ [
+ 27751
+ ]
+ ],
+ [
+ [
+ 194815,
+ 194815
+ ],
+ "mapped",
+ [
+ 27926
+ ]
+ ],
+ [
+ [
+ 194816,
+ 194816
+ ],
+ "mapped",
+ [
+ 27966
+ ]
+ ],
+ [
+ [
+ 194817,
+ 194817
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 194818,
+ 194818
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 194819,
+ 194819
+ ],
+ "mapped",
+ [
+ 28009
+ ]
+ ],
+ [
+ [
+ 194820,
+ 194820
+ ],
+ "mapped",
+ [
+ 28024
+ ]
+ ],
+ [
+ [
+ 194821,
+ 194821
+ ],
+ "mapped",
+ [
+ 28037
+ ]
+ ],
+ [
+ [
+ 194822,
+ 194822
+ ],
+ "mapped",
+ [
+ 146718
+ ]
+ ],
+ [
+ [
+ 194823,
+ 194823
+ ],
+ "mapped",
+ [
+ 27956
+ ]
+ ],
+ [
+ [
+ 194824,
+ 194824
+ ],
+ "mapped",
+ [
+ 28207
+ ]
+ ],
+ [
+ [
+ 194825,
+ 194825
+ ],
+ "mapped",
+ [
+ 28270
+ ]
+ ],
+ [
+ [
+ 194826,
+ 194826
+ ],
+ "mapped",
+ [
+ 15667
+ ]
+ ],
+ [
+ [
+ 194827,
+ 194827
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 194828,
+ 194828
+ ],
+ "mapped",
+ [
+ 28359
+ ]
+ ],
+ [
+ [
+ 194829,
+ 194829
+ ],
+ "mapped",
+ [
+ 147153
+ ]
+ ],
+ [
+ [
+ 194830,
+ 194830
+ ],
+ "mapped",
+ [
+ 28153
+ ]
+ ],
+ [
+ [
+ 194831,
+ 194831
+ ],
+ "mapped",
+ [
+ 28526
+ ]
+ ],
+ [
+ [
+ 194832,
+ 194832
+ ],
+ "mapped",
+ [
+ 147294
+ ]
+ ],
+ [
+ [
+ 194833,
+ 194833
+ ],
+ "mapped",
+ [
+ 147342
+ ]
+ ],
+ [
+ [
+ 194834,
+ 194834
+ ],
+ "mapped",
+ [
+ 28614
+ ]
+ ],
+ [
+ [
+ 194835,
+ 194835
+ ],
+ "mapped",
+ [
+ 28729
+ ]
+ ],
+ [
+ [
+ 194836,
+ 194836
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 194837,
+ 194837
+ ],
+ "mapped",
+ [
+ 28699
+ ]
+ ],
+ [
+ [
+ 194838,
+ 194838
+ ],
+ "mapped",
+ [
+ 15766
+ ]
+ ],
+ [
+ [
+ 194839,
+ 194839
+ ],
+ "mapped",
+ [
+ 28746
+ ]
+ ],
+ [
+ [
+ 194840,
+ 194840
+ ],
+ "mapped",
+ [
+ 28797
+ ]
+ ],
+ [
+ [
+ 194841,
+ 194841
+ ],
+ "mapped",
+ [
+ 28791
+ ]
+ ],
+ [
+ [
+ 194842,
+ 194842
+ ],
+ "mapped",
+ [
+ 28845
+ ]
+ ],
+ [
+ [
+ 194843,
+ 194843
+ ],
+ "mapped",
+ [
+ 132389
+ ]
+ ],
+ [
+ [
+ 194844,
+ 194844
+ ],
+ "mapped",
+ [
+ 28997
+ ]
+ ],
+ [
+ [
+ 194845,
+ 194845
+ ],
+ "mapped",
+ [
+ 148067
+ ]
+ ],
+ [
+ [
+ 194846,
+ 194846
+ ],
+ "mapped",
+ [
+ 29084
+ ]
+ ],
+ [
+ [
+ 194847,
+ 194847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194848,
+ 194848
+ ],
+ "mapped",
+ [
+ 29224
+ ]
+ ],
+ [
+ [
+ 194849,
+ 194849
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 194850,
+ 194850
+ ],
+ "mapped",
+ [
+ 29264
+ ]
+ ],
+ [
+ [
+ 194851,
+ 194851
+ ],
+ "mapped",
+ [
+ 149000
+ ]
+ ],
+ [
+ [
+ 194852,
+ 194852
+ ],
+ "mapped",
+ [
+ 29312
+ ]
+ ],
+ [
+ [
+ 194853,
+ 194853
+ ],
+ "mapped",
+ [
+ 29333
+ ]
+ ],
+ [
+ [
+ 194854,
+ 194854
+ ],
+ "mapped",
+ [
+ 149301
+ ]
+ ],
+ [
+ [
+ 194855,
+ 194855
+ ],
+ "mapped",
+ [
+ 149524
+ ]
+ ],
+ [
+ [
+ 194856,
+ 194856
+ ],
+ "mapped",
+ [
+ 29562
+ ]
+ ],
+ [
+ [
+ 194857,
+ 194857
+ ],
+ "mapped",
+ [
+ 29579
+ ]
+ ],
+ [
+ [
+ 194858,
+ 194858
+ ],
+ "mapped",
+ [
+ 16044
+ ]
+ ],
+ [
+ [
+ 194859,
+ 194859
+ ],
+ "mapped",
+ [
+ 29605
+ ]
+ ],
+ [
+ [
+ 194860,
+ 194861
+ ],
+ "mapped",
+ [
+ 16056
+ ]
+ ],
+ [
+ [
+ 194862,
+ 194862
+ ],
+ "mapped",
+ [
+ 29767
+ ]
+ ],
+ [
+ [
+ 194863,
+ 194863
+ ],
+ "mapped",
+ [
+ 29788
+ ]
+ ],
+ [
+ [
+ 194864,
+ 194864
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 194865,
+ 194865
+ ],
+ "mapped",
+ [
+ 29829
+ ]
+ ],
+ [
+ [
+ 194866,
+ 194866
+ ],
+ "mapped",
+ [
+ 29898
+ ]
+ ],
+ [
+ [
+ 194867,
+ 194867
+ ],
+ "mapped",
+ [
+ 16155
+ ]
+ ],
+ [
+ [
+ 194868,
+ 194868
+ ],
+ "mapped",
+ [
+ 29988
+ ]
+ ],
+ [
+ [
+ 194869,
+ 194869
+ ],
+ "mapped",
+ [
+ 150582
+ ]
+ ],
+ [
+ [
+ 194870,
+ 194870
+ ],
+ "mapped",
+ [
+ 30014
+ ]
+ ],
+ [
+ [
+ 194871,
+ 194871
+ ],
+ "mapped",
+ [
+ 150674
+ ]
+ ],
+ [
+ [
+ 194872,
+ 194872
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 194873,
+ 194873
+ ],
+ "mapped",
+ [
+ 139679
+ ]
+ ],
+ [
+ [
+ 194874,
+ 194874
+ ],
+ "mapped",
+ [
+ 30224
+ ]
+ ],
+ [
+ [
+ 194875,
+ 194875
+ ],
+ "mapped",
+ [
+ 151457
+ ]
+ ],
+ [
+ [
+ 194876,
+ 194876
+ ],
+ "mapped",
+ [
+ 151480
+ ]
+ ],
+ [
+ [
+ 194877,
+ 194877
+ ],
+ "mapped",
+ [
+ 151620
+ ]
+ ],
+ [
+ [
+ 194878,
+ 194878
+ ],
+ "mapped",
+ [
+ 16380
+ ]
+ ],
+ [
+ [
+ 194879,
+ 194879
+ ],
+ "mapped",
+ [
+ 16392
+ ]
+ ],
+ [
+ [
+ 194880,
+ 194880
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 194881,
+ 194881
+ ],
+ "mapped",
+ [
+ 151795
+ ]
+ ],
+ [
+ [
+ 194882,
+ 194882
+ ],
+ "mapped",
+ [
+ 151794
+ ]
+ ],
+ [
+ [
+ 194883,
+ 194883
+ ],
+ "mapped",
+ [
+ 151833
+ ]
+ ],
+ [
+ [
+ 194884,
+ 194884
+ ],
+ "mapped",
+ [
+ 151859
+ ]
+ ],
+ [
+ [
+ 194885,
+ 194885
+ ],
+ "mapped",
+ [
+ 30494
+ ]
+ ],
+ [
+ [
+ 194886,
+ 194887
+ ],
+ "mapped",
+ [
+ 30495
+ ]
+ ],
+ [
+ [
+ 194888,
+ 194888
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 194889,
+ 194889
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 194890,
+ 194890
+ ],
+ "mapped",
+ [
+ 30603
+ ]
+ ],
+ [
+ [
+ 194891,
+ 194891
+ ],
+ "mapped",
+ [
+ 16454
+ ]
+ ],
+ [
+ [
+ 194892,
+ 194892
+ ],
+ "mapped",
+ [
+ 16534
+ ]
+ ],
+ [
+ [
+ 194893,
+ 194893
+ ],
+ "mapped",
+ [
+ 152605
+ ]
+ ],
+ [
+ [
+ 194894,
+ 194894
+ ],
+ "mapped",
+ [
+ 30798
+ ]
+ ],
+ [
+ [
+ 194895,
+ 194895
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 194896,
+ 194896
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 194897,
+ 194897
+ ],
+ "mapped",
+ [
+ 16611
+ ]
+ ],
+ [
+ [
+ 194898,
+ 194898
+ ],
+ "mapped",
+ [
+ 153126
+ ]
+ ],
+ [
+ [
+ 194899,
+ 194899
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 194900,
+ 194900
+ ],
+ "mapped",
+ [
+ 153242
+ ]
+ ],
+ [
+ [
+ 194901,
+ 194901
+ ],
+ "mapped",
+ [
+ 153285
+ ]
+ ],
+ [
+ [
+ 194902,
+ 194902
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 194903,
+ 194903
+ ],
+ "mapped",
+ [
+ 31211
+ ]
+ ],
+ [
+ [
+ 194904,
+ 194904
+ ],
+ "mapped",
+ [
+ 16687
+ ]
+ ],
+ [
+ [
+ 194905,
+ 194905
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 194906,
+ 194906
+ ],
+ "mapped",
+ [
+ 31306
+ ]
+ ],
+ [
+ [
+ 194907,
+ 194907
+ ],
+ "mapped",
+ [
+ 31311
+ ]
+ ],
+ [
+ [
+ 194908,
+ 194908
+ ],
+ "mapped",
+ [
+ 153980
+ ]
+ ],
+ [
+ [
+ 194909,
+ 194910
+ ],
+ "mapped",
+ [
+ 154279
+ ]
+ ],
+ [
+ [
+ 194911,
+ 194911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194912,
+ 194912
+ ],
+ "mapped",
+ [
+ 16898
+ ]
+ ],
+ [
+ [
+ 194913,
+ 194913
+ ],
+ "mapped",
+ [
+ 154539
+ ]
+ ],
+ [
+ [
+ 194914,
+ 194914
+ ],
+ "mapped",
+ [
+ 31686
+ ]
+ ],
+ [
+ [
+ 194915,
+ 194915
+ ],
+ "mapped",
+ [
+ 31689
+ ]
+ ],
+ [
+ [
+ 194916,
+ 194916
+ ],
+ "mapped",
+ [
+ 16935
+ ]
+ ],
+ [
+ [
+ 194917,
+ 194917
+ ],
+ "mapped",
+ [
+ 154752
+ ]
+ ],
+ [
+ [
+ 194918,
+ 194918
+ ],
+ "mapped",
+ [
+ 31954
+ ]
+ ],
+ [
+ [
+ 194919,
+ 194919
+ ],
+ "mapped",
+ [
+ 17056
+ ]
+ ],
+ [
+ [
+ 194920,
+ 194920
+ ],
+ "mapped",
+ [
+ 31976
+ ]
+ ],
+ [
+ [
+ 194921,
+ 194921
+ ],
+ "mapped",
+ [
+ 31971
+ ]
+ ],
+ [
+ [
+ 194922,
+ 194922
+ ],
+ "mapped",
+ [
+ 32000
+ ]
+ ],
+ [
+ [
+ 194923,
+ 194923
+ ],
+ "mapped",
+ [
+ 155526
+ ]
+ ],
+ [
+ [
+ 194924,
+ 194924
+ ],
+ "mapped",
+ [
+ 32099
+ ]
+ ],
+ [
+ [
+ 194925,
+ 194925
+ ],
+ "mapped",
+ [
+ 17153
+ ]
+ ],
+ [
+ [
+ 194926,
+ 194926
+ ],
+ "mapped",
+ [
+ 32199
+ ]
+ ],
+ [
+ [
+ 194927,
+ 194927
+ ],
+ "mapped",
+ [
+ 32258
+ ]
+ ],
+ [
+ [
+ 194928,
+ 194928
+ ],
+ "mapped",
+ [
+ 32325
+ ]
+ ],
+ [
+ [
+ 194929,
+ 194929
+ ],
+ "mapped",
+ [
+ 17204
+ ]
+ ],
+ [
+ [
+ 194930,
+ 194930
+ ],
+ "mapped",
+ [
+ 156200
+ ]
+ ],
+ [
+ [
+ 194931,
+ 194931
+ ],
+ "mapped",
+ [
+ 156231
+ ]
+ ],
+ [
+ [
+ 194932,
+ 194932
+ ],
+ "mapped",
+ [
+ 17241
+ ]
+ ],
+ [
+ [
+ 194933,
+ 194933
+ ],
+ "mapped",
+ [
+ 156377
+ ]
+ ],
+ [
+ [
+ 194934,
+ 194934
+ ],
+ "mapped",
+ [
+ 32634
+ ]
+ ],
+ [
+ [
+ 194935,
+ 194935
+ ],
+ "mapped",
+ [
+ 156478
+ ]
+ ],
+ [
+ [
+ 194936,
+ 194936
+ ],
+ "mapped",
+ [
+ 32661
+ ]
+ ],
+ [
+ [
+ 194937,
+ 194937
+ ],
+ "mapped",
+ [
+ 32762
+ ]
+ ],
+ [
+ [
+ 194938,
+ 194938
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 194939,
+ 194939
+ ],
+ "mapped",
+ [
+ 156890
+ ]
+ ],
+ [
+ [
+ 194940,
+ 194940
+ ],
+ "mapped",
+ [
+ 156963
+ ]
+ ],
+ [
+ [
+ 194941,
+ 194941
+ ],
+ "mapped",
+ [
+ 32864
+ ]
+ ],
+ [
+ [
+ 194942,
+ 194942
+ ],
+ "mapped",
+ [
+ 157096
+ ]
+ ],
+ [
+ [
+ 194943,
+ 194943
+ ],
+ "mapped",
+ [
+ 32880
+ ]
+ ],
+ [
+ [
+ 194944,
+ 194944
+ ],
+ "mapped",
+ [
+ 144223
+ ]
+ ],
+ [
+ [
+ 194945,
+ 194945
+ ],
+ "mapped",
+ [
+ 17365
+ ]
+ ],
+ [
+ [
+ 194946,
+ 194946
+ ],
+ "mapped",
+ [
+ 32946
+ ]
+ ],
+ [
+ [
+ 194947,
+ 194947
+ ],
+ "mapped",
+ [
+ 33027
+ ]
+ ],
+ [
+ [
+ 194948,
+ 194948
+ ],
+ "mapped",
+ [
+ 17419
+ ]
+ ],
+ [
+ [
+ 194949,
+ 194949
+ ],
+ "mapped",
+ [
+ 33086
+ ]
+ ],
+ [
+ [
+ 194950,
+ 194950
+ ],
+ "mapped",
+ [
+ 23221
+ ]
+ ],
+ [
+ [
+ 194951,
+ 194951
+ ],
+ "mapped",
+ [
+ 157607
+ ]
+ ],
+ [
+ [
+ 194952,
+ 194952
+ ],
+ "mapped",
+ [
+ 157621
+ ]
+ ],
+ [
+ [
+ 194953,
+ 194953
+ ],
+ "mapped",
+ [
+ 144275
+ ]
+ ],
+ [
+ [
+ 194954,
+ 194954
+ ],
+ "mapped",
+ [
+ 144284
+ ]
+ ],
+ [
+ [
+ 194955,
+ 194955
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194956,
+ 194956
+ ],
+ "mapped",
+ [
+ 33284
+ ]
+ ],
+ [
+ [
+ 194957,
+ 194957
+ ],
+ "mapped",
+ [
+ 36766
+ ]
+ ],
+ [
+ [
+ 194958,
+ 194958
+ ],
+ "mapped",
+ [
+ 17515
+ ]
+ ],
+ [
+ [
+ 194959,
+ 194959
+ ],
+ "mapped",
+ [
+ 33425
+ ]
+ ],
+ [
+ [
+ 194960,
+ 194960
+ ],
+ "mapped",
+ [
+ 33419
+ ]
+ ],
+ [
+ [
+ 194961,
+ 194961
+ ],
+ "mapped",
+ [
+ 33437
+ ]
+ ],
+ [
+ [
+ 194962,
+ 194962
+ ],
+ "mapped",
+ [
+ 21171
+ ]
+ ],
+ [
+ [
+ 194963,
+ 194963
+ ],
+ "mapped",
+ [
+ 33457
+ ]
+ ],
+ [
+ [
+ 194964,
+ 194964
+ ],
+ "mapped",
+ [
+ 33459
+ ]
+ ],
+ [
+ [
+ 194965,
+ 194965
+ ],
+ "mapped",
+ [
+ 33469
+ ]
+ ],
+ [
+ [
+ 194966,
+ 194966
+ ],
+ "mapped",
+ [
+ 33510
+ ]
+ ],
+ [
+ [
+ 194967,
+ 194967
+ ],
+ "mapped",
+ [
+ 158524
+ ]
+ ],
+ [
+ [
+ 194968,
+ 194968
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 194969,
+ 194969
+ ],
+ "mapped",
+ [
+ 33565
+ ]
+ ],
+ [
+ [
+ 194970,
+ 194970
+ ],
+ "mapped",
+ [
+ 33635
+ ]
+ ],
+ [
+ [
+ 194971,
+ 194971
+ ],
+ "mapped",
+ [
+ 33709
+ ]
+ ],
+ [
+ [
+ 194972,
+ 194972
+ ],
+ "mapped",
+ [
+ 33571
+ ]
+ ],
+ [
+ [
+ 194973,
+ 194973
+ ],
+ "mapped",
+ [
+ 33725
+ ]
+ ],
+ [
+ [
+ 194974,
+ 194974
+ ],
+ "mapped",
+ [
+ 33767
+ ]
+ ],
+ [
+ [
+ 194975,
+ 194975
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 194976,
+ 194976
+ ],
+ "mapped",
+ [
+ 33619
+ ]
+ ],
+ [
+ [
+ 194977,
+ 194977
+ ],
+ "mapped",
+ [
+ 33738
+ ]
+ ],
+ [
+ [
+ 194978,
+ 194978
+ ],
+ "mapped",
+ [
+ 33740
+ ]
+ ],
+ [
+ [
+ 194979,
+ 194979
+ ],
+ "mapped",
+ [
+ 33756
+ ]
+ ],
+ [
+ [
+ 194980,
+ 194980
+ ],
+ "mapped",
+ [
+ 158774
+ ]
+ ],
+ [
+ [
+ 194981,
+ 194981
+ ],
+ "mapped",
+ [
+ 159083
+ ]
+ ],
+ [
+ [
+ 194982,
+ 194982
+ ],
+ "mapped",
+ [
+ 158933
+ ]
+ ],
+ [
+ [
+ 194983,
+ 194983
+ ],
+ "mapped",
+ [
+ 17707
+ ]
+ ],
+ [
+ [
+ 194984,
+ 194984
+ ],
+ "mapped",
+ [
+ 34033
+ ]
+ ],
+ [
+ [
+ 194985,
+ 194985
+ ],
+ "mapped",
+ [
+ 34035
+ ]
+ ],
+ [
+ [
+ 194986,
+ 194986
+ ],
+ "mapped",
+ [
+ 34070
+ ]
+ ],
+ [
+ [
+ 194987,
+ 194987
+ ],
+ "mapped",
+ [
+ 160714
+ ]
+ ],
+ [
+ [
+ 194988,
+ 194988
+ ],
+ "mapped",
+ [
+ 34148
+ ]
+ ],
+ [
+ [
+ 194989,
+ 194989
+ ],
+ "mapped",
+ [
+ 159532
+ ]
+ ],
+ [
+ [
+ 194990,
+ 194990
+ ],
+ "mapped",
+ [
+ 17757
+ ]
+ ],
+ [
+ [
+ 194991,
+ 194991
+ ],
+ "mapped",
+ [
+ 17761
+ ]
+ ],
+ [
+ [
+ 194992,
+ 194992
+ ],
+ "mapped",
+ [
+ 159665
+ ]
+ ],
+ [
+ [
+ 194993,
+ 194993
+ ],
+ "mapped",
+ [
+ 159954
+ ]
+ ],
+ [
+ [
+ 194994,
+ 194994
+ ],
+ "mapped",
+ [
+ 17771
+ ]
+ ],
+ [
+ [
+ 194995,
+ 194995
+ ],
+ "mapped",
+ [
+ 34384
+ ]
+ ],
+ [
+ [
+ 194996,
+ 194996
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 194997,
+ 194997
+ ],
+ "mapped",
+ [
+ 34407
+ ]
+ ],
+ [
+ [
+ 194998,
+ 194998
+ ],
+ "mapped",
+ [
+ 34409
+ ]
+ ],
+ [
+ [
+ 194999,
+ 194999
+ ],
+ "mapped",
+ [
+ 34473
+ ]
+ ],
+ [
+ [
+ 195000,
+ 195000
+ ],
+ "mapped",
+ [
+ 34440
+ ]
+ ],
+ [
+ [
+ 195001,
+ 195001
+ ],
+ "mapped",
+ [
+ 34574
+ ]
+ ],
+ [
+ [
+ 195002,
+ 195002
+ ],
+ "mapped",
+ [
+ 34530
+ ]
+ ],
+ [
+ [
+ 195003,
+ 195003
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 195004,
+ 195004
+ ],
+ "mapped",
+ [
+ 34600
+ ]
+ ],
+ [
+ [
+ 195005,
+ 195005
+ ],
+ "mapped",
+ [
+ 34667
+ ]
+ ],
+ [
+ [
+ 195006,
+ 195006
+ ],
+ "mapped",
+ [
+ 34694
+ ]
+ ],
+ [
+ [
+ 195007,
+ 195007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 195008,
+ 195008
+ ],
+ "mapped",
+ [
+ 34785
+ ]
+ ],
+ [
+ [
+ 195009,
+ 195009
+ ],
+ "mapped",
+ [
+ 34817
+ ]
+ ],
+ [
+ [
+ 195010,
+ 195010
+ ],
+ "mapped",
+ [
+ 17913
+ ]
+ ],
+ [
+ [
+ 195011,
+ 195011
+ ],
+ "mapped",
+ [
+ 34912
+ ]
+ ],
+ [
+ [
+ 195012,
+ 195012
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 195013,
+ 195013
+ ],
+ "mapped",
+ [
+ 161383
+ ]
+ ],
+ [
+ [
+ 195014,
+ 195014
+ ],
+ "mapped",
+ [
+ 35031
+ ]
+ ],
+ [
+ [
+ 195015,
+ 195015
+ ],
+ "mapped",
+ [
+ 35038
+ ]
+ ],
+ [
+ [
+ 195016,
+ 195016
+ ],
+ "mapped",
+ [
+ 17973
+ ]
+ ],
+ [
+ [
+ 195017,
+ 195017
+ ],
+ "mapped",
+ [
+ 35066
+ ]
+ ],
+ [
+ [
+ 195018,
+ 195018
+ ],
+ "mapped",
+ [
+ 13499
+ ]
+ ],
+ [
+ [
+ 195019,
+ 195019
+ ],
+ "mapped",
+ [
+ 161966
+ ]
+ ],
+ [
+ [
+ 195020,
+ 195020
+ ],
+ "mapped",
+ [
+ 162150
+ ]
+ ],
+ [
+ [
+ 195021,
+ 195021
+ ],
+ "mapped",
+ [
+ 18110
+ ]
+ ],
+ [
+ [
+ 195022,
+ 195022
+ ],
+ "mapped",
+ [
+ 18119
+ ]
+ ],
+ [
+ [
+ 195023,
+ 195023
+ ],
+ "mapped",
+ [
+ 35488
+ ]
+ ],
+ [
+ [
+ 195024,
+ 195024
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 195025,
+ 195025
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 195026,
+ 195026
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 195027,
+ 195027
+ ],
+ "mapped",
+ [
+ 162984
+ ]
+ ],
+ [
+ [
+ 195028,
+ 195028
+ ],
+ "mapped",
+ [
+ 36011
+ ]
+ ],
+ [
+ [
+ 195029,
+ 195029
+ ],
+ "mapped",
+ [
+ 36033
+ ]
+ ],
+ [
+ [
+ 195030,
+ 195030
+ ],
+ "mapped",
+ [
+ 36123
+ ]
+ ],
+ [
+ [
+ 195031,
+ 195031
+ ],
+ "mapped",
+ [
+ 36215
+ ]
+ ],
+ [
+ [
+ 195032,
+ 195032
+ ],
+ "mapped",
+ [
+ 163631
+ ]
+ ],
+ [
+ [
+ 195033,
+ 195033
+ ],
+ "mapped",
+ [
+ 133124
+ ]
+ ],
+ [
+ [
+ 195034,
+ 195034
+ ],
+ "mapped",
+ [
+ 36299
+ ]
+ ],
+ [
+ [
+ 195035,
+ 195035
+ ],
+ "mapped",
+ [
+ 36284
+ ]
+ ],
+ [
+ [
+ 195036,
+ 195036
+ ],
+ "mapped",
+ [
+ 36336
+ ]
+ ],
+ [
+ [
+ 195037,
+ 195037
+ ],
+ "mapped",
+ [
+ 133342
+ ]
+ ],
+ [
+ [
+ 195038,
+ 195038
+ ],
+ "mapped",
+ [
+ 36564
+ ]
+ ],
+ [
+ [
+ 195039,
+ 195039
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 195040,
+ 195040
+ ],
+ "mapped",
+ [
+ 165330
+ ]
+ ],
+ [
+ [
+ 195041,
+ 195041
+ ],
+ "mapped",
+ [
+ 165357
+ ]
+ ],
+ [
+ [
+ 195042,
+ 195042
+ ],
+ "mapped",
+ [
+ 37012
+ ]
+ ],
+ [
+ [
+ 195043,
+ 195043
+ ],
+ "mapped",
+ [
+ 37105
+ ]
+ ],
+ [
+ [
+ 195044,
+ 195044
+ ],
+ "mapped",
+ [
+ 37137
+ ]
+ ],
+ [
+ [
+ 195045,
+ 195045
+ ],
+ "mapped",
+ [
+ 165678
+ ]
+ ],
+ [
+ [
+ 195046,
+ 195046
+ ],
+ "mapped",
+ [
+ 37147
+ ]
+ ],
+ [
+ [
+ 195047,
+ 195047
+ ],
+ "mapped",
+ [
+ 37432
+ ]
+ ],
+ [
+ [
+ 195048,
+ 195048
+ ],
+ "mapped",
+ [
+ 37591
+ ]
+ ],
+ [
+ [
+ 195049,
+ 195049
+ ],
+ "mapped",
+ [
+ 37592
+ ]
+ ],
+ [
+ [
+ 195050,
+ 195050
+ ],
+ "mapped",
+ [
+ 37500
+ ]
+ ],
+ [
+ [
+ 195051,
+ 195051
+ ],
+ "mapped",
+ [
+ 37881
+ ]
+ ],
+ [
+ [
+ 195052,
+ 195052
+ ],
+ "mapped",
+ [
+ 37909
+ ]
+ ],
+ [
+ [
+ 195053,
+ 195053
+ ],
+ "mapped",
+ [
+ 166906
+ ]
+ ],
+ [
+ [
+ 195054,
+ 195054
+ ],
+ "mapped",
+ [
+ 38283
+ ]
+ ],
+ [
+ [
+ 195055,
+ 195055
+ ],
+ "mapped",
+ [
+ 18837
+ ]
+ ],
+ [
+ [
+ 195056,
+ 195056
+ ],
+ "mapped",
+ [
+ 38327
+ ]
+ ],
+ [
+ [
+ 195057,
+ 195057
+ ],
+ "mapped",
+ [
+ 167287
+ ]
+ ],
+ [
+ [
+ 195058,
+ 195058
+ ],
+ "mapped",
+ [
+ 18918
+ ]
+ ],
+ [
+ [
+ 195059,
+ 195059
+ ],
+ "mapped",
+ [
+ 38595
+ ]
+ ],
+ [
+ [
+ 195060,
+ 195060
+ ],
+ "mapped",
+ [
+ 23986
+ ]
+ ],
+ [
+ [
+ 195061,
+ 195061
+ ],
+ "mapped",
+ [
+ 38691
+ ]
+ ],
+ [
+ [
+ 195062,
+ 195062
+ ],
+ "mapped",
+ [
+ 168261
+ ]
+ ],
+ [
+ [
+ 195063,
+ 195063
+ ],
+ "mapped",
+ [
+ 168474
+ ]
+ ],
+ [
+ [
+ 195064,
+ 195064
+ ],
+ "mapped",
+ [
+ 19054
+ ]
+ ],
+ [
+ [
+ 195065,
+ 195065
+ ],
+ "mapped",
+ [
+ 19062
+ ]
+ ],
+ [
+ [
+ 195066,
+ 195066
+ ],
+ "mapped",
+ [
+ 38880
+ ]
+ ],
+ [
+ [
+ 195067,
+ 195067
+ ],
+ "mapped",
+ [
+ 168970
+ ]
+ ],
+ [
+ [
+ 195068,
+ 195068
+ ],
+ "mapped",
+ [
+ 19122
+ ]
+ ],
+ [
+ [
+ 195069,
+ 195069
+ ],
+ "mapped",
+ [
+ 169110
+ ]
+ ],
+ [
+ [
+ 195070,
+ 195071
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 195072,
+ 195072
+ ],
+ "mapped",
+ [
+ 38953
+ ]
+ ],
+ [
+ [
+ 195073,
+ 195073
+ ],
+ "mapped",
+ [
+ 169398
+ ]
+ ],
+ [
+ [
+ 195074,
+ 195074
+ ],
+ "mapped",
+ [
+ 39138
+ ]
+ ],
+ [
+ [
+ 195075,
+ 195075
+ ],
+ "mapped",
+ [
+ 19251
+ ]
+ ],
+ [
+ [
+ 195076,
+ 195076
+ ],
+ "mapped",
+ [
+ 39209
+ ]
+ ],
+ [
+ [
+ 195077,
+ 195077
+ ],
+ "mapped",
+ [
+ 39335
+ ]
+ ],
+ [
+ [
+ 195078,
+ 195078
+ ],
+ "mapped",
+ [
+ 39362
+ ]
+ ],
+ [
+ [
+ 195079,
+ 195079
+ ],
+ "mapped",
+ [
+ 39422
+ ]
+ ],
+ [
+ [
+ 195080,
+ 195080
+ ],
+ "mapped",
+ [
+ 19406
+ ]
+ ],
+ [
+ [
+ 195081,
+ 195081
+ ],
+ "mapped",
+ [
+ 170800
+ ]
+ ],
+ [
+ [
+ 195082,
+ 195082
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 195083,
+ 195083
+ ],
+ "mapped",
+ [
+ 40000
+ ]
+ ],
+ [
+ [
+ 195084,
+ 195084
+ ],
+ "mapped",
+ [
+ 40189
+ ]
+ ],
+ [
+ [
+ 195085,
+ 195085
+ ],
+ "mapped",
+ [
+ 19662
+ ]
+ ],
+ [
+ [
+ 195086,
+ 195086
+ ],
+ "mapped",
+ [
+ 19693
+ ]
+ ],
+ [
+ [
+ 195087,
+ 195087
+ ],
+ "mapped",
+ [
+ 40295
+ ]
+ ],
+ [
+ [
+ 195088,
+ 195088
+ ],
+ "mapped",
+ [
+ 172238
+ ]
+ ],
+ [
+ [
+ 195089,
+ 195089
+ ],
+ "mapped",
+ [
+ 19704
+ ]
+ ],
+ [
+ [
+ 195090,
+ 195090
+ ],
+ "mapped",
+ [
+ 172293
+ ]
+ ],
+ [
+ [
+ 195091,
+ 195091
+ ],
+ "mapped",
+ [
+ 172558
+ ]
+ ],
+ [
+ [
+ 195092,
+ 195092
+ ],
+ "mapped",
+ [
+ 172689
+ ]
+ ],
+ [
+ [
+ 195093,
+ 195093
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 195094,
+ 195094
+ ],
+ "mapped",
+ [
+ 19798
+ ]
+ ],
+ [
+ [
+ 195095,
+ 195095
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 195096,
+ 195096
+ ],
+ "mapped",
+ [
+ 40702
+ ]
+ ],
+ [
+ [
+ 195097,
+ 195097
+ ],
+ "mapped",
+ [
+ 40709
+ ]
+ ],
+ [
+ [
+ 195098,
+ 195098
+ ],
+ "mapped",
+ [
+ 40719
+ ]
+ ],
+ [
+ [
+ 195099,
+ 195099
+ ],
+ "mapped",
+ [
+ 40726
+ ]
+ ],
+ [
+ [
+ 195100,
+ 195100
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 195101,
+ 195101
+ ],
+ "mapped",
+ [
+ 173568
+ ]
+ ],
+ [
+ [
+ 195102,
+ 196605
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196606,
+ 196607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196608,
+ 262141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262142,
+ 262143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262144,
+ 327677
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327678,
+ 327679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327680,
+ 393213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393214,
+ 393215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393216,
+ 458749
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458750,
+ 458751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458752,
+ 524285
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524286,
+ 524287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524288,
+ 589821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589822,
+ 589823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589824,
+ 655357
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655358,
+ 655359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655360,
+ 720893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720894,
+ 720895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720896,
+ 786429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786430,
+ 786431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786432,
+ 851965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851966,
+ 851967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851968,
+ 917501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917502,
+ 917503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917504,
+ 917504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917505,
+ 917505
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917506,
+ 917535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917536,
+ 917631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917632,
+ 917759
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917760,
+ 917999
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 918000,
+ 983037
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983038,
+ 983039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983040,
+ 1048573
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048574,
+ 1048575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048576,
+ 1114109
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1114110,
+ 1114111
+ ],
+ "disallowed"
+ ]
+];
+
+var punycode$2 = require$$0$1;
+var mappingTable = require$$1$1;
+
+var PROCESSING_OPTIONS = {
+ TRANSITIONAL: 0,
+ NONTRANSITIONAL: 1
+};
+
+function normalize$1(str) { // fix bug in v8
+ return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
+}
+
+function findStatus(val) {
+ var start = 0;
+ var end = mappingTable.length - 1;
+
+ while (start <= end) {
+ var mid = Math.floor((start + end) / 2);
+
+ var target = mappingTable[mid];
+ if (target[0][0] <= val && target[0][1] >= val) {
+ return target;
+ } else if (target[0][0] > val) {
+ end = mid - 1;
+ } else {
+ start = mid + 1;
+ }
+ }
+
+ return null;
+}
+
+var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+
+function countSymbols(string) {
+ return string
+ // replace every surrogate pair with a BMP symbol
+ .replace(regexAstralSymbols, '_')
+ // then get the length
+ .length;
+}
+
+function mapChars(domain_name, useSTD3, processing_option) {
+ var hasError = false;
+ var processed = "";
+
+ var len = countSymbols(domain_name);
+ for (var i = 0; i < len; ++i) {
+ var codePoint = domain_name.codePointAt(i);
+ var status = findStatus(codePoint);
+
+ switch (status[1]) {
+ case "disallowed":
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "ignored":
+ break;
+ case "mapped":
+ processed += String.fromCodePoint.apply(String, status[2]);
+ break;
+ case "deviation":
+ if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ } else {
+ processed += String.fromCodePoint(codePoint);
+ }
+ break;
+ case "valid":
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "disallowed_STD3_mapped":
+ if (useSTD3) {
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ } else {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ }
+ break;
+ case "disallowed_STD3_valid":
+ if (useSTD3) {
+ hasError = true;
+ }
+
+ processed += String.fromCodePoint(codePoint);
+ break;
+ }
+ }
+
+ return {
+ string: processed,
+ error: hasError
+ };
+}
+
+var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
+
+function validateLabel(label, processing_option) {
+ if (label.substr(0, 4) === "xn--") {
+ label = punycode$2.toUnicode(label);
+ PROCESSING_OPTIONS.NONTRANSITIONAL;
+ }
+
+ var error = false;
+
+ if (normalize$1(label) !== label ||
+ (label[3] === "-" && label[4] === "-") ||
+ label[0] === "-" || label[label.length - 1] === "-" ||
+ label.indexOf(".") !== -1 ||
+ label.search(combiningMarksRegex) === 0) {
+ error = true;
+ }
+
+ var len = countSymbols(label);
+ for (var i = 0; i < len; ++i) {
+ var status = findStatus(label.codePointAt(i));
+ if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") ||
+ (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&
+ status[1] !== "valid" && status[1] !== "deviation")) {
+ error = true;
+ break;
+ }
+ }
+
+ return {
+ label: label,
+ error: error
+ };
+}
+
+function processing(domain_name, useSTD3, processing_option) {
+ var result = mapChars(domain_name, useSTD3, processing_option);
+ result.string = normalize$1(result.string);
+
+ var labels = result.string.split(".");
+ for (var i = 0; i < labels.length; ++i) {
+ try {
+ var validation = validateLabel(labels[i]);
+ labels[i] = validation.label;
+ result.error = result.error || validation.error;
+ } catch(e) {
+ result.error = true;
+ }
+ }
+
+ return {
+ string: labels.join("."),
+ error: result.error
+ };
+}
+
+tr46.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {
+ var result = processing(domain_name, useSTD3, processing_option);
+ var labels = result.string.split(".");
+ labels = labels.map(function(l) {
+ try {
+ return punycode$2.toASCII(l);
+ } catch(e) {
+ result.error = true;
+ return l;
+ }
+ });
+
+ if (verifyDnsLength) {
+ var total = labels.slice(0, labels.length - 1).join(".").length;
+ if (total.length > 253 || total.length === 0) {
+ result.error = true;
+ }
+
+ for (var i=0; i < labels.length; ++i) {
+ if (labels.length > 63 || labels.length === 0) {
+ result.error = true;
+ break;
+ }
+ }
+ }
+
+ if (result.error) return null;
+ return labels.join(".");
+};
+
+tr46.toUnicode = function(domain_name, useSTD3) {
+ var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
+
+ return {
+ domain: result.string,
+ error: result.error
+ };
+};
+
+tr46.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
+
+urlStateMachine.exports;
+
+(function (module) {
+ const punycode = require$$0$1;
+ const tr46$1 = tr46;
+
+ const specialSchemes = {
+ ftp: 21,
+ file: null,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443
+ };
+
+ const failure = Symbol("failure");
+
+ function countSymbols(str) {
+ return punycode.ucs2.decode(str).length;
+ }
+
+ function at(input, idx) {
+ const c = input[idx];
+ return isNaN(c) ? undefined : String.fromCodePoint(c);
+ }
+
+ function isASCIIDigit(c) {
+ return c >= 0x30 && c <= 0x39;
+ }
+
+ function isASCIIAlpha(c) {
+ return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
+ }
+
+ function isASCIIAlphanumeric(c) {
+ return isASCIIAlpha(c) || isASCIIDigit(c);
+ }
+
+ function isASCIIHex(c) {
+ return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
+ }
+
+ function isSingleDot(buffer) {
+ return buffer === "." || buffer.toLowerCase() === "%2e";
+ }
+
+ function isDoubleDot(buffer) {
+ buffer = buffer.toLowerCase();
+ return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
+ }
+
+ function isWindowsDriveLetterCodePoints(cp1, cp2) {
+ return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
+ }
+
+ function isWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
+ }
+
+ function isNormalizedWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
+ }
+
+ function containsForbiddenHostCodePoint(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function containsForbiddenHostCodePointExcludingPercent(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function isSpecialScheme(scheme) {
+ return specialSchemes[scheme] !== undefined;
+ }
+
+ function isSpecial(url) {
+ return isSpecialScheme(url.scheme);
+ }
+
+ function defaultPort(scheme) {
+ return specialSchemes[scheme];
+ }
+
+ function percentEncode(c) {
+ let hex = c.toString(16).toUpperCase();
+ if (hex.length === 1) {
+ hex = "0" + hex;
+ }
+
+ return "%" + hex;
+ }
+
+ function utf8PercentEncode(c) {
+ const buf = new Buffer(c);
+
+ let str = "";
+
+ for (let i = 0; i < buf.length; ++i) {
+ str += percentEncode(buf[i]);
+ }
+
+ return str;
+ }
+
+ function utf8PercentDecode(str) {
+ const input = new Buffer(str);
+ const output = [];
+ for (let i = 0; i < input.length; ++i) {
+ if (input[i] !== 37) {
+ output.push(input[i]);
+ } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
+ output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
+ i += 2;
+ } else {
+ output.push(input[i]);
+ }
+ }
+ return new Buffer(output).toString();
+ }
+
+ function isC0ControlPercentEncode(c) {
+ return c <= 0x1F || c > 0x7E;
+ }
+
+ const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
+ function isPathPercentEncode(c) {
+ return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
+ }
+
+ const extraUserinfoPercentEncodeSet =
+ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
+ function isUserinfoPercentEncode(c) {
+ return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
+ }
+
+ function percentEncodeChar(c, encodeSetPredicate) {
+ const cStr = String.fromCodePoint(c);
+
+ if (encodeSetPredicate(c)) {
+ return utf8PercentEncode(cStr);
+ }
+
+ return cStr;
+ }
+
+ function parseIPv4Number(input) {
+ let R = 10;
+
+ if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
+ input = input.substring(2);
+ R = 16;
+ } else if (input.length >= 2 && input.charAt(0) === "0") {
+ input = input.substring(1);
+ R = 8;
+ }
+
+ if (input === "") {
+ return 0;
+ }
+
+ const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);
+ if (regex.test(input)) {
+ return failure;
+ }
+
+ return parseInt(input, R);
+ }
+
+ function parseIPv4(input) {
+ const parts = input.split(".");
+ if (parts[parts.length - 1] === "") {
+ if (parts.length > 1) {
+ parts.pop();
+ }
+ }
+
+ if (parts.length > 4) {
+ return input;
+ }
+
+ const numbers = [];
+ for (const part of parts) {
+ if (part === "") {
+ return input;
+ }
+ const n = parseIPv4Number(part);
+ if (n === failure) {
+ return input;
+ }
+
+ numbers.push(n);
+ }
+
+ for (let i = 0; i < numbers.length - 1; ++i) {
+ if (numbers[i] > 255) {
+ return failure;
+ }
+ }
+ if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
+ return failure;
+ }
+
+ let ipv4 = numbers.pop();
+ let counter = 0;
+
+ for (const n of numbers) {
+ ipv4 += n * Math.pow(256, 3 - counter);
+ ++counter;
+ }
+
+ return ipv4;
+ }
+
+ function serializeIPv4(address) {
+ let output = "";
+ let n = address;
+
+ for (let i = 1; i <= 4; ++i) {
+ output = String(n % 256) + output;
+ if (i !== 4) {
+ output = "." + output;
+ }
+ n = Math.floor(n / 256);
+ }
+
+ return output;
+ }
+
+ function parseIPv6(input) {
+ const address = [0, 0, 0, 0, 0, 0, 0, 0];
+ let pieceIndex = 0;
+ let compress = null;
+ let pointer = 0;
+
+ input = punycode.ucs2.decode(input);
+
+ if (input[pointer] === 58) {
+ if (input[pointer + 1] !== 58) {
+ return failure;
+ }
+
+ pointer += 2;
+ ++pieceIndex;
+ compress = pieceIndex;
+ }
+
+ while (pointer < input.length) {
+ if (pieceIndex === 8) {
+ return failure;
+ }
+
+ if (input[pointer] === 58) {
+ if (compress !== null) {
+ return failure;
+ }
+ ++pointer;
+ ++pieceIndex;
+ compress = pieceIndex;
+ continue;
+ }
+
+ let value = 0;
+ let length = 0;
+
+ while (length < 4 && isASCIIHex(input[pointer])) {
+ value = value * 0x10 + parseInt(at(input, pointer), 16);
+ ++pointer;
+ ++length;
+ }
+
+ if (input[pointer] === 46) {
+ if (length === 0) {
+ return failure;
+ }
+
+ pointer -= length;
+
+ if (pieceIndex > 6) {
+ return failure;
+ }
+
+ let numbersSeen = 0;
+
+ while (input[pointer] !== undefined) {
+ let ipv4Piece = null;
+
+ if (numbersSeen > 0) {
+ if (input[pointer] === 46 && numbersSeen < 4) {
+ ++pointer;
+ } else {
+ return failure;
+ }
+ }
+
+ if (!isASCIIDigit(input[pointer])) {
+ return failure;
+ }
+
+ while (isASCIIDigit(input[pointer])) {
+ const number = parseInt(at(input, pointer));
+ if (ipv4Piece === null) {
+ ipv4Piece = number;
+ } else if (ipv4Piece === 0) {
+ return failure;
+ } else {
+ ipv4Piece = ipv4Piece * 10 + number;
+ }
+ if (ipv4Piece > 255) {
+ return failure;
+ }
+ ++pointer;
+ }
+
+ address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
+
+ ++numbersSeen;
+
+ if (numbersSeen === 2 || numbersSeen === 4) {
+ ++pieceIndex;
+ }
+ }
+
+ if (numbersSeen !== 4) {
+ return failure;
+ }
+
+ break;
+ } else if (input[pointer] === 58) {
+ ++pointer;
+ if (input[pointer] === undefined) {
+ return failure;
+ }
+ } else if (input[pointer] !== undefined) {
+ return failure;
+ }
+
+ address[pieceIndex] = value;
+ ++pieceIndex;
+ }
+
+ if (compress !== null) {
+ let swaps = pieceIndex - compress;
+ pieceIndex = 7;
+ while (pieceIndex !== 0 && swaps > 0) {
+ const temp = address[compress + swaps - 1];
+ address[compress + swaps - 1] = address[pieceIndex];
+ address[pieceIndex] = temp;
+ --pieceIndex;
+ --swaps;
+ }
+ } else if (compress === null && pieceIndex !== 8) {
+ return failure;
+ }
+
+ return address;
+ }
+
+ function serializeIPv6(address) {
+ let output = "";
+ const seqResult = findLongestZeroSequence(address);
+ const compress = seqResult.idx;
+ let ignore0 = false;
+
+ for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
+ if (ignore0 && address[pieceIndex] === 0) {
+ continue;
+ } else if (ignore0) {
+ ignore0 = false;
+ }
+
+ if (compress === pieceIndex) {
+ const separator = pieceIndex === 0 ? "::" : ":";
+ output += separator;
+ ignore0 = true;
+ continue;
+ }
+
+ output += address[pieceIndex].toString(16);
+
+ if (pieceIndex !== 7) {
+ output += ":";
+ }
+ }
+
+ return output;
+ }
+
+ function parseHost(input, isSpecialArg) {
+ if (input[0] === "[") {
+ if (input[input.length - 1] !== "]") {
+ return failure;
+ }
+
+ return parseIPv6(input.substring(1, input.length - 1));
+ }
+
+ if (!isSpecialArg) {
+ return parseOpaqueHost(input);
+ }
+
+ const domain = utf8PercentDecode(input);
+ const asciiDomain = tr46$1.toASCII(domain, false, tr46$1.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
+ if (asciiDomain === null) {
+ return failure;
+ }
+
+ if (containsForbiddenHostCodePoint(asciiDomain)) {
+ return failure;
+ }
+
+ const ipv4Host = parseIPv4(asciiDomain);
+ if (typeof ipv4Host === "number" || ipv4Host === failure) {
+ return ipv4Host;
+ }
+
+ return asciiDomain;
+ }
+
+ function parseOpaqueHost(input) {
+ if (containsForbiddenHostCodePointExcludingPercent(input)) {
+ return failure;
+ }
+
+ let output = "";
+ const decoded = punycode.ucs2.decode(input);
+ for (let i = 0; i < decoded.length; ++i) {
+ output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
+ }
+ return output;
+ }
+
+ function findLongestZeroSequence(arr) {
+ let maxIdx = null;
+ let maxLen = 1; // only find elements > 1
+ let currStart = null;
+ let currLen = 0;
+
+ for (let i = 0; i < arr.length; ++i) {
+ if (arr[i] !== 0) {
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ currStart = null;
+ currLen = 0;
+ } else {
+ if (currStart === null) {
+ currStart = i;
+ }
+ ++currLen;
+ }
+ }
+
+ // if trailing zeros
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ return {
+ idx: maxIdx,
+ len: maxLen
+ };
+ }
+
+ function serializeHost(host) {
+ if (typeof host === "number") {
+ return serializeIPv4(host);
+ }
+
+ // IPv6 serializer
+ if (host instanceof Array) {
+ return "[" + serializeIPv6(host) + "]";
+ }
+
+ return host;
+ }
+
+ function trimControlChars(url) {
+ return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
+ }
+
+ function trimTabAndNewline(url) {
+ return url.replace(/\u0009|\u000A|\u000D/g, "");
+ }
+
+ function shortenPath(url) {
+ const path = url.path;
+ if (path.length === 0) {
+ return;
+ }
+ if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
+ return;
+ }
+
+ path.pop();
+ }
+
+ function includesCredentials(url) {
+ return url.username !== "" || url.password !== "";
+ }
+
+ function cannotHaveAUsernamePasswordPort(url) {
+ return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
+ }
+
+ function isNormalizedWindowsDriveLetter(string) {
+ return /^[A-Za-z]:$/.test(string);
+ }
+
+ function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
+ this.pointer = 0;
+ this.input = input;
+ this.base = base || null;
+ this.encodingOverride = encodingOverride || "utf-8";
+ this.stateOverride = stateOverride;
+ this.url = url;
+ this.failure = false;
+ this.parseError = false;
+
+ if (!this.url) {
+ this.url = {
+ scheme: "",
+ username: "",
+ password: "",
+ host: null,
+ port: null,
+ path: [],
+ query: null,
+ fragment: null,
+
+ cannotBeABaseURL: false
+ };
+
+ const res = trimControlChars(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+ }
+
+ const res = trimTabAndNewline(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+
+ this.state = stateOverride || "scheme start";
+
+ this.buffer = "";
+ this.atFlag = false;
+ this.arrFlag = false;
+ this.passwordTokenSeenFlag = false;
+
+ this.input = punycode.ucs2.decode(this.input);
+
+ for (; this.pointer <= this.input.length; ++this.pointer) {
+ const c = this.input[this.pointer];
+ const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
+
+ // exec state machine
+ const ret = this["parse " + this.state](c, cStr);
+ if (!ret) {
+ break; // terminate algorithm
+ } else if (ret === failure) {
+ this.failure = true;
+ break;
+ }
+ }
+ }
+
+ URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
+ if (isASCIIAlpha(c)) {
+ this.buffer += cStr.toLowerCase();
+ this.state = "scheme";
+ } else if (!this.stateOverride) {
+ this.state = "no scheme";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
+ if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
+ this.buffer += cStr.toLowerCase();
+ } else if (c === 58) {
+ if (this.stateOverride) {
+ if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
+ return false;
+ }
+
+ if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
+ return false;
+ }
+ }
+ this.url.scheme = this.buffer;
+ this.buffer = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ if (this.url.scheme === "file") {
+ if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
+ this.parseError = true;
+ }
+ this.state = "file";
+ } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
+ this.state = "special relative or authority";
+ } else if (isSpecial(this.url)) {
+ this.state = "special authority slashes";
+ } else if (this.input[this.pointer + 1] === 47) {
+ this.state = "path or authority";
+ ++this.pointer;
+ } else {
+ this.url.cannotBeABaseURL = true;
+ this.url.path.push("");
+ this.state = "cannot-be-a-base-URL path";
+ }
+ } else if (!this.stateOverride) {
+ this.buffer = "";
+ this.state = "no scheme";
+ this.pointer = -1;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
+ if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
+ return failure;
+ } else if (this.base.cannotBeABaseURL && c === 35) {
+ this.url.scheme = this.base.scheme;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.url.cannotBeABaseURL = true;
+ this.state = "fragment";
+ } else if (this.base.scheme === "file") {
+ this.state = "file";
+ --this.pointer;
+ } else {
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
+ if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
+ this.url.scheme = this.base.scheme;
+ if (isNaN(c)) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 47) {
+ this.state = "relative slash";
+ } else if (c === 63) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ this.state = "relative slash";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice(0, this.base.path.length - 1);
+
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
+ if (isSpecial(this.url) && (c === 47 || c === 92)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "special authority ignore slashes";
+ } else if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "special authority ignore slashes";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
+ if (c !== 47 && c !== 92) {
+ this.state = "authority";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
+ if (c === 64) {
+ this.parseError = true;
+ if (this.atFlag) {
+ this.buffer = "%40" + this.buffer;
+ }
+ this.atFlag = true;
+
+ // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
+ const len = countSymbols(this.buffer);
+ for (let pointer = 0; pointer < len; ++pointer) {
+ const codePoint = this.buffer.codePointAt(pointer);
+
+ if (codePoint === 58 && !this.passwordTokenSeenFlag) {
+ this.passwordTokenSeenFlag = true;
+ continue;
+ }
+ const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
+ if (this.passwordTokenSeenFlag) {
+ this.url.password += encodedCodePoints;
+ } else {
+ this.url.username += encodedCodePoints;
+ }
+ }
+ this.buffer = "";
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ if (this.atFlag && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+ this.pointer -= countSymbols(this.buffer) + 1;
+ this.buffer = "";
+ this.state = "host";
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse hostname"] =
+ URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
+ if (this.stateOverride && this.url.scheme === "file") {
+ --this.pointer;
+ this.state = "file host";
+ } else if (c === 58 && !this.arrFlag) {
+ if (this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "port";
+ if (this.stateOverride === "hostname") {
+ return false;
+ }
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ --this.pointer;
+ if (isSpecial(this.url) && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ } else if (this.stateOverride && this.buffer === "" &&
+ (includesCredentials(this.url) || this.url.port !== null)) {
+ this.parseError = true;
+ return false;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "path start";
+ if (this.stateOverride) {
+ return false;
+ }
+ } else {
+ if (c === 91) {
+ this.arrFlag = true;
+ } else if (c === 93) {
+ this.arrFlag = false;
+ }
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
+ if (isASCIIDigit(c)) {
+ this.buffer += cStr;
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92) ||
+ this.stateOverride) {
+ if (this.buffer !== "") {
+ const port = parseInt(this.buffer);
+ if (port > Math.pow(2, 16) - 1) {
+ this.parseError = true;
+ return failure;
+ }
+ this.url.port = port === defaultPort(this.url.scheme) ? null : port;
+ this.buffer = "";
+ }
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
+
+ URLStateMachine.prototype["parse file"] = function parseFile(c) {
+ this.url.scheme = "file";
+
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file slash";
+ } else if (this.base !== null && this.base.scheme === "file") {
+ if (isNaN(c)) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 63) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points
+ !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||
+ (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points
+ !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ shortenPath(this.url);
+ } else {
+ this.parseError = true;
+ }
+
+ this.state = "path";
+ --this.pointer;
+ }
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file host";
+ } else {
+ if (this.base !== null && this.base.scheme === "file") {
+ if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
+ this.url.path.push(this.base.path[0]);
+ } else {
+ this.url.host = this.base.host;
+ }
+ }
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
+ if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
+ --this.pointer;
+ if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
+ this.parseError = true;
+ this.state = "path";
+ } else if (this.buffer === "") {
+ this.url.host = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ } else {
+ let host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+ if (host === "localhost") {
+ host = "";
+ }
+ this.url.host = host;
+
+ if (this.stateOverride) {
+ return false;
+ }
+
+ this.buffer = "";
+ this.state = "path start";
+ }
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
+ if (isSpecial(this.url)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "path";
+
+ if (c !== 47 && c !== 92) {
+ --this.pointer;
+ }
+ } else if (!this.stateOverride && c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (!this.stateOverride && c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (c !== undefined) {
+ this.state = "path";
+ if (c !== 47) {
+ --this.pointer;
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path"] = function parsePath(c) {
+ if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
+ (!this.stateOverride && (c === 63 || c === 35))) {
+ if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ }
+
+ if (isDoubleDot(this.buffer)) {
+ shortenPath(this.url);
+ if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ }
+ } else if (isSingleDot(this.buffer) && c !== 47 &&
+ !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ } else if (!isSingleDot(this.buffer)) {
+ if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
+ if (this.url.host !== "" && this.url.host !== null) {
+ this.parseError = true;
+ this.url.host = "";
+ }
+ this.buffer = this.buffer[0] + ":";
+ }
+ this.url.path.push(this.buffer);
+ }
+ this.buffer = "";
+ if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
+ while (this.url.path.length > 1 && this.url.path[0] === "") {
+ this.parseError = true;
+ this.url.path.shift();
+ }
+ }
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ }
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += percentEncodeChar(c, isPathPercentEncode);
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ // TODO: Add: not a URL code point
+ if (!isNaN(c) && c !== 37) {
+ this.parseError = true;
+ }
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ if (!isNaN(c)) {
+ this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
+ if (isNaN(c) || (!this.stateOverride && c === 35)) {
+ if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
+ this.encodingOverride = "utf-8";
+ }
+
+ const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
+ for (let i = 0; i < buffer.length; ++i) {
+ if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||
+ buffer[i] === 0x3C || buffer[i] === 0x3E) {
+ this.url.query += percentEncode(buffer[i]);
+ } else {
+ this.url.query += String.fromCodePoint(buffer[i]);
+ }
+ }
+
+ this.buffer = "";
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
+ if (isNaN(c)) ; else if (c === 0x0) {
+ this.parseError = true;
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+
+ return true;
+ };
+
+ function serializeURL(url, excludeFragment) {
+ let output = url.scheme + ":";
+ if (url.host !== null) {
+ output += "//";
+
+ if (url.username !== "" || url.password !== "") {
+ output += url.username;
+ if (url.password !== "") {
+ output += ":" + url.password;
+ }
+ output += "@";
+ }
+
+ output += serializeHost(url.host);
+
+ if (url.port !== null) {
+ output += ":" + url.port;
+ }
+ } else if (url.host === null && url.scheme === "file") {
+ output += "//";
+ }
+
+ if (url.cannotBeABaseURL) {
+ output += url.path[0];
+ } else {
+ for (const string of url.path) {
+ output += "/" + string;
+ }
+ }
+
+ if (url.query !== null) {
+ output += "?" + url.query;
+ }
+
+ if (!excludeFragment && url.fragment !== null) {
+ output += "#" + url.fragment;
+ }
+
+ return output;
+ }
+
+ function serializeOrigin(tuple) {
+ let result = tuple.scheme + "://";
+ result += serializeHost(tuple.host);
+
+ if (tuple.port !== null) {
+ result += ":" + tuple.port;
+ }
+
+ return result;
+ }
+
+ module.exports.serializeURL = serializeURL;
+
+ module.exports.serializeURLOrigin = function (url) {
+ // https://url.spec.whatwg.org/#concept-url-origin
+ switch (url.scheme) {
+ case "blob":
+ try {
+ return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
+ } catch (e) {
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ case "ftp":
+ case "gopher":
+ case "http":
+ case "https":
+ case "ws":
+ case "wss":
+ return serializeOrigin({
+ scheme: url.scheme,
+ host: url.host,
+ port: url.port
+ });
+ case "file":
+ // spec says "exercise to the reader", chrome says "file://"
+ return "file://";
+ default:
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ };
+
+ module.exports.basicURLParse = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
+ if (usm.failure) {
+ return "failure";
+ }
+
+ return usm.url;
+ };
+
+ module.exports.setTheUsername = function (url, username) {
+ url.username = "";
+ const decoded = punycode.ucs2.decode(username);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.setThePassword = function (url, password) {
+ url.password = "";
+ const decoded = punycode.ucs2.decode(password);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.serializeHost = serializeHost;
+
+ module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
+
+ module.exports.serializeInteger = function (integer) {
+ return String(integer);
+ };
+
+ module.exports.parseURL = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ // We don't handle blobs, so this just delegates:
+ return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
+ };
+} (urlStateMachine));
+
+var urlStateMachineExports = urlStateMachine.exports;
+
+const usm = urlStateMachineExports;
+
+URLImpl.implementation = class URLImpl {
+ constructor(constructorArgs) {
+ const url = constructorArgs[0];
+ const base = constructorArgs[1];
+
+ let parsedBase = null;
+ if (base !== undefined) {
+ parsedBase = usm.basicURLParse(base);
+ if (parsedBase === "failure") {
+ throw new TypeError("Invalid base URL");
+ }
+ }
+
+ const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+
+ // TODO: query stuff
+ }
+
+ get href() {
+ return usm.serializeURL(this._url);
+ }
+
+ set href(v) {
+ const parsedURL = usm.basicURLParse(v);
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+ }
+
+ get origin() {
+ return usm.serializeURLOrigin(this._url);
+ }
+
+ get protocol() {
+ return this._url.scheme + ":";
+ }
+
+ set protocol(v) {
+ usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
+ }
+
+ get username() {
+ return this._url.username;
+ }
+
+ set username(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setTheUsername(this._url, v);
+ }
+
+ get password() {
+ return this._url.password;
+ }
+
+ set password(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setThePassword(this._url, v);
+ }
+
+ get host() {
+ const url = this._url;
+
+ if (url.host === null) {
+ return "";
+ }
+
+ if (url.port === null) {
+ return usm.serializeHost(url.host);
+ }
+
+ return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
+ }
+
+ set host(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
+ }
+
+ get hostname() {
+ if (this._url.host === null) {
+ return "";
+ }
+
+ return usm.serializeHost(this._url.host);
+ }
+
+ set hostname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
+ }
+
+ get port() {
+ if (this._url.port === null) {
+ return "";
+ }
+
+ return usm.serializeInteger(this._url.port);
+ }
+
+ set port(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ if (v === "") {
+ this._url.port = null;
+ } else {
+ usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
+ }
+ }
+
+ get pathname() {
+ if (this._url.cannotBeABaseURL) {
+ return this._url.path[0];
+ }
+
+ if (this._url.path.length === 0) {
+ return "";
+ }
+
+ return "/" + this._url.path.join("/");
+ }
+
+ set pathname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ this._url.path = [];
+ usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
+ }
+
+ get search() {
+ if (this._url.query === null || this._url.query === "") {
+ return "";
+ }
+
+ return "?" + this._url.query;
+ }
+
+ set search(v) {
+ // TODO: query stuff
+
+ const url = this._url;
+
+ if (v === "") {
+ url.query = null;
+ return;
+ }
+
+ const input = v[0] === "?" ? v.substring(1) : v;
+ url.query = "";
+ usm.basicURLParse(input, { url, stateOverride: "query" });
+ }
+
+ get hash() {
+ if (this._url.fragment === null || this._url.fragment === "") {
+ return "";
+ }
+
+ return "#" + this._url.fragment;
+ }
+
+ set hash(v) {
+ if (v === "") {
+ this._url.fragment = null;
+ return;
+ }
+
+ const input = v[0] === "#" ? v.substring(1) : v;
+ this._url.fragment = "";
+ usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
+ }
+
+ toJSON() {
+ return this.href;
+ }
+};
+
+URL$2.exports;
+
+(function (module) {
+
+ const conversions = lib;
+ const utils = utilsExports;
+ const Impl = URLImpl;
+
+ const impl = utils.implSymbol;
+
+ function URL(url) {
+ if (!this || this[impl] || !(this instanceof URL)) {
+ throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
+ }
+ if (arguments.length < 1) {
+ throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 2; ++i) {
+ args[i] = arguments[i];
+ }
+ args[0] = conversions["USVString"](args[0]);
+ if (args[1] !== undefined) {
+ args[1] = conversions["USVString"](args[1]);
+ }
+
+ module.exports.setup(this, args);
+ }
+
+ URL.prototype.toJSON = function toJSON() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 0; ++i) {
+ args[i] = arguments[i];
+ }
+ return this[impl].toJSON.apply(this[impl], args);
+ };
+ Object.defineProperty(URL.prototype, "href", {
+ get() {
+ return this[impl].href;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].href = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ URL.prototype.toString = function () {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return this.href;
+ };
+
+ Object.defineProperty(URL.prototype, "origin", {
+ get() {
+ return this[impl].origin;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "protocol", {
+ get() {
+ return this[impl].protocol;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].protocol = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "username", {
+ get() {
+ return this[impl].username;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].username = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "password", {
+ get() {
+ return this[impl].password;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].password = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "host", {
+ get() {
+ return this[impl].host;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].host = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hostname", {
+ get() {
+ return this[impl].hostname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hostname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "port", {
+ get() {
+ return this[impl].port;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].port = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "pathname", {
+ get() {
+ return this[impl].pathname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].pathname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "search", {
+ get() {
+ return this[impl].search;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].search = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hash", {
+ get() {
+ return this[impl].hash;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hash = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+
+ module.exports = {
+ is(obj) {
+ return !!obj && obj[impl] instanceof Impl.implementation;
+ },
+ create(constructorArgs, privateData) {
+ let obj = Object.create(URL.prototype);
+ this.setup(obj, constructorArgs, privateData);
+ return obj;
+ },
+ setup(obj, constructorArgs, privateData) {
+ if (!privateData) privateData = {};
+ privateData.wrapper = obj;
+
+ obj[impl] = new Impl.implementation(constructorArgs, privateData);
+ obj[impl][utils.wrapperSymbol] = obj;
+ },
+ interface: URL,
+ expose: {
+ Window: { URL: URL },
+ Worker: { URL: URL }
+ }
+ };
+} (URL$2));
+
+var URLExports = URL$2.exports;
+
+publicApi.URL = URLExports.interface;
+publicApi.serializeURL = urlStateMachineExports.serializeURL;
+publicApi.serializeURLOrigin = urlStateMachineExports.serializeURLOrigin;
+publicApi.basicURLParse = urlStateMachineExports.basicURLParse;
+publicApi.setTheUsername = urlStateMachineExports.setTheUsername;
+publicApi.setThePassword = urlStateMachineExports.setThePassword;
+publicApi.serializeHost = urlStateMachineExports.serializeHost;
+publicApi.serializeInteger = urlStateMachineExports.serializeInteger;
+publicApi.parseURL = urlStateMachineExports.parseURL;
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable$2 = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob$1 {
+ constructor() {
+ this[TYPE] = '';
+
+ const blobParts = arguments[0];
+ const options = arguments[1];
+
+ const buffers = [];
+ let size = 0;
+
+ if (blobParts) {
+ const a = blobParts;
+ const length = Number(a.length);
+ for (let i = 0; i < length; i++) {
+ const element = a[i];
+ let buffer;
+ if (element instanceof Buffer) {
+ buffer = element;
+ } else if (ArrayBuffer.isView(element)) {
+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+ } else if (element instanceof ArrayBuffer) {
+ buffer = Buffer.from(element);
+ } else if (element instanceof Blob$1) {
+ buffer = element[BUFFER];
+ } else {
+ buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+ }
+ size += buffer.length;
+ buffers.push(buffer);
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers);
+
+ let type = options && options.type !== undefined && String(options.type).toLowerCase();
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type;
+ }
+ }
+ get size() {
+ return this[BUFFER].length;
+ }
+ get type() {
+ return this[TYPE];
+ }
+ text() {
+ return Promise.resolve(this[BUFFER].toString());
+ }
+ arrayBuffer() {
+ const buf = this[BUFFER];
+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ return Promise.resolve(ab);
+ }
+ stream() {
+ const readable = new Readable$2();
+ readable._read = function () {};
+ readable.push(this[BUFFER]);
+ readable.push(null);
+ return readable;
+ }
+ toString() {
+ return '[object Blob]';
+ }
+ slice() {
+ const size = this.size;
+
+ const start = arguments[0];
+ const end = arguments[1];
+ let relativeStart, relativeEnd;
+ if (start === undefined) {
+ relativeStart = 0;
+ } else if (start < 0) {
+ relativeStart = Math.max(size + start, 0);
+ } else {
+ relativeStart = Math.min(start, size);
+ }
+ if (end === undefined) {
+ relativeEnd = size;
+ } else if (end < 0) {
+ relativeEnd = Math.max(size + end, 0);
+ } else {
+ relativeEnd = Math.min(end, size);
+ }
+ const span = Math.max(relativeEnd - relativeStart, 0);
+
+ const buffer = this[BUFFER];
+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+ const blob = new Blob$1([], { type: arguments[2] });
+ blob[BUFFER] = slicedBuffer;
+ return blob;
+ }
+}
+
+Object.defineProperties(Blob$1.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+ slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob$1.prototype, Symbol.toStringTag, {
+ value: 'Blob',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param String message Error message for human
+ * @param String type Error type for machine
+ * @param String systemError For Node.js system error
+ * @return FetchError
+ */
+function FetchError(message, type, systemError) {
+ Error.call(this, message);
+
+ this.message = message;
+ this.type = type;
+
+ // when err.type is `system`, err.code contains system error code
+ if (systemError) {
+ this.code = this.errno = systemError.code;
+ }
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+ convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+function Body(body) {
+ var _this = this;
+
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$size = _ref.size;
+
+ let size = _ref$size === undefined ? 0 : _ref$size;
+ var _ref$timeout = _ref.timeout;
+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+ if (body == null) {
+ // body is undefined or null
+ body = null;
+ } else if (isURLSearchParams(body)) {
+ // body is a URLSearchParams
+ body = Buffer.from(body.toString());
+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+ // body is ArrayBuffer
+ body = Buffer.from(body);
+ } else if (ArrayBuffer.isView(body)) {
+ // body is ArrayBufferView
+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+ } else if (body instanceof Stream) ; else {
+ // none of the above
+ // coerce to string then buffer
+ body = Buffer.from(String(body));
+ }
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null
+ };
+ this.size = size;
+ this.timeout = timeout;
+
+ if (body instanceof Stream) {
+ body.on('error', function (err) {
+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+ _this[INTERNALS].error = error;
+ });
+ }
+}
+
+Body.prototype = {
+ get body() {
+ return this[INTERNALS].body;
+ },
+
+ get bodyUsed() {
+ return this[INTERNALS].disturbed;
+ },
+
+ /**
+ * Decode response as ArrayBuffer
+ *
+ * @return Promise
+ */
+ arrayBuffer() {
+ return consumeBody.call(this).then(function (buf) {
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ });
+ },
+
+ /**
+ * Return raw response as Blob
+ *
+ * @return Promise
+ */
+ blob() {
+ let ct = this.headers && this.headers.get('content-type') || '';
+ return consumeBody.call(this).then(function (buf) {
+ return Object.assign(
+ // Prevent copying
+ new Blob$1([], {
+ type: ct.toLowerCase()
+ }), {
+ [BUFFER]: buf
+ });
+ });
+ },
+
+ /**
+ * Decode response as json
+ *
+ * @return Promise
+ */
+ json() {
+ var _this2 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ try {
+ return JSON.parse(buffer.toString());
+ } catch (err) {
+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+ }
+ });
+ },
+
+ /**
+ * Decode response as text
+ *
+ * @return Promise
+ */
+ text() {
+ return consumeBody.call(this).then(function (buffer) {
+ return buffer.toString();
+ });
+ },
+
+ /**
+ * Decode response as buffer (non-spec api)
+ *
+ * @return Promise
+ */
+ buffer() {
+ return consumeBody.call(this);
+ },
+
+ /**
+ * Decode response as text, while automatically detecting the encoding and
+ * trying to decode to UTF-8 (non-spec api)
+ *
+ * @return Promise
+ */
+ textConverted() {
+ var _this3 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ return convertBody(buffer, _this3.headers);
+ });
+ }
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+ for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+ // istanbul ignore else: future proof
+ if (!(name in proto)) {
+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+ Object.defineProperty(proto, name, desc);
+ }
+ }
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return Promise
+ */
+function consumeBody() {
+ var _this4 = this;
+
+ if (this[INTERNALS].disturbed) {
+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+ }
+
+ this[INTERNALS].disturbed = true;
+
+ if (this[INTERNALS].error) {
+ return Body.Promise.reject(this[INTERNALS].error);
+ }
+
+ let body = this.body;
+
+ // body is null
+ if (body === null) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is blob
+ if (isBlob(body)) {
+ body = body.stream();
+ }
+
+ // body is buffer
+ if (Buffer.isBuffer(body)) {
+ return Body.Promise.resolve(body);
+ }
+
+ // istanbul ignore if: should never happen
+ if (!(body instanceof Stream)) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is stream
+ // get ready to actually consume the body
+ let accum = [];
+ let accumBytes = 0;
+ let abort = false;
+
+ return new Body.Promise(function (resolve, reject) {
+ let resTimeout;
+
+ // allow timeout on slow response body
+ if (_this4.timeout) {
+ resTimeout = setTimeout(function () {
+ abort = true;
+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+ }, _this4.timeout);
+ }
+
+ // handle stream errors
+ body.on('error', function (err) {
+ if (err.name === 'AbortError') {
+ // if the request was aborted, reject with this Error
+ abort = true;
+ reject(err);
+ } else {
+ // other errors, such as incorrect content-encoding
+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+
+ body.on('data', function (chunk) {
+ if (abort || chunk === null) {
+ return;
+ }
+
+ if (_this4.size && accumBytes + chunk.length > _this4.size) {
+ abort = true;
+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+ return;
+ }
+
+ accumBytes += chunk.length;
+ accum.push(chunk);
+ });
+
+ body.on('end', function () {
+ if (abort) {
+ return;
+ }
+
+ clearTimeout(resTimeout);
+
+ try {
+ resolve(Buffer.concat(accum, accumBytes));
+ } catch (err) {
+ // handle streams that have accumulated too much data (issue #414)
+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+ });
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param Buffer buffer Incoming buffer
+ * @param String encoding Target encoding
+ * @return String
+ */
+function convertBody(buffer, headers) {
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function');
+ }
+
+ const ct = headers.get('content-type');
+ let charset = 'utf-8';
+ let res, str;
+
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct);
+ }
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ str = buffer.slice(0, 1024).toString();
+
+ // html5
+ if (!res && str) {
+ res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+ this[MAP] = Object.create(null);
+
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw();
+ const headerNames = Object.keys(rawHeaders);
+
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value);
+ }
+ }
+
+ return;
+ }
+
+ // We don't worry about converting prop to ByteString here as append()
+ // will handle it.
+ if (init == null) ; else if (typeof init === 'object') {
+ const method = init[Symbol.iterator];
+ if (method != null) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable');
+ }
+
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = [];
+ for (const pair of init) {
+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable');
+ }
+ pairs.push(Array.from(pair));
+ }
+
+ for (const pair of pairs) {
+ if (pair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple');
+ }
+ this.append(pair[0], pair[1]);
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ const value = init[key];
+ this.append(key, value);
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object');
+ }
+ }
+
+ /**
+ * Return combined header value given name
+ *
+ * @param String name Header name
+ * @return Mixed
+ */
+ get(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find$2(this[MAP], name);
+ if (key === undefined) {
+ return null;
+ }
+
+ return this[MAP][key].join(', ');
+ }
+
+ /**
+ * Iterate over all headers
+ *
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
+ * @param Boolean thisArg `this` context for callback function
+ * @return Void
+ */
+ forEach(callback) {
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+ let pairs = getHeaders(this);
+ let i = 0;
+ while (i < pairs.length) {
+ var _pairs$i = pairs[i];
+ const name = _pairs$i[0],
+ value = _pairs$i[1];
+
+ callback.call(thisArg, value, name, this);
+ pairs = getHeaders(this);
+ i++;
+ }
+ }
+
+ /**
+ * Overwrite header values given name
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ set(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find$2(this[MAP], name);
+ this[MAP][key !== undefined ? key : name] = [value];
+ }
+
+ /**
+ * Append a value onto existing header
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ append(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find$2(this[MAP], name);
+ if (key !== undefined) {
+ this[MAP][key].push(value);
+ } else {
+ this[MAP][name] = [value];
+ }
+ }
+
+ /**
+ * Check for header name existence
+ *
+ * @param String name Header name
+ * @return Boolean
+ */
+ has(name) {
+ name = `${name}`;
+ validateName(name);
+ return find$2(this[MAP], name) !== undefined;
+ }
+
+ /**
+ * Delete all header values given name
+ *
+ * @param String name Header name
+ * @return Void
+ */
+ delete(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find$2(this[MAP], name);
+ if (key !== undefined) {
+ delete this[MAP][key];
+ }
+ }
+
+ /**
+ * Return raw headers (non-spec api)
+ *
+ * @return Object
+ */
+ raw() {
+ return this[MAP];
+ }
+
+ /**
+ * Get an iterator on keys.
+ *
+ * @return Iterator
+ */
+ keys() {
+ return createHeadersIterator(this, 'key');
+ }
+
+ /**
+ * Get an iterator on values.
+ *
+ * @return Iterator
+ */
+ values() {
+ return createHeadersIterator(this, 'value');
+ }
+
+ /**
+ * Get an iterator on entries.
+ *
+ * This is the default iterator of the Headers object.
+ *
+ * @return Iterator
+ */
+ [Symbol.iterator]() {
+ return createHeadersIterator(this, 'key+value');
+ }
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+ value: 'Headers',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+ const keys = Object.keys(headers[MAP]).sort();
+ return keys.map(kind === 'key' ? function (k) {
+ return k.toLowerCase();
+ } : kind === 'value' ? function (k) {
+ return headers[MAP][k].join(', ');
+ } : function (k) {
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
+ });
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+ const iterator = Object.create(HeadersIteratorPrototype);
+ iterator[INTERNAL] = {
+ target,
+ kind,
+ index: 0
+ };
+ return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+ next() {
+ // istanbul ignore if
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator');
+ }
+
+ var _INTERNAL = this[INTERNAL];
+ const target = _INTERNAL.target,
+ kind = _INTERNAL.kind,
+ index = _INTERNAL.index;
+
+ const values = getHeaders(target, kind);
+ const len = values.length;
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ this[INTERNAL].index = index + 1;
+
+ return {
+ value: values[index],
+ done: false
+ };
+ }
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+ value: 'HeadersIterator',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param Headers headers
+ * @return Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find$2(headers[MAP], 'Host');
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
+ }
+
+ return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param Object obj Object of headers
+ * @return Headers
+ */
+function createHeadersLenient(obj) {
+ const headers = new Headers();
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue;
+ }
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue;
+ }
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val];
+ } else {
+ headers[MAP][name].push(val);
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]];
+ }
+ }
+ return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+class Response$1 {
+ constructor() {
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ Body.call(this, body, opts);
+
+ const status = opts.status || 200;
+ const headers = new Headers(opts.headers);
+
+ if (body != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ this[INTERNALS$1] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter
+ };
+ }
+
+ get url() {
+ return this[INTERNALS$1].url || '';
+ }
+
+ get status() {
+ return this[INTERNALS$1].status;
+ }
+
+ /**
+ * Convenience property representing if the request ended normally
+ */
+ get ok() {
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+ }
+
+ get redirected() {
+ return this[INTERNALS$1].counter > 0;
+ }
+
+ get statusText() {
+ return this[INTERNALS$1].statusText;
+ }
+
+ get headers() {
+ return this[INTERNALS$1].headers;
+ }
+
+ /**
+ * Clone this response
+ *
+ * @return Response
+ */
+ clone() {
+ return new Response$1(clone$2(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected
+ });
+ }
+}
+
+Body.mixIn(Response$1.prototype);
+
+Object.defineProperties(Response$1.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true }
+});
+
+Object.defineProperty(Response$1.prototype, Symbol.toStringTag, {
+ value: 'Response',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+const URL = Url$1.URL || publicApi.URL;
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url$1.parse;
+const format_url = Url$1.format;
+
+/**
+ * Wrapper around `new URL` to handle arbitrary URLs
+ *
+ * @param {string} urlStr
+ * @return {void}
+ */
+function parseURL(urlStr) {
+ /*
+ Check whether the URL is absolute or not
+ Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
+ Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
+ */
+ if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
+ urlStr = new URL(urlStr).toString();
+ }
+
+ // Fallback to old implementation for arbitrary URLs
+ return parse_url(urlStr);
+}
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param Mixed input
+ * @return Boolean
+ */
+function isRequest(input) {
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+ return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param Mixed input Url or Request instance
+ * @param Object init Custom options
+ * @return Void
+ */
+class Request {
+ constructor(input) {
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ let parsedURL;
+
+ // normalize input
+ if (!isRequest(input)) {
+ if (input && input.href) {
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
+ // will fall into this branch also (since their `toString()` will return
+ // `href` property anyway)
+ parsedURL = parseURL(input.href);
+ } else {
+ // coerce input to a string before attempting to parse
+ parsedURL = parseURL(`${input}`);
+ }
+ input = {};
+ } else {
+ parsedURL = parseURL(input.url);
+ }
+
+ let method = init.method || input.method || 'GET';
+ method = method.toUpperCase();
+
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+ throw new TypeError('Request with GET/HEAD method cannot have body');
+ }
+
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone$2(input) : null;
+
+ Body.call(this, inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0
+ });
+
+ const headers = new Headers(init.headers || input.headers || {});
+
+ if (inputBody != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ let signal = isRequest(input) ? input.signal : null;
+ if ('signal' in init) signal = init.signal;
+
+ if (signal != null && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
+ }
+
+ this[INTERNALS$2] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal
+ };
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+ this.counter = init.counter || input.counter || 0;
+ this.agent = init.agent || input.agent;
+ }
+
+ get method() {
+ return this[INTERNALS$2].method;
+ }
+
+ get url() {
+ return format_url(this[INTERNALS$2].parsedURL);
+ }
+
+ get headers() {
+ return this[INTERNALS$2].headers;
+ }
+
+ get redirect() {
+ return this[INTERNALS$2].redirect;
+ }
+
+ get signal() {
+ return this[INTERNALS$2].signal;
+ }
+
+ /**
+ * Clone this request
+ *
+ * @return Request
+ */
+ clone() {
+ return new Request(this);
+ }
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+ value: 'Request',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param Request A Request instance
+ * @return Object The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+ const parsedURL = request[INTERNALS$2].parsedURL;
+ const headers = new Headers(request[INTERNALS$2].headers);
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*');
+ }
+
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname) {
+ throw new TypeError('Only absolute URLs are supported');
+ }
+
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported');
+ }
+
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ let contentLengthValue = null;
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+ contentLengthValue = '0';
+ }
+ if (request.body != null) {
+ const totalBytes = getTotalBytes(request);
+ if (typeof totalBytes === 'number') {
+ contentLengthValue = String(totalBytes);
+ }
+ }
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue);
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate');
+ }
+
+ let agent = request.agent;
+ if (typeof agent === 'function') {
+ agent = agent(parsedURL);
+ }
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close');
+ }
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ return Object.assign({}, parsedURL, {
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent
+ });
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param String message Error message for human
+ * @return AbortError
+ */
+function AbortError(message) {
+ Error.call(this, message);
+
+ this.type = 'aborted';
+ this.message = message;
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+const URL$1 = Url$1.URL || publicApi.URL;
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1$1 = Stream.PassThrough;
+
+const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
+ const orig = new URL$1(original).hostname;
+ const dest = new URL$1(destination).hostname;
+
+ return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
+};
+
+/**
+ * isSameProtocol reports whether the two provided URLs use the same protocol.
+ *
+ * Both domains must already be in canonical form.
+ * @param {string|URL} original
+ * @param {string|URL} destination
+ */
+const isSameProtocol = function isSameProtocol(destination, original) {
+ const orig = new URL$1(original).protocol;
+ const dest = new URL$1(destination).protocol;
+
+ return orig === dest;
+};
+
+/**
+ * Fetch function
+ *
+ * @param Mixed url Absolute url or Request instance
+ * @param Object opts Fetch options
+ * @return Promise
+ */
+function fetch$1(url, opts) {
+
+ // allow custom promise
+ if (!fetch$1.Promise) {
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+ }
+
+ Body.Promise = fetch$1.Promise;
+
+ // wrap http.request into fetch
+ return new fetch$1.Promise(function (resolve, reject) {
+ // build request object
+ const request = new Request(url, opts);
+ const options = getNodeRequestOptions(request);
+
+ const send = (options.protocol === 'https:' ? https : http).request;
+ const signal = request.signal;
+
+ let response = null;
+
+ const abort = function abort() {
+ let error = new AbortError('The user aborted a request.');
+ reject(error);
+ if (request.body && request.body instanceof Stream.Readable) {
+ destroyStream(request.body, error);
+ }
+ if (!response || !response.body) return;
+ response.body.emit('error', error);
+ };
+
+ if (signal && signal.aborted) {
+ abort();
+ return;
+ }
+
+ const abortAndFinalize = function abortAndFinalize() {
+ abort();
+ finalize();
+ };
+
+ // send request
+ const req = send(options);
+ let reqTimeout;
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize);
+ }
+
+ function finalize() {
+ req.abort();
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ clearTimeout(reqTimeout);
+ }
+
+ if (request.timeout) {
+ req.once('socket', function (socket) {
+ reqTimeout = setTimeout(function () {
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+ finalize();
+ }, request.timeout);
+ });
+ }
+
+ req.on('error', function (err) {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+
+ if (response && response.body) {
+ destroyStream(response.body, err);
+ }
+
+ finalize();
+ });
+
+ fixResponseChunkedTransferBadEnding(req, function (err) {
+ if (signal && signal.aborted) {
+ return;
+ }
+
+ if (response && response.body) {
+ destroyStream(response.body, err);
+ }
+ });
+
+ /* c8 ignore next 18 */
+ if (parseInt(process.version.substring(1)) < 14) {
+ // Before Node.js 14, pipeline() does not fully support async iterators and does not always
+ // properly handle when the socket close/end events are out of order.
+ req.on('socket', function (s) {
+ s.addListener('close', function (hadError) {
+ // if a data listener is still present we didn't end cleanly
+ const hasDataListener = s.listenerCount('data') > 0;
+
+ // if end happened before close but the socket didn't emit an error, do it now
+ if (response && hasDataListener && !hadError && !(signal && signal.aborted)) {
+ const err = new Error('Premature close');
+ err.code = 'ERR_STREAM_PREMATURE_CLOSE';
+ response.body.emit('error', err);
+ }
+ });
+ });
+ }
+
+ req.on('response', function (res) {
+ clearTimeout(reqTimeout);
+
+ const headers = createHeadersLenient(res.headers);
+
+ // HTTP fetch step 5
+ if (fetch$1.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location');
+
+ // HTTP fetch step 5.3
+ let locationURL = null;
+ try {
+ locationURL = location === null ? null : new URL$1(location, request.url).toString();
+ } catch (err) {
+ // error here can only be invalid URL in Location: header
+ // do not throw when options.redirect == manual
+ // let the user extract the errorneous redirect URL
+ if (request.redirect !== 'manual') {
+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
+ finalize();
+ return;
+ }
+ }
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
+ finalize();
+ return;
+ case 'manual':
+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL);
+ } catch (err) {
+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+ reject(err);
+ }
+ }
+ break;
+ case 'follow':
+ // HTTP-redirect fetch step 2
+ if (locationURL === null) {
+ break;
+ }
+
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ size: request.size
+ };
+
+ if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {
+ for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
+ requestOpts.headers.delete(name);
+ }
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+ requestOpts.method = 'GET';
+ requestOpts.body = undefined;
+ requestOpts.headers.delete('content-length');
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch$1(new Request(locationURL, requestOpts)));
+ finalize();
+ return;
+ }
+ }
+
+ // prepare response
+ res.once('end', function () {
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ });
+ let body = res.pipe(new PassThrough$1$1());
+
+ const response_options = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter
+ };
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding');
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+ response = new Response$1(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // For Node v6+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.Z_SYNC_FLUSH,
+ finishFlush: zlib.Z_SYNC_FLUSH
+ };
+
+ // for gzip
+ if (codings == 'gzip' || codings == 'x-gzip') {
+ body = body.pipe(zlib.createGunzip(zlibOptions));
+ response = new Response$1(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // for deflate
+ if (codings == 'deflate' || codings == 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new PassThrough$1$1());
+ raw.once('data', function (chunk) {
+ // see http://stackoverflow.com/questions/37519828
+ if ((chunk[0] & 0x0F) === 0x08) {
+ body = body.pipe(zlib.createInflate());
+ } else {
+ body = body.pipe(zlib.createInflateRaw());
+ }
+ response = new Response$1(body, response_options);
+ resolve(response);
+ });
+ raw.on('end', function () {
+ // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.
+ if (!response) {
+ response = new Response$1(body, response_options);
+ resolve(response);
+ }
+ });
+ return;
+ }
+
+ // for br
+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+ body = body.pipe(zlib.createBrotliDecompress());
+ response = new Response$1(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // otherwise, use response as-is
+ response = new Response$1(body, response_options);
+ resolve(response);
+ });
+
+ writeToStream(req, request);
+ });
+}
+function fixResponseChunkedTransferBadEnding(request, errorCallback) {
+ let socket;
+
+ request.on('socket', function (s) {
+ socket = s;
+ });
+
+ request.on('response', function (response) {
+ const headers = response.headers;
+
+ if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {
+ response.once('close', function (hadError) {
+ // if a data listener is still present we didn't end cleanly
+ const hasDataListener = socket.listenerCount('data') > 0;
+
+ if (hasDataListener && !hadError) {
+ const err = new Error('Premature close');
+ err.code = 'ERR_STREAM_PREMATURE_CLOSE';
+ errorCallback(err);
+ }
+ });
+ }
+ });
+}
+
+function destroyStream(stream, err) {
+ if (stream.destroy) {
+ stream.destroy(err);
+ } else {
+ // node < 8
+ stream.emit('error', err);
+ stream.end();
+ }
+}
+
+/**
+ * Redirect code matching
+ *
+ * @param Number code Status code
+ * @return Boolean
+ */
+fetch$1.isRedirect = function (code) {
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch$1.Promise = global.Promise;
+
+var cookie = {};
+
+/** Highest positive signed 32-bit float value */
+const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
+
+/** Bootstring parameters */
+const base = 36;
+const tMin = 1;
+const tMax = 26;
+const skew = 38;
+const damp = 700;
+const initialBias = 72;
+const initialN = 128; // 0x80
+const delimiter = '-'; // '\x2D'
+
+/** Regular expressions */
+const regexPunycode = /^xn--/;
+const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too.
+const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
+
+/** Error messages */
+const errors$5 = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+};
+
+/** Convenience shortcuts */
+const baseMinusTMin = base - tMin;
+const floor = Math.floor;
+const stringFromCharCode = String.fromCharCode;
+
+/*--------------------------------------------------------------------------*/
+
+/**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+function error(type) {
+ throw new RangeError(errors$5[type]);
+}
+
+/**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+function map(array, callback) {
+ const result = [];
+ let length = array.length;
+ while (length--) {
+ result[length] = callback(array[length]);
+ }
+ return result;
+}
+
+/**
+ * A simple `Array#map`-like wrapper to work with domain name strings or email
+ * addresses.
+ * @private
+ * @param {String} domain The domain name or email address.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {String} A new string of characters returned by the callback
+ * function.
+ */
+function mapDomain(domain, callback) {
+ const parts = domain.split('@');
+ let result = '';
+ if (parts.length > 1) {
+ // In email addresses, only the domain name should be punycoded. Leave
+ // the local part (i.e. everything up to `@`) intact.
+ result = parts[0] + '@';
+ domain = parts[1];
+ }
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ domain = domain.replace(regexSeparators, '\x2E');
+ const labels = domain.split('.');
+ const encoded = map(labels, callback).join('.');
+ return result + encoded;
+}
+
+/**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+function ucs2decode(string) {
+ const output = [];
+ let counter = 0;
+ const length = string.length;
+ while (counter < length) {
+ const value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // It's a high surrogate, and there is a next character.
+ const extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // It's an unmatched surrogate; only append this code unit, in case the
+ // next code unit is the high surrogate of a surrogate pair.
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+}
+
+/**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+const ucs2encode = codePoints => String.fromCodePoint(...codePoints);
+
+/**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+const basicToDigit = function(codePoint) {
+ if (codePoint >= 0x30 && codePoint < 0x3A) {
+ return 26 + (codePoint - 0x30);
+ }
+ if (codePoint >= 0x41 && codePoint < 0x5B) {
+ return codePoint - 0x41;
+ }
+ if (codePoint >= 0x61 && codePoint < 0x7B) {
+ return codePoint - 0x61;
+ }
+ return base;
+};
+
+/**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+const digitToBasic = function(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+};
+
+/**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * https://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+const adapt = function(delta, numPoints, firstTime) {
+ let k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+};
+
+/**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+const decode$1 = function(input) {
+ // Don't use UCS-2.
+ const output = [];
+ const inputLength = input.length;
+ let i = 0;
+ let n = initialN;
+ let bias = initialBias;
+
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
+
+ let basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
+
+ for (let j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
+
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
+
+ for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ const oldi = i;
+ for (let w = 1, k = base; /* no condition */; k += base) {
+
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
+
+ const digit = basicToDigit(input.charCodeAt(index++));
+
+ if (digit >= base) {
+ error('invalid-input');
+ }
+ if (digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
+
+ i += digit * w;
+ const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+
+ if (digit < t) {
+ break;
+ }
+
+ const baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
+
+ w *= baseMinusT;
+
+ }
+
+ const out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
+
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
+
+ n += floor(i / out);
+ i %= out;
+
+ // Insert `n` at position `i` of the output.
+ output.splice(i++, 0, n);
+
+ }
+
+ return String.fromCodePoint(...output);
+};
+
+/**
+ * Converts a string of Unicode symbols (e.g. a domain name label) to a
+ * Punycode string of ASCII-only symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+const encode$1 = function(input) {
+ const output = [];
+
+ // Convert the input in UCS-2 to an array of Unicode code points.
+ input = ucs2decode(input);
+
+ // Cache the length.
+ const inputLength = input.length;
+
+ // Initialize the state.
+ let n = initialN;
+ let delta = 0;
+ let bias = initialBias;
+
+ // Handle the basic code points.
+ for (const currentValue of input) {
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
+
+ const basicLength = output.length;
+ let handledCPCount = basicLength;
+
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
+
+ // Finish the basic string with a delimiter unless it's empty.
+ if (basicLength) {
+ output.push(delimiter);
+ }
+
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
+
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ let m = maxInt;
+ for (const currentValue of input) {
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
+
+ // Increase `delta` enough to advance the decoder's state to ,
+ // but guard against overflow.
+ const handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
+
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
+
+ for (const currentValue of input) {
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
+ if (currentValue === n) {
+ // Represent delta as a generalized variable-length integer.
+ let q = delta;
+ for (let k = base; /* no condition */; k += base) {
+ const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ const qMinusT = q - t;
+ const baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
+
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
+
+ ++delta;
+ ++n;
+
+ }
+ return output.join('');
+};
+
+/**
+ * Converts a Punycode string representing a domain name or an email address
+ * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+ * it doesn't matter if you call it on a string that has already been
+ * converted to Unicode.
+ * @memberOf punycode
+ * @param {String} input The Punycoded domain name or email address to
+ * convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+const toUnicode = function(input) {
+ return mapDomain(input, function(string) {
+ return regexPunycode.test(string)
+ ? decode$1(string.slice(4).toLowerCase())
+ : string;
+ });
+};
+
+/**
+ * Converts a Unicode string representing a domain name or an email address to
+ * Punycode. Only the non-ASCII parts of the domain name will be converted,
+ * i.e. it doesn't matter if you call it with a domain that's already in
+ * ASCII.
+ * @memberOf punycode
+ * @param {String} input The domain name or email address to convert, as a
+ * Unicode string.
+ * @returns {String} The Punycode representation of the given domain name or
+ * email address.
+ */
+const toASCII = function(input) {
+ return mapDomain(input, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode$1(string)
+ : string;
+ });
+};
+
+/*--------------------------------------------------------------------------*/
+
+/** Define the public API */
+const punycode$1 = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '2.1.0',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode$1,
+ 'encode': encode$1,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+};
+
+var punycode_es6 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ ucs2decode: ucs2decode,
+ ucs2encode: ucs2encode,
+ decode: decode$1,
+ encode: encode$1,
+ toASCII: toASCII,
+ toUnicode: toUnicode,
+ default: punycode$1
+});
+
+var require$$0 = /*@__PURE__*/getAugmentedNamespace(punycode_es6);
+
+/**
+ * Check if we're required to add a port number.
+ *
+ * @see https://url.spec.whatwg.org/#default-port
+ * @param {Number|String} port Port number we need to check
+ * @param {String} protocol Protocol we need to check against.
+ * @returns {Boolean} Is it a default port for the given protocol
+ * @api private
+ */
+var requiresPort = function required(port, protocol) {
+ protocol = protocol.split(':')[0];
+ port = +port;
+
+ if (!port) return false;
+
+ switch (protocol) {
+ case 'http':
+ case 'ws':
+ return port !== 80;
+
+ case 'https':
+ case 'wss':
+ return port !== 443;
+
+ case 'ftp':
+ return port !== 21;
+
+ case 'gopher':
+ return port !== 70;
+
+ case 'file':
+ return false;
+ }
+
+ return port !== 0;
+};
+
+var querystringify$1 = {};
+
+var has = Object.prototype.hasOwnProperty
+ , undef;
+
+/**
+ * Decode a URI encoded string.
+ *
+ * @param {String} input The URI encoded string.
+ * @returns {String|Null} The decoded string.
+ * @api private
+ */
+function decode(input) {
+ try {
+ return decodeURIComponent(input.replace(/\+/g, ' '));
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Attempts to encode a given input.
+ *
+ * @param {String} input The string that needs to be encoded.
+ * @returns {String|Null} The encoded string.
+ * @api private
+ */
+function encode$2(input) {
+ try {
+ return encodeURIComponent(input);
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Simple query string parser.
+ *
+ * @param {String} query The query string that needs to be parsed.
+ * @returns {Object}
+ * @api public
+ */
+function querystring(query) {
+ var parser = /([^=?#&]+)=?([^&]*)/g
+ , result = {}
+ , part;
+
+ while (part = parser.exec(query)) {
+ var key = decode(part[1])
+ , value = decode(part[2]);
+
+ //
+ // Prevent overriding of existing properties. This ensures that build-in
+ // methods like `toString` or __proto__ are not overriden by malicious
+ // querystrings.
+ //
+ // In the case if failed decoding, we want to omit the key/value pairs
+ // from the result.
+ //
+ if (key === null || value === null || key in result) continue;
+ result[key] = value;
+ }
+
+ return result;
+}
+
+/**
+ * Transform a query string to an object.
+ *
+ * @param {Object} obj Object that should be transformed.
+ * @param {String} prefix Optional prefix.
+ * @returns {String}
+ * @api public
+ */
+function querystringify(obj, prefix) {
+ prefix = prefix || '';
+
+ var pairs = []
+ , value
+ , key;
+
+ //
+ // Optionally prefix with a '?' if needed
+ //
+ if ('string' !== typeof prefix) prefix = '?';
+
+ for (key in obj) {
+ if (has.call(obj, key)) {
+ value = obj[key];
+
+ //
+ // Edge cases where we actually want to encode the value to an empty
+ // string instead of the stringified value.
+ //
+ if (!value && (value === null || value === undef || isNaN(value))) {
+ value = '';
+ }
+
+ key = encode$2(key);
+ value = encode$2(value);
+
+ //
+ // If we failed to encode the strings, we should bail out as we don't
+ // want to add invalid strings to the query.
+ //
+ if (key === null || value === null) continue;
+ pairs.push(key +'='+ value);
+ }
+ }
+
+ return pairs.length ? prefix + pairs.join('&') : '';
+}
+
+//
+// Expose the module.
+//
+querystringify$1.stringify = querystringify;
+querystringify$1.parse = querystring;
+
+var required = requiresPort
+ , qs = querystringify$1
+ , controlOrWhitespace = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/
+ , CRHTLF = /[\n\r\t]/g
+ , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//
+ , port = /:\d+$/
+ , protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i
+ , windowsDriveLetter = /^[a-zA-Z]:/;
+
+/**
+ * Remove control characters and whitespace from the beginning of a string.
+ *
+ * @param {Object|String} str String to trim.
+ * @returns {String} A new string representing `str` stripped of control
+ * characters and whitespace from its beginning.
+ * @public
+ */
+function trimLeft(str) {
+ return (str ? str : '').toString().replace(controlOrWhitespace, '');
+}
+
+/**
+ * These are the parse rules for the URL parser, it informs the parser
+ * about:
+ *
+ * 0. The char it Needs to parse, if it's a string it should be done using
+ * indexOf, RegExp using exec and NaN means set as current value.
+ * 1. The property we should set when parsing this value.
+ * 2. Indication if it's backwards or forward parsing, when set as number it's
+ * the value of extra chars that should be split off.
+ * 3. Inherit from location if non existing in the parser.
+ * 4. `toLowerCase` the resulting value.
+ */
+var rules = [
+ ['#', 'hash'], // Extract from the back.
+ ['?', 'query'], // Extract from the back.
+ function sanitize(address, url) { // Sanitize what is left of the address
+ return isSpecial(url.protocol) ? address.replace(/\\/g, '/') : address;
+ },
+ ['/', 'pathname'], // Extract from the back.
+ ['@', 'auth', 1], // Extract from the front.
+ [NaN, 'host', undefined, 1, 1], // Set left over value.
+ [/:(\d*)$/, 'port', undefined, 1], // RegExp the back.
+ [NaN, 'hostname', undefined, 1, 1] // Set left over.
+];
+
+/**
+ * These properties should not be copied or inherited from. This is only needed
+ * for all non blob URL's as a blob URL does not include a hash, only the
+ * origin.
+ *
+ * @type {Object}
+ * @private
+ */
+var ignore = { hash: 1, query: 1 };
+
+/**
+ * The location object differs when your code is loaded through a normal page,
+ * Worker or through a worker using a blob. And with the blobble begins the
+ * trouble as the location object will contain the URL of the blob, not the
+ * location of the page where our code is loaded in. The actual origin is
+ * encoded in the `pathname` so we can thankfully generate a good "default"
+ * location from it so we can generate proper relative URL's again.
+ *
+ * @param {Object|String} loc Optional default location object.
+ * @returns {Object} lolcation object.
+ * @public
+ */
+function lolcation(loc) {
+ var globalVar;
+
+ if (typeof window !== 'undefined') globalVar = window;
+ else if (typeof commonjsGlobal !== 'undefined') globalVar = commonjsGlobal;
+ else if (typeof self !== 'undefined') globalVar = self;
+ else globalVar = {};
+
+ var location = globalVar.location || {};
+ loc = loc || location;
+
+ var finaldestination = {}
+ , type = typeof loc
+ , key;
+
+ if ('blob:' === loc.protocol) {
+ finaldestination = new Url(unescape(loc.pathname), {});
+ } else if ('string' === type) {
+ finaldestination = new Url(loc, {});
+ for (key in ignore) delete finaldestination[key];
+ } else if ('object' === type) {
+ for (key in loc) {
+ if (key in ignore) continue;
+ finaldestination[key] = loc[key];
+ }
+
+ if (finaldestination.slashes === undefined) {
+ finaldestination.slashes = slashes.test(loc.href);
+ }
+ }
+
+ return finaldestination;
+}
+
+/**
+ * Check whether a protocol scheme is special.
+ *
+ * @param {String} The protocol scheme of the URL
+ * @return {Boolean} `true` if the protocol scheme is special, else `false`
+ * @private
+ */
+function isSpecial(scheme) {
+ return (
+ scheme === 'file:' ||
+ scheme === 'ftp:' ||
+ scheme === 'http:' ||
+ scheme === 'https:' ||
+ scheme === 'ws:' ||
+ scheme === 'wss:'
+ );
+}
+
+/**
+ * @typedef ProtocolExtract
+ * @type Object
+ * @property {String} protocol Protocol matched in the URL, in lowercase.
+ * @property {Boolean} slashes `true` if protocol is followed by "//", else `false`.
+ * @property {String} rest Rest of the URL that is not part of the protocol.
+ */
+
+/**
+ * Extract protocol information from a URL with/without double slash ("//").
+ *
+ * @param {String} address URL we want to extract from.
+ * @param {Object} location
+ * @return {ProtocolExtract} Extracted information.
+ * @private
+ */
+function extractProtocol(address, location) {
+ address = trimLeft(address);
+ address = address.replace(CRHTLF, '');
+ location = location || {};
+
+ var match = protocolre.exec(address);
+ var protocol = match[1] ? match[1].toLowerCase() : '';
+ var forwardSlashes = !!match[2];
+ var otherSlashes = !!match[3];
+ var slashesCount = 0;
+ var rest;
+
+ if (forwardSlashes) {
+ if (otherSlashes) {
+ rest = match[2] + match[3] + match[4];
+ slashesCount = match[2].length + match[3].length;
+ } else {
+ rest = match[2] + match[4];
+ slashesCount = match[2].length;
+ }
+ } else {
+ if (otherSlashes) {
+ rest = match[3] + match[4];
+ slashesCount = match[3].length;
+ } else {
+ rest = match[4];
+ }
+ }
+
+ if (protocol === 'file:') {
+ if (slashesCount >= 2) {
+ rest = rest.slice(2);
+ }
+ } else if (isSpecial(protocol)) {
+ rest = match[4];
+ } else if (protocol) {
+ if (forwardSlashes) {
+ rest = rest.slice(2);
+ }
+ } else if (slashesCount >= 2 && isSpecial(location.protocol)) {
+ rest = match[4];
+ }
+
+ return {
+ protocol: protocol,
+ slashes: forwardSlashes || isSpecial(protocol),
+ slashesCount: slashesCount,
+ rest: rest
+ };
+}
+
+/**
+ * Resolve a relative URL pathname against a base URL pathname.
+ *
+ * @param {String} relative Pathname of the relative URL.
+ * @param {String} base Pathname of the base URL.
+ * @return {String} Resolved pathname.
+ * @private
+ */
+function resolve(relative, base) {
+ if (relative === '') return base;
+
+ var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))
+ , i = path.length
+ , last = path[i - 1]
+ , unshift = false
+ , up = 0;
+
+ while (i--) {
+ if (path[i] === '.') {
+ path.splice(i, 1);
+ } else if (path[i] === '..') {
+ path.splice(i, 1);
+ up++;
+ } else if (up) {
+ if (i === 0) unshift = true;
+ path.splice(i, 1);
+ up--;
+ }
+ }
+
+ if (unshift) path.unshift('');
+ if (last === '.' || last === '..') path.push('');
+
+ return path.join('/');
+}
+
+/**
+ * The actual URL instance. Instead of returning an object we've opted-in to
+ * create an actual constructor as it's much more memory efficient and
+ * faster and it pleases my OCD.
+ *
+ * It is worth noting that we should not use `URL` as class name to prevent
+ * clashes with the global URL instance that got introduced in browsers.
+ *
+ * @constructor
+ * @param {String} address URL we want to parse.
+ * @param {Object|String} [location] Location defaults for relative paths.
+ * @param {Boolean|Function} [parser] Parser for the query string.
+ * @private
+ */
+function Url(address, location, parser) {
+ address = trimLeft(address);
+ address = address.replace(CRHTLF, '');
+
+ if (!(this instanceof Url)) {
+ return new Url(address, location, parser);
+ }
+
+ var relative, extracted, parse, instruction, index, key
+ , instructions = rules.slice()
+ , type = typeof location
+ , url = this
+ , i = 0;
+
+ //
+ // The following if statements allows this module two have compatibility with
+ // 2 different API:
+ //
+ // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments
+ // where the boolean indicates that the query string should also be parsed.
+ //
+ // 2. The `URL` interface of the browser which accepts a URL, object as
+ // arguments. The supplied object will be used as default values / fall-back
+ // for relative paths.
+ //
+ if ('object' !== type && 'string' !== type) {
+ parser = location;
+ location = null;
+ }
+
+ if (parser && 'function' !== typeof parser) parser = qs.parse;
+
+ location = lolcation(location);
+
+ //
+ // Extract protocol information before running the instructions.
+ //
+ extracted = extractProtocol(address || '', location);
+ relative = !extracted.protocol && !extracted.slashes;
+ url.slashes = extracted.slashes || relative && location.slashes;
+ url.protocol = extracted.protocol || location.protocol || '';
+ address = extracted.rest;
+
+ //
+ // When the authority component is absent the URL starts with a path
+ // component.
+ //
+ if (
+ extracted.protocol === 'file:' && (
+ extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||
+ (!extracted.slashes &&
+ (extracted.protocol ||
+ extracted.slashesCount < 2 ||
+ !isSpecial(url.protocol)))
+ ) {
+ instructions[3] = [/(.*)/, 'pathname'];
+ }
+
+ for (; i < instructions.length; i++) {
+ instruction = instructions[i];
+
+ if (typeof instruction === 'function') {
+ address = instruction(address, url);
+ continue;
+ }
+
+ parse = instruction[0];
+ key = instruction[1];
+
+ if (parse !== parse) {
+ url[key] = address;
+ } else if ('string' === typeof parse) {
+ index = parse === '@'
+ ? address.lastIndexOf(parse)
+ : address.indexOf(parse);
+
+ if (~index) {
+ if ('number' === typeof instruction[2]) {
+ url[key] = address.slice(0, index);
+ address = address.slice(index + instruction[2]);
+ } else {
+ url[key] = address.slice(index);
+ address = address.slice(0, index);
+ }
+ }
+ } else if ((index = parse.exec(address))) {
+ url[key] = index[1];
+ address = address.slice(0, index.index);
+ }
+
+ url[key] = url[key] || (
+ relative && instruction[3] ? location[key] || '' : ''
+ );
+
+ //
+ // Hostname, host and protocol should be lowercased so they can be used to
+ // create a proper `origin`.
+ //
+ if (instruction[4]) url[key] = url[key].toLowerCase();
+ }
+
+ //
+ // Also parse the supplied query string in to an object. If we're supplied
+ // with a custom parser as function use that instead of the default build-in
+ // parser.
+ //
+ if (parser) url.query = parser(url.query);
+
+ //
+ // If the URL is relative, resolve the pathname against the base URL.
+ //
+ if (
+ relative
+ && location.slashes
+ && url.pathname.charAt(0) !== '/'
+ && (url.pathname !== '' || location.pathname !== '')
+ ) {
+ url.pathname = resolve(url.pathname, location.pathname);
+ }
+
+ //
+ // Default to a / for pathname if none exists. This normalizes the URL
+ // to always have a /
+ //
+ if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {
+ url.pathname = '/' + url.pathname;
+ }
+
+ //
+ // We should not add port numbers if they are already the default port number
+ // for a given protocol. As the host also contains the port number we're going
+ // override it with the hostname which contains no port number.
+ //
+ if (!required(url.port, url.protocol)) {
+ url.host = url.hostname;
+ url.port = '';
+ }
+
+ //
+ // Parse down the `auth` for the username and password.
+ //
+ url.username = url.password = '';
+
+ if (url.auth) {
+ index = url.auth.indexOf(':');
+
+ if (~index) {
+ url.username = url.auth.slice(0, index);
+ url.username = encodeURIComponent(decodeURIComponent(url.username));
+
+ url.password = url.auth.slice(index + 1);
+ url.password = encodeURIComponent(decodeURIComponent(url.password));
+ } else {
+ url.username = encodeURIComponent(decodeURIComponent(url.auth));
+ }
+
+ url.auth = url.password ? url.username +':'+ url.password : url.username;
+ }
+
+ url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host
+ ? url.protocol +'//'+ url.host
+ : 'null';
+
+ //
+ // The href is just the compiled result.
+ //
+ url.href = url.toString();
+}
+
+/**
+ * This is convenience method for changing properties in the URL instance to
+ * insure that they all propagate correctly.
+ *
+ * @param {String} part Property we need to adjust.
+ * @param {Mixed} value The newly assigned value.
+ * @param {Boolean|Function} fn When setting the query, it will be the function
+ * used to parse the query.
+ * When setting the protocol, double slash will be
+ * removed from the final url if it is true.
+ * @returns {URL} URL instance for chaining.
+ * @public
+ */
+function set(part, value, fn) {
+ var url = this;
+
+ switch (part) {
+ case 'query':
+ if ('string' === typeof value && value.length) {
+ value = (fn || qs.parse)(value);
+ }
+
+ url[part] = value;
+ break;
+
+ case 'port':
+ url[part] = value;
+
+ if (!required(value, url.protocol)) {
+ url.host = url.hostname;
+ url[part] = '';
+ } else if (value) {
+ url.host = url.hostname +':'+ value;
+ }
+
+ break;
+
+ case 'hostname':
+ url[part] = value;
+
+ if (url.port) value += ':'+ url.port;
+ url.host = value;
+ break;
+
+ case 'host':
+ url[part] = value;
+
+ if (port.test(value)) {
+ value = value.split(':');
+ url.port = value.pop();
+ url.hostname = value.join(':');
+ } else {
+ url.hostname = value;
+ url.port = '';
+ }
+
+ break;
+
+ case 'protocol':
+ url.protocol = value.toLowerCase();
+ url.slashes = !fn;
+ break;
+
+ case 'pathname':
+ case 'hash':
+ if (value) {
+ var char = part === 'pathname' ? '/' : '#';
+ url[part] = value.charAt(0) !== char ? char + value : value;
+ } else {
+ url[part] = value;
+ }
+ break;
+
+ case 'username':
+ case 'password':
+ url[part] = encodeURIComponent(value);
+ break;
+
+ case 'auth':
+ var index = value.indexOf(':');
+
+ if (~index) {
+ url.username = value.slice(0, index);
+ url.username = encodeURIComponent(decodeURIComponent(url.username));
+
+ url.password = value.slice(index + 1);
+ url.password = encodeURIComponent(decodeURIComponent(url.password));
+ } else {
+ url.username = encodeURIComponent(decodeURIComponent(value));
+ }
+ }
+
+ for (var i = 0; i < rules.length; i++) {
+ var ins = rules[i];
+
+ if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();
+ }
+
+ url.auth = url.password ? url.username +':'+ url.password : url.username;
+
+ url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host
+ ? url.protocol +'//'+ url.host
+ : 'null';
+
+ url.href = url.toString();
+
+ return url;
+}
+
+/**
+ * Transform the properties back in to a valid and full URL string.
+ *
+ * @param {Function} stringify Optional query stringify function.
+ * @returns {String} Compiled version of the URL.
+ * @public
+ */
+function toString$1(stringify) {
+ if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;
+
+ var query
+ , url = this
+ , host = url.host
+ , protocol = url.protocol;
+
+ if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';
+
+ var result =
+ protocol +
+ ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');
+
+ if (url.username) {
+ result += url.username;
+ if (url.password) result += ':'+ url.password;
+ result += '@';
+ } else if (url.password) {
+ result += ':'+ url.password;
+ result += '@';
+ } else if (
+ url.protocol !== 'file:' &&
+ isSpecial(url.protocol) &&
+ !host &&
+ url.pathname !== '/'
+ ) {
+ //
+ // Add back the empty userinfo, otherwise the original invalid URL
+ // might be transformed into a valid one with `url.pathname` as host.
+ //
+ result += '@';
+ }
+
+ //
+ // Trailing colon is removed from `url.host` when it is parsed. If it still
+ // ends with a colon, then add back the trailing colon that was removed. This
+ // prevents an invalid URL from being transformed into a valid one.
+ //
+ if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {
+ host += ':';
+ }
+
+ result += host + url.pathname;
+
+ query = 'object' === typeof url.query ? stringify(url.query) : url.query;
+ if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;
+
+ if (url.hash) result += url.hash;
+
+ return result;
+}
+
+Url.prototype = { set: set, toString: toString$1 };
+
+//
+// Expose the URL parser and some additional properties that might be useful for
+// others or testing.
+//
+Url.extractProtocol = extractProtocol;
+Url.location = lolcation;
+Url.trimLeft = trimLeft;
+Url.qs = qs;
+
+var urlParse$1 = Url;
+
+var pubsuffixPsl = {};
+
+var psl$1 = {};
+
+var require$$1 = [
+ "ac",
+ "com.ac",
+ "edu.ac",
+ "gov.ac",
+ "net.ac",
+ "mil.ac",
+ "org.ac",
+ "ad",
+ "nom.ad",
+ "ae",
+ "co.ae",
+ "net.ae",
+ "org.ae",
+ "sch.ae",
+ "ac.ae",
+ "gov.ae",
+ "mil.ae",
+ "aero",
+ "accident-investigation.aero",
+ "accident-prevention.aero",
+ "aerobatic.aero",
+ "aeroclub.aero",
+ "aerodrome.aero",
+ "agents.aero",
+ "aircraft.aero",
+ "airline.aero",
+ "airport.aero",
+ "air-surveillance.aero",
+ "airtraffic.aero",
+ "air-traffic-control.aero",
+ "ambulance.aero",
+ "amusement.aero",
+ "association.aero",
+ "author.aero",
+ "ballooning.aero",
+ "broker.aero",
+ "caa.aero",
+ "cargo.aero",
+ "catering.aero",
+ "certification.aero",
+ "championship.aero",
+ "charter.aero",
+ "civilaviation.aero",
+ "club.aero",
+ "conference.aero",
+ "consultant.aero",
+ "consulting.aero",
+ "control.aero",
+ "council.aero",
+ "crew.aero",
+ "design.aero",
+ "dgca.aero",
+ "educator.aero",
+ "emergency.aero",
+ "engine.aero",
+ "engineer.aero",
+ "entertainment.aero",
+ "equipment.aero",
+ "exchange.aero",
+ "express.aero",
+ "federation.aero",
+ "flight.aero",
+ "fuel.aero",
+ "gliding.aero",
+ "government.aero",
+ "groundhandling.aero",
+ "group.aero",
+ "hanggliding.aero",
+ "homebuilt.aero",
+ "insurance.aero",
+ "journal.aero",
+ "journalist.aero",
+ "leasing.aero",
+ "logistics.aero",
+ "magazine.aero",
+ "maintenance.aero",
+ "media.aero",
+ "microlight.aero",
+ "modelling.aero",
+ "navigation.aero",
+ "parachuting.aero",
+ "paragliding.aero",
+ "passenger-association.aero",
+ "pilot.aero",
+ "press.aero",
+ "production.aero",
+ "recreation.aero",
+ "repbody.aero",
+ "res.aero",
+ "research.aero",
+ "rotorcraft.aero",
+ "safety.aero",
+ "scientist.aero",
+ "services.aero",
+ "show.aero",
+ "skydiving.aero",
+ "software.aero",
+ "student.aero",
+ "trader.aero",
+ "trading.aero",
+ "trainer.aero",
+ "union.aero",
+ "workinggroup.aero",
+ "works.aero",
+ "af",
+ "gov.af",
+ "com.af",
+ "org.af",
+ "net.af",
+ "edu.af",
+ "ag",
+ "com.ag",
+ "org.ag",
+ "net.ag",
+ "co.ag",
+ "nom.ag",
+ "ai",
+ "off.ai",
+ "com.ai",
+ "net.ai",
+ "org.ai",
+ "al",
+ "com.al",
+ "edu.al",
+ "gov.al",
+ "mil.al",
+ "net.al",
+ "org.al",
+ "am",
+ "co.am",
+ "com.am",
+ "commune.am",
+ "net.am",
+ "org.am",
+ "ao",
+ "ed.ao",
+ "gv.ao",
+ "og.ao",
+ "co.ao",
+ "pb.ao",
+ "it.ao",
+ "aq",
+ "ar",
+ "bet.ar",
+ "com.ar",
+ "coop.ar",
+ "edu.ar",
+ "gob.ar",
+ "gov.ar",
+ "int.ar",
+ "mil.ar",
+ "musica.ar",
+ "mutual.ar",
+ "net.ar",
+ "org.ar",
+ "senasa.ar",
+ "tur.ar",
+ "arpa",
+ "e164.arpa",
+ "in-addr.arpa",
+ "ip6.arpa",
+ "iris.arpa",
+ "uri.arpa",
+ "urn.arpa",
+ "as",
+ "gov.as",
+ "asia",
+ "at",
+ "ac.at",
+ "co.at",
+ "gv.at",
+ "or.at",
+ "sth.ac.at",
+ "au",
+ "com.au",
+ "net.au",
+ "org.au",
+ "edu.au",
+ "gov.au",
+ "asn.au",
+ "id.au",
+ "info.au",
+ "conf.au",
+ "oz.au",
+ "act.au",
+ "nsw.au",
+ "nt.au",
+ "qld.au",
+ "sa.au",
+ "tas.au",
+ "vic.au",
+ "wa.au",
+ "act.edu.au",
+ "catholic.edu.au",
+ "nsw.edu.au",
+ "nt.edu.au",
+ "qld.edu.au",
+ "sa.edu.au",
+ "tas.edu.au",
+ "vic.edu.au",
+ "wa.edu.au",
+ "qld.gov.au",
+ "sa.gov.au",
+ "tas.gov.au",
+ "vic.gov.au",
+ "wa.gov.au",
+ "schools.nsw.edu.au",
+ "aw",
+ "com.aw",
+ "ax",
+ "az",
+ "com.az",
+ "net.az",
+ "int.az",
+ "gov.az",
+ "org.az",
+ "edu.az",
+ "info.az",
+ "pp.az",
+ "mil.az",
+ "name.az",
+ "pro.az",
+ "biz.az",
+ "ba",
+ "com.ba",
+ "edu.ba",
+ "gov.ba",
+ "mil.ba",
+ "net.ba",
+ "org.ba",
+ "bb",
+ "biz.bb",
+ "co.bb",
+ "com.bb",
+ "edu.bb",
+ "gov.bb",
+ "info.bb",
+ "net.bb",
+ "org.bb",
+ "store.bb",
+ "tv.bb",
+ "*.bd",
+ "be",
+ "ac.be",
+ "bf",
+ "gov.bf",
+ "bg",
+ "a.bg",
+ "b.bg",
+ "c.bg",
+ "d.bg",
+ "e.bg",
+ "f.bg",
+ "g.bg",
+ "h.bg",
+ "i.bg",
+ "j.bg",
+ "k.bg",
+ "l.bg",
+ "m.bg",
+ "n.bg",
+ "o.bg",
+ "p.bg",
+ "q.bg",
+ "r.bg",
+ "s.bg",
+ "t.bg",
+ "u.bg",
+ "v.bg",
+ "w.bg",
+ "x.bg",
+ "y.bg",
+ "z.bg",
+ "0.bg",
+ "1.bg",
+ "2.bg",
+ "3.bg",
+ "4.bg",
+ "5.bg",
+ "6.bg",
+ "7.bg",
+ "8.bg",
+ "9.bg",
+ "bh",
+ "com.bh",
+ "edu.bh",
+ "net.bh",
+ "org.bh",
+ "gov.bh",
+ "bi",
+ "co.bi",
+ "com.bi",
+ "edu.bi",
+ "or.bi",
+ "org.bi",
+ "biz",
+ "bj",
+ "asso.bj",
+ "barreau.bj",
+ "gouv.bj",
+ "bm",
+ "com.bm",
+ "edu.bm",
+ "gov.bm",
+ "net.bm",
+ "org.bm",
+ "bn",
+ "com.bn",
+ "edu.bn",
+ "gov.bn",
+ "net.bn",
+ "org.bn",
+ "bo",
+ "com.bo",
+ "edu.bo",
+ "gob.bo",
+ "int.bo",
+ "org.bo",
+ "net.bo",
+ "mil.bo",
+ "tv.bo",
+ "web.bo",
+ "academia.bo",
+ "agro.bo",
+ "arte.bo",
+ "blog.bo",
+ "bolivia.bo",
+ "ciencia.bo",
+ "cooperativa.bo",
+ "democracia.bo",
+ "deporte.bo",
+ "ecologia.bo",
+ "economia.bo",
+ "empresa.bo",
+ "indigena.bo",
+ "industria.bo",
+ "info.bo",
+ "medicina.bo",
+ "movimiento.bo",
+ "musica.bo",
+ "natural.bo",
+ "nombre.bo",
+ "noticias.bo",
+ "patria.bo",
+ "politica.bo",
+ "profesional.bo",
+ "plurinacional.bo",
+ "pueblo.bo",
+ "revista.bo",
+ "salud.bo",
+ "tecnologia.bo",
+ "tksat.bo",
+ "transporte.bo",
+ "wiki.bo",
+ "br",
+ "9guacu.br",
+ "abc.br",
+ "adm.br",
+ "adv.br",
+ "agr.br",
+ "aju.br",
+ "am.br",
+ "anani.br",
+ "aparecida.br",
+ "app.br",
+ "arq.br",
+ "art.br",
+ "ato.br",
+ "b.br",
+ "barueri.br",
+ "belem.br",
+ "bhz.br",
+ "bib.br",
+ "bio.br",
+ "blog.br",
+ "bmd.br",
+ "boavista.br",
+ "bsb.br",
+ "campinagrande.br",
+ "campinas.br",
+ "caxias.br",
+ "cim.br",
+ "cng.br",
+ "cnt.br",
+ "com.br",
+ "contagem.br",
+ "coop.br",
+ "coz.br",
+ "cri.br",
+ "cuiaba.br",
+ "curitiba.br",
+ "def.br",
+ "des.br",
+ "det.br",
+ "dev.br",
+ "ecn.br",
+ "eco.br",
+ "edu.br",
+ "emp.br",
+ "enf.br",
+ "eng.br",
+ "esp.br",
+ "etc.br",
+ "eti.br",
+ "far.br",
+ "feira.br",
+ "flog.br",
+ "floripa.br",
+ "fm.br",
+ "fnd.br",
+ "fortal.br",
+ "fot.br",
+ "foz.br",
+ "fst.br",
+ "g12.br",
+ "geo.br",
+ "ggf.br",
+ "goiania.br",
+ "gov.br",
+ "ac.gov.br",
+ "al.gov.br",
+ "am.gov.br",
+ "ap.gov.br",
+ "ba.gov.br",
+ "ce.gov.br",
+ "df.gov.br",
+ "es.gov.br",
+ "go.gov.br",
+ "ma.gov.br",
+ "mg.gov.br",
+ "ms.gov.br",
+ "mt.gov.br",
+ "pa.gov.br",
+ "pb.gov.br",
+ "pe.gov.br",
+ "pi.gov.br",
+ "pr.gov.br",
+ "rj.gov.br",
+ "rn.gov.br",
+ "ro.gov.br",
+ "rr.gov.br",
+ "rs.gov.br",
+ "sc.gov.br",
+ "se.gov.br",
+ "sp.gov.br",
+ "to.gov.br",
+ "gru.br",
+ "imb.br",
+ "ind.br",
+ "inf.br",
+ "jab.br",
+ "jampa.br",
+ "jdf.br",
+ "joinville.br",
+ "jor.br",
+ "jus.br",
+ "leg.br",
+ "lel.br",
+ "log.br",
+ "londrina.br",
+ "macapa.br",
+ "maceio.br",
+ "manaus.br",
+ "maringa.br",
+ "mat.br",
+ "med.br",
+ "mil.br",
+ "morena.br",
+ "mp.br",
+ "mus.br",
+ "natal.br",
+ "net.br",
+ "niteroi.br",
+ "*.nom.br",
+ "not.br",
+ "ntr.br",
+ "odo.br",
+ "ong.br",
+ "org.br",
+ "osasco.br",
+ "palmas.br",
+ "poa.br",
+ "ppg.br",
+ "pro.br",
+ "psc.br",
+ "psi.br",
+ "pvh.br",
+ "qsl.br",
+ "radio.br",
+ "rec.br",
+ "recife.br",
+ "rep.br",
+ "ribeirao.br",
+ "rio.br",
+ "riobranco.br",
+ "riopreto.br",
+ "salvador.br",
+ "sampa.br",
+ "santamaria.br",
+ "santoandre.br",
+ "saobernardo.br",
+ "saogonca.br",
+ "seg.br",
+ "sjc.br",
+ "slg.br",
+ "slz.br",
+ "sorocaba.br",
+ "srv.br",
+ "taxi.br",
+ "tc.br",
+ "tec.br",
+ "teo.br",
+ "the.br",
+ "tmp.br",
+ "trd.br",
+ "tur.br",
+ "tv.br",
+ "udi.br",
+ "vet.br",
+ "vix.br",
+ "vlog.br",
+ "wiki.br",
+ "zlg.br",
+ "bs",
+ "com.bs",
+ "net.bs",
+ "org.bs",
+ "edu.bs",
+ "gov.bs",
+ "bt",
+ "com.bt",
+ "edu.bt",
+ "gov.bt",
+ "net.bt",
+ "org.bt",
+ "bv",
+ "bw",
+ "co.bw",
+ "org.bw",
+ "by",
+ "gov.by",
+ "mil.by",
+ "com.by",
+ "of.by",
+ "bz",
+ "com.bz",
+ "net.bz",
+ "org.bz",
+ "edu.bz",
+ "gov.bz",
+ "ca",
+ "ab.ca",
+ "bc.ca",
+ "mb.ca",
+ "nb.ca",
+ "nf.ca",
+ "nl.ca",
+ "ns.ca",
+ "nt.ca",
+ "nu.ca",
+ "on.ca",
+ "pe.ca",
+ "qc.ca",
+ "sk.ca",
+ "yk.ca",
+ "gc.ca",
+ "cat",
+ "cc",
+ "cd",
+ "gov.cd",
+ "cf",
+ "cg",
+ "ch",
+ "ci",
+ "org.ci",
+ "or.ci",
+ "com.ci",
+ "co.ci",
+ "edu.ci",
+ "ed.ci",
+ "ac.ci",
+ "net.ci",
+ "go.ci",
+ "asso.ci",
+ "aéroport.ci",
+ "int.ci",
+ "presse.ci",
+ "md.ci",
+ "gouv.ci",
+ "*.ck",
+ "!www.ck",
+ "cl",
+ "co.cl",
+ "gob.cl",
+ "gov.cl",
+ "mil.cl",
+ "cm",
+ "co.cm",
+ "com.cm",
+ "gov.cm",
+ "net.cm",
+ "cn",
+ "ac.cn",
+ "com.cn",
+ "edu.cn",
+ "gov.cn",
+ "net.cn",
+ "org.cn",
+ "mil.cn",
+ "公司.cn",
+ "网络.cn",
+ "網絡.cn",
+ "ah.cn",
+ "bj.cn",
+ "cq.cn",
+ "fj.cn",
+ "gd.cn",
+ "gs.cn",
+ "gz.cn",
+ "gx.cn",
+ "ha.cn",
+ "hb.cn",
+ "he.cn",
+ "hi.cn",
+ "hl.cn",
+ "hn.cn",
+ "jl.cn",
+ "js.cn",
+ "jx.cn",
+ "ln.cn",
+ "nm.cn",
+ "nx.cn",
+ "qh.cn",
+ "sc.cn",
+ "sd.cn",
+ "sh.cn",
+ "sn.cn",
+ "sx.cn",
+ "tj.cn",
+ "xj.cn",
+ "xz.cn",
+ "yn.cn",
+ "zj.cn",
+ "hk.cn",
+ "mo.cn",
+ "tw.cn",
+ "co",
+ "arts.co",
+ "com.co",
+ "edu.co",
+ "firm.co",
+ "gov.co",
+ "info.co",
+ "int.co",
+ "mil.co",
+ "net.co",
+ "nom.co",
+ "org.co",
+ "rec.co",
+ "web.co",
+ "com",
+ "coop",
+ "cr",
+ "ac.cr",
+ "co.cr",
+ "ed.cr",
+ "fi.cr",
+ "go.cr",
+ "or.cr",
+ "sa.cr",
+ "cu",
+ "com.cu",
+ "edu.cu",
+ "org.cu",
+ "net.cu",
+ "gov.cu",
+ "inf.cu",
+ "cv",
+ "com.cv",
+ "edu.cv",
+ "int.cv",
+ "nome.cv",
+ "org.cv",
+ "cw",
+ "com.cw",
+ "edu.cw",
+ "net.cw",
+ "org.cw",
+ "cx",
+ "gov.cx",
+ "cy",
+ "ac.cy",
+ "biz.cy",
+ "com.cy",
+ "ekloges.cy",
+ "gov.cy",
+ "ltd.cy",
+ "mil.cy",
+ "net.cy",
+ "org.cy",
+ "press.cy",
+ "pro.cy",
+ "tm.cy",
+ "cz",
+ "de",
+ "dj",
+ "dk",
+ "dm",
+ "com.dm",
+ "net.dm",
+ "org.dm",
+ "edu.dm",
+ "gov.dm",
+ "do",
+ "art.do",
+ "com.do",
+ "edu.do",
+ "gob.do",
+ "gov.do",
+ "mil.do",
+ "net.do",
+ "org.do",
+ "sld.do",
+ "web.do",
+ "dz",
+ "art.dz",
+ "asso.dz",
+ "com.dz",
+ "edu.dz",
+ "gov.dz",
+ "org.dz",
+ "net.dz",
+ "pol.dz",
+ "soc.dz",
+ "tm.dz",
+ "ec",
+ "com.ec",
+ "info.ec",
+ "net.ec",
+ "fin.ec",
+ "k12.ec",
+ "med.ec",
+ "pro.ec",
+ "org.ec",
+ "edu.ec",
+ "gov.ec",
+ "gob.ec",
+ "mil.ec",
+ "edu",
+ "ee",
+ "edu.ee",
+ "gov.ee",
+ "riik.ee",
+ "lib.ee",
+ "med.ee",
+ "com.ee",
+ "pri.ee",
+ "aip.ee",
+ "org.ee",
+ "fie.ee",
+ "eg",
+ "com.eg",
+ "edu.eg",
+ "eun.eg",
+ "gov.eg",
+ "mil.eg",
+ "name.eg",
+ "net.eg",
+ "org.eg",
+ "sci.eg",
+ "*.er",
+ "es",
+ "com.es",
+ "nom.es",
+ "org.es",
+ "gob.es",
+ "edu.es",
+ "et",
+ "com.et",
+ "gov.et",
+ "org.et",
+ "edu.et",
+ "biz.et",
+ "name.et",
+ "info.et",
+ "net.et",
+ "eu",
+ "fi",
+ "aland.fi",
+ "fj",
+ "ac.fj",
+ "biz.fj",
+ "com.fj",
+ "gov.fj",
+ "info.fj",
+ "mil.fj",
+ "name.fj",
+ "net.fj",
+ "org.fj",
+ "pro.fj",
+ "*.fk",
+ "com.fm",
+ "edu.fm",
+ "net.fm",
+ "org.fm",
+ "fm",
+ "fo",
+ "fr",
+ "asso.fr",
+ "com.fr",
+ "gouv.fr",
+ "nom.fr",
+ "prd.fr",
+ "tm.fr",
+ "aeroport.fr",
+ "avocat.fr",
+ "avoues.fr",
+ "cci.fr",
+ "chambagri.fr",
+ "chirurgiens-dentistes.fr",
+ "experts-comptables.fr",
+ "geometre-expert.fr",
+ "greta.fr",
+ "huissier-justice.fr",
+ "medecin.fr",
+ "notaires.fr",
+ "pharmacien.fr",
+ "port.fr",
+ "veterinaire.fr",
+ "ga",
+ "gb",
+ "edu.gd",
+ "gov.gd",
+ "gd",
+ "ge",
+ "com.ge",
+ "edu.ge",
+ "gov.ge",
+ "org.ge",
+ "mil.ge",
+ "net.ge",
+ "pvt.ge",
+ "gf",
+ "gg",
+ "co.gg",
+ "net.gg",
+ "org.gg",
+ "gh",
+ "com.gh",
+ "edu.gh",
+ "gov.gh",
+ "org.gh",
+ "mil.gh",
+ "gi",
+ "com.gi",
+ "ltd.gi",
+ "gov.gi",
+ "mod.gi",
+ "edu.gi",
+ "org.gi",
+ "gl",
+ "co.gl",
+ "com.gl",
+ "edu.gl",
+ "net.gl",
+ "org.gl",
+ "gm",
+ "gn",
+ "ac.gn",
+ "com.gn",
+ "edu.gn",
+ "gov.gn",
+ "org.gn",
+ "net.gn",
+ "gov",
+ "gp",
+ "com.gp",
+ "net.gp",
+ "mobi.gp",
+ "edu.gp",
+ "org.gp",
+ "asso.gp",
+ "gq",
+ "gr",
+ "com.gr",
+ "edu.gr",
+ "net.gr",
+ "org.gr",
+ "gov.gr",
+ "gs",
+ "gt",
+ "com.gt",
+ "edu.gt",
+ "gob.gt",
+ "ind.gt",
+ "mil.gt",
+ "net.gt",
+ "org.gt",
+ "gu",
+ "com.gu",
+ "edu.gu",
+ "gov.gu",
+ "guam.gu",
+ "info.gu",
+ "net.gu",
+ "org.gu",
+ "web.gu",
+ "gw",
+ "gy",
+ "co.gy",
+ "com.gy",
+ "edu.gy",
+ "gov.gy",
+ "net.gy",
+ "org.gy",
+ "hk",
+ "com.hk",
+ "edu.hk",
+ "gov.hk",
+ "idv.hk",
+ "net.hk",
+ "org.hk",
+ "公司.hk",
+ "教育.hk",
+ "敎育.hk",
+ "政府.hk",
+ "個人.hk",
+ "个��.hk",
+ "箇人.hk",
+ "網络.hk",
+ "网络.hk",
+ "组織.hk",
+ "網絡.hk",
+ "网絡.hk",
+ "组织.hk",
+ "組織.hk",
+ "組织.hk",
+ "hm",
+ "hn",
+ "com.hn",
+ "edu.hn",
+ "org.hn",
+ "net.hn",
+ "mil.hn",
+ "gob.hn",
+ "hr",
+ "iz.hr",
+ "from.hr",
+ "name.hr",
+ "com.hr",
+ "ht",
+ "com.ht",
+ "shop.ht",
+ "firm.ht",
+ "info.ht",
+ "adult.ht",
+ "net.ht",
+ "pro.ht",
+ "org.ht",
+ "med.ht",
+ "art.ht",
+ "coop.ht",
+ "pol.ht",
+ "asso.ht",
+ "edu.ht",
+ "rel.ht",
+ "gouv.ht",
+ "perso.ht",
+ "hu",
+ "co.hu",
+ "info.hu",
+ "org.hu",
+ "priv.hu",
+ "sport.hu",
+ "tm.hu",
+ "2000.hu",
+ "agrar.hu",
+ "bolt.hu",
+ "casino.hu",
+ "city.hu",
+ "erotica.hu",
+ "erotika.hu",
+ "film.hu",
+ "forum.hu",
+ "games.hu",
+ "hotel.hu",
+ "ingatlan.hu",
+ "jogasz.hu",
+ "konyvelo.hu",
+ "lakas.hu",
+ "media.hu",
+ "news.hu",
+ "reklam.hu",
+ "sex.hu",
+ "shop.hu",
+ "suli.hu",
+ "szex.hu",
+ "tozsde.hu",
+ "utazas.hu",
+ "video.hu",
+ "id",
+ "ac.id",
+ "biz.id",
+ "co.id",
+ "desa.id",
+ "go.id",
+ "mil.id",
+ "my.id",
+ "net.id",
+ "or.id",
+ "ponpes.id",
+ "sch.id",
+ "web.id",
+ "ie",
+ "gov.ie",
+ "il",
+ "ac.il",
+ "co.il",
+ "gov.il",
+ "idf.il",
+ "k12.il",
+ "muni.il",
+ "net.il",
+ "org.il",
+ "im",
+ "ac.im",
+ "co.im",
+ "com.im",
+ "ltd.co.im",
+ "net.im",
+ "org.im",
+ "plc.co.im",
+ "tt.im",
+ "tv.im",
+ "in",
+ "co.in",
+ "firm.in",
+ "net.in",
+ "org.in",
+ "gen.in",
+ "ind.in",
+ "nic.in",
+ "ac.in",
+ "edu.in",
+ "res.in",
+ "gov.in",
+ "mil.in",
+ "info",
+ "int",
+ "eu.int",
+ "io",
+ "com.io",
+ "iq",
+ "gov.iq",
+ "edu.iq",
+ "mil.iq",
+ "com.iq",
+ "org.iq",
+ "net.iq",
+ "ir",
+ "ac.ir",
+ "co.ir",
+ "gov.ir",
+ "id.ir",
+ "net.ir",
+ "org.ir",
+ "sch.ir",
+ "ایران.ir",
+ "ايران.ir",
+ "is",
+ "net.is",
+ "com.is",
+ "edu.is",
+ "gov.is",
+ "org.is",
+ "int.is",
+ "it",
+ "gov.it",
+ "edu.it",
+ "abr.it",
+ "abruzzo.it",
+ "aosta-valley.it",
+ "aostavalley.it",
+ "bas.it",
+ "basilicata.it",
+ "cal.it",
+ "calabria.it",
+ "cam.it",
+ "campania.it",
+ "emilia-romagna.it",
+ "emiliaromagna.it",
+ "emr.it",
+ "friuli-v-giulia.it",
+ "friuli-ve-giulia.it",
+ "friuli-vegiulia.it",
+ "friuli-venezia-giulia.it",
+ "friuli-veneziagiulia.it",
+ "friuli-vgiulia.it",
+ "friuliv-giulia.it",
+ "friulive-giulia.it",
+ "friulivegiulia.it",
+ "friulivenezia-giulia.it",
+ "friuliveneziagiulia.it",
+ "friulivgiulia.it",
+ "fvg.it",
+ "laz.it",
+ "lazio.it",
+ "lig.it",
+ "liguria.it",
+ "lom.it",
+ "lombardia.it",
+ "lombardy.it",
+ "lucania.it",
+ "mar.it",
+ "marche.it",
+ "mol.it",
+ "molise.it",
+ "piedmont.it",
+ "piemonte.it",
+ "pmn.it",
+ "pug.it",
+ "puglia.it",
+ "sar.it",
+ "sardegna.it",
+ "sardinia.it",
+ "sic.it",
+ "sicilia.it",
+ "sicily.it",
+ "taa.it",
+ "tos.it",
+ "toscana.it",
+ "trentin-sud-tirol.it",
+ "trentin-süd-tirol.it",
+ "trentin-sudtirol.it",
+ "trentin-südtirol.it",
+ "trentin-sued-tirol.it",
+ "trentin-suedtirol.it",
+ "trentino-a-adige.it",
+ "trentino-aadige.it",
+ "trentino-alto-adige.it",
+ "trentino-altoadige.it",
+ "trentino-s-tirol.it",
+ "trentino-stirol.it",
+ "trentino-sud-tirol.it",
+ "trentino-süd-tirol.it",
+ "trentino-sudtirol.it",
+ "trentino-südtirol.it",
+ "trentino-sued-tirol.it",
+ "trentino-suedtirol.it",
+ "trentino.it",
+ "trentinoa-adige.it",
+ "trentinoaadige.it",
+ "trentinoalto-adige.it",
+ "trentinoaltoadige.it",
+ "trentinos-tirol.it",
+ "trentinostirol.it",
+ "trentinosud-tirol.it",
+ "trentinosüd-tirol.it",
+ "trentinosudtirol.it",
+ "trentinosüdtirol.it",
+ "trentinosued-tirol.it",
+ "trentinosuedtirol.it",
+ "trentinsud-tirol.it",
+ "trentinsüd-tirol.it",
+ "trentinsudtirol.it",
+ "trentinsüdtirol.it",
+ "trentinsued-tirol.it",
+ "trentinsuedtirol.it",
+ "tuscany.it",
+ "umb.it",
+ "umbria.it",
+ "val-d-aosta.it",
+ "val-daosta.it",
+ "vald-aosta.it",
+ "valdaosta.it",
+ "valle-aosta.it",
+ "valle-d-aosta.it",
+ "valle-daosta.it",
+ "valleaosta.it",
+ "valled-aosta.it",
+ "valledaosta.it",
+ "vallee-aoste.it",
+ "vallée-aoste.it",
+ "vallee-d-aoste.it",
+ "vallée-d-aoste.it",
+ "valleeaoste.it",
+ "valléeaoste.it",
+ "valleedaoste.it",
+ "valléedaoste.it",
+ "vao.it",
+ "vda.it",
+ "ven.it",
+ "veneto.it",
+ "ag.it",
+ "agrigento.it",
+ "al.it",
+ "alessandria.it",
+ "alto-adige.it",
+ "altoadige.it",
+ "an.it",
+ "ancona.it",
+ "andria-barletta-trani.it",
+ "andria-trani-barletta.it",
+ "andriabarlettatrani.it",
+ "andriatranibarletta.it",
+ "ao.it",
+ "aosta.it",
+ "aoste.it",
+ "ap.it",
+ "aq.it",
+ "aquila.it",
+ "ar.it",
+ "arezzo.it",
+ "ascoli-piceno.it",
+ "ascolipiceno.it",
+ "asti.it",
+ "at.it",
+ "av.it",
+ "avellino.it",
+ "ba.it",
+ "balsan-sudtirol.it",
+ "balsan-südtirol.it",
+ "balsan-suedtirol.it",
+ "balsan.it",
+ "bari.it",
+ "barletta-trani-andria.it",
+ "barlettatraniandria.it",
+ "belluno.it",
+ "benevento.it",
+ "bergamo.it",
+ "bg.it",
+ "bi.it",
+ "biella.it",
+ "bl.it",
+ "bn.it",
+ "bo.it",
+ "bologna.it",
+ "bolzano-altoadige.it",
+ "bolzano.it",
+ "bozen-sudtirol.it",
+ "bozen-südtirol.it",
+ "bozen-suedtirol.it",
+ "bozen.it",
+ "br.it",
+ "brescia.it",
+ "brindisi.it",
+ "bs.it",
+ "bt.it",
+ "bulsan-sudtirol.it",
+ "bulsan-südtirol.it",
+ "bulsan-suedtirol.it",
+ "bulsan.it",
+ "bz.it",
+ "ca.it",
+ "cagliari.it",
+ "caltanissetta.it",
+ "campidano-medio.it",
+ "campidanomedio.it",
+ "campobasso.it",
+ "carbonia-iglesias.it",
+ "carboniaiglesias.it",
+ "carrara-massa.it",
+ "carraramassa.it",
+ "caserta.it",
+ "catania.it",
+ "catanzaro.it",
+ "cb.it",
+ "ce.it",
+ "cesena-forli.it",
+ "cesena-forlì.it",
+ "cesenaforli.it",
+ "cesenaforlì.it",
+ "ch.it",
+ "chieti.it",
+ "ci.it",
+ "cl.it",
+ "cn.it",
+ "co.it",
+ "como.it",
+ "cosenza.it",
+ "cr.it",
+ "cremona.it",
+ "crotone.it",
+ "cs.it",
+ "ct.it",
+ "cuneo.it",
+ "cz.it",
+ "dell-ogliastra.it",
+ "dellogliastra.it",
+ "en.it",
+ "enna.it",
+ "fc.it",
+ "fe.it",
+ "fermo.it",
+ "ferrara.it",
+ "fg.it",
+ "fi.it",
+ "firenze.it",
+ "florence.it",
+ "fm.it",
+ "foggia.it",
+ "forli-cesena.it",
+ "forlì-cesena.it",
+ "forlicesena.it",
+ "forlìcesena.it",
+ "fr.it",
+ "frosinone.it",
+ "ge.it",
+ "genoa.it",
+ "genova.it",
+ "go.it",
+ "gorizia.it",
+ "gr.it",
+ "grosseto.it",
+ "iglesias-carbonia.it",
+ "iglesiascarbonia.it",
+ "im.it",
+ "imperia.it",
+ "is.it",
+ "isernia.it",
+ "kr.it",
+ "la-spezia.it",
+ "laquila.it",
+ "laspezia.it",
+ "latina.it",
+ "lc.it",
+ "le.it",
+ "lecce.it",
+ "lecco.it",
+ "li.it",
+ "livorno.it",
+ "lo.it",
+ "lodi.it",
+ "lt.it",
+ "lu.it",
+ "lucca.it",
+ "macerata.it",
+ "mantova.it",
+ "massa-carrara.it",
+ "massacarrara.it",
+ "matera.it",
+ "mb.it",
+ "mc.it",
+ "me.it",
+ "medio-campidano.it",
+ "mediocampidano.it",
+ "messina.it",
+ "mi.it",
+ "milan.it",
+ "milano.it",
+ "mn.it",
+ "mo.it",
+ "modena.it",
+ "monza-brianza.it",
+ "monza-e-della-brianza.it",
+ "monza.it",
+ "monzabrianza.it",
+ "monzaebrianza.it",
+ "monzaedellabrianza.it",
+ "ms.it",
+ "mt.it",
+ "na.it",
+ "naples.it",
+ "napoli.it",
+ "no.it",
+ "novara.it",
+ "nu.it",
+ "nuoro.it",
+ "og.it",
+ "ogliastra.it",
+ "olbia-tempio.it",
+ "olbiatempio.it",
+ "or.it",
+ "oristano.it",
+ "ot.it",
+ "pa.it",
+ "padova.it",
+ "padua.it",
+ "palermo.it",
+ "parma.it",
+ "pavia.it",
+ "pc.it",
+ "pd.it",
+ "pe.it",
+ "perugia.it",
+ "pesaro-urbino.it",
+ "pesarourbino.it",
+ "pescara.it",
+ "pg.it",
+ "pi.it",
+ "piacenza.it",
+ "pisa.it",
+ "pistoia.it",
+ "pn.it",
+ "po.it",
+ "pordenone.it",
+ "potenza.it",
+ "pr.it",
+ "prato.it",
+ "pt.it",
+ "pu.it",
+ "pv.it",
+ "pz.it",
+ "ra.it",
+ "ragusa.it",
+ "ravenna.it",
+ "rc.it",
+ "re.it",
+ "reggio-calabria.it",
+ "reggio-emilia.it",
+ "reggiocalabria.it",
+ "reggioemilia.it",
+ "rg.it",
+ "ri.it",
+ "rieti.it",
+ "rimini.it",
+ "rm.it",
+ "rn.it",
+ "ro.it",
+ "roma.it",
+ "rome.it",
+ "rovigo.it",
+ "sa.it",
+ "salerno.it",
+ "sassari.it",
+ "savona.it",
+ "si.it",
+ "siena.it",
+ "siracusa.it",
+ "so.it",
+ "sondrio.it",
+ "sp.it",
+ "sr.it",
+ "ss.it",
+ "suedtirol.it",
+ "südtirol.it",
+ "sv.it",
+ "ta.it",
+ "taranto.it",
+ "te.it",
+ "tempio-olbia.it",
+ "tempioolbia.it",
+ "teramo.it",
+ "terni.it",
+ "tn.it",
+ "to.it",
+ "torino.it",
+ "tp.it",
+ "tr.it",
+ "trani-andria-barletta.it",
+ "trani-barletta-andria.it",
+ "traniandriabarletta.it",
+ "tranibarlettaandria.it",
+ "trapani.it",
+ "trento.it",
+ "treviso.it",
+ "trieste.it",
+ "ts.it",
+ "turin.it",
+ "tv.it",
+ "ud.it",
+ "udine.it",
+ "urbino-pesaro.it",
+ "urbinopesaro.it",
+ "va.it",
+ "varese.it",
+ "vb.it",
+ "vc.it",
+ "ve.it",
+ "venezia.it",
+ "venice.it",
+ "verbania.it",
+ "vercelli.it",
+ "verona.it",
+ "vi.it",
+ "vibo-valentia.it",
+ "vibovalentia.it",
+ "vicenza.it",
+ "viterbo.it",
+ "vr.it",
+ "vs.it",
+ "vt.it",
+ "vv.it",
+ "je",
+ "co.je",
+ "net.je",
+ "org.je",
+ "*.jm",
+ "jo",
+ "com.jo",
+ "org.jo",
+ "net.jo",
+ "edu.jo",
+ "sch.jo",
+ "gov.jo",
+ "mil.jo",
+ "name.jo",
+ "jobs",
+ "jp",
+ "ac.jp",
+ "ad.jp",
+ "co.jp",
+ "ed.jp",
+ "go.jp",
+ "gr.jp",
+ "lg.jp",
+ "ne.jp",
+ "or.jp",
+ "aichi.jp",
+ "akita.jp",
+ "aomori.jp",
+ "chiba.jp",
+ "ehime.jp",
+ "fukui.jp",
+ "fukuoka.jp",
+ "fukushima.jp",
+ "gifu.jp",
+ "gunma.jp",
+ "hiroshima.jp",
+ "hokkaido.jp",
+ "hyogo.jp",
+ "ibaraki.jp",
+ "ishikawa.jp",
+ "iwate.jp",
+ "kagawa.jp",
+ "kagoshima.jp",
+ "kanagawa.jp",
+ "kochi.jp",
+ "kumamoto.jp",
+ "kyoto.jp",
+ "mie.jp",
+ "miyagi.jp",
+ "miyazaki.jp",
+ "nagano.jp",
+ "nagasaki.jp",
+ "nara.jp",
+ "niigata.jp",
+ "oita.jp",
+ "okayama.jp",
+ "okinawa.jp",
+ "osaka.jp",
+ "saga.jp",
+ "saitama.jp",
+ "shiga.jp",
+ "shimane.jp",
+ "shizuoka.jp",
+ "tochigi.jp",
+ "tokushima.jp",
+ "tokyo.jp",
+ "tottori.jp",
+ "toyama.jp",
+ "wakayama.jp",
+ "yamagata.jp",
+ "yamaguchi.jp",
+ "yamanashi.jp",
+ "栃木.jp",
+ "愛知.jp",
+ "愛媛.jp",
+ "兵庫.jp",
+ "熊本.jp",
+ "茨城.jp",
+ "北海道.jp",
+ "千葉.jp",
+ "和歌山.jp",
+ "長崎.jp",
+ "長野.jp",
+ "新潟.jp",
+ "青森.jp",
+ "静岡.jp",
+ "東京.jp",
+ "石川.jp",
+ "埼玉.jp",
+ "三重.jp",
+ "京都.jp",
+ "佐賀.jp",
+ "大分.jp",
+ "大阪.jp",
+ "奈良.jp",
+ "宮城.jp",
+ "宮崎.jp",
+ "富山.jp",
+ "山口.jp",
+ "山形.jp",
+ "山梨.jp",
+ "岩手.jp",
+ "岐阜.jp",
+ "岡山.jp",
+ "島根.jp",
+ "広島.jp",
+ "徳島.jp",
+ "沖縄.jp",
+ "滋賀.jp",
+ "神奈川.jp",
+ "福井.jp",
+ "福岡.jp",
+ "福島.jp",
+ "秋田.jp",
+ "群馬.jp",
+ "香川.jp",
+ "高知.jp",
+ "鳥取.jp",
+ "鹿児島.jp",
+ "*.kawasaki.jp",
+ "*.kitakyushu.jp",
+ "*.kobe.jp",
+ "*.nagoya.jp",
+ "*.sapporo.jp",
+ "*.sendai.jp",
+ "*.yokohama.jp",
+ "!city.kawasaki.jp",
+ "!city.kitakyushu.jp",
+ "!city.kobe.jp",
+ "!city.nagoya.jp",
+ "!city.sapporo.jp",
+ "!city.sendai.jp",
+ "!city.yokohama.jp",
+ "aisai.aichi.jp",
+ "ama.aichi.jp",
+ "anjo.aichi.jp",
+ "asuke.aichi.jp",
+ "chiryu.aichi.jp",
+ "chita.aichi.jp",
+ "fuso.aichi.jp",
+ "gamagori.aichi.jp",
+ "handa.aichi.jp",
+ "hazu.aichi.jp",
+ "hekinan.aichi.jp",
+ "higashiura.aichi.jp",
+ "ichinomiya.aichi.jp",
+ "inazawa.aichi.jp",
+ "inuyama.aichi.jp",
+ "isshiki.aichi.jp",
+ "iwakura.aichi.jp",
+ "kanie.aichi.jp",
+ "kariya.aichi.jp",
+ "kasugai.aichi.jp",
+ "kira.aichi.jp",
+ "kiyosu.aichi.jp",
+ "komaki.aichi.jp",
+ "konan.aichi.jp",
+ "kota.aichi.jp",
+ "mihama.aichi.jp",
+ "miyoshi.aichi.jp",
+ "nishio.aichi.jp",
+ "nisshin.aichi.jp",
+ "obu.aichi.jp",
+ "oguchi.aichi.jp",
+ "oharu.aichi.jp",
+ "okazaki.aichi.jp",
+ "owariasahi.aichi.jp",
+ "seto.aichi.jp",
+ "shikatsu.aichi.jp",
+ "shinshiro.aichi.jp",
+ "shitara.aichi.jp",
+ "tahara.aichi.jp",
+ "takahama.aichi.jp",
+ "tobishima.aichi.jp",
+ "toei.aichi.jp",
+ "togo.aichi.jp",
+ "tokai.aichi.jp",
+ "tokoname.aichi.jp",
+ "toyoake.aichi.jp",
+ "toyohashi.aichi.jp",
+ "toyokawa.aichi.jp",
+ "toyone.aichi.jp",
+ "toyota.aichi.jp",
+ "tsushima.aichi.jp",
+ "yatomi.aichi.jp",
+ "akita.akita.jp",
+ "daisen.akita.jp",
+ "fujisato.akita.jp",
+ "gojome.akita.jp",
+ "hachirogata.akita.jp",
+ "happou.akita.jp",
+ "higashinaruse.akita.jp",
+ "honjo.akita.jp",
+ "honjyo.akita.jp",
+ "ikawa.akita.jp",
+ "kamikoani.akita.jp",
+ "kamioka.akita.jp",
+ "katagami.akita.jp",
+ "kazuno.akita.jp",
+ "kitaakita.akita.jp",
+ "kosaka.akita.jp",
+ "kyowa.akita.jp",
+ "misato.akita.jp",
+ "mitane.akita.jp",
+ "moriyoshi.akita.jp",
+ "nikaho.akita.jp",
+ "noshiro.akita.jp",
+ "odate.akita.jp",
+ "oga.akita.jp",
+ "ogata.akita.jp",
+ "semboku.akita.jp",
+ "yokote.akita.jp",
+ "yurihonjo.akita.jp",
+ "aomori.aomori.jp",
+ "gonohe.aomori.jp",
+ "hachinohe.aomori.jp",
+ "hashikami.aomori.jp",
+ "hiranai.aomori.jp",
+ "hirosaki.aomori.jp",
+ "itayanagi.aomori.jp",
+ "kuroishi.aomori.jp",
+ "misawa.aomori.jp",
+ "mutsu.aomori.jp",
+ "nakadomari.aomori.jp",
+ "noheji.aomori.jp",
+ "oirase.aomori.jp",
+ "owani.aomori.jp",
+ "rokunohe.aomori.jp",
+ "sannohe.aomori.jp",
+ "shichinohe.aomori.jp",
+ "shingo.aomori.jp",
+ "takko.aomori.jp",
+ "towada.aomori.jp",
+ "tsugaru.aomori.jp",
+ "tsuruta.aomori.jp",
+ "abiko.chiba.jp",
+ "asahi.chiba.jp",
+ "chonan.chiba.jp",
+ "chosei.chiba.jp",
+ "choshi.chiba.jp",
+ "chuo.chiba.jp",
+ "funabashi.chiba.jp",
+ "futtsu.chiba.jp",
+ "hanamigawa.chiba.jp",
+ "ichihara.chiba.jp",
+ "ichikawa.chiba.jp",
+ "ichinomiya.chiba.jp",
+ "inzai.chiba.jp",
+ "isumi.chiba.jp",
+ "kamagaya.chiba.jp",
+ "kamogawa.chiba.jp",
+ "kashiwa.chiba.jp",
+ "katori.chiba.jp",
+ "katsuura.chiba.jp",
+ "kimitsu.chiba.jp",
+ "kisarazu.chiba.jp",
+ "kozaki.chiba.jp",
+ "kujukuri.chiba.jp",
+ "kyonan.chiba.jp",
+ "matsudo.chiba.jp",
+ "midori.chiba.jp",
+ "mihama.chiba.jp",
+ "minamiboso.chiba.jp",
+ "mobara.chiba.jp",
+ "mutsuzawa.chiba.jp",
+ "nagara.chiba.jp",
+ "nagareyama.chiba.jp",
+ "narashino.chiba.jp",
+ "narita.chiba.jp",
+ "noda.chiba.jp",
+ "oamishirasato.chiba.jp",
+ "omigawa.chiba.jp",
+ "onjuku.chiba.jp",
+ "otaki.chiba.jp",
+ "sakae.chiba.jp",
+ "sakura.chiba.jp",
+ "shimofusa.chiba.jp",
+ "shirako.chiba.jp",
+ "shiroi.chiba.jp",
+ "shisui.chiba.jp",
+ "sodegaura.chiba.jp",
+ "sosa.chiba.jp",
+ "tako.chiba.jp",
+ "tateyama.chiba.jp",
+ "togane.chiba.jp",
+ "tohnosho.chiba.jp",
+ "tomisato.chiba.jp",
+ "urayasu.chiba.jp",
+ "yachimata.chiba.jp",
+ "yachiyo.chiba.jp",
+ "yokaichiba.chiba.jp",
+ "yokoshibahikari.chiba.jp",
+ "yotsukaido.chiba.jp",
+ "ainan.ehime.jp",
+ "honai.ehime.jp",
+ "ikata.ehime.jp",
+ "imabari.ehime.jp",
+ "iyo.ehime.jp",
+ "kamijima.ehime.jp",
+ "kihoku.ehime.jp",
+ "kumakogen.ehime.jp",
+ "masaki.ehime.jp",
+ "matsuno.ehime.jp",
+ "matsuyama.ehime.jp",
+ "namikata.ehime.jp",
+ "niihama.ehime.jp",
+ "ozu.ehime.jp",
+ "saijo.ehime.jp",
+ "seiyo.ehime.jp",
+ "shikokuchuo.ehime.jp",
+ "tobe.ehime.jp",
+ "toon.ehime.jp",
+ "uchiko.ehime.jp",
+ "uwajima.ehime.jp",
+ "yawatahama.ehime.jp",
+ "echizen.fukui.jp",
+ "eiheiji.fukui.jp",
+ "fukui.fukui.jp",
+ "ikeda.fukui.jp",
+ "katsuyama.fukui.jp",
+ "mihama.fukui.jp",
+ "minamiechizen.fukui.jp",
+ "obama.fukui.jp",
+ "ohi.fukui.jp",
+ "ono.fukui.jp",
+ "sabae.fukui.jp",
+ "sakai.fukui.jp",
+ "takahama.fukui.jp",
+ "tsuruga.fukui.jp",
+ "wakasa.fukui.jp",
+ "ashiya.fukuoka.jp",
+ "buzen.fukuoka.jp",
+ "chikugo.fukuoka.jp",
+ "chikuho.fukuoka.jp",
+ "chikujo.fukuoka.jp",
+ "chikushino.fukuoka.jp",
+ "chikuzen.fukuoka.jp",
+ "chuo.fukuoka.jp",
+ "dazaifu.fukuoka.jp",
+ "fukuchi.fukuoka.jp",
+ "hakata.fukuoka.jp",
+ "higashi.fukuoka.jp",
+ "hirokawa.fukuoka.jp",
+ "hisayama.fukuoka.jp",
+ "iizuka.fukuoka.jp",
+ "inatsuki.fukuoka.jp",
+ "kaho.fukuoka.jp",
+ "kasuga.fukuoka.jp",
+ "kasuya.fukuoka.jp",
+ "kawara.fukuoka.jp",
+ "keisen.fukuoka.jp",
+ "koga.fukuoka.jp",
+ "kurate.fukuoka.jp",
+ "kurogi.fukuoka.jp",
+ "kurume.fukuoka.jp",
+ "minami.fukuoka.jp",
+ "miyako.fukuoka.jp",
+ "miyama.fukuoka.jp",
+ "miyawaka.fukuoka.jp",
+ "mizumaki.fukuoka.jp",
+ "munakata.fukuoka.jp",
+ "nakagawa.fukuoka.jp",
+ "nakama.fukuoka.jp",
+ "nishi.fukuoka.jp",
+ "nogata.fukuoka.jp",
+ "ogori.fukuoka.jp",
+ "okagaki.fukuoka.jp",
+ "okawa.fukuoka.jp",
+ "oki.fukuoka.jp",
+ "omuta.fukuoka.jp",
+ "onga.fukuoka.jp",
+ "onojo.fukuoka.jp",
+ "oto.fukuoka.jp",
+ "saigawa.fukuoka.jp",
+ "sasaguri.fukuoka.jp",
+ "shingu.fukuoka.jp",
+ "shinyoshitomi.fukuoka.jp",
+ "shonai.fukuoka.jp",
+ "soeda.fukuoka.jp",
+ "sue.fukuoka.jp",
+ "tachiarai.fukuoka.jp",
+ "tagawa.fukuoka.jp",
+ "takata.fukuoka.jp",
+ "toho.fukuoka.jp",
+ "toyotsu.fukuoka.jp",
+ "tsuiki.fukuoka.jp",
+ "ukiha.fukuoka.jp",
+ "umi.fukuoka.jp",
+ "usui.fukuoka.jp",
+ "yamada.fukuoka.jp",
+ "yame.fukuoka.jp",
+ "yanagawa.fukuoka.jp",
+ "yukuhashi.fukuoka.jp",
+ "aizubange.fukushima.jp",
+ "aizumisato.fukushima.jp",
+ "aizuwakamatsu.fukushima.jp",
+ "asakawa.fukushima.jp",
+ "bandai.fukushima.jp",
+ "date.fukushima.jp",
+ "fukushima.fukushima.jp",
+ "furudono.fukushima.jp",
+ "futaba.fukushima.jp",
+ "hanawa.fukushima.jp",
+ "higashi.fukushima.jp",
+ "hirata.fukushima.jp",
+ "hirono.fukushima.jp",
+ "iitate.fukushima.jp",
+ "inawashiro.fukushima.jp",
+ "ishikawa.fukushima.jp",
+ "iwaki.fukushima.jp",
+ "izumizaki.fukushima.jp",
+ "kagamiishi.fukushima.jp",
+ "kaneyama.fukushima.jp",
+ "kawamata.fukushima.jp",
+ "kitakata.fukushima.jp",
+ "kitashiobara.fukushima.jp",
+ "koori.fukushima.jp",
+ "koriyama.fukushima.jp",
+ "kunimi.fukushima.jp",
+ "miharu.fukushima.jp",
+ "mishima.fukushima.jp",
+ "namie.fukushima.jp",
+ "nango.fukushima.jp",
+ "nishiaizu.fukushima.jp",
+ "nishigo.fukushima.jp",
+ "okuma.fukushima.jp",
+ "omotego.fukushima.jp",
+ "ono.fukushima.jp",
+ "otama.fukushima.jp",
+ "samegawa.fukushima.jp",
+ "shimogo.fukushima.jp",
+ "shirakawa.fukushima.jp",
+ "showa.fukushima.jp",
+ "soma.fukushima.jp",
+ "sukagawa.fukushima.jp",
+ "taishin.fukushima.jp",
+ "tamakawa.fukushima.jp",
+ "tanagura.fukushima.jp",
+ "tenei.fukushima.jp",
+ "yabuki.fukushima.jp",
+ "yamato.fukushima.jp",
+ "yamatsuri.fukushima.jp",
+ "yanaizu.fukushima.jp",
+ "yugawa.fukushima.jp",
+ "anpachi.gifu.jp",
+ "ena.gifu.jp",
+ "gifu.gifu.jp",
+ "ginan.gifu.jp",
+ "godo.gifu.jp",
+ "gujo.gifu.jp",
+ "hashima.gifu.jp",
+ "hichiso.gifu.jp",
+ "hida.gifu.jp",
+ "higashishirakawa.gifu.jp",
+ "ibigawa.gifu.jp",
+ "ikeda.gifu.jp",
+ "kakamigahara.gifu.jp",
+ "kani.gifu.jp",
+ "kasahara.gifu.jp",
+ "kasamatsu.gifu.jp",
+ "kawaue.gifu.jp",
+ "kitagata.gifu.jp",
+ "mino.gifu.jp",
+ "minokamo.gifu.jp",
+ "mitake.gifu.jp",
+ "mizunami.gifu.jp",
+ "motosu.gifu.jp",
+ "nakatsugawa.gifu.jp",
+ "ogaki.gifu.jp",
+ "sakahogi.gifu.jp",
+ "seki.gifu.jp",
+ "sekigahara.gifu.jp",
+ "shirakawa.gifu.jp",
+ "tajimi.gifu.jp",
+ "takayama.gifu.jp",
+ "tarui.gifu.jp",
+ "toki.gifu.jp",
+ "tomika.gifu.jp",
+ "wanouchi.gifu.jp",
+ "yamagata.gifu.jp",
+ "yaotsu.gifu.jp",
+ "yoro.gifu.jp",
+ "annaka.gunma.jp",
+ "chiyoda.gunma.jp",
+ "fujioka.gunma.jp",
+ "higashiagatsuma.gunma.jp",
+ "isesaki.gunma.jp",
+ "itakura.gunma.jp",
+ "kanna.gunma.jp",
+ "kanra.gunma.jp",
+ "katashina.gunma.jp",
+ "kawaba.gunma.jp",
+ "kiryu.gunma.jp",
+ "kusatsu.gunma.jp",
+ "maebashi.gunma.jp",
+ "meiwa.gunma.jp",
+ "midori.gunma.jp",
+ "minakami.gunma.jp",
+ "naganohara.gunma.jp",
+ "nakanojo.gunma.jp",
+ "nanmoku.gunma.jp",
+ "numata.gunma.jp",
+ "oizumi.gunma.jp",
+ "ora.gunma.jp",
+ "ota.gunma.jp",
+ "shibukawa.gunma.jp",
+ "shimonita.gunma.jp",
+ "shinto.gunma.jp",
+ "showa.gunma.jp",
+ "takasaki.gunma.jp",
+ "takayama.gunma.jp",
+ "tamamura.gunma.jp",
+ "tatebayashi.gunma.jp",
+ "tomioka.gunma.jp",
+ "tsukiyono.gunma.jp",
+ "tsumagoi.gunma.jp",
+ "ueno.gunma.jp",
+ "yoshioka.gunma.jp",
+ "asaminami.hiroshima.jp",
+ "daiwa.hiroshima.jp",
+ "etajima.hiroshima.jp",
+ "fuchu.hiroshima.jp",
+ "fukuyama.hiroshima.jp",
+ "hatsukaichi.hiroshima.jp",
+ "higashihiroshima.hiroshima.jp",
+ "hongo.hiroshima.jp",
+ "jinsekikogen.hiroshima.jp",
+ "kaita.hiroshima.jp",
+ "kui.hiroshima.jp",
+ "kumano.hiroshima.jp",
+ "kure.hiroshima.jp",
+ "mihara.hiroshima.jp",
+ "miyoshi.hiroshima.jp",
+ "naka.hiroshima.jp",
+ "onomichi.hiroshima.jp",
+ "osakikamijima.hiroshima.jp",
+ "otake.hiroshima.jp",
+ "saka.hiroshima.jp",
+ "sera.hiroshima.jp",
+ "seranishi.hiroshima.jp",
+ "shinichi.hiroshima.jp",
+ "shobara.hiroshima.jp",
+ "takehara.hiroshima.jp",
+ "abashiri.hokkaido.jp",
+ "abira.hokkaido.jp",
+ "aibetsu.hokkaido.jp",
+ "akabira.hokkaido.jp",
+ "akkeshi.hokkaido.jp",
+ "asahikawa.hokkaido.jp",
+ "ashibetsu.hokkaido.jp",
+ "ashoro.hokkaido.jp",
+ "assabu.hokkaido.jp",
+ "atsuma.hokkaido.jp",
+ "bibai.hokkaido.jp",
+ "biei.hokkaido.jp",
+ "bifuka.hokkaido.jp",
+ "bihoro.hokkaido.jp",
+ "biratori.hokkaido.jp",
+ "chippubetsu.hokkaido.jp",
+ "chitose.hokkaido.jp",
+ "date.hokkaido.jp",
+ "ebetsu.hokkaido.jp",
+ "embetsu.hokkaido.jp",
+ "eniwa.hokkaido.jp",
+ "erimo.hokkaido.jp",
+ "esan.hokkaido.jp",
+ "esashi.hokkaido.jp",
+ "fukagawa.hokkaido.jp",
+ "fukushima.hokkaido.jp",
+ "furano.hokkaido.jp",
+ "furubira.hokkaido.jp",
+ "haboro.hokkaido.jp",
+ "hakodate.hokkaido.jp",
+ "hamatonbetsu.hokkaido.jp",
+ "hidaka.hokkaido.jp",
+ "higashikagura.hokkaido.jp",
+ "higashikawa.hokkaido.jp",
+ "hiroo.hokkaido.jp",
+ "hokuryu.hokkaido.jp",
+ "hokuto.hokkaido.jp",
+ "honbetsu.hokkaido.jp",
+ "horokanai.hokkaido.jp",
+ "horonobe.hokkaido.jp",
+ "ikeda.hokkaido.jp",
+ "imakane.hokkaido.jp",
+ "ishikari.hokkaido.jp",
+ "iwamizawa.hokkaido.jp",
+ "iwanai.hokkaido.jp",
+ "kamifurano.hokkaido.jp",
+ "kamikawa.hokkaido.jp",
+ "kamishihoro.hokkaido.jp",
+ "kamisunagawa.hokkaido.jp",
+ "kamoenai.hokkaido.jp",
+ "kayabe.hokkaido.jp",
+ "kembuchi.hokkaido.jp",
+ "kikonai.hokkaido.jp",
+ "kimobetsu.hokkaido.jp",
+ "kitahiroshima.hokkaido.jp",
+ "kitami.hokkaido.jp",
+ "kiyosato.hokkaido.jp",
+ "koshimizu.hokkaido.jp",
+ "kunneppu.hokkaido.jp",
+ "kuriyama.hokkaido.jp",
+ "kuromatsunai.hokkaido.jp",
+ "kushiro.hokkaido.jp",
+ "kutchan.hokkaido.jp",
+ "kyowa.hokkaido.jp",
+ "mashike.hokkaido.jp",
+ "matsumae.hokkaido.jp",
+ "mikasa.hokkaido.jp",
+ "minamifurano.hokkaido.jp",
+ "mombetsu.hokkaido.jp",
+ "moseushi.hokkaido.jp",
+ "mukawa.hokkaido.jp",
+ "muroran.hokkaido.jp",
+ "naie.hokkaido.jp",
+ "nakagawa.hokkaido.jp",
+ "nakasatsunai.hokkaido.jp",
+ "nakatombetsu.hokkaido.jp",
+ "nanae.hokkaido.jp",
+ "nanporo.hokkaido.jp",
+ "nayoro.hokkaido.jp",
+ "nemuro.hokkaido.jp",
+ "niikappu.hokkaido.jp",
+ "niki.hokkaido.jp",
+ "nishiokoppe.hokkaido.jp",
+ "noboribetsu.hokkaido.jp",
+ "numata.hokkaido.jp",
+ "obihiro.hokkaido.jp",
+ "obira.hokkaido.jp",
+ "oketo.hokkaido.jp",
+ "okoppe.hokkaido.jp",
+ "otaru.hokkaido.jp",
+ "otobe.hokkaido.jp",
+ "otofuke.hokkaido.jp",
+ "otoineppu.hokkaido.jp",
+ "oumu.hokkaido.jp",
+ "ozora.hokkaido.jp",
+ "pippu.hokkaido.jp",
+ "rankoshi.hokkaido.jp",
+ "rebun.hokkaido.jp",
+ "rikubetsu.hokkaido.jp",
+ "rishiri.hokkaido.jp",
+ "rishirifuji.hokkaido.jp",
+ "saroma.hokkaido.jp",
+ "sarufutsu.hokkaido.jp",
+ "shakotan.hokkaido.jp",
+ "shari.hokkaido.jp",
+ "shibecha.hokkaido.jp",
+ "shibetsu.hokkaido.jp",
+ "shikabe.hokkaido.jp",
+ "shikaoi.hokkaido.jp",
+ "shimamaki.hokkaido.jp",
+ "shimizu.hokkaido.jp",
+ "shimokawa.hokkaido.jp",
+ "shinshinotsu.hokkaido.jp",
+ "shintoku.hokkaido.jp",
+ "shiranuka.hokkaido.jp",
+ "shiraoi.hokkaido.jp",
+ "shiriuchi.hokkaido.jp",
+ "sobetsu.hokkaido.jp",
+ "sunagawa.hokkaido.jp",
+ "taiki.hokkaido.jp",
+ "takasu.hokkaido.jp",
+ "takikawa.hokkaido.jp",
+ "takinoue.hokkaido.jp",
+ "teshikaga.hokkaido.jp",
+ "tobetsu.hokkaido.jp",
+ "tohma.hokkaido.jp",
+ "tomakomai.hokkaido.jp",
+ "tomari.hokkaido.jp",
+ "toya.hokkaido.jp",
+ "toyako.hokkaido.jp",
+ "toyotomi.hokkaido.jp",
+ "toyoura.hokkaido.jp",
+ "tsubetsu.hokkaido.jp",
+ "tsukigata.hokkaido.jp",
+ "urakawa.hokkaido.jp",
+ "urausu.hokkaido.jp",
+ "uryu.hokkaido.jp",
+ "utashinai.hokkaido.jp",
+ "wakkanai.hokkaido.jp",
+ "wassamu.hokkaido.jp",
+ "yakumo.hokkaido.jp",
+ "yoichi.hokkaido.jp",
+ "aioi.hyogo.jp",
+ "akashi.hyogo.jp",
+ "ako.hyogo.jp",
+ "amagasaki.hyogo.jp",
+ "aogaki.hyogo.jp",
+ "asago.hyogo.jp",
+ "ashiya.hyogo.jp",
+ "awaji.hyogo.jp",
+ "fukusaki.hyogo.jp",
+ "goshiki.hyogo.jp",
+ "harima.hyogo.jp",
+ "himeji.hyogo.jp",
+ "ichikawa.hyogo.jp",
+ "inagawa.hyogo.jp",
+ "itami.hyogo.jp",
+ "kakogawa.hyogo.jp",
+ "kamigori.hyogo.jp",
+ "kamikawa.hyogo.jp",
+ "kasai.hyogo.jp",
+ "kasuga.hyogo.jp",
+ "kawanishi.hyogo.jp",
+ "miki.hyogo.jp",
+ "minamiawaji.hyogo.jp",
+ "nishinomiya.hyogo.jp",
+ "nishiwaki.hyogo.jp",
+ "ono.hyogo.jp",
+ "sanda.hyogo.jp",
+ "sannan.hyogo.jp",
+ "sasayama.hyogo.jp",
+ "sayo.hyogo.jp",
+ "shingu.hyogo.jp",
+ "shinonsen.hyogo.jp",
+ "shiso.hyogo.jp",
+ "sumoto.hyogo.jp",
+ "taishi.hyogo.jp",
+ "taka.hyogo.jp",
+ "takarazuka.hyogo.jp",
+ "takasago.hyogo.jp",
+ "takino.hyogo.jp",
+ "tamba.hyogo.jp",
+ "tatsuno.hyogo.jp",
+ "toyooka.hyogo.jp",
+ "yabu.hyogo.jp",
+ "yashiro.hyogo.jp",
+ "yoka.hyogo.jp",
+ "yokawa.hyogo.jp",
+ "ami.ibaraki.jp",
+ "asahi.ibaraki.jp",
+ "bando.ibaraki.jp",
+ "chikusei.ibaraki.jp",
+ "daigo.ibaraki.jp",
+ "fujishiro.ibaraki.jp",
+ "hitachi.ibaraki.jp",
+ "hitachinaka.ibaraki.jp",
+ "hitachiomiya.ibaraki.jp",
+ "hitachiota.ibaraki.jp",
+ "ibaraki.ibaraki.jp",
+ "ina.ibaraki.jp",
+ "inashiki.ibaraki.jp",
+ "itako.ibaraki.jp",
+ "iwama.ibaraki.jp",
+ "joso.ibaraki.jp",
+ "kamisu.ibaraki.jp",
+ "kasama.ibaraki.jp",
+ "kashima.ibaraki.jp",
+ "kasumigaura.ibaraki.jp",
+ "koga.ibaraki.jp",
+ "miho.ibaraki.jp",
+ "mito.ibaraki.jp",
+ "moriya.ibaraki.jp",
+ "naka.ibaraki.jp",
+ "namegata.ibaraki.jp",
+ "oarai.ibaraki.jp",
+ "ogawa.ibaraki.jp",
+ "omitama.ibaraki.jp",
+ "ryugasaki.ibaraki.jp",
+ "sakai.ibaraki.jp",
+ "sakuragawa.ibaraki.jp",
+ "shimodate.ibaraki.jp",
+ "shimotsuma.ibaraki.jp",
+ "shirosato.ibaraki.jp",
+ "sowa.ibaraki.jp",
+ "suifu.ibaraki.jp",
+ "takahagi.ibaraki.jp",
+ "tamatsukuri.ibaraki.jp",
+ "tokai.ibaraki.jp",
+ "tomobe.ibaraki.jp",
+ "tone.ibaraki.jp",
+ "toride.ibaraki.jp",
+ "tsuchiura.ibaraki.jp",
+ "tsukuba.ibaraki.jp",
+ "uchihara.ibaraki.jp",
+ "ushiku.ibaraki.jp",
+ "yachiyo.ibaraki.jp",
+ "yamagata.ibaraki.jp",
+ "yawara.ibaraki.jp",
+ "yuki.ibaraki.jp",
+ "anamizu.ishikawa.jp",
+ "hakui.ishikawa.jp",
+ "hakusan.ishikawa.jp",
+ "kaga.ishikawa.jp",
+ "kahoku.ishikawa.jp",
+ "kanazawa.ishikawa.jp",
+ "kawakita.ishikawa.jp",
+ "komatsu.ishikawa.jp",
+ "nakanoto.ishikawa.jp",
+ "nanao.ishikawa.jp",
+ "nomi.ishikawa.jp",
+ "nonoichi.ishikawa.jp",
+ "noto.ishikawa.jp",
+ "shika.ishikawa.jp",
+ "suzu.ishikawa.jp",
+ "tsubata.ishikawa.jp",
+ "tsurugi.ishikawa.jp",
+ "uchinada.ishikawa.jp",
+ "wajima.ishikawa.jp",
+ "fudai.iwate.jp",
+ "fujisawa.iwate.jp",
+ "hanamaki.iwate.jp",
+ "hiraizumi.iwate.jp",
+ "hirono.iwate.jp",
+ "ichinohe.iwate.jp",
+ "ichinoseki.iwate.jp",
+ "iwaizumi.iwate.jp",
+ "iwate.iwate.jp",
+ "joboji.iwate.jp",
+ "kamaishi.iwate.jp",
+ "kanegasaki.iwate.jp",
+ "karumai.iwate.jp",
+ "kawai.iwate.jp",
+ "kitakami.iwate.jp",
+ "kuji.iwate.jp",
+ "kunohe.iwate.jp",
+ "kuzumaki.iwate.jp",
+ "miyako.iwate.jp",
+ "mizusawa.iwate.jp",
+ "morioka.iwate.jp",
+ "ninohe.iwate.jp",
+ "noda.iwate.jp",
+ "ofunato.iwate.jp",
+ "oshu.iwate.jp",
+ "otsuchi.iwate.jp",
+ "rikuzentakata.iwate.jp",
+ "shiwa.iwate.jp",
+ "shizukuishi.iwate.jp",
+ "sumita.iwate.jp",
+ "tanohata.iwate.jp",
+ "tono.iwate.jp",
+ "yahaba.iwate.jp",
+ "yamada.iwate.jp",
+ "ayagawa.kagawa.jp",
+ "higashikagawa.kagawa.jp",
+ "kanonji.kagawa.jp",
+ "kotohira.kagawa.jp",
+ "manno.kagawa.jp",
+ "marugame.kagawa.jp",
+ "mitoyo.kagawa.jp",
+ "naoshima.kagawa.jp",
+ "sanuki.kagawa.jp",
+ "tadotsu.kagawa.jp",
+ "takamatsu.kagawa.jp",
+ "tonosho.kagawa.jp",
+ "uchinomi.kagawa.jp",
+ "utazu.kagawa.jp",
+ "zentsuji.kagawa.jp",
+ "akune.kagoshima.jp",
+ "amami.kagoshima.jp",
+ "hioki.kagoshima.jp",
+ "isa.kagoshima.jp",
+ "isen.kagoshima.jp",
+ "izumi.kagoshima.jp",
+ "kagoshima.kagoshima.jp",
+ "kanoya.kagoshima.jp",
+ "kawanabe.kagoshima.jp",
+ "kinko.kagoshima.jp",
+ "kouyama.kagoshima.jp",
+ "makurazaki.kagoshima.jp",
+ "matsumoto.kagoshima.jp",
+ "minamitane.kagoshima.jp",
+ "nakatane.kagoshima.jp",
+ "nishinoomote.kagoshima.jp",
+ "satsumasendai.kagoshima.jp",
+ "soo.kagoshima.jp",
+ "tarumizu.kagoshima.jp",
+ "yusui.kagoshima.jp",
+ "aikawa.kanagawa.jp",
+ "atsugi.kanagawa.jp",
+ "ayase.kanagawa.jp",
+ "chigasaki.kanagawa.jp",
+ "ebina.kanagawa.jp",
+ "fujisawa.kanagawa.jp",
+ "hadano.kanagawa.jp",
+ "hakone.kanagawa.jp",
+ "hiratsuka.kanagawa.jp",
+ "isehara.kanagawa.jp",
+ "kaisei.kanagawa.jp",
+ "kamakura.kanagawa.jp",
+ "kiyokawa.kanagawa.jp",
+ "matsuda.kanagawa.jp",
+ "minamiashigara.kanagawa.jp",
+ "miura.kanagawa.jp",
+ "nakai.kanagawa.jp",
+ "ninomiya.kanagawa.jp",
+ "odawara.kanagawa.jp",
+ "oi.kanagawa.jp",
+ "oiso.kanagawa.jp",
+ "sagamihara.kanagawa.jp",
+ "samukawa.kanagawa.jp",
+ "tsukui.kanagawa.jp",
+ "yamakita.kanagawa.jp",
+ "yamato.kanagawa.jp",
+ "yokosuka.kanagawa.jp",
+ "yugawara.kanagawa.jp",
+ "zama.kanagawa.jp",
+ "zushi.kanagawa.jp",
+ "aki.kochi.jp",
+ "geisei.kochi.jp",
+ "hidaka.kochi.jp",
+ "higashitsuno.kochi.jp",
+ "ino.kochi.jp",
+ "kagami.kochi.jp",
+ "kami.kochi.jp",
+ "kitagawa.kochi.jp",
+ "kochi.kochi.jp",
+ "mihara.kochi.jp",
+ "motoyama.kochi.jp",
+ "muroto.kochi.jp",
+ "nahari.kochi.jp",
+ "nakamura.kochi.jp",
+ "nankoku.kochi.jp",
+ "nishitosa.kochi.jp",
+ "niyodogawa.kochi.jp",
+ "ochi.kochi.jp",
+ "okawa.kochi.jp",
+ "otoyo.kochi.jp",
+ "otsuki.kochi.jp",
+ "sakawa.kochi.jp",
+ "sukumo.kochi.jp",
+ "susaki.kochi.jp",
+ "tosa.kochi.jp",
+ "tosashimizu.kochi.jp",
+ "toyo.kochi.jp",
+ "tsuno.kochi.jp",
+ "umaji.kochi.jp",
+ "yasuda.kochi.jp",
+ "yusuhara.kochi.jp",
+ "amakusa.kumamoto.jp",
+ "arao.kumamoto.jp",
+ "aso.kumamoto.jp",
+ "choyo.kumamoto.jp",
+ "gyokuto.kumamoto.jp",
+ "kamiamakusa.kumamoto.jp",
+ "kikuchi.kumamoto.jp",
+ "kumamoto.kumamoto.jp",
+ "mashiki.kumamoto.jp",
+ "mifune.kumamoto.jp",
+ "minamata.kumamoto.jp",
+ "minamioguni.kumamoto.jp",
+ "nagasu.kumamoto.jp",
+ "nishihara.kumamoto.jp",
+ "oguni.kumamoto.jp",
+ "ozu.kumamoto.jp",
+ "sumoto.kumamoto.jp",
+ "takamori.kumamoto.jp",
+ "uki.kumamoto.jp",
+ "uto.kumamoto.jp",
+ "yamaga.kumamoto.jp",
+ "yamato.kumamoto.jp",
+ "yatsushiro.kumamoto.jp",
+ "ayabe.kyoto.jp",
+ "fukuchiyama.kyoto.jp",
+ "higashiyama.kyoto.jp",
+ "ide.kyoto.jp",
+ "ine.kyoto.jp",
+ "joyo.kyoto.jp",
+ "kameoka.kyoto.jp",
+ "kamo.kyoto.jp",
+ "kita.kyoto.jp",
+ "kizu.kyoto.jp",
+ "kumiyama.kyoto.jp",
+ "kyotamba.kyoto.jp",
+ "kyotanabe.kyoto.jp",
+ "kyotango.kyoto.jp",
+ "maizuru.kyoto.jp",
+ "minami.kyoto.jp",
+ "minamiyamashiro.kyoto.jp",
+ "miyazu.kyoto.jp",
+ "muko.kyoto.jp",
+ "nagaokakyo.kyoto.jp",
+ "nakagyo.kyoto.jp",
+ "nantan.kyoto.jp",
+ "oyamazaki.kyoto.jp",
+ "sakyo.kyoto.jp",
+ "seika.kyoto.jp",
+ "tanabe.kyoto.jp",
+ "uji.kyoto.jp",
+ "ujitawara.kyoto.jp",
+ "wazuka.kyoto.jp",
+ "yamashina.kyoto.jp",
+ "yawata.kyoto.jp",
+ "asahi.mie.jp",
+ "inabe.mie.jp",
+ "ise.mie.jp",
+ "kameyama.mie.jp",
+ "kawagoe.mie.jp",
+ "kiho.mie.jp",
+ "kisosaki.mie.jp",
+ "kiwa.mie.jp",
+ "komono.mie.jp",
+ "kumano.mie.jp",
+ "kuwana.mie.jp",
+ "matsusaka.mie.jp",
+ "meiwa.mie.jp",
+ "mihama.mie.jp",
+ "minamiise.mie.jp",
+ "misugi.mie.jp",
+ "miyama.mie.jp",
+ "nabari.mie.jp",
+ "shima.mie.jp",
+ "suzuka.mie.jp",
+ "tado.mie.jp",
+ "taiki.mie.jp",
+ "taki.mie.jp",
+ "tamaki.mie.jp",
+ "toba.mie.jp",
+ "tsu.mie.jp",
+ "udono.mie.jp",
+ "ureshino.mie.jp",
+ "watarai.mie.jp",
+ "yokkaichi.mie.jp",
+ "furukawa.miyagi.jp",
+ "higashimatsushima.miyagi.jp",
+ "ishinomaki.miyagi.jp",
+ "iwanuma.miyagi.jp",
+ "kakuda.miyagi.jp",
+ "kami.miyagi.jp",
+ "kawasaki.miyagi.jp",
+ "marumori.miyagi.jp",
+ "matsushima.miyagi.jp",
+ "minamisanriku.miyagi.jp",
+ "misato.miyagi.jp",
+ "murata.miyagi.jp",
+ "natori.miyagi.jp",
+ "ogawara.miyagi.jp",
+ "ohira.miyagi.jp",
+ "onagawa.miyagi.jp",
+ "osaki.miyagi.jp",
+ "rifu.miyagi.jp",
+ "semine.miyagi.jp",
+ "shibata.miyagi.jp",
+ "shichikashuku.miyagi.jp",
+ "shikama.miyagi.jp",
+ "shiogama.miyagi.jp",
+ "shiroishi.miyagi.jp",
+ "tagajo.miyagi.jp",
+ "taiwa.miyagi.jp",
+ "tome.miyagi.jp",
+ "tomiya.miyagi.jp",
+ "wakuya.miyagi.jp",
+ "watari.miyagi.jp",
+ "yamamoto.miyagi.jp",
+ "zao.miyagi.jp",
+ "aya.miyazaki.jp",
+ "ebino.miyazaki.jp",
+ "gokase.miyazaki.jp",
+ "hyuga.miyazaki.jp",
+ "kadogawa.miyazaki.jp",
+ "kawaminami.miyazaki.jp",
+ "kijo.miyazaki.jp",
+ "kitagawa.miyazaki.jp",
+ "kitakata.miyazaki.jp",
+ "kitaura.miyazaki.jp",
+ "kobayashi.miyazaki.jp",
+ "kunitomi.miyazaki.jp",
+ "kushima.miyazaki.jp",
+ "mimata.miyazaki.jp",
+ "miyakonojo.miyazaki.jp",
+ "miyazaki.miyazaki.jp",
+ "morotsuka.miyazaki.jp",
+ "nichinan.miyazaki.jp",
+ "nishimera.miyazaki.jp",
+ "nobeoka.miyazaki.jp",
+ "saito.miyazaki.jp",
+ "shiiba.miyazaki.jp",
+ "shintomi.miyazaki.jp",
+ "takaharu.miyazaki.jp",
+ "takanabe.miyazaki.jp",
+ "takazaki.miyazaki.jp",
+ "tsuno.miyazaki.jp",
+ "achi.nagano.jp",
+ "agematsu.nagano.jp",
+ "anan.nagano.jp",
+ "aoki.nagano.jp",
+ "asahi.nagano.jp",
+ "azumino.nagano.jp",
+ "chikuhoku.nagano.jp",
+ "chikuma.nagano.jp",
+ "chino.nagano.jp",
+ "fujimi.nagano.jp",
+ "hakuba.nagano.jp",
+ "hara.nagano.jp",
+ "hiraya.nagano.jp",
+ "iida.nagano.jp",
+ "iijima.nagano.jp",
+ "iiyama.nagano.jp",
+ "iizuna.nagano.jp",
+ "ikeda.nagano.jp",
+ "ikusaka.nagano.jp",
+ "ina.nagano.jp",
+ "karuizawa.nagano.jp",
+ "kawakami.nagano.jp",
+ "kiso.nagano.jp",
+ "kisofukushima.nagano.jp",
+ "kitaaiki.nagano.jp",
+ "komagane.nagano.jp",
+ "komoro.nagano.jp",
+ "matsukawa.nagano.jp",
+ "matsumoto.nagano.jp",
+ "miasa.nagano.jp",
+ "minamiaiki.nagano.jp",
+ "minamimaki.nagano.jp",
+ "minamiminowa.nagano.jp",
+ "minowa.nagano.jp",
+ "miyada.nagano.jp",
+ "miyota.nagano.jp",
+ "mochizuki.nagano.jp",
+ "nagano.nagano.jp",
+ "nagawa.nagano.jp",
+ "nagiso.nagano.jp",
+ "nakagawa.nagano.jp",
+ "nakano.nagano.jp",
+ "nozawaonsen.nagano.jp",
+ "obuse.nagano.jp",
+ "ogawa.nagano.jp",
+ "okaya.nagano.jp",
+ "omachi.nagano.jp",
+ "omi.nagano.jp",
+ "ookuwa.nagano.jp",
+ "ooshika.nagano.jp",
+ "otaki.nagano.jp",
+ "otari.nagano.jp",
+ "sakae.nagano.jp",
+ "sakaki.nagano.jp",
+ "saku.nagano.jp",
+ "sakuho.nagano.jp",
+ "shimosuwa.nagano.jp",
+ "shinanomachi.nagano.jp",
+ "shiojiri.nagano.jp",
+ "suwa.nagano.jp",
+ "suzaka.nagano.jp",
+ "takagi.nagano.jp",
+ "takamori.nagano.jp",
+ "takayama.nagano.jp",
+ "tateshina.nagano.jp",
+ "tatsuno.nagano.jp",
+ "togakushi.nagano.jp",
+ "togura.nagano.jp",
+ "tomi.nagano.jp",
+ "ueda.nagano.jp",
+ "wada.nagano.jp",
+ "yamagata.nagano.jp",
+ "yamanouchi.nagano.jp",
+ "yasaka.nagano.jp",
+ "yasuoka.nagano.jp",
+ "chijiwa.nagasaki.jp",
+ "futsu.nagasaki.jp",
+ "goto.nagasaki.jp",
+ "hasami.nagasaki.jp",
+ "hirado.nagasaki.jp",
+ "iki.nagasaki.jp",
+ "isahaya.nagasaki.jp",
+ "kawatana.nagasaki.jp",
+ "kuchinotsu.nagasaki.jp",
+ "matsuura.nagasaki.jp",
+ "nagasaki.nagasaki.jp",
+ "obama.nagasaki.jp",
+ "omura.nagasaki.jp",
+ "oseto.nagasaki.jp",
+ "saikai.nagasaki.jp",
+ "sasebo.nagasaki.jp",
+ "seihi.nagasaki.jp",
+ "shimabara.nagasaki.jp",
+ "shinkamigoto.nagasaki.jp",
+ "togitsu.nagasaki.jp",
+ "tsushima.nagasaki.jp",
+ "unzen.nagasaki.jp",
+ "ando.nara.jp",
+ "gose.nara.jp",
+ "heguri.nara.jp",
+ "higashiyoshino.nara.jp",
+ "ikaruga.nara.jp",
+ "ikoma.nara.jp",
+ "kamikitayama.nara.jp",
+ "kanmaki.nara.jp",
+ "kashiba.nara.jp",
+ "kashihara.nara.jp",
+ "katsuragi.nara.jp",
+ "kawai.nara.jp",
+ "kawakami.nara.jp",
+ "kawanishi.nara.jp",
+ "koryo.nara.jp",
+ "kurotaki.nara.jp",
+ "mitsue.nara.jp",
+ "miyake.nara.jp",
+ "nara.nara.jp",
+ "nosegawa.nara.jp",
+ "oji.nara.jp",
+ "ouda.nara.jp",
+ "oyodo.nara.jp",
+ "sakurai.nara.jp",
+ "sango.nara.jp",
+ "shimoichi.nara.jp",
+ "shimokitayama.nara.jp",
+ "shinjo.nara.jp",
+ "soni.nara.jp",
+ "takatori.nara.jp",
+ "tawaramoto.nara.jp",
+ "tenkawa.nara.jp",
+ "tenri.nara.jp",
+ "uda.nara.jp",
+ "yamatokoriyama.nara.jp",
+ "yamatotakada.nara.jp",
+ "yamazoe.nara.jp",
+ "yoshino.nara.jp",
+ "aga.niigata.jp",
+ "agano.niigata.jp",
+ "gosen.niigata.jp",
+ "itoigawa.niigata.jp",
+ "izumozaki.niigata.jp",
+ "joetsu.niigata.jp",
+ "kamo.niigata.jp",
+ "kariwa.niigata.jp",
+ "kashiwazaki.niigata.jp",
+ "minamiuonuma.niigata.jp",
+ "mitsuke.niigata.jp",
+ "muika.niigata.jp",
+ "murakami.niigata.jp",
+ "myoko.niigata.jp",
+ "nagaoka.niigata.jp",
+ "niigata.niigata.jp",
+ "ojiya.niigata.jp",
+ "omi.niigata.jp",
+ "sado.niigata.jp",
+ "sanjo.niigata.jp",
+ "seiro.niigata.jp",
+ "seirou.niigata.jp",
+ "sekikawa.niigata.jp",
+ "shibata.niigata.jp",
+ "tagami.niigata.jp",
+ "tainai.niigata.jp",
+ "tochio.niigata.jp",
+ "tokamachi.niigata.jp",
+ "tsubame.niigata.jp",
+ "tsunan.niigata.jp",
+ "uonuma.niigata.jp",
+ "yahiko.niigata.jp",
+ "yoita.niigata.jp",
+ "yuzawa.niigata.jp",
+ "beppu.oita.jp",
+ "bungoono.oita.jp",
+ "bungotakada.oita.jp",
+ "hasama.oita.jp",
+ "hiji.oita.jp",
+ "himeshima.oita.jp",
+ "hita.oita.jp",
+ "kamitsue.oita.jp",
+ "kokonoe.oita.jp",
+ "kuju.oita.jp",
+ "kunisaki.oita.jp",
+ "kusu.oita.jp",
+ "oita.oita.jp",
+ "saiki.oita.jp",
+ "taketa.oita.jp",
+ "tsukumi.oita.jp",
+ "usa.oita.jp",
+ "usuki.oita.jp",
+ "yufu.oita.jp",
+ "akaiwa.okayama.jp",
+ "asakuchi.okayama.jp",
+ "bizen.okayama.jp",
+ "hayashima.okayama.jp",
+ "ibara.okayama.jp",
+ "kagamino.okayama.jp",
+ "kasaoka.okayama.jp",
+ "kibichuo.okayama.jp",
+ "kumenan.okayama.jp",
+ "kurashiki.okayama.jp",
+ "maniwa.okayama.jp",
+ "misaki.okayama.jp",
+ "nagi.okayama.jp",
+ "niimi.okayama.jp",
+ "nishiawakura.okayama.jp",
+ "okayama.okayama.jp",
+ "satosho.okayama.jp",
+ "setouchi.okayama.jp",
+ "shinjo.okayama.jp",
+ "shoo.okayama.jp",
+ "soja.okayama.jp",
+ "takahashi.okayama.jp",
+ "tamano.okayama.jp",
+ "tsuyama.okayama.jp",
+ "wake.okayama.jp",
+ "yakage.okayama.jp",
+ "aguni.okinawa.jp",
+ "ginowan.okinawa.jp",
+ "ginoza.okinawa.jp",
+ "gushikami.okinawa.jp",
+ "haebaru.okinawa.jp",
+ "higashi.okinawa.jp",
+ "hirara.okinawa.jp",
+ "iheya.okinawa.jp",
+ "ishigaki.okinawa.jp",
+ "ishikawa.okinawa.jp",
+ "itoman.okinawa.jp",
+ "izena.okinawa.jp",
+ "kadena.okinawa.jp",
+ "kin.okinawa.jp",
+ "kitadaito.okinawa.jp",
+ "kitanakagusuku.okinawa.jp",
+ "kumejima.okinawa.jp",
+ "kunigami.okinawa.jp",
+ "minamidaito.okinawa.jp",
+ "motobu.okinawa.jp",
+ "nago.okinawa.jp",
+ "naha.okinawa.jp",
+ "nakagusuku.okinawa.jp",
+ "nakijin.okinawa.jp",
+ "nanjo.okinawa.jp",
+ "nishihara.okinawa.jp",
+ "ogimi.okinawa.jp",
+ "okinawa.okinawa.jp",
+ "onna.okinawa.jp",
+ "shimoji.okinawa.jp",
+ "taketomi.okinawa.jp",
+ "tarama.okinawa.jp",
+ "tokashiki.okinawa.jp",
+ "tomigusuku.okinawa.jp",
+ "tonaki.okinawa.jp",
+ "urasoe.okinawa.jp",
+ "uruma.okinawa.jp",
+ "yaese.okinawa.jp",
+ "yomitan.okinawa.jp",
+ "yonabaru.okinawa.jp",
+ "yonaguni.okinawa.jp",
+ "zamami.okinawa.jp",
+ "abeno.osaka.jp",
+ "chihayaakasaka.osaka.jp",
+ "chuo.osaka.jp",
+ "daito.osaka.jp",
+ "fujiidera.osaka.jp",
+ "habikino.osaka.jp",
+ "hannan.osaka.jp",
+ "higashiosaka.osaka.jp",
+ "higashisumiyoshi.osaka.jp",
+ "higashiyodogawa.osaka.jp",
+ "hirakata.osaka.jp",
+ "ibaraki.osaka.jp",
+ "ikeda.osaka.jp",
+ "izumi.osaka.jp",
+ "izumiotsu.osaka.jp",
+ "izumisano.osaka.jp",
+ "kadoma.osaka.jp",
+ "kaizuka.osaka.jp",
+ "kanan.osaka.jp",
+ "kashiwara.osaka.jp",
+ "katano.osaka.jp",
+ "kawachinagano.osaka.jp",
+ "kishiwada.osaka.jp",
+ "kita.osaka.jp",
+ "kumatori.osaka.jp",
+ "matsubara.osaka.jp",
+ "minato.osaka.jp",
+ "minoh.osaka.jp",
+ "misaki.osaka.jp",
+ "moriguchi.osaka.jp",
+ "neyagawa.osaka.jp",
+ "nishi.osaka.jp",
+ "nose.osaka.jp",
+ "osakasayama.osaka.jp",
+ "sakai.osaka.jp",
+ "sayama.osaka.jp",
+ "sennan.osaka.jp",
+ "settsu.osaka.jp",
+ "shijonawate.osaka.jp",
+ "shimamoto.osaka.jp",
+ "suita.osaka.jp",
+ "tadaoka.osaka.jp",
+ "taishi.osaka.jp",
+ "tajiri.osaka.jp",
+ "takaishi.osaka.jp",
+ "takatsuki.osaka.jp",
+ "tondabayashi.osaka.jp",
+ "toyonaka.osaka.jp",
+ "toyono.osaka.jp",
+ "yao.osaka.jp",
+ "ariake.saga.jp",
+ "arita.saga.jp",
+ "fukudomi.saga.jp",
+ "genkai.saga.jp",
+ "hamatama.saga.jp",
+ "hizen.saga.jp",
+ "imari.saga.jp",
+ "kamimine.saga.jp",
+ "kanzaki.saga.jp",
+ "karatsu.saga.jp",
+ "kashima.saga.jp",
+ "kitagata.saga.jp",
+ "kitahata.saga.jp",
+ "kiyama.saga.jp",
+ "kouhoku.saga.jp",
+ "kyuragi.saga.jp",
+ "nishiarita.saga.jp",
+ "ogi.saga.jp",
+ "omachi.saga.jp",
+ "ouchi.saga.jp",
+ "saga.saga.jp",
+ "shiroishi.saga.jp",
+ "taku.saga.jp",
+ "tara.saga.jp",
+ "tosu.saga.jp",
+ "yoshinogari.saga.jp",
+ "arakawa.saitama.jp",
+ "asaka.saitama.jp",
+ "chichibu.saitama.jp",
+ "fujimi.saitama.jp",
+ "fujimino.saitama.jp",
+ "fukaya.saitama.jp",
+ "hanno.saitama.jp",
+ "hanyu.saitama.jp",
+ "hasuda.saitama.jp",
+ "hatogaya.saitama.jp",
+ "hatoyama.saitama.jp",
+ "hidaka.saitama.jp",
+ "higashichichibu.saitama.jp",
+ "higashimatsuyama.saitama.jp",
+ "honjo.saitama.jp",
+ "ina.saitama.jp",
+ "iruma.saitama.jp",
+ "iwatsuki.saitama.jp",
+ "kamiizumi.saitama.jp",
+ "kamikawa.saitama.jp",
+ "kamisato.saitama.jp",
+ "kasukabe.saitama.jp",
+ "kawagoe.saitama.jp",
+ "kawaguchi.saitama.jp",
+ "kawajima.saitama.jp",
+ "kazo.saitama.jp",
+ "kitamoto.saitama.jp",
+ "koshigaya.saitama.jp",
+ "kounosu.saitama.jp",
+ "kuki.saitama.jp",
+ "kumagaya.saitama.jp",
+ "matsubushi.saitama.jp",
+ "minano.saitama.jp",
+ "misato.saitama.jp",
+ "miyashiro.saitama.jp",
+ "miyoshi.saitama.jp",
+ "moroyama.saitama.jp",
+ "nagatoro.saitama.jp",
+ "namegawa.saitama.jp",
+ "niiza.saitama.jp",
+ "ogano.saitama.jp",
+ "ogawa.saitama.jp",
+ "ogose.saitama.jp",
+ "okegawa.saitama.jp",
+ "omiya.saitama.jp",
+ "otaki.saitama.jp",
+ "ranzan.saitama.jp",
+ "ryokami.saitama.jp",
+ "saitama.saitama.jp",
+ "sakado.saitama.jp",
+ "satte.saitama.jp",
+ "sayama.saitama.jp",
+ "shiki.saitama.jp",
+ "shiraoka.saitama.jp",
+ "soka.saitama.jp",
+ "sugito.saitama.jp",
+ "toda.saitama.jp",
+ "tokigawa.saitama.jp",
+ "tokorozawa.saitama.jp",
+ "tsurugashima.saitama.jp",
+ "urawa.saitama.jp",
+ "warabi.saitama.jp",
+ "yashio.saitama.jp",
+ "yokoze.saitama.jp",
+ "yono.saitama.jp",
+ "yorii.saitama.jp",
+ "yoshida.saitama.jp",
+ "yoshikawa.saitama.jp",
+ "yoshimi.saitama.jp",
+ "aisho.shiga.jp",
+ "gamo.shiga.jp",
+ "higashiomi.shiga.jp",
+ "hikone.shiga.jp",
+ "koka.shiga.jp",
+ "konan.shiga.jp",
+ "kosei.shiga.jp",
+ "koto.shiga.jp",
+ "kusatsu.shiga.jp",
+ "maibara.shiga.jp",
+ "moriyama.shiga.jp",
+ "nagahama.shiga.jp",
+ "nishiazai.shiga.jp",
+ "notogawa.shiga.jp",
+ "omihachiman.shiga.jp",
+ "otsu.shiga.jp",
+ "ritto.shiga.jp",
+ "ryuoh.shiga.jp",
+ "takashima.shiga.jp",
+ "takatsuki.shiga.jp",
+ "torahime.shiga.jp",
+ "toyosato.shiga.jp",
+ "yasu.shiga.jp",
+ "akagi.shimane.jp",
+ "ama.shimane.jp",
+ "gotsu.shimane.jp",
+ "hamada.shimane.jp",
+ "higashiizumo.shimane.jp",
+ "hikawa.shimane.jp",
+ "hikimi.shimane.jp",
+ "izumo.shimane.jp",
+ "kakinoki.shimane.jp",
+ "masuda.shimane.jp",
+ "matsue.shimane.jp",
+ "misato.shimane.jp",
+ "nishinoshima.shimane.jp",
+ "ohda.shimane.jp",
+ "okinoshima.shimane.jp",
+ "okuizumo.shimane.jp",
+ "shimane.shimane.jp",
+ "tamayu.shimane.jp",
+ "tsuwano.shimane.jp",
+ "unnan.shimane.jp",
+ "yakumo.shimane.jp",
+ "yasugi.shimane.jp",
+ "yatsuka.shimane.jp",
+ "arai.shizuoka.jp",
+ "atami.shizuoka.jp",
+ "fuji.shizuoka.jp",
+ "fujieda.shizuoka.jp",
+ "fujikawa.shizuoka.jp",
+ "fujinomiya.shizuoka.jp",
+ "fukuroi.shizuoka.jp",
+ "gotemba.shizuoka.jp",
+ "haibara.shizuoka.jp",
+ "hamamatsu.shizuoka.jp",
+ "higashiizu.shizuoka.jp",
+ "ito.shizuoka.jp",
+ "iwata.shizuoka.jp",
+ "izu.shizuoka.jp",
+ "izunokuni.shizuoka.jp",
+ "kakegawa.shizuoka.jp",
+ "kannami.shizuoka.jp",
+ "kawanehon.shizuoka.jp",
+ "kawazu.shizuoka.jp",
+ "kikugawa.shizuoka.jp",
+ "kosai.shizuoka.jp",
+ "makinohara.shizuoka.jp",
+ "matsuzaki.shizuoka.jp",
+ "minamiizu.shizuoka.jp",
+ "mishima.shizuoka.jp",
+ "morimachi.shizuoka.jp",
+ "nishiizu.shizuoka.jp",
+ "numazu.shizuoka.jp",
+ "omaezaki.shizuoka.jp",
+ "shimada.shizuoka.jp",
+ "shimizu.shizuoka.jp",
+ "shimoda.shizuoka.jp",
+ "shizuoka.shizuoka.jp",
+ "susono.shizuoka.jp",
+ "yaizu.shizuoka.jp",
+ "yoshida.shizuoka.jp",
+ "ashikaga.tochigi.jp",
+ "bato.tochigi.jp",
+ "haga.tochigi.jp",
+ "ichikai.tochigi.jp",
+ "iwafune.tochigi.jp",
+ "kaminokawa.tochigi.jp",
+ "kanuma.tochigi.jp",
+ "karasuyama.tochigi.jp",
+ "kuroiso.tochigi.jp",
+ "mashiko.tochigi.jp",
+ "mibu.tochigi.jp",
+ "moka.tochigi.jp",
+ "motegi.tochigi.jp",
+ "nasu.tochigi.jp",
+ "nasushiobara.tochigi.jp",
+ "nikko.tochigi.jp",
+ "nishikata.tochigi.jp",
+ "nogi.tochigi.jp",
+ "ohira.tochigi.jp",
+ "ohtawara.tochigi.jp",
+ "oyama.tochigi.jp",
+ "sakura.tochigi.jp",
+ "sano.tochigi.jp",
+ "shimotsuke.tochigi.jp",
+ "shioya.tochigi.jp",
+ "takanezawa.tochigi.jp",
+ "tochigi.tochigi.jp",
+ "tsuga.tochigi.jp",
+ "ujiie.tochigi.jp",
+ "utsunomiya.tochigi.jp",
+ "yaita.tochigi.jp",
+ "aizumi.tokushima.jp",
+ "anan.tokushima.jp",
+ "ichiba.tokushima.jp",
+ "itano.tokushima.jp",
+ "kainan.tokushima.jp",
+ "komatsushima.tokushima.jp",
+ "matsushige.tokushima.jp",
+ "mima.tokushima.jp",
+ "minami.tokushima.jp",
+ "miyoshi.tokushima.jp",
+ "mugi.tokushima.jp",
+ "nakagawa.tokushima.jp",
+ "naruto.tokushima.jp",
+ "sanagochi.tokushima.jp",
+ "shishikui.tokushima.jp",
+ "tokushima.tokushima.jp",
+ "wajiki.tokushima.jp",
+ "adachi.tokyo.jp",
+ "akiruno.tokyo.jp",
+ "akishima.tokyo.jp",
+ "aogashima.tokyo.jp",
+ "arakawa.tokyo.jp",
+ "bunkyo.tokyo.jp",
+ "chiyoda.tokyo.jp",
+ "chofu.tokyo.jp",
+ "chuo.tokyo.jp",
+ "edogawa.tokyo.jp",
+ "fuchu.tokyo.jp",
+ "fussa.tokyo.jp",
+ "hachijo.tokyo.jp",
+ "hachioji.tokyo.jp",
+ "hamura.tokyo.jp",
+ "higashikurume.tokyo.jp",
+ "higashimurayama.tokyo.jp",
+ "higashiyamato.tokyo.jp",
+ "hino.tokyo.jp",
+ "hinode.tokyo.jp",
+ "hinohara.tokyo.jp",
+ "inagi.tokyo.jp",
+ "itabashi.tokyo.jp",
+ "katsushika.tokyo.jp",
+ "kita.tokyo.jp",
+ "kiyose.tokyo.jp",
+ "kodaira.tokyo.jp",
+ "koganei.tokyo.jp",
+ "kokubunji.tokyo.jp",
+ "komae.tokyo.jp",
+ "koto.tokyo.jp",
+ "kouzushima.tokyo.jp",
+ "kunitachi.tokyo.jp",
+ "machida.tokyo.jp",
+ "meguro.tokyo.jp",
+ "minato.tokyo.jp",
+ "mitaka.tokyo.jp",
+ "mizuho.tokyo.jp",
+ "musashimurayama.tokyo.jp",
+ "musashino.tokyo.jp",
+ "nakano.tokyo.jp",
+ "nerima.tokyo.jp",
+ "ogasawara.tokyo.jp",
+ "okutama.tokyo.jp",
+ "ome.tokyo.jp",
+ "oshima.tokyo.jp",
+ "ota.tokyo.jp",
+ "setagaya.tokyo.jp",
+ "shibuya.tokyo.jp",
+ "shinagawa.tokyo.jp",
+ "shinjuku.tokyo.jp",
+ "suginami.tokyo.jp",
+ "sumida.tokyo.jp",
+ "tachikawa.tokyo.jp",
+ "taito.tokyo.jp",
+ "tama.tokyo.jp",
+ "toshima.tokyo.jp",
+ "chizu.tottori.jp",
+ "hino.tottori.jp",
+ "kawahara.tottori.jp",
+ "koge.tottori.jp",
+ "kotoura.tottori.jp",
+ "misasa.tottori.jp",
+ "nanbu.tottori.jp",
+ "nichinan.tottori.jp",
+ "sakaiminato.tottori.jp",
+ "tottori.tottori.jp",
+ "wakasa.tottori.jp",
+ "yazu.tottori.jp",
+ "yonago.tottori.jp",
+ "asahi.toyama.jp",
+ "fuchu.toyama.jp",
+ "fukumitsu.toyama.jp",
+ "funahashi.toyama.jp",
+ "himi.toyama.jp",
+ "imizu.toyama.jp",
+ "inami.toyama.jp",
+ "johana.toyama.jp",
+ "kamiichi.toyama.jp",
+ "kurobe.toyama.jp",
+ "nakaniikawa.toyama.jp",
+ "namerikawa.toyama.jp",
+ "nanto.toyama.jp",
+ "nyuzen.toyama.jp",
+ "oyabe.toyama.jp",
+ "taira.toyama.jp",
+ "takaoka.toyama.jp",
+ "tateyama.toyama.jp",
+ "toga.toyama.jp",
+ "tonami.toyama.jp",
+ "toyama.toyama.jp",
+ "unazuki.toyama.jp",
+ "uozu.toyama.jp",
+ "yamada.toyama.jp",
+ "arida.wakayama.jp",
+ "aridagawa.wakayama.jp",
+ "gobo.wakayama.jp",
+ "hashimoto.wakayama.jp",
+ "hidaka.wakayama.jp",
+ "hirogawa.wakayama.jp",
+ "inami.wakayama.jp",
+ "iwade.wakayama.jp",
+ "kainan.wakayama.jp",
+ "kamitonda.wakayama.jp",
+ "katsuragi.wakayama.jp",
+ "kimino.wakayama.jp",
+ "kinokawa.wakayama.jp",
+ "kitayama.wakayama.jp",
+ "koya.wakayama.jp",
+ "koza.wakayama.jp",
+ "kozagawa.wakayama.jp",
+ "kudoyama.wakayama.jp",
+ "kushimoto.wakayama.jp",
+ "mihama.wakayama.jp",
+ "misato.wakayama.jp",
+ "nachikatsuura.wakayama.jp",
+ "shingu.wakayama.jp",
+ "shirahama.wakayama.jp",
+ "taiji.wakayama.jp",
+ "tanabe.wakayama.jp",
+ "wakayama.wakayama.jp",
+ "yuasa.wakayama.jp",
+ "yura.wakayama.jp",
+ "asahi.yamagata.jp",
+ "funagata.yamagata.jp",
+ "higashine.yamagata.jp",
+ "iide.yamagata.jp",
+ "kahoku.yamagata.jp",
+ "kaminoyama.yamagata.jp",
+ "kaneyama.yamagata.jp",
+ "kawanishi.yamagata.jp",
+ "mamurogawa.yamagata.jp",
+ "mikawa.yamagata.jp",
+ "murayama.yamagata.jp",
+ "nagai.yamagata.jp",
+ "nakayama.yamagata.jp",
+ "nanyo.yamagata.jp",
+ "nishikawa.yamagata.jp",
+ "obanazawa.yamagata.jp",
+ "oe.yamagata.jp",
+ "oguni.yamagata.jp",
+ "ohkura.yamagata.jp",
+ "oishida.yamagata.jp",
+ "sagae.yamagata.jp",
+ "sakata.yamagata.jp",
+ "sakegawa.yamagata.jp",
+ "shinjo.yamagata.jp",
+ "shirataka.yamagata.jp",
+ "shonai.yamagata.jp",
+ "takahata.yamagata.jp",
+ "tendo.yamagata.jp",
+ "tozawa.yamagata.jp",
+ "tsuruoka.yamagata.jp",
+ "yamagata.yamagata.jp",
+ "yamanobe.yamagata.jp",
+ "yonezawa.yamagata.jp",
+ "yuza.yamagata.jp",
+ "abu.yamaguchi.jp",
+ "hagi.yamaguchi.jp",
+ "hikari.yamaguchi.jp",
+ "hofu.yamaguchi.jp",
+ "iwakuni.yamaguchi.jp",
+ "kudamatsu.yamaguchi.jp",
+ "mitou.yamaguchi.jp",
+ "nagato.yamaguchi.jp",
+ "oshima.yamaguchi.jp",
+ "shimonoseki.yamaguchi.jp",
+ "shunan.yamaguchi.jp",
+ "tabuse.yamaguchi.jp",
+ "tokuyama.yamaguchi.jp",
+ "toyota.yamaguchi.jp",
+ "ube.yamaguchi.jp",
+ "yuu.yamaguchi.jp",
+ "chuo.yamanashi.jp",
+ "doshi.yamanashi.jp",
+ "fuefuki.yamanashi.jp",
+ "fujikawa.yamanashi.jp",
+ "fujikawaguchiko.yamanashi.jp",
+ "fujiyoshida.yamanashi.jp",
+ "hayakawa.yamanashi.jp",
+ "hokuto.yamanashi.jp",
+ "ichikawamisato.yamanashi.jp",
+ "kai.yamanashi.jp",
+ "kofu.yamanashi.jp",
+ "koshu.yamanashi.jp",
+ "kosuge.yamanashi.jp",
+ "minami-alps.yamanashi.jp",
+ "minobu.yamanashi.jp",
+ "nakamichi.yamanashi.jp",
+ "nanbu.yamanashi.jp",
+ "narusawa.yamanashi.jp",
+ "nirasaki.yamanashi.jp",
+ "nishikatsura.yamanashi.jp",
+ "oshino.yamanashi.jp",
+ "otsuki.yamanashi.jp",
+ "showa.yamanashi.jp",
+ "tabayama.yamanashi.jp",
+ "tsuru.yamanashi.jp",
+ "uenohara.yamanashi.jp",
+ "yamanakako.yamanashi.jp",
+ "yamanashi.yamanashi.jp",
+ "ke",
+ "ac.ke",
+ "co.ke",
+ "go.ke",
+ "info.ke",
+ "me.ke",
+ "mobi.ke",
+ "ne.ke",
+ "or.ke",
+ "sc.ke",
+ "kg",
+ "org.kg",
+ "net.kg",
+ "com.kg",
+ "edu.kg",
+ "gov.kg",
+ "mil.kg",
+ "*.kh",
+ "ki",
+ "edu.ki",
+ "biz.ki",
+ "net.ki",
+ "org.ki",
+ "gov.ki",
+ "info.ki",
+ "com.ki",
+ "km",
+ "org.km",
+ "nom.km",
+ "gov.km",
+ "prd.km",
+ "tm.km",
+ "edu.km",
+ "mil.km",
+ "ass.km",
+ "com.km",
+ "coop.km",
+ "asso.km",
+ "presse.km",
+ "medecin.km",
+ "notaires.km",
+ "pharmaciens.km",
+ "veterinaire.km",
+ "gouv.km",
+ "kn",
+ "net.kn",
+ "org.kn",
+ "edu.kn",
+ "gov.kn",
+ "kp",
+ "com.kp",
+ "edu.kp",
+ "gov.kp",
+ "org.kp",
+ "rep.kp",
+ "tra.kp",
+ "kr",
+ "ac.kr",
+ "co.kr",
+ "es.kr",
+ "go.kr",
+ "hs.kr",
+ "kg.kr",
+ "mil.kr",
+ "ms.kr",
+ "ne.kr",
+ "or.kr",
+ "pe.kr",
+ "re.kr",
+ "sc.kr",
+ "busan.kr",
+ "chungbuk.kr",
+ "chungnam.kr",
+ "daegu.kr",
+ "daejeon.kr",
+ "gangwon.kr",
+ "gwangju.kr",
+ "gyeongbuk.kr",
+ "gyeonggi.kr",
+ "gyeongnam.kr",
+ "incheon.kr",
+ "jeju.kr",
+ "jeonbuk.kr",
+ "jeonnam.kr",
+ "seoul.kr",
+ "ulsan.kr",
+ "kw",
+ "com.kw",
+ "edu.kw",
+ "emb.kw",
+ "gov.kw",
+ "ind.kw",
+ "net.kw",
+ "org.kw",
+ "ky",
+ "com.ky",
+ "edu.ky",
+ "net.ky",
+ "org.ky",
+ "kz",
+ "org.kz",
+ "edu.kz",
+ "net.kz",
+ "gov.kz",
+ "mil.kz",
+ "com.kz",
+ "la",
+ "int.la",
+ "net.la",
+ "info.la",
+ "edu.la",
+ "gov.la",
+ "per.la",
+ "com.la",
+ "org.la",
+ "lb",
+ "com.lb",
+ "edu.lb",
+ "gov.lb",
+ "net.lb",
+ "org.lb",
+ "lc",
+ "com.lc",
+ "net.lc",
+ "co.lc",
+ "org.lc",
+ "edu.lc",
+ "gov.lc",
+ "li",
+ "lk",
+ "gov.lk",
+ "sch.lk",
+ "net.lk",
+ "int.lk",
+ "com.lk",
+ "org.lk",
+ "edu.lk",
+ "ngo.lk",
+ "soc.lk",
+ "web.lk",
+ "ltd.lk",
+ "assn.lk",
+ "grp.lk",
+ "hotel.lk",
+ "ac.lk",
+ "lr",
+ "com.lr",
+ "edu.lr",
+ "gov.lr",
+ "org.lr",
+ "net.lr",
+ "ls",
+ "ac.ls",
+ "biz.ls",
+ "co.ls",
+ "edu.ls",
+ "gov.ls",
+ "info.ls",
+ "net.ls",
+ "org.ls",
+ "sc.ls",
+ "lt",
+ "gov.lt",
+ "lu",
+ "lv",
+ "com.lv",
+ "edu.lv",
+ "gov.lv",
+ "org.lv",
+ "mil.lv",
+ "id.lv",
+ "net.lv",
+ "asn.lv",
+ "conf.lv",
+ "ly",
+ "com.ly",
+ "net.ly",
+ "gov.ly",
+ "plc.ly",
+ "edu.ly",
+ "sch.ly",
+ "med.ly",
+ "org.ly",
+ "id.ly",
+ "ma",
+ "co.ma",
+ "net.ma",
+ "gov.ma",
+ "org.ma",
+ "ac.ma",
+ "press.ma",
+ "mc",
+ "tm.mc",
+ "asso.mc",
+ "md",
+ "me",
+ "co.me",
+ "net.me",
+ "org.me",
+ "edu.me",
+ "ac.me",
+ "gov.me",
+ "its.me",
+ "priv.me",
+ "mg",
+ "org.mg",
+ "nom.mg",
+ "gov.mg",
+ "prd.mg",
+ "tm.mg",
+ "edu.mg",
+ "mil.mg",
+ "com.mg",
+ "co.mg",
+ "mh",
+ "mil",
+ "mk",
+ "com.mk",
+ "org.mk",
+ "net.mk",
+ "edu.mk",
+ "gov.mk",
+ "inf.mk",
+ "name.mk",
+ "ml",
+ "com.ml",
+ "edu.ml",
+ "gouv.ml",
+ "gov.ml",
+ "net.ml",
+ "org.ml",
+ "presse.ml",
+ "*.mm",
+ "mn",
+ "gov.mn",
+ "edu.mn",
+ "org.mn",
+ "mo",
+ "com.mo",
+ "net.mo",
+ "org.mo",
+ "edu.mo",
+ "gov.mo",
+ "mobi",
+ "mp",
+ "mq",
+ "mr",
+ "gov.mr",
+ "ms",
+ "com.ms",
+ "edu.ms",
+ "gov.ms",
+ "net.ms",
+ "org.ms",
+ "mt",
+ "com.mt",
+ "edu.mt",
+ "net.mt",
+ "org.mt",
+ "mu",
+ "com.mu",
+ "net.mu",
+ "org.mu",
+ "gov.mu",
+ "ac.mu",
+ "co.mu",
+ "or.mu",
+ "museum",
+ "academy.museum",
+ "agriculture.museum",
+ "air.museum",
+ "airguard.museum",
+ "alabama.museum",
+ "alaska.museum",
+ "amber.museum",
+ "ambulance.museum",
+ "american.museum",
+ "americana.museum",
+ "americanantiques.museum",
+ "americanart.museum",
+ "amsterdam.museum",
+ "and.museum",
+ "annefrank.museum",
+ "anthro.museum",
+ "anthropology.museum",
+ "antiques.museum",
+ "aquarium.museum",
+ "arboretum.museum",
+ "archaeological.museum",
+ "archaeology.museum",
+ "architecture.museum",
+ "art.museum",
+ "artanddesign.museum",
+ "artcenter.museum",
+ "artdeco.museum",
+ "arteducation.museum",
+ "artgallery.museum",
+ "arts.museum",
+ "artsandcrafts.museum",
+ "asmatart.museum",
+ "assassination.museum",
+ "assisi.museum",
+ "association.museum",
+ "astronomy.museum",
+ "atlanta.museum",
+ "austin.museum",
+ "australia.museum",
+ "automotive.museum",
+ "aviation.museum",
+ "axis.museum",
+ "badajoz.museum",
+ "baghdad.museum",
+ "bahn.museum",
+ "bale.museum",
+ "baltimore.museum",
+ "barcelona.museum",
+ "baseball.museum",
+ "basel.museum",
+ "baths.museum",
+ "bauern.museum",
+ "beauxarts.museum",
+ "beeldengeluid.museum",
+ "bellevue.museum",
+ "bergbau.museum",
+ "berkeley.museum",
+ "berlin.museum",
+ "bern.museum",
+ "bible.museum",
+ "bilbao.museum",
+ "bill.museum",
+ "birdart.museum",
+ "birthplace.museum",
+ "bonn.museum",
+ "boston.museum",
+ "botanical.museum",
+ "botanicalgarden.museum",
+ "botanicgarden.museum",
+ "botany.museum",
+ "brandywinevalley.museum",
+ "brasil.museum",
+ "bristol.museum",
+ "british.museum",
+ "britishcolumbia.museum",
+ "broadcast.museum",
+ "brunel.museum",
+ "brussel.museum",
+ "brussels.museum",
+ "bruxelles.museum",
+ "building.museum",
+ "burghof.museum",
+ "bus.museum",
+ "bushey.museum",
+ "cadaques.museum",
+ "california.museum",
+ "cambridge.museum",
+ "can.museum",
+ "canada.museum",
+ "capebreton.museum",
+ "carrier.museum",
+ "cartoonart.museum",
+ "casadelamoneda.museum",
+ "castle.museum",
+ "castres.museum",
+ "celtic.museum",
+ "center.museum",
+ "chattanooga.museum",
+ "cheltenham.museum",
+ "chesapeakebay.museum",
+ "chicago.museum",
+ "children.museum",
+ "childrens.museum",
+ "childrensgarden.museum",
+ "chiropractic.museum",
+ "chocolate.museum",
+ "christiansburg.museum",
+ "cincinnati.museum",
+ "cinema.museum",
+ "circus.museum",
+ "civilisation.museum",
+ "civilization.museum",
+ "civilwar.museum",
+ "clinton.museum",
+ "clock.museum",
+ "coal.museum",
+ "coastaldefence.museum",
+ "cody.museum",
+ "coldwar.museum",
+ "collection.museum",
+ "colonialwilliamsburg.museum",
+ "coloradoplateau.museum",
+ "columbia.museum",
+ "columbus.museum",
+ "communication.museum",
+ "communications.museum",
+ "community.museum",
+ "computer.museum",
+ "computerhistory.museum",
+ "comunicações.museum",
+ "contemporary.museum",
+ "contemporaryart.museum",
+ "convent.museum",
+ "copenhagen.museum",
+ "corporation.museum",
+ "correios-e-telecomunicações.museum",
+ "corvette.museum",
+ "costume.museum",
+ "countryestate.museum",
+ "county.museum",
+ "crafts.museum",
+ "cranbrook.museum",
+ "creation.museum",
+ "cultural.museum",
+ "culturalcenter.museum",
+ "culture.museum",
+ "cyber.museum",
+ "cymru.museum",
+ "dali.museum",
+ "dallas.museum",
+ "database.museum",
+ "ddr.museum",
+ "decorativearts.museum",
+ "delaware.museum",
+ "delmenhorst.museum",
+ "denmark.museum",
+ "depot.museum",
+ "design.museum",
+ "detroit.museum",
+ "dinosaur.museum",
+ "discovery.museum",
+ "dolls.museum",
+ "donostia.museum",
+ "durham.museum",
+ "eastafrica.museum",
+ "eastcoast.museum",
+ "education.museum",
+ "educational.museum",
+ "egyptian.museum",
+ "eisenbahn.museum",
+ "elburg.museum",
+ "elvendrell.museum",
+ "embroidery.museum",
+ "encyclopedic.museum",
+ "england.museum",
+ "entomology.museum",
+ "environment.museum",
+ "environmentalconservation.museum",
+ "epilepsy.museum",
+ "essex.museum",
+ "estate.museum",
+ "ethnology.museum",
+ "exeter.museum",
+ "exhibition.museum",
+ "family.museum",
+ "farm.museum",
+ "farmequipment.museum",
+ "farmers.museum",
+ "farmstead.museum",
+ "field.museum",
+ "figueres.museum",
+ "filatelia.museum",
+ "film.museum",
+ "fineart.museum",
+ "finearts.museum",
+ "finland.museum",
+ "flanders.museum",
+ "florida.museum",
+ "force.museum",
+ "fortmissoula.museum",
+ "fortworth.museum",
+ "foundation.museum",
+ "francaise.museum",
+ "frankfurt.museum",
+ "franziskaner.museum",
+ "freemasonry.museum",
+ "freiburg.museum",
+ "fribourg.museum",
+ "frog.museum",
+ "fundacio.museum",
+ "furniture.museum",
+ "gallery.museum",
+ "garden.museum",
+ "gateway.museum",
+ "geelvinck.museum",
+ "gemological.museum",
+ "geology.museum",
+ "georgia.museum",
+ "giessen.museum",
+ "glas.museum",
+ "glass.museum",
+ "gorge.museum",
+ "grandrapids.museum",
+ "graz.museum",
+ "guernsey.museum",
+ "halloffame.museum",
+ "hamburg.museum",
+ "handson.museum",
+ "harvestcelebration.museum",
+ "hawaii.museum",
+ "health.museum",
+ "heimatunduhren.museum",
+ "hellas.museum",
+ "helsinki.museum",
+ "hembygdsforbund.museum",
+ "heritage.museum",
+ "histoire.museum",
+ "historical.museum",
+ "historicalsociety.museum",
+ "historichouses.museum",
+ "historisch.museum",
+ "historisches.museum",
+ "history.museum",
+ "historyofscience.museum",
+ "horology.museum",
+ "house.museum",
+ "humanities.museum",
+ "illustration.museum",
+ "imageandsound.museum",
+ "indian.museum",
+ "indiana.museum",
+ "indianapolis.museum",
+ "indianmarket.museum",
+ "intelligence.museum",
+ "interactive.museum",
+ "iraq.museum",
+ "iron.museum",
+ "isleofman.museum",
+ "jamison.museum",
+ "jefferson.museum",
+ "jerusalem.museum",
+ "jewelry.museum",
+ "jewish.museum",
+ "jewishart.museum",
+ "jfk.museum",
+ "journalism.museum",
+ "judaica.museum",
+ "judygarland.museum",
+ "juedisches.museum",
+ "juif.museum",
+ "karate.museum",
+ "karikatur.museum",
+ "kids.museum",
+ "koebenhavn.museum",
+ "koeln.museum",
+ "kunst.museum",
+ "kunstsammlung.museum",
+ "kunstunddesign.museum",
+ "labor.museum",
+ "labour.museum",
+ "lajolla.museum",
+ "lancashire.museum",
+ "landes.museum",
+ "lans.museum",
+ "läns.museum",
+ "larsson.museum",
+ "lewismiller.museum",
+ "lincoln.museum",
+ "linz.museum",
+ "living.museum",
+ "livinghistory.museum",
+ "localhistory.museum",
+ "london.museum",
+ "losangeles.museum",
+ "louvre.museum",
+ "loyalist.museum",
+ "lucerne.museum",
+ "luxembourg.museum",
+ "luzern.museum",
+ "mad.museum",
+ "madrid.museum",
+ "mallorca.museum",
+ "manchester.museum",
+ "mansion.museum",
+ "mansions.museum",
+ "manx.museum",
+ "marburg.museum",
+ "maritime.museum",
+ "maritimo.museum",
+ "maryland.museum",
+ "marylhurst.museum",
+ "media.museum",
+ "medical.museum",
+ "medizinhistorisches.museum",
+ "meeres.museum",
+ "memorial.museum",
+ "mesaverde.museum",
+ "michigan.museum",
+ "midatlantic.museum",
+ "military.museum",
+ "mill.museum",
+ "miners.museum",
+ "mining.museum",
+ "minnesota.museum",
+ "missile.museum",
+ "missoula.museum",
+ "modern.museum",
+ "moma.museum",
+ "money.museum",
+ "monmouth.museum",
+ "monticello.museum",
+ "montreal.museum",
+ "moscow.museum",
+ "motorcycle.museum",
+ "muenchen.museum",
+ "muenster.museum",
+ "mulhouse.museum",
+ "muncie.museum",
+ "museet.museum",
+ "museumcenter.museum",
+ "museumvereniging.museum",
+ "music.museum",
+ "national.museum",
+ "nationalfirearms.museum",
+ "nationalheritage.museum",
+ "nativeamerican.museum",
+ "naturalhistory.museum",
+ "naturalhistorymuseum.museum",
+ "naturalsciences.museum",
+ "nature.museum",
+ "naturhistorisches.museum",
+ "natuurwetenschappen.museum",
+ "naumburg.museum",
+ "naval.museum",
+ "nebraska.museum",
+ "neues.museum",
+ "newhampshire.museum",
+ "newjersey.museum",
+ "newmexico.museum",
+ "newport.museum",
+ "newspaper.museum",
+ "newyork.museum",
+ "niepce.museum",
+ "norfolk.museum",
+ "north.museum",
+ "nrw.museum",
+ "nyc.museum",
+ "nyny.museum",
+ "oceanographic.museum",
+ "oceanographique.museum",
+ "omaha.museum",
+ "online.museum",
+ "ontario.museum",
+ "openair.museum",
+ "oregon.museum",
+ "oregontrail.museum",
+ "otago.museum",
+ "oxford.museum",
+ "pacific.museum",
+ "paderborn.museum",
+ "palace.museum",
+ "paleo.museum",
+ "palmsprings.museum",
+ "panama.museum",
+ "paris.museum",
+ "pasadena.museum",
+ "pharmacy.museum",
+ "philadelphia.museum",
+ "philadelphiaarea.museum",
+ "philately.museum",
+ "phoenix.museum",
+ "photography.museum",
+ "pilots.museum",
+ "pittsburgh.museum",
+ "planetarium.museum",
+ "plantation.museum",
+ "plants.museum",
+ "plaza.museum",
+ "portal.museum",
+ "portland.museum",
+ "portlligat.museum",
+ "posts-and-telecommunications.museum",
+ "preservation.museum",
+ "presidio.museum",
+ "press.museum",
+ "project.museum",
+ "public.museum",
+ "pubol.museum",
+ "quebec.museum",
+ "railroad.museum",
+ "railway.museum",
+ "research.museum",
+ "resistance.museum",
+ "riodejaneiro.museum",
+ "rochester.museum",
+ "rockart.museum",
+ "roma.museum",
+ "russia.museum",
+ "saintlouis.museum",
+ "salem.museum",
+ "salvadordali.museum",
+ "salzburg.museum",
+ "sandiego.museum",
+ "sanfrancisco.museum",
+ "santabarbara.museum",
+ "santacruz.museum",
+ "santafe.museum",
+ "saskatchewan.museum",
+ "satx.museum",
+ "savannahga.museum",
+ "schlesisches.museum",
+ "schoenbrunn.museum",
+ "schokoladen.museum",
+ "school.museum",
+ "schweiz.museum",
+ "science.museum",
+ "scienceandhistory.museum",
+ "scienceandindustry.museum",
+ "sciencecenter.museum",
+ "sciencecenters.museum",
+ "science-fiction.museum",
+ "sciencehistory.museum",
+ "sciences.museum",
+ "sciencesnaturelles.museum",
+ "scotland.museum",
+ "seaport.museum",
+ "settlement.museum",
+ "settlers.museum",
+ "shell.museum",
+ "sherbrooke.museum",
+ "sibenik.museum",
+ "silk.museum",
+ "ski.museum",
+ "skole.museum",
+ "society.museum",
+ "sologne.museum",
+ "soundandvision.museum",
+ "southcarolina.museum",
+ "southwest.museum",
+ "space.museum",
+ "spy.museum",
+ "square.museum",
+ "stadt.museum",
+ "stalbans.museum",
+ "starnberg.museum",
+ "state.museum",
+ "stateofdelaware.museum",
+ "station.museum",
+ "steam.museum",
+ "steiermark.museum",
+ "stjohn.museum",
+ "stockholm.museum",
+ "stpetersburg.museum",
+ "stuttgart.museum",
+ "suisse.museum",
+ "surgeonshall.museum",
+ "surrey.museum",
+ "svizzera.museum",
+ "sweden.museum",
+ "sydney.museum",
+ "tank.museum",
+ "tcm.museum",
+ "technology.museum",
+ "telekommunikation.museum",
+ "television.museum",
+ "texas.museum",
+ "textile.museum",
+ "theater.museum",
+ "time.museum",
+ "timekeeping.museum",
+ "topology.museum",
+ "torino.museum",
+ "touch.museum",
+ "town.museum",
+ "transport.museum",
+ "tree.museum",
+ "trolley.museum",
+ "trust.museum",
+ "trustee.museum",
+ "uhren.museum",
+ "ulm.museum",
+ "undersea.museum",
+ "university.museum",
+ "usa.museum",
+ "usantiques.museum",
+ "usarts.museum",
+ "uscountryestate.museum",
+ "usculture.museum",
+ "usdecorativearts.museum",
+ "usgarden.museum",
+ "ushistory.museum",
+ "ushuaia.museum",
+ "uslivinghistory.museum",
+ "utah.museum",
+ "uvic.museum",
+ "valley.museum",
+ "vantaa.museum",
+ "versailles.museum",
+ "viking.museum",
+ "village.museum",
+ "virginia.museum",
+ "virtual.museum",
+ "virtuel.museum",
+ "vlaanderen.museum",
+ "volkenkunde.museum",
+ "wales.museum",
+ "wallonie.museum",
+ "war.museum",
+ "washingtondc.museum",
+ "watchandclock.museum",
+ "watch-and-clock.museum",
+ "western.museum",
+ "westfalen.museum",
+ "whaling.museum",
+ "wildlife.museum",
+ "williamsburg.museum",
+ "windmill.museum",
+ "workshop.museum",
+ "york.museum",
+ "yorkshire.museum",
+ "yosemite.museum",
+ "youth.museum",
+ "zoological.museum",
+ "zoology.museum",
+ "ירושלים.museum",
+ "иком.museum",
+ "mv",
+ "aero.mv",
+ "biz.mv",
+ "com.mv",
+ "coop.mv",
+ "edu.mv",
+ "gov.mv",
+ "info.mv",
+ "int.mv",
+ "mil.mv",
+ "museum.mv",
+ "name.mv",
+ "net.mv",
+ "org.mv",
+ "pro.mv",
+ "mw",
+ "ac.mw",
+ "biz.mw",
+ "co.mw",
+ "com.mw",
+ "coop.mw",
+ "edu.mw",
+ "gov.mw",
+ "int.mw",
+ "museum.mw",
+ "net.mw",
+ "org.mw",
+ "mx",
+ "com.mx",
+ "org.mx",
+ "gob.mx",
+ "edu.mx",
+ "net.mx",
+ "my",
+ "biz.my",
+ "com.my",
+ "edu.my",
+ "gov.my",
+ "mil.my",
+ "name.my",
+ "net.my",
+ "org.my",
+ "mz",
+ "ac.mz",
+ "adv.mz",
+ "co.mz",
+ "edu.mz",
+ "gov.mz",
+ "mil.mz",
+ "net.mz",
+ "org.mz",
+ "na",
+ "info.na",
+ "pro.na",
+ "name.na",
+ "school.na",
+ "or.na",
+ "dr.na",
+ "us.na",
+ "mx.na",
+ "ca.na",
+ "in.na",
+ "cc.na",
+ "tv.na",
+ "ws.na",
+ "mobi.na",
+ "co.na",
+ "com.na",
+ "org.na",
+ "name",
+ "nc",
+ "asso.nc",
+ "nom.nc",
+ "ne",
+ "net",
+ "nf",
+ "com.nf",
+ "net.nf",
+ "per.nf",
+ "rec.nf",
+ "web.nf",
+ "arts.nf",
+ "firm.nf",
+ "info.nf",
+ "other.nf",
+ "store.nf",
+ "ng",
+ "com.ng",
+ "edu.ng",
+ "gov.ng",
+ "i.ng",
+ "mil.ng",
+ "mobi.ng",
+ "name.ng",
+ "net.ng",
+ "org.ng",
+ "sch.ng",
+ "ni",
+ "ac.ni",
+ "biz.ni",
+ "co.ni",
+ "com.ni",
+ "edu.ni",
+ "gob.ni",
+ "in.ni",
+ "info.ni",
+ "int.ni",
+ "mil.ni",
+ "net.ni",
+ "nom.ni",
+ "org.ni",
+ "web.ni",
+ "nl",
+ "no",
+ "fhs.no",
+ "vgs.no",
+ "fylkesbibl.no",
+ "folkebibl.no",
+ "museum.no",
+ "idrett.no",
+ "priv.no",
+ "mil.no",
+ "stat.no",
+ "dep.no",
+ "kommune.no",
+ "herad.no",
+ "aa.no",
+ "ah.no",
+ "bu.no",
+ "fm.no",
+ "hl.no",
+ "hm.no",
+ "jan-mayen.no",
+ "mr.no",
+ "nl.no",
+ "nt.no",
+ "of.no",
+ "ol.no",
+ "oslo.no",
+ "rl.no",
+ "sf.no",
+ "st.no",
+ "svalbard.no",
+ "tm.no",
+ "tr.no",
+ "va.no",
+ "vf.no",
+ "gs.aa.no",
+ "gs.ah.no",
+ "gs.bu.no",
+ "gs.fm.no",
+ "gs.hl.no",
+ "gs.hm.no",
+ "gs.jan-mayen.no",
+ "gs.mr.no",
+ "gs.nl.no",
+ "gs.nt.no",
+ "gs.of.no",
+ "gs.ol.no",
+ "gs.oslo.no",
+ "gs.rl.no",
+ "gs.sf.no",
+ "gs.st.no",
+ "gs.svalbard.no",
+ "gs.tm.no",
+ "gs.tr.no",
+ "gs.va.no",
+ "gs.vf.no",
+ "akrehamn.no",
+ "åkrehamn.no",
+ "algard.no",
+ "ålgård.no",
+ "arna.no",
+ "brumunddal.no",
+ "bryne.no",
+ "bronnoysund.no",
+ "brønnøysund.no",
+ "drobak.no",
+ "drøbak.no",
+ "egersund.no",
+ "fetsund.no",
+ "floro.no",
+ "florø.no",
+ "fredrikstad.no",
+ "hokksund.no",
+ "honefoss.no",
+ "hønefoss.no",
+ "jessheim.no",
+ "jorpeland.no",
+ "jørpeland.no",
+ "kirkenes.no",
+ "kopervik.no",
+ "krokstadelva.no",
+ "langevag.no",
+ "langevåg.no",
+ "leirvik.no",
+ "mjondalen.no",
+ "mjøndalen.no",
+ "mo-i-rana.no",
+ "mosjoen.no",
+ "mosjøen.no",
+ "nesoddtangen.no",
+ "orkanger.no",
+ "osoyro.no",
+ "osøyro.no",
+ "raholt.no",
+ "råholt.no",
+ "sandnessjoen.no",
+ "sandnessjøen.no",
+ "skedsmokorset.no",
+ "slattum.no",
+ "spjelkavik.no",
+ "stathelle.no",
+ "stavern.no",
+ "stjordalshalsen.no",
+ "stjørdalshalsen.no",
+ "tananger.no",
+ "tranby.no",
+ "vossevangen.no",
+ "afjord.no",
+ "åfjord.no",
+ "agdenes.no",
+ "al.no",
+ "ål.no",
+ "alesund.no",
+ "ålesund.no",
+ "alstahaug.no",
+ "alta.no",
+ "áltá.no",
+ "alaheadju.no",
+ "álaheadju.no",
+ "alvdal.no",
+ "amli.no",
+ "åmli.no",
+ "amot.no",
+ "åmot.no",
+ "andebu.no",
+ "andoy.no",
+ "andøy.no",
+ "andasuolo.no",
+ "ardal.no",
+ "årdal.no",
+ "aremark.no",
+ "arendal.no",
+ "ås.no",
+ "aseral.no",
+ "åseral.no",
+ "asker.no",
+ "askim.no",
+ "askvoll.no",
+ "askoy.no",
+ "askøy.no",
+ "asnes.no",
+ "åsnes.no",
+ "audnedaln.no",
+ "aukra.no",
+ "aure.no",
+ "aurland.no",
+ "aurskog-holand.no",
+ "aurskog-høland.no",
+ "austevoll.no",
+ "austrheim.no",
+ "averoy.no",
+ "averøy.no",
+ "balestrand.no",
+ "ballangen.no",
+ "balat.no",
+ "bálát.no",
+ "balsfjord.no",
+ "bahccavuotna.no",
+ "báhccavuotna.no",
+ "bamble.no",
+ "bardu.no",
+ "beardu.no",
+ "beiarn.no",
+ "bajddar.no",
+ "bájddar.no",
+ "baidar.no",
+ "báidár.no",
+ "berg.no",
+ "bergen.no",
+ "berlevag.no",
+ "berlevåg.no",
+ "bearalvahki.no",
+ "bearalváhki.no",
+ "bindal.no",
+ "birkenes.no",
+ "bjarkoy.no",
+ "bjarkøy.no",
+ "bjerkreim.no",
+ "bjugn.no",
+ "bodo.no",
+ "bodø.no",
+ "badaddja.no",
+ "bådåddjå.no",
+ "budejju.no",
+ "bokn.no",
+ "bremanger.no",
+ "bronnoy.no",
+ "brønnøy.no",
+ "bygland.no",
+ "bykle.no",
+ "barum.no",
+ "bærum.no",
+ "bo.telemark.no",
+ "bø.telemark.no",
+ "bo.nordland.no",
+ "bø.nordland.no",
+ "bievat.no",
+ "bievát.no",
+ "bomlo.no",
+ "bømlo.no",
+ "batsfjord.no",
+ "båtsfjord.no",
+ "bahcavuotna.no",
+ "báhcavuotna.no",
+ "dovre.no",
+ "drammen.no",
+ "drangedal.no",
+ "dyroy.no",
+ "dyrøy.no",
+ "donna.no",
+ "dønna.no",
+ "eid.no",
+ "eidfjord.no",
+ "eidsberg.no",
+ "eidskog.no",
+ "eidsvoll.no",
+ "eigersund.no",
+ "elverum.no",
+ "enebakk.no",
+ "engerdal.no",
+ "etne.no",
+ "etnedal.no",
+ "evenes.no",
+ "evenassi.no",
+ "evenášši.no",
+ "evje-og-hornnes.no",
+ "farsund.no",
+ "fauske.no",
+ "fuossko.no",
+ "fuoisku.no",
+ "fedje.no",
+ "fet.no",
+ "finnoy.no",
+ "finnøy.no",
+ "fitjar.no",
+ "fjaler.no",
+ "fjell.no",
+ "flakstad.no",
+ "flatanger.no",
+ "flekkefjord.no",
+ "flesberg.no",
+ "flora.no",
+ "fla.no",
+ "flå.no",
+ "folldal.no",
+ "forsand.no",
+ "fosnes.no",
+ "frei.no",
+ "frogn.no",
+ "froland.no",
+ "frosta.no",
+ "frana.no",
+ "fræna.no",
+ "froya.no",
+ "frøya.no",
+ "fusa.no",
+ "fyresdal.no",
+ "forde.no",
+ "førde.no",
+ "gamvik.no",
+ "gangaviika.no",
+ "gáŋgaviika.no",
+ "gaular.no",
+ "gausdal.no",
+ "gildeskal.no",
+ "gildeskål.no",
+ "giske.no",
+ "gjemnes.no",
+ "gjerdrum.no",
+ "gjerstad.no",
+ "gjesdal.no",
+ "gjovik.no",
+ "gjøvik.no",
+ "gloppen.no",
+ "gol.no",
+ "gran.no",
+ "grane.no",
+ "granvin.no",
+ "gratangen.no",
+ "grimstad.no",
+ "grong.no",
+ "kraanghke.no",
+ "kråanghke.no",
+ "grue.no",
+ "gulen.no",
+ "hadsel.no",
+ "halden.no",
+ "halsa.no",
+ "hamar.no",
+ "hamaroy.no",
+ "habmer.no",
+ "hábmer.no",
+ "hapmir.no",
+ "hápmir.no",
+ "hammerfest.no",
+ "hammarfeasta.no",
+ "hámmárfeasta.no",
+ "haram.no",
+ "hareid.no",
+ "harstad.no",
+ "hasvik.no",
+ "aknoluokta.no",
+ "ákŋoluokta.no",
+ "hattfjelldal.no",
+ "aarborte.no",
+ "haugesund.no",
+ "hemne.no",
+ "hemnes.no",
+ "hemsedal.no",
+ "heroy.more-og-romsdal.no",
+ "herøy.møre-og-romsdal.no",
+ "heroy.nordland.no",
+ "herøy.nordland.no",
+ "hitra.no",
+ "hjartdal.no",
+ "hjelmeland.no",
+ "hobol.no",
+ "hobøl.no",
+ "hof.no",
+ "hol.no",
+ "hole.no",
+ "holmestrand.no",
+ "holtalen.no",
+ "holtålen.no",
+ "hornindal.no",
+ "horten.no",
+ "hurdal.no",
+ "hurum.no",
+ "hvaler.no",
+ "hyllestad.no",
+ "hagebostad.no",
+ "hægebostad.no",
+ "hoyanger.no",
+ "høyanger.no",
+ "hoylandet.no",
+ "høylandet.no",
+ "ha.no",
+ "hå.no",
+ "ibestad.no",
+ "inderoy.no",
+ "inderøy.no",
+ "iveland.no",
+ "jevnaker.no",
+ "jondal.no",
+ "jolster.no",
+ "jølster.no",
+ "karasjok.no",
+ "karasjohka.no",
+ "kárášjohka.no",
+ "karlsoy.no",
+ "galsa.no",
+ "gálsá.no",
+ "karmoy.no",
+ "karmøy.no",
+ "kautokeino.no",
+ "guovdageaidnu.no",
+ "klepp.no",
+ "klabu.no",
+ "klæbu.no",
+ "kongsberg.no",
+ "kongsvinger.no",
+ "kragero.no",
+ "kragerø.no",
+ "kristiansand.no",
+ "kristiansund.no",
+ "krodsherad.no",
+ "krødsherad.no",
+ "kvalsund.no",
+ "rahkkeravju.no",
+ "ráhkkerávju.no",
+ "kvam.no",
+ "kvinesdal.no",
+ "kvinnherad.no",
+ "kviteseid.no",
+ "kvitsoy.no",
+ "kvitsøy.no",
+ "kvafjord.no",
+ "kvæfjord.no",
+ "giehtavuoatna.no",
+ "kvanangen.no",
+ "kvænangen.no",
+ "navuotna.no",
+ "návuotna.no",
+ "kafjord.no",
+ "kåfjord.no",
+ "gaivuotna.no",
+ "gáivuotna.no",
+ "larvik.no",
+ "lavangen.no",
+ "lavagis.no",
+ "loabat.no",
+ "loabát.no",
+ "lebesby.no",
+ "davvesiida.no",
+ "leikanger.no",
+ "leirfjord.no",
+ "leka.no",
+ "leksvik.no",
+ "lenvik.no",
+ "leangaviika.no",
+ "leaŋgaviika.no",
+ "lesja.no",
+ "levanger.no",
+ "lier.no",
+ "lierne.no",
+ "lillehammer.no",
+ "lillesand.no",
+ "lindesnes.no",
+ "lindas.no",
+ "lindås.no",
+ "lom.no",
+ "loppa.no",
+ "lahppi.no",
+ "láhppi.no",
+ "lund.no",
+ "lunner.no",
+ "luroy.no",
+ "lurøy.no",
+ "luster.no",
+ "lyngdal.no",
+ "lyngen.no",
+ "ivgu.no",
+ "lardal.no",
+ "lerdal.no",
+ "lærdal.no",
+ "lodingen.no",
+ "lødingen.no",
+ "lorenskog.no",
+ "lørenskog.no",
+ "loten.no",
+ "løten.no",
+ "malvik.no",
+ "masoy.no",
+ "måsøy.no",
+ "muosat.no",
+ "muosát.no",
+ "mandal.no",
+ "marker.no",
+ "marnardal.no",
+ "masfjorden.no",
+ "meland.no",
+ "meldal.no",
+ "melhus.no",
+ "meloy.no",
+ "meløy.no",
+ "meraker.no",
+ "meråker.no",
+ "moareke.no",
+ "moåreke.no",
+ "midsund.no",
+ "midtre-gauldal.no",
+ "modalen.no",
+ "modum.no",
+ "molde.no",
+ "moskenes.no",
+ "moss.no",
+ "mosvik.no",
+ "malselv.no",
+ "målselv.no",
+ "malatvuopmi.no",
+ "málatvuopmi.no",
+ "namdalseid.no",
+ "aejrie.no",
+ "namsos.no",
+ "namsskogan.no",
+ "naamesjevuemie.no",
+ "nååmesjevuemie.no",
+ "laakesvuemie.no",
+ "nannestad.no",
+ "narvik.no",
+ "narviika.no",
+ "naustdal.no",
+ "nedre-eiker.no",
+ "nes.akershus.no",
+ "nes.buskerud.no",
+ "nesna.no",
+ "nesodden.no",
+ "nesseby.no",
+ "unjarga.no",
+ "unjárga.no",
+ "nesset.no",
+ "nissedal.no",
+ "nittedal.no",
+ "nord-aurdal.no",
+ "nord-fron.no",
+ "nord-odal.no",
+ "norddal.no",
+ "nordkapp.no",
+ "davvenjarga.no",
+ "davvenjárga.no",
+ "nordre-land.no",
+ "nordreisa.no",
+ "raisa.no",
+ "ráisa.no",
+ "nore-og-uvdal.no",
+ "notodden.no",
+ "naroy.no",
+ "nærøy.no",
+ "notteroy.no",
+ "nøtterøy.no",
+ "odda.no",
+ "oksnes.no",
+ "øksnes.no",
+ "oppdal.no",
+ "oppegard.no",
+ "oppegård.no",
+ "orkdal.no",
+ "orland.no",
+ "ørland.no",
+ "orskog.no",
+ "ørskog.no",
+ "orsta.no",
+ "ørsta.no",
+ "os.hedmark.no",
+ "os.hordaland.no",
+ "osen.no",
+ "osteroy.no",
+ "osterøy.no",
+ "ostre-toten.no",
+ "østre-toten.no",
+ "overhalla.no",
+ "ovre-eiker.no",
+ "øvre-eiker.no",
+ "oyer.no",
+ "øyer.no",
+ "oygarden.no",
+ "øygarden.no",
+ "oystre-slidre.no",
+ "øystre-slidre.no",
+ "porsanger.no",
+ "porsangu.no",
+ "porsáŋgu.no",
+ "porsgrunn.no",
+ "radoy.no",
+ "radøy.no",
+ "rakkestad.no",
+ "rana.no",
+ "ruovat.no",
+ "randaberg.no",
+ "rauma.no",
+ "rendalen.no",
+ "rennebu.no",
+ "rennesoy.no",
+ "rennesøy.no",
+ "rindal.no",
+ "ringebu.no",
+ "ringerike.no",
+ "ringsaker.no",
+ "rissa.no",
+ "risor.no",
+ "risør.no",
+ "roan.no",
+ "rollag.no",
+ "rygge.no",
+ "ralingen.no",
+ "rælingen.no",
+ "rodoy.no",
+ "rødøy.no",
+ "romskog.no",
+ "rømskog.no",
+ "roros.no",
+ "røros.no",
+ "rost.no",
+ "røst.no",
+ "royken.no",
+ "røyken.no",
+ "royrvik.no",
+ "røyrvik.no",
+ "rade.no",
+ "råde.no",
+ "salangen.no",
+ "siellak.no",
+ "saltdal.no",
+ "salat.no",
+ "sálát.no",
+ "sálat.no",
+ "samnanger.no",
+ "sande.more-og-romsdal.no",
+ "sande.møre-og-romsdal.no",
+ "sande.vestfold.no",
+ "sandefjord.no",
+ "sandnes.no",
+ "sandoy.no",
+ "sandøy.no",
+ "sarpsborg.no",
+ "sauda.no",
+ "sauherad.no",
+ "sel.no",
+ "selbu.no",
+ "selje.no",
+ "seljord.no",
+ "sigdal.no",
+ "siljan.no",
+ "sirdal.no",
+ "skaun.no",
+ "skedsmo.no",
+ "ski.no",
+ "skien.no",
+ "skiptvet.no",
+ "skjervoy.no",
+ "skjervøy.no",
+ "skierva.no",
+ "skiervá.no",
+ "skjak.no",
+ "skjåk.no",
+ "skodje.no",
+ "skanland.no",
+ "skånland.no",
+ "skanit.no",
+ "skánit.no",
+ "smola.no",
+ "smøla.no",
+ "snillfjord.no",
+ "snasa.no",
+ "snåsa.no",
+ "snoasa.no",
+ "snaase.no",
+ "snåase.no",
+ "sogndal.no",
+ "sokndal.no",
+ "sola.no",
+ "solund.no",
+ "songdalen.no",
+ "sortland.no",
+ "spydeberg.no",
+ "stange.no",
+ "stavanger.no",
+ "steigen.no",
+ "steinkjer.no",
+ "stjordal.no",
+ "stjørdal.no",
+ "stokke.no",
+ "stor-elvdal.no",
+ "stord.no",
+ "stordal.no",
+ "storfjord.no",
+ "omasvuotna.no",
+ "strand.no",
+ "stranda.no",
+ "stryn.no",
+ "sula.no",
+ "suldal.no",
+ "sund.no",
+ "sunndal.no",
+ "surnadal.no",
+ "sveio.no",
+ "svelvik.no",
+ "sykkylven.no",
+ "sogne.no",
+ "søgne.no",
+ "somna.no",
+ "sømna.no",
+ "sondre-land.no",
+ "søndre-land.no",
+ "sor-aurdal.no",
+ "sør-aurdal.no",
+ "sor-fron.no",
+ "sør-fron.no",
+ "sor-odal.no",
+ "sør-odal.no",
+ "sor-varanger.no",
+ "sør-varanger.no",
+ "matta-varjjat.no",
+ "mátta-várjjat.no",
+ "sorfold.no",
+ "sørfold.no",
+ "sorreisa.no",
+ "sørreisa.no",
+ "sorum.no",
+ "sørum.no",
+ "tana.no",
+ "deatnu.no",
+ "time.no",
+ "tingvoll.no",
+ "tinn.no",
+ "tjeldsund.no",
+ "dielddanuorri.no",
+ "tjome.no",
+ "tjøme.no",
+ "tokke.no",
+ "tolga.no",
+ "torsken.no",
+ "tranoy.no",
+ "tranøy.no",
+ "tromso.no",
+ "tromsø.no",
+ "tromsa.no",
+ "romsa.no",
+ "trondheim.no",
+ "troandin.no",
+ "trysil.no",
+ "trana.no",
+ "træna.no",
+ "trogstad.no",
+ "trøgstad.no",
+ "tvedestrand.no",
+ "tydal.no",
+ "tynset.no",
+ "tysfjord.no",
+ "divtasvuodna.no",
+ "divttasvuotna.no",
+ "tysnes.no",
+ "tysvar.no",
+ "tysvær.no",
+ "tonsberg.no",
+ "tønsberg.no",
+ "ullensaker.no",
+ "ullensvang.no",
+ "ulvik.no",
+ "utsira.no",
+ "vadso.no",
+ "vadsø.no",
+ "cahcesuolo.no",
+ "čáhcesuolo.no",
+ "vaksdal.no",
+ "valle.no",
+ "vang.no",
+ "vanylven.no",
+ "vardo.no",
+ "vardø.no",
+ "varggat.no",
+ "várggát.no",
+ "vefsn.no",
+ "vaapste.no",
+ "vega.no",
+ "vegarshei.no",
+ "vegårshei.no",
+ "vennesla.no",
+ "verdal.no",
+ "verran.no",
+ "vestby.no",
+ "vestnes.no",
+ "vestre-slidre.no",
+ "vestre-toten.no",
+ "vestvagoy.no",
+ "vestvågøy.no",
+ "vevelstad.no",
+ "vik.no",
+ "vikna.no",
+ "vindafjord.no",
+ "volda.no",
+ "voss.no",
+ "varoy.no",
+ "værøy.no",
+ "vagan.no",
+ "vågan.no",
+ "voagat.no",
+ "vagsoy.no",
+ "vågsøy.no",
+ "vaga.no",
+ "vågå.no",
+ "valer.ostfold.no",
+ "våler.østfold.no",
+ "valer.hedmark.no",
+ "våler.hedmark.no",
+ "*.np",
+ "nr",
+ "biz.nr",
+ "info.nr",
+ "gov.nr",
+ "edu.nr",
+ "org.nr",
+ "net.nr",
+ "com.nr",
+ "nu",
+ "nz",
+ "ac.nz",
+ "co.nz",
+ "cri.nz",
+ "geek.nz",
+ "gen.nz",
+ "govt.nz",
+ "health.nz",
+ "iwi.nz",
+ "kiwi.nz",
+ "maori.nz",
+ "mil.nz",
+ "māori.nz",
+ "net.nz",
+ "org.nz",
+ "parliament.nz",
+ "school.nz",
+ "om",
+ "co.om",
+ "com.om",
+ "edu.om",
+ "gov.om",
+ "med.om",
+ "museum.om",
+ "net.om",
+ "org.om",
+ "pro.om",
+ "onion",
+ "org",
+ "pa",
+ "ac.pa",
+ "gob.pa",
+ "com.pa",
+ "org.pa",
+ "sld.pa",
+ "edu.pa",
+ "net.pa",
+ "ing.pa",
+ "abo.pa",
+ "med.pa",
+ "nom.pa",
+ "pe",
+ "edu.pe",
+ "gob.pe",
+ "nom.pe",
+ "mil.pe",
+ "org.pe",
+ "com.pe",
+ "net.pe",
+ "pf",
+ "com.pf",
+ "org.pf",
+ "edu.pf",
+ "*.pg",
+ "ph",
+ "com.ph",
+ "net.ph",
+ "org.ph",
+ "gov.ph",
+ "edu.ph",
+ "ngo.ph",
+ "mil.ph",
+ "i.ph",
+ "pk",
+ "com.pk",
+ "net.pk",
+ "edu.pk",
+ "org.pk",
+ "fam.pk",
+ "biz.pk",
+ "web.pk",
+ "gov.pk",
+ "gob.pk",
+ "gok.pk",
+ "gon.pk",
+ "gop.pk",
+ "gos.pk",
+ "info.pk",
+ "pl",
+ "com.pl",
+ "net.pl",
+ "org.pl",
+ "aid.pl",
+ "agro.pl",
+ "atm.pl",
+ "auto.pl",
+ "biz.pl",
+ "edu.pl",
+ "gmina.pl",
+ "gsm.pl",
+ "info.pl",
+ "mail.pl",
+ "miasta.pl",
+ "media.pl",
+ "mil.pl",
+ "nieruchomosci.pl",
+ "nom.pl",
+ "pc.pl",
+ "powiat.pl",
+ "priv.pl",
+ "realestate.pl",
+ "rel.pl",
+ "sex.pl",
+ "shop.pl",
+ "sklep.pl",
+ "sos.pl",
+ "szkola.pl",
+ "targi.pl",
+ "tm.pl",
+ "tourism.pl",
+ "travel.pl",
+ "turystyka.pl",
+ "gov.pl",
+ "ap.gov.pl",
+ "ic.gov.pl",
+ "is.gov.pl",
+ "us.gov.pl",
+ "kmpsp.gov.pl",
+ "kppsp.gov.pl",
+ "kwpsp.gov.pl",
+ "psp.gov.pl",
+ "wskr.gov.pl",
+ "kwp.gov.pl",
+ "mw.gov.pl",
+ "ug.gov.pl",
+ "um.gov.pl",
+ "umig.gov.pl",
+ "ugim.gov.pl",
+ "upow.gov.pl",
+ "uw.gov.pl",
+ "starostwo.gov.pl",
+ "pa.gov.pl",
+ "po.gov.pl",
+ "psse.gov.pl",
+ "pup.gov.pl",
+ "rzgw.gov.pl",
+ "sa.gov.pl",
+ "so.gov.pl",
+ "sr.gov.pl",
+ "wsa.gov.pl",
+ "sko.gov.pl",
+ "uzs.gov.pl",
+ "wiih.gov.pl",
+ "winb.gov.pl",
+ "pinb.gov.pl",
+ "wios.gov.pl",
+ "witd.gov.pl",
+ "wzmiuw.gov.pl",
+ "piw.gov.pl",
+ "wiw.gov.pl",
+ "griw.gov.pl",
+ "wif.gov.pl",
+ "oum.gov.pl",
+ "sdn.gov.pl",
+ "zp.gov.pl",
+ "uppo.gov.pl",
+ "mup.gov.pl",
+ "wuoz.gov.pl",
+ "konsulat.gov.pl",
+ "oirm.gov.pl",
+ "augustow.pl",
+ "babia-gora.pl",
+ "bedzin.pl",
+ "beskidy.pl",
+ "bialowieza.pl",
+ "bialystok.pl",
+ "bielawa.pl",
+ "bieszczady.pl",
+ "boleslawiec.pl",
+ "bydgoszcz.pl",
+ "bytom.pl",
+ "cieszyn.pl",
+ "czeladz.pl",
+ "czest.pl",
+ "dlugoleka.pl",
+ "elblag.pl",
+ "elk.pl",
+ "glogow.pl",
+ "gniezno.pl",
+ "gorlice.pl",
+ "grajewo.pl",
+ "ilawa.pl",
+ "jaworzno.pl",
+ "jelenia-gora.pl",
+ "jgora.pl",
+ "kalisz.pl",
+ "kazimierz-dolny.pl",
+ "karpacz.pl",
+ "kartuzy.pl",
+ "kaszuby.pl",
+ "katowice.pl",
+ "kepno.pl",
+ "ketrzyn.pl",
+ "klodzko.pl",
+ "kobierzyce.pl",
+ "kolobrzeg.pl",
+ "konin.pl",
+ "konskowola.pl",
+ "kutno.pl",
+ "lapy.pl",
+ "lebork.pl",
+ "legnica.pl",
+ "lezajsk.pl",
+ "limanowa.pl",
+ "lomza.pl",
+ "lowicz.pl",
+ "lubin.pl",
+ "lukow.pl",
+ "malbork.pl",
+ "malopolska.pl",
+ "mazowsze.pl",
+ "mazury.pl",
+ "mielec.pl",
+ "mielno.pl",
+ "mragowo.pl",
+ "naklo.pl",
+ "nowaruda.pl",
+ "nysa.pl",
+ "olawa.pl",
+ "olecko.pl",
+ "olkusz.pl",
+ "olsztyn.pl",
+ "opoczno.pl",
+ "opole.pl",
+ "ostroda.pl",
+ "ostroleka.pl",
+ "ostrowiec.pl",
+ "ostrowwlkp.pl",
+ "pila.pl",
+ "pisz.pl",
+ "podhale.pl",
+ "podlasie.pl",
+ "polkowice.pl",
+ "pomorze.pl",
+ "pomorskie.pl",
+ "prochowice.pl",
+ "pruszkow.pl",
+ "przeworsk.pl",
+ "pulawy.pl",
+ "radom.pl",
+ "rawa-maz.pl",
+ "rybnik.pl",
+ "rzeszow.pl",
+ "sanok.pl",
+ "sejny.pl",
+ "slask.pl",
+ "slupsk.pl",
+ "sosnowiec.pl",
+ "stalowa-wola.pl",
+ "skoczow.pl",
+ "starachowice.pl",
+ "stargard.pl",
+ "suwalki.pl",
+ "swidnica.pl",
+ "swiebodzin.pl",
+ "swinoujscie.pl",
+ "szczecin.pl",
+ "szczytno.pl",
+ "tarnobrzeg.pl",
+ "tgory.pl",
+ "turek.pl",
+ "tychy.pl",
+ "ustka.pl",
+ "walbrzych.pl",
+ "warmia.pl",
+ "warszawa.pl",
+ "waw.pl",
+ "wegrow.pl",
+ "wielun.pl",
+ "wlocl.pl",
+ "wloclawek.pl",
+ "wodzislaw.pl",
+ "wolomin.pl",
+ "wroclaw.pl",
+ "zachpomor.pl",
+ "zagan.pl",
+ "zarow.pl",
+ "zgora.pl",
+ "zgorzelec.pl",
+ "pm",
+ "pn",
+ "gov.pn",
+ "co.pn",
+ "org.pn",
+ "edu.pn",
+ "net.pn",
+ "post",
+ "pr",
+ "com.pr",
+ "net.pr",
+ "org.pr",
+ "gov.pr",
+ "edu.pr",
+ "isla.pr",
+ "pro.pr",
+ "biz.pr",
+ "info.pr",
+ "name.pr",
+ "est.pr",
+ "prof.pr",
+ "ac.pr",
+ "pro",
+ "aaa.pro",
+ "aca.pro",
+ "acct.pro",
+ "avocat.pro",
+ "bar.pro",
+ "cpa.pro",
+ "eng.pro",
+ "jur.pro",
+ "law.pro",
+ "med.pro",
+ "recht.pro",
+ "ps",
+ "edu.ps",
+ "gov.ps",
+ "sec.ps",
+ "plo.ps",
+ "com.ps",
+ "org.ps",
+ "net.ps",
+ "pt",
+ "net.pt",
+ "gov.pt",
+ "org.pt",
+ "edu.pt",
+ "int.pt",
+ "publ.pt",
+ "com.pt",
+ "nome.pt",
+ "pw",
+ "co.pw",
+ "ne.pw",
+ "or.pw",
+ "ed.pw",
+ "go.pw",
+ "belau.pw",
+ "py",
+ "com.py",
+ "coop.py",
+ "edu.py",
+ "gov.py",
+ "mil.py",
+ "net.py",
+ "org.py",
+ "qa",
+ "com.qa",
+ "edu.qa",
+ "gov.qa",
+ "mil.qa",
+ "name.qa",
+ "net.qa",
+ "org.qa",
+ "sch.qa",
+ "re",
+ "asso.re",
+ "com.re",
+ "nom.re",
+ "ro",
+ "arts.ro",
+ "com.ro",
+ "firm.ro",
+ "info.ro",
+ "nom.ro",
+ "nt.ro",
+ "org.ro",
+ "rec.ro",
+ "store.ro",
+ "tm.ro",
+ "www.ro",
+ "rs",
+ "ac.rs",
+ "co.rs",
+ "edu.rs",
+ "gov.rs",
+ "in.rs",
+ "org.rs",
+ "ru",
+ "rw",
+ "ac.rw",
+ "co.rw",
+ "coop.rw",
+ "gov.rw",
+ "mil.rw",
+ "net.rw",
+ "org.rw",
+ "sa",
+ "com.sa",
+ "net.sa",
+ "org.sa",
+ "gov.sa",
+ "med.sa",
+ "pub.sa",
+ "edu.sa",
+ "sch.sa",
+ "sb",
+ "com.sb",
+ "edu.sb",
+ "gov.sb",
+ "net.sb",
+ "org.sb",
+ "sc",
+ "com.sc",
+ "gov.sc",
+ "net.sc",
+ "org.sc",
+ "edu.sc",
+ "sd",
+ "com.sd",
+ "net.sd",
+ "org.sd",
+ "edu.sd",
+ "med.sd",
+ "tv.sd",
+ "gov.sd",
+ "info.sd",
+ "se",
+ "a.se",
+ "ac.se",
+ "b.se",
+ "bd.se",
+ "brand.se",
+ "c.se",
+ "d.se",
+ "e.se",
+ "f.se",
+ "fh.se",
+ "fhsk.se",
+ "fhv.se",
+ "g.se",
+ "h.se",
+ "i.se",
+ "k.se",
+ "komforb.se",
+ "kommunalforbund.se",
+ "komvux.se",
+ "l.se",
+ "lanbib.se",
+ "m.se",
+ "n.se",
+ "naturbruksgymn.se",
+ "o.se",
+ "org.se",
+ "p.se",
+ "parti.se",
+ "pp.se",
+ "press.se",
+ "r.se",
+ "s.se",
+ "t.se",
+ "tm.se",
+ "u.se",
+ "w.se",
+ "x.se",
+ "y.se",
+ "z.se",
+ "sg",
+ "com.sg",
+ "net.sg",
+ "org.sg",
+ "gov.sg",
+ "edu.sg",
+ "per.sg",
+ "sh",
+ "com.sh",
+ "net.sh",
+ "gov.sh",
+ "org.sh",
+ "mil.sh",
+ "si",
+ "sj",
+ "sk",
+ "sl",
+ "com.sl",
+ "net.sl",
+ "edu.sl",
+ "gov.sl",
+ "org.sl",
+ "sm",
+ "sn",
+ "art.sn",
+ "com.sn",
+ "edu.sn",
+ "gouv.sn",
+ "org.sn",
+ "perso.sn",
+ "univ.sn",
+ "so",
+ "com.so",
+ "edu.so",
+ "gov.so",
+ "me.so",
+ "net.so",
+ "org.so",
+ "sr",
+ "ss",
+ "biz.ss",
+ "com.ss",
+ "edu.ss",
+ "gov.ss",
+ "me.ss",
+ "net.ss",
+ "org.ss",
+ "sch.ss",
+ "st",
+ "co.st",
+ "com.st",
+ "consulado.st",
+ "edu.st",
+ "embaixada.st",
+ "mil.st",
+ "net.st",
+ "org.st",
+ "principe.st",
+ "saotome.st",
+ "store.st",
+ "su",
+ "sv",
+ "com.sv",
+ "edu.sv",
+ "gob.sv",
+ "org.sv",
+ "red.sv",
+ "sx",
+ "gov.sx",
+ "sy",
+ "edu.sy",
+ "gov.sy",
+ "net.sy",
+ "mil.sy",
+ "com.sy",
+ "org.sy",
+ "sz",
+ "co.sz",
+ "ac.sz",
+ "org.sz",
+ "tc",
+ "td",
+ "tel",
+ "tf",
+ "tg",
+ "th",
+ "ac.th",
+ "co.th",
+ "go.th",
+ "in.th",
+ "mi.th",
+ "net.th",
+ "or.th",
+ "tj",
+ "ac.tj",
+ "biz.tj",
+ "co.tj",
+ "com.tj",
+ "edu.tj",
+ "go.tj",
+ "gov.tj",
+ "int.tj",
+ "mil.tj",
+ "name.tj",
+ "net.tj",
+ "nic.tj",
+ "org.tj",
+ "test.tj",
+ "web.tj",
+ "tk",
+ "tl",
+ "gov.tl",
+ "tm",
+ "com.tm",
+ "co.tm",
+ "org.tm",
+ "net.tm",
+ "nom.tm",
+ "gov.tm",
+ "mil.tm",
+ "edu.tm",
+ "tn",
+ "com.tn",
+ "ens.tn",
+ "fin.tn",
+ "gov.tn",
+ "ind.tn",
+ "info.tn",
+ "intl.tn",
+ "mincom.tn",
+ "nat.tn",
+ "net.tn",
+ "org.tn",
+ "perso.tn",
+ "tourism.tn",
+ "to",
+ "com.to",
+ "gov.to",
+ "net.to",
+ "org.to",
+ "edu.to",
+ "mil.to",
+ "tr",
+ "av.tr",
+ "bbs.tr",
+ "bel.tr",
+ "biz.tr",
+ "com.tr",
+ "dr.tr",
+ "edu.tr",
+ "gen.tr",
+ "gov.tr",
+ "info.tr",
+ "mil.tr",
+ "k12.tr",
+ "kep.tr",
+ "name.tr",
+ "net.tr",
+ "org.tr",
+ "pol.tr",
+ "tel.tr",
+ "tsk.tr",
+ "tv.tr",
+ "web.tr",
+ "nc.tr",
+ "gov.nc.tr",
+ "tt",
+ "co.tt",
+ "com.tt",
+ "org.tt",
+ "net.tt",
+ "biz.tt",
+ "info.tt",
+ "pro.tt",
+ "int.tt",
+ "coop.tt",
+ "jobs.tt",
+ "mobi.tt",
+ "travel.tt",
+ "museum.tt",
+ "aero.tt",
+ "name.tt",
+ "gov.tt",
+ "edu.tt",
+ "tv",
+ "tw",
+ "edu.tw",
+ "gov.tw",
+ "mil.tw",
+ "com.tw",
+ "net.tw",
+ "org.tw",
+ "idv.tw",
+ "game.tw",
+ "ebiz.tw",
+ "club.tw",
+ "網路.tw",
+ "組織.tw",
+ "商業.tw",
+ "tz",
+ "ac.tz",
+ "co.tz",
+ "go.tz",
+ "hotel.tz",
+ "info.tz",
+ "me.tz",
+ "mil.tz",
+ "mobi.tz",
+ "ne.tz",
+ "or.tz",
+ "sc.tz",
+ "tv.tz",
+ "ua",
+ "com.ua",
+ "edu.ua",
+ "gov.ua",
+ "in.ua",
+ "net.ua",
+ "org.ua",
+ "cherkassy.ua",
+ "cherkasy.ua",
+ "chernigov.ua",
+ "chernihiv.ua",
+ "chernivtsi.ua",
+ "chernovtsy.ua",
+ "ck.ua",
+ "cn.ua",
+ "cr.ua",
+ "crimea.ua",
+ "cv.ua",
+ "dn.ua",
+ "dnepropetrovsk.ua",
+ "dnipropetrovsk.ua",
+ "donetsk.ua",
+ "dp.ua",
+ "if.ua",
+ "ivano-frankivsk.ua",
+ "kh.ua",
+ "kharkiv.ua",
+ "kharkov.ua",
+ "kherson.ua",
+ "khmelnitskiy.ua",
+ "khmelnytskyi.ua",
+ "kiev.ua",
+ "kirovograd.ua",
+ "km.ua",
+ "kr.ua",
+ "krym.ua",
+ "ks.ua",
+ "kv.ua",
+ "kyiv.ua",
+ "lg.ua",
+ "lt.ua",
+ "lugansk.ua",
+ "lutsk.ua",
+ "lv.ua",
+ "lviv.ua",
+ "mk.ua",
+ "mykolaiv.ua",
+ "nikolaev.ua",
+ "od.ua",
+ "odesa.ua",
+ "odessa.ua",
+ "pl.ua",
+ "poltava.ua",
+ "rivne.ua",
+ "rovno.ua",
+ "rv.ua",
+ "sb.ua",
+ "sebastopol.ua",
+ "sevastopol.ua",
+ "sm.ua",
+ "sumy.ua",
+ "te.ua",
+ "ternopil.ua",
+ "uz.ua",
+ "uzhgorod.ua",
+ "vinnica.ua",
+ "vinnytsia.ua",
+ "vn.ua",
+ "volyn.ua",
+ "yalta.ua",
+ "zaporizhzhe.ua",
+ "zaporizhzhia.ua",
+ "zhitomir.ua",
+ "zhytomyr.ua",
+ "zp.ua",
+ "zt.ua",
+ "ug",
+ "co.ug",
+ "or.ug",
+ "ac.ug",
+ "sc.ug",
+ "go.ug",
+ "ne.ug",
+ "com.ug",
+ "org.ug",
+ "uk",
+ "ac.uk",
+ "co.uk",
+ "gov.uk",
+ "ltd.uk",
+ "me.uk",
+ "net.uk",
+ "nhs.uk",
+ "org.uk",
+ "plc.uk",
+ "police.uk",
+ "*.sch.uk",
+ "us",
+ "dni.us",
+ "fed.us",
+ "isa.us",
+ "kids.us",
+ "nsn.us",
+ "ak.us",
+ "al.us",
+ "ar.us",
+ "as.us",
+ "az.us",
+ "ca.us",
+ "co.us",
+ "ct.us",
+ "dc.us",
+ "de.us",
+ "fl.us",
+ "ga.us",
+ "gu.us",
+ "hi.us",
+ "ia.us",
+ "id.us",
+ "il.us",
+ "in.us",
+ "ks.us",
+ "ky.us",
+ "la.us",
+ "ma.us",
+ "md.us",
+ "me.us",
+ "mi.us",
+ "mn.us",
+ "mo.us",
+ "ms.us",
+ "mt.us",
+ "nc.us",
+ "nd.us",
+ "ne.us",
+ "nh.us",
+ "nj.us",
+ "nm.us",
+ "nv.us",
+ "ny.us",
+ "oh.us",
+ "ok.us",
+ "or.us",
+ "pa.us",
+ "pr.us",
+ "ri.us",
+ "sc.us",
+ "sd.us",
+ "tn.us",
+ "tx.us",
+ "ut.us",
+ "vi.us",
+ "vt.us",
+ "va.us",
+ "wa.us",
+ "wi.us",
+ "wv.us",
+ "wy.us",
+ "k12.ak.us",
+ "k12.al.us",
+ "k12.ar.us",
+ "k12.as.us",
+ "k12.az.us",
+ "k12.ca.us",
+ "k12.co.us",
+ "k12.ct.us",
+ "k12.dc.us",
+ "k12.de.us",
+ "k12.fl.us",
+ "k12.ga.us",
+ "k12.gu.us",
+ "k12.ia.us",
+ "k12.id.us",
+ "k12.il.us",
+ "k12.in.us",
+ "k12.ks.us",
+ "k12.ky.us",
+ "k12.la.us",
+ "k12.ma.us",
+ "k12.md.us",
+ "k12.me.us",
+ "k12.mi.us",
+ "k12.mn.us",
+ "k12.mo.us",
+ "k12.ms.us",
+ "k12.mt.us",
+ "k12.nc.us",
+ "k12.ne.us",
+ "k12.nh.us",
+ "k12.nj.us",
+ "k12.nm.us",
+ "k12.nv.us",
+ "k12.ny.us",
+ "k12.oh.us",
+ "k12.ok.us",
+ "k12.or.us",
+ "k12.pa.us",
+ "k12.pr.us",
+ "k12.sc.us",
+ "k12.tn.us",
+ "k12.tx.us",
+ "k12.ut.us",
+ "k12.vi.us",
+ "k12.vt.us",
+ "k12.va.us",
+ "k12.wa.us",
+ "k12.wi.us",
+ "k12.wy.us",
+ "cc.ak.us",
+ "cc.al.us",
+ "cc.ar.us",
+ "cc.as.us",
+ "cc.az.us",
+ "cc.ca.us",
+ "cc.co.us",
+ "cc.ct.us",
+ "cc.dc.us",
+ "cc.de.us",
+ "cc.fl.us",
+ "cc.ga.us",
+ "cc.gu.us",
+ "cc.hi.us",
+ "cc.ia.us",
+ "cc.id.us",
+ "cc.il.us",
+ "cc.in.us",
+ "cc.ks.us",
+ "cc.ky.us",
+ "cc.la.us",
+ "cc.ma.us",
+ "cc.md.us",
+ "cc.me.us",
+ "cc.mi.us",
+ "cc.mn.us",
+ "cc.mo.us",
+ "cc.ms.us",
+ "cc.mt.us",
+ "cc.nc.us",
+ "cc.nd.us",
+ "cc.ne.us",
+ "cc.nh.us",
+ "cc.nj.us",
+ "cc.nm.us",
+ "cc.nv.us",
+ "cc.ny.us",
+ "cc.oh.us",
+ "cc.ok.us",
+ "cc.or.us",
+ "cc.pa.us",
+ "cc.pr.us",
+ "cc.ri.us",
+ "cc.sc.us",
+ "cc.sd.us",
+ "cc.tn.us",
+ "cc.tx.us",
+ "cc.ut.us",
+ "cc.vi.us",
+ "cc.vt.us",
+ "cc.va.us",
+ "cc.wa.us",
+ "cc.wi.us",
+ "cc.wv.us",
+ "cc.wy.us",
+ "lib.ak.us",
+ "lib.al.us",
+ "lib.ar.us",
+ "lib.as.us",
+ "lib.az.us",
+ "lib.ca.us",
+ "lib.co.us",
+ "lib.ct.us",
+ "lib.dc.us",
+ "lib.fl.us",
+ "lib.ga.us",
+ "lib.gu.us",
+ "lib.hi.us",
+ "lib.ia.us",
+ "lib.id.us",
+ "lib.il.us",
+ "lib.in.us",
+ "lib.ks.us",
+ "lib.ky.us",
+ "lib.la.us",
+ "lib.ma.us",
+ "lib.md.us",
+ "lib.me.us",
+ "lib.mi.us",
+ "lib.mn.us",
+ "lib.mo.us",
+ "lib.ms.us",
+ "lib.mt.us",
+ "lib.nc.us",
+ "lib.nd.us",
+ "lib.ne.us",
+ "lib.nh.us",
+ "lib.nj.us",
+ "lib.nm.us",
+ "lib.nv.us",
+ "lib.ny.us",
+ "lib.oh.us",
+ "lib.ok.us",
+ "lib.or.us",
+ "lib.pa.us",
+ "lib.pr.us",
+ "lib.ri.us",
+ "lib.sc.us",
+ "lib.sd.us",
+ "lib.tn.us",
+ "lib.tx.us",
+ "lib.ut.us",
+ "lib.vi.us",
+ "lib.vt.us",
+ "lib.va.us",
+ "lib.wa.us",
+ "lib.wi.us",
+ "lib.wy.us",
+ "pvt.k12.ma.us",
+ "chtr.k12.ma.us",
+ "paroch.k12.ma.us",
+ "ann-arbor.mi.us",
+ "cog.mi.us",
+ "dst.mi.us",
+ "eaton.mi.us",
+ "gen.mi.us",
+ "mus.mi.us",
+ "tec.mi.us",
+ "washtenaw.mi.us",
+ "uy",
+ "com.uy",
+ "edu.uy",
+ "gub.uy",
+ "mil.uy",
+ "net.uy",
+ "org.uy",
+ "uz",
+ "co.uz",
+ "com.uz",
+ "net.uz",
+ "org.uz",
+ "va",
+ "vc",
+ "com.vc",
+ "net.vc",
+ "org.vc",
+ "gov.vc",
+ "mil.vc",
+ "edu.vc",
+ "ve",
+ "arts.ve",
+ "bib.ve",
+ "co.ve",
+ "com.ve",
+ "e12.ve",
+ "edu.ve",
+ "firm.ve",
+ "gob.ve",
+ "gov.ve",
+ "info.ve",
+ "int.ve",
+ "mil.ve",
+ "net.ve",
+ "nom.ve",
+ "org.ve",
+ "rar.ve",
+ "rec.ve",
+ "store.ve",
+ "tec.ve",
+ "web.ve",
+ "vg",
+ "vi",
+ "co.vi",
+ "com.vi",
+ "k12.vi",
+ "net.vi",
+ "org.vi",
+ "vn",
+ "com.vn",
+ "net.vn",
+ "org.vn",
+ "edu.vn",
+ "gov.vn",
+ "int.vn",
+ "ac.vn",
+ "biz.vn",
+ "info.vn",
+ "name.vn",
+ "pro.vn",
+ "health.vn",
+ "vu",
+ "com.vu",
+ "edu.vu",
+ "net.vu",
+ "org.vu",
+ "wf",
+ "ws",
+ "com.ws",
+ "net.ws",
+ "org.ws",
+ "gov.ws",
+ "edu.ws",
+ "yt",
+ "امارات",
+ "հայ",
+ "বাংলা",
+ "бг",
+ "البحرين",
+ "бел",
+ "中国",
+ "中國",
+ "الجزائر",
+ "مصر",
+ "ею",
+ "ευ",
+ "موريتانيا",
+ "გე",
+ "ελ",
+ "香港",
+ "公司.香港",
+ "教育.香港",
+ "政府.香港",
+ "個人.香港",
+ "網絡.香港",
+ "組織.香港",
+ "ಭಾರತ",
+ "ଭାରତ",
+ "ভাৰত",
+ "भारतम्",
+ "भारोत",
+ "ڀارت",
+ "ഭാരതം",
+ "भारत",
+ "بارت",
+ "بھارت",
+ "భారత్",
+ "ભારત",
+ "ਭਾਰਤ",
+ "ভারত",
+ "இந்தியா",
+ "ایران",
+ "ايران",
+ "عراق",
+ "الاردن",
+ "한국",
+ "қаз",
+ "ລາວ",
+ "ලංකා",
+ "இலங்கை",
+ "المغرب",
+ "мкд",
+ "мон",
+ "澳門",
+ "澳门",
+ "مليسيا",
+ "عمان",
+ "پاکستان",
+ "پاكستان",
+ "فلسطين",
+ "срб",
+ "пр.срб",
+ "орг.срб",
+ "обр.срб",
+ "од.срб",
+ "упр.срб",
+ "ак.срб",
+ "рф",
+ "قطر",
+ "السعودية",
+ "السعودیة",
+ "السعودیۃ",
+ "السعوديه",
+ "سودان",
+ "新加坡",
+ "சிங்கப்பூர்",
+ "سورية",
+ "سوريا",
+ "ไทย",
+ "ศึกษา.ไทย",
+ "ธุรกิจ.ไทย",
+ "รัฐบาล.ไทย",
+ "ทหาร.ไทย",
+ "เน็ต.ไทย",
+ "องค์กร.ไทย",
+ "تونس",
+ "台灣",
+ "台湾",
+ "臺灣",
+ "укр",
+ "اليمن",
+ "xxx",
+ "ye",
+ "com.ye",
+ "edu.ye",
+ "gov.ye",
+ "net.ye",
+ "mil.ye",
+ "org.ye",
+ "ac.za",
+ "agric.za",
+ "alt.za",
+ "co.za",
+ "edu.za",
+ "gov.za",
+ "grondar.za",
+ "law.za",
+ "mil.za",
+ "net.za",
+ "ngo.za",
+ "nic.za",
+ "nis.za",
+ "nom.za",
+ "org.za",
+ "school.za",
+ "tm.za",
+ "web.za",
+ "zm",
+ "ac.zm",
+ "biz.zm",
+ "co.zm",
+ "com.zm",
+ "edu.zm",
+ "gov.zm",
+ "info.zm",
+ "mil.zm",
+ "net.zm",
+ "org.zm",
+ "sch.zm",
+ "zw",
+ "ac.zw",
+ "co.zw",
+ "gov.zw",
+ "mil.zw",
+ "org.zw",
+ "aaa",
+ "aarp",
+ "abarth",
+ "abb",
+ "abbott",
+ "abbvie",
+ "abc",
+ "able",
+ "abogado",
+ "abudhabi",
+ "academy",
+ "accenture",
+ "accountant",
+ "accountants",
+ "aco",
+ "actor",
+ "adac",
+ "ads",
+ "adult",
+ "aeg",
+ "aetna",
+ "afl",
+ "africa",
+ "agakhan",
+ "agency",
+ "aig",
+ "airbus",
+ "airforce",
+ "airtel",
+ "akdn",
+ "alfaromeo",
+ "alibaba",
+ "alipay",
+ "allfinanz",
+ "allstate",
+ "ally",
+ "alsace",
+ "alstom",
+ "amazon",
+ "americanexpress",
+ "americanfamily",
+ "amex",
+ "amfam",
+ "amica",
+ "amsterdam",
+ "analytics",
+ "android",
+ "anquan",
+ "anz",
+ "aol",
+ "apartments",
+ "app",
+ "apple",
+ "aquarelle",
+ "arab",
+ "aramco",
+ "archi",
+ "army",
+ "art",
+ "arte",
+ "asda",
+ "associates",
+ "athleta",
+ "attorney",
+ "auction",
+ "audi",
+ "audible",
+ "audio",
+ "auspost",
+ "author",
+ "auto",
+ "autos",
+ "avianca",
+ "aws",
+ "axa",
+ "azure",
+ "baby",
+ "baidu",
+ "banamex",
+ "bananarepublic",
+ "band",
+ "bank",
+ "bar",
+ "barcelona",
+ "barclaycard",
+ "barclays",
+ "barefoot",
+ "bargains",
+ "baseball",
+ "basketball",
+ "bauhaus",
+ "bayern",
+ "bbc",
+ "bbt",
+ "bbva",
+ "bcg",
+ "bcn",
+ "beats",
+ "beauty",
+ "beer",
+ "bentley",
+ "berlin",
+ "best",
+ "bestbuy",
+ "bet",
+ "bharti",
+ "bible",
+ "bid",
+ "bike",
+ "bing",
+ "bingo",
+ "bio",
+ "black",
+ "blackfriday",
+ "blockbuster",
+ "blog",
+ "bloomberg",
+ "blue",
+ "bms",
+ "bmw",
+ "bnpparibas",
+ "boats",
+ "boehringer",
+ "bofa",
+ "bom",
+ "bond",
+ "boo",
+ "book",
+ "booking",
+ "bosch",
+ "bostik",
+ "boston",
+ "bot",
+ "boutique",
+ "box",
+ "bradesco",
+ "bridgestone",
+ "broadway",
+ "broker",
+ "brother",
+ "brussels",
+ "bugatti",
+ "build",
+ "builders",
+ "business",
+ "buy",
+ "buzz",
+ "bzh",
+ "cab",
+ "cafe",
+ "cal",
+ "call",
+ "calvinklein",
+ "cam",
+ "camera",
+ "camp",
+ "cancerresearch",
+ "canon",
+ "capetown",
+ "capital",
+ "capitalone",
+ "car",
+ "caravan",
+ "cards",
+ "care",
+ "career",
+ "careers",
+ "cars",
+ "casa",
+ "case",
+ "cash",
+ "casino",
+ "catering",
+ "catholic",
+ "cba",
+ "cbn",
+ "cbre",
+ "cbs",
+ "center",
+ "ceo",
+ "cern",
+ "cfa",
+ "cfd",
+ "chanel",
+ "channel",
+ "charity",
+ "chase",
+ "chat",
+ "cheap",
+ "chintai",
+ "christmas",
+ "chrome",
+ "church",
+ "cipriani",
+ "circle",
+ "cisco",
+ "citadel",
+ "citi",
+ "citic",
+ "city",
+ "cityeats",
+ "claims",
+ "cleaning",
+ "click",
+ "clinic",
+ "clinique",
+ "clothing",
+ "cloud",
+ "club",
+ "clubmed",
+ "coach",
+ "codes",
+ "coffee",
+ "college",
+ "cologne",
+ "comcast",
+ "commbank",
+ "community",
+ "company",
+ "compare",
+ "computer",
+ "comsec",
+ "condos",
+ "construction",
+ "consulting",
+ "contact",
+ "contractors",
+ "cooking",
+ "cookingchannel",
+ "cool",
+ "corsica",
+ "country",
+ "coupon",
+ "coupons",
+ "courses",
+ "cpa",
+ "credit",
+ "creditcard",
+ "creditunion",
+ "cricket",
+ "crown",
+ "crs",
+ "cruise",
+ "cruises",
+ "cuisinella",
+ "cymru",
+ "cyou",
+ "dabur",
+ "dad",
+ "dance",
+ "data",
+ "date",
+ "dating",
+ "datsun",
+ "day",
+ "dclk",
+ "dds",
+ "deal",
+ "dealer",
+ "deals",
+ "degree",
+ "delivery",
+ "dell",
+ "deloitte",
+ "delta",
+ "democrat",
+ "dental",
+ "dentist",
+ "desi",
+ "design",
+ "dev",
+ "dhl",
+ "diamonds",
+ "diet",
+ "digital",
+ "direct",
+ "directory",
+ "discount",
+ "discover",
+ "dish",
+ "diy",
+ "dnp",
+ "docs",
+ "doctor",
+ "dog",
+ "domains",
+ "dot",
+ "download",
+ "drive",
+ "dtv",
+ "dubai",
+ "dunlop",
+ "dupont",
+ "durban",
+ "dvag",
+ "dvr",
+ "earth",
+ "eat",
+ "eco",
+ "edeka",
+ "education",
+ "email",
+ "emerck",
+ "energy",
+ "engineer",
+ "engineering",
+ "enterprises",
+ "epson",
+ "equipment",
+ "ericsson",
+ "erni",
+ "esq",
+ "estate",
+ "etisalat",
+ "eurovision",
+ "eus",
+ "events",
+ "exchange",
+ "expert",
+ "exposed",
+ "express",
+ "extraspace",
+ "fage",
+ "fail",
+ "fairwinds",
+ "faith",
+ "family",
+ "fan",
+ "fans",
+ "farm",
+ "farmers",
+ "fashion",
+ "fast",
+ "fedex",
+ "feedback",
+ "ferrari",
+ "ferrero",
+ "fiat",
+ "fidelity",
+ "fido",
+ "film",
+ "final",
+ "finance",
+ "financial",
+ "fire",
+ "firestone",
+ "firmdale",
+ "fish",
+ "fishing",
+ "fit",
+ "fitness",
+ "flickr",
+ "flights",
+ "flir",
+ "florist",
+ "flowers",
+ "fly",
+ "foo",
+ "food",
+ "foodnetwork",
+ "football",
+ "ford",
+ "forex",
+ "forsale",
+ "forum",
+ "foundation",
+ "fox",
+ "free",
+ "fresenius",
+ "frl",
+ "frogans",
+ "frontdoor",
+ "frontier",
+ "ftr",
+ "fujitsu",
+ "fun",
+ "fund",
+ "furniture",
+ "futbol",
+ "fyi",
+ "gal",
+ "gallery",
+ "gallo",
+ "gallup",
+ "game",
+ "games",
+ "gap",
+ "garden",
+ "gay",
+ "gbiz",
+ "gdn",
+ "gea",
+ "gent",
+ "genting",
+ "george",
+ "ggee",
+ "gift",
+ "gifts",
+ "gives",
+ "giving",
+ "glass",
+ "gle",
+ "global",
+ "globo",
+ "gmail",
+ "gmbh",
+ "gmo",
+ "gmx",
+ "godaddy",
+ "gold",
+ "goldpoint",
+ "golf",
+ "goo",
+ "goodyear",
+ "goog",
+ "google",
+ "gop",
+ "got",
+ "grainger",
+ "graphics",
+ "gratis",
+ "green",
+ "gripe",
+ "grocery",
+ "group",
+ "guardian",
+ "gucci",
+ "guge",
+ "guide",
+ "guitars",
+ "guru",
+ "hair",
+ "hamburg",
+ "hangout",
+ "haus",
+ "hbo",
+ "hdfc",
+ "hdfcbank",
+ "health",
+ "healthcare",
+ "help",
+ "helsinki",
+ "here",
+ "hermes",
+ "hgtv",
+ "hiphop",
+ "hisamitsu",
+ "hitachi",
+ "hiv",
+ "hkt",
+ "hockey",
+ "holdings",
+ "holiday",
+ "homedepot",
+ "homegoods",
+ "homes",
+ "homesense",
+ "honda",
+ "horse",
+ "hospital",
+ "host",
+ "hosting",
+ "hot",
+ "hoteles",
+ "hotels",
+ "hotmail",
+ "house",
+ "how",
+ "hsbc",
+ "hughes",
+ "hyatt",
+ "hyundai",
+ "ibm",
+ "icbc",
+ "ice",
+ "icu",
+ "ieee",
+ "ifm",
+ "ikano",
+ "imamat",
+ "imdb",
+ "immo",
+ "immobilien",
+ "inc",
+ "industries",
+ "infiniti",
+ "ing",
+ "ink",
+ "institute",
+ "insurance",
+ "insure",
+ "international",
+ "intuit",
+ "investments",
+ "ipiranga",
+ "irish",
+ "ismaili",
+ "ist",
+ "istanbul",
+ "itau",
+ "itv",
+ "jaguar",
+ "java",
+ "jcb",
+ "jeep",
+ "jetzt",
+ "jewelry",
+ "jio",
+ "jll",
+ "jmp",
+ "jnj",
+ "joburg",
+ "jot",
+ "joy",
+ "jpmorgan",
+ "jprs",
+ "juegos",
+ "juniper",
+ "kaufen",
+ "kddi",
+ "kerryhotels",
+ "kerrylogistics",
+ "kerryproperties",
+ "kfh",
+ "kia",
+ "kids",
+ "kim",
+ "kinder",
+ "kindle",
+ "kitchen",
+ "kiwi",
+ "koeln",
+ "komatsu",
+ "kosher",
+ "kpmg",
+ "kpn",
+ "krd",
+ "kred",
+ "kuokgroup",
+ "kyoto",
+ "lacaixa",
+ "lamborghini",
+ "lamer",
+ "lancaster",
+ "lancia",
+ "land",
+ "landrover",
+ "lanxess",
+ "lasalle",
+ "lat",
+ "latino",
+ "latrobe",
+ "law",
+ "lawyer",
+ "lds",
+ "lease",
+ "leclerc",
+ "lefrak",
+ "legal",
+ "lego",
+ "lexus",
+ "lgbt",
+ "lidl",
+ "life",
+ "lifeinsurance",
+ "lifestyle",
+ "lighting",
+ "like",
+ "lilly",
+ "limited",
+ "limo",
+ "lincoln",
+ "linde",
+ "link",
+ "lipsy",
+ "live",
+ "living",
+ "llc",
+ "llp",
+ "loan",
+ "loans",
+ "locker",
+ "locus",
+ "loft",
+ "lol",
+ "london",
+ "lotte",
+ "lotto",
+ "love",
+ "lpl",
+ "lplfinancial",
+ "ltd",
+ "ltda",
+ "lundbeck",
+ "luxe",
+ "luxury",
+ "macys",
+ "madrid",
+ "maif",
+ "maison",
+ "makeup",
+ "man",
+ "management",
+ "mango",
+ "map",
+ "market",
+ "marketing",
+ "markets",
+ "marriott",
+ "marshalls",
+ "maserati",
+ "mattel",
+ "mba",
+ "mckinsey",
+ "med",
+ "media",
+ "meet",
+ "melbourne",
+ "meme",
+ "memorial",
+ "men",
+ "menu",
+ "merckmsd",
+ "miami",
+ "microsoft",
+ "mini",
+ "mint",
+ "mit",
+ "mitsubishi",
+ "mlb",
+ "mls",
+ "mma",
+ "mobile",
+ "moda",
+ "moe",
+ "moi",
+ "mom",
+ "monash",
+ "money",
+ "monster",
+ "mormon",
+ "mortgage",
+ "moscow",
+ "moto",
+ "motorcycles",
+ "mov",
+ "movie",
+ "msd",
+ "mtn",
+ "mtr",
+ "music",
+ "mutual",
+ "nab",
+ "nagoya",
+ "natura",
+ "navy",
+ "nba",
+ "nec",
+ "netbank",
+ "netflix",
+ "network",
+ "neustar",
+ "new",
+ "news",
+ "next",
+ "nextdirect",
+ "nexus",
+ "nfl",
+ "ngo",
+ "nhk",
+ "nico",
+ "nike",
+ "nikon",
+ "ninja",
+ "nissan",
+ "nissay",
+ "nokia",
+ "northwesternmutual",
+ "norton",
+ "now",
+ "nowruz",
+ "nowtv",
+ "nra",
+ "nrw",
+ "ntt",
+ "nyc",
+ "obi",
+ "observer",
+ "office",
+ "okinawa",
+ "olayan",
+ "olayangroup",
+ "oldnavy",
+ "ollo",
+ "omega",
+ "one",
+ "ong",
+ "onl",
+ "online",
+ "ooo",
+ "open",
+ "oracle",
+ "orange",
+ "organic",
+ "origins",
+ "osaka",
+ "otsuka",
+ "ott",
+ "ovh",
+ "page",
+ "panasonic",
+ "paris",
+ "pars",
+ "partners",
+ "parts",
+ "party",
+ "passagens",
+ "pay",
+ "pccw",
+ "pet",
+ "pfizer",
+ "pharmacy",
+ "phd",
+ "philips",
+ "phone",
+ "photo",
+ "photography",
+ "photos",
+ "physio",
+ "pics",
+ "pictet",
+ "pictures",
+ "pid",
+ "pin",
+ "ping",
+ "pink",
+ "pioneer",
+ "pizza",
+ "place",
+ "play",
+ "playstation",
+ "plumbing",
+ "plus",
+ "pnc",
+ "pohl",
+ "poker",
+ "politie",
+ "porn",
+ "pramerica",
+ "praxi",
+ "press",
+ "prime",
+ "prod",
+ "productions",
+ "prof",
+ "progressive",
+ "promo",
+ "properties",
+ "property",
+ "protection",
+ "pru",
+ "prudential",
+ "pub",
+ "pwc",
+ "qpon",
+ "quebec",
+ "quest",
+ "racing",
+ "radio",
+ "read",
+ "realestate",
+ "realtor",
+ "realty",
+ "recipes",
+ "red",
+ "redstone",
+ "redumbrella",
+ "rehab",
+ "reise",
+ "reisen",
+ "reit",
+ "reliance",
+ "ren",
+ "rent",
+ "rentals",
+ "repair",
+ "report",
+ "republican",
+ "rest",
+ "restaurant",
+ "review",
+ "reviews",
+ "rexroth",
+ "rich",
+ "richardli",
+ "ricoh",
+ "ril",
+ "rio",
+ "rip",
+ "rocher",
+ "rocks",
+ "rodeo",
+ "rogers",
+ "room",
+ "rsvp",
+ "rugby",
+ "ruhr",
+ "run",
+ "rwe",
+ "ryukyu",
+ "saarland",
+ "safe",
+ "safety",
+ "sakura",
+ "sale",
+ "salon",
+ "samsclub",
+ "samsung",
+ "sandvik",
+ "sandvikcoromant",
+ "sanofi",
+ "sap",
+ "sarl",
+ "sas",
+ "save",
+ "saxo",
+ "sbi",
+ "sbs",
+ "sca",
+ "scb",
+ "schaeffler",
+ "schmidt",
+ "scholarships",
+ "school",
+ "schule",
+ "schwarz",
+ "science",
+ "scot",
+ "search",
+ "seat",
+ "secure",
+ "security",
+ "seek",
+ "select",
+ "sener",
+ "services",
+ "ses",
+ "seven",
+ "sew",
+ "sex",
+ "sexy",
+ "sfr",
+ "shangrila",
+ "sharp",
+ "shaw",
+ "shell",
+ "shia",
+ "shiksha",
+ "shoes",
+ "shop",
+ "shopping",
+ "shouji",
+ "show",
+ "showtime",
+ "silk",
+ "sina",
+ "singles",
+ "site",
+ "ski",
+ "skin",
+ "sky",
+ "skype",
+ "sling",
+ "smart",
+ "smile",
+ "sncf",
+ "soccer",
+ "social",
+ "softbank",
+ "software",
+ "sohu",
+ "solar",
+ "solutions",
+ "song",
+ "sony",
+ "soy",
+ "spa",
+ "space",
+ "sport",
+ "spot",
+ "srl",
+ "stada",
+ "staples",
+ "star",
+ "statebank",
+ "statefarm",
+ "stc",
+ "stcgroup",
+ "stockholm",
+ "storage",
+ "store",
+ "stream",
+ "studio",
+ "study",
+ "style",
+ "sucks",
+ "supplies",
+ "supply",
+ "support",
+ "surf",
+ "surgery",
+ "suzuki",
+ "swatch",
+ "swiss",
+ "sydney",
+ "systems",
+ "tab",
+ "taipei",
+ "talk",
+ "taobao",
+ "target",
+ "tatamotors",
+ "tatar",
+ "tattoo",
+ "tax",
+ "taxi",
+ "tci",
+ "tdk",
+ "team",
+ "tech",
+ "technology",
+ "temasek",
+ "tennis",
+ "teva",
+ "thd",
+ "theater",
+ "theatre",
+ "tiaa",
+ "tickets",
+ "tienda",
+ "tiffany",
+ "tips",
+ "tires",
+ "tirol",
+ "tjmaxx",
+ "tjx",
+ "tkmaxx",
+ "tmall",
+ "today",
+ "tokyo",
+ "tools",
+ "top",
+ "toray",
+ "toshiba",
+ "total",
+ "tours",
+ "town",
+ "toyota",
+ "toys",
+ "trade",
+ "trading",
+ "training",
+ "travel",
+ "travelchannel",
+ "travelers",
+ "travelersinsurance",
+ "trust",
+ "trv",
+ "tube",
+ "tui",
+ "tunes",
+ "tushu",
+ "tvs",
+ "ubank",
+ "ubs",
+ "unicom",
+ "university",
+ "uno",
+ "uol",
+ "ups",
+ "vacations",
+ "vana",
+ "vanguard",
+ "vegas",
+ "ventures",
+ "verisign",
+ "versicherung",
+ "vet",
+ "viajes",
+ "video",
+ "vig",
+ "viking",
+ "villas",
+ "vin",
+ "vip",
+ "virgin",
+ "visa",
+ "vision",
+ "viva",
+ "vivo",
+ "vlaanderen",
+ "vodka",
+ "volkswagen",
+ "volvo",
+ "vote",
+ "voting",
+ "voto",
+ "voyage",
+ "vuelos",
+ "wales",
+ "walmart",
+ "walter",
+ "wang",
+ "wanggou",
+ "watch",
+ "watches",
+ "weather",
+ "weatherchannel",
+ "webcam",
+ "weber",
+ "website",
+ "wedding",
+ "weibo",
+ "weir",
+ "whoswho",
+ "wien",
+ "wiki",
+ "williamhill",
+ "win",
+ "windows",
+ "wine",
+ "winners",
+ "wme",
+ "wolterskluwer",
+ "woodside",
+ "work",
+ "works",
+ "world",
+ "wow",
+ "wtc",
+ "wtf",
+ "xbox",
+ "xerox",
+ "xfinity",
+ "xihuan",
+ "xin",
+ "कॉम",
+ "セール",
+ "佛山",
+ "慈善",
+ "集团",
+ "在线",
+ "点看",
+ "คอม",
+ "八卦",
+ "موقع",
+ "公益",
+ "公司",
+ "香格里拉",
+ "网站",
+ "移动",
+ "我爱你",
+ "москва",
+ "католик",
+ "онлайн",
+ "сайт",
+ "联通",
+ "קום",
+ "时尚",
+ "微博",
+ "淡马锡",
+ "ファッション",
+ "орг",
+ "नेट",
+ "ストア",
+ "アマゾン",
+ "삼성",
+ "商标",
+ "商店",
+ "商城",
+ "дети",
+ "ポイント",
+ "新闻",
+ "家電",
+ "كوم",
+ "中文网",
+ "中信",
+ "娱乐",
+ "谷歌",
+ "電訊盈科",
+ "购物",
+ "クラウド",
+ "通販",
+ "网店",
+ "संगठन",
+ "餐厅",
+ "网络",
+ "ком",
+ "亚马逊",
+ "诺基亚",
+ "食品",
+ "飞利浦",
+ "手机",
+ "ارامكو",
+ "العليان",
+ "اتصالات",
+ "بازار",
+ "ابوظبي",
+ "كاثوليك",
+ "همراه",
+ "닷컴",
+ "政府",
+ "شبكة",
+ "بيتك",
+ "عرب",
+ "机构",
+ "组织机构",
+ "健康",
+ "招聘",
+ "рус",
+ "大拿",
+ "みんな",
+ "グーグル",
+ "世界",
+ "書籍",
+ "网址",
+ "닷넷",
+ "コム",
+ "天主教",
+ "游戏",
+ "vermögensberater",
+ "vermögensberatung",
+ "企业",
+ "信息",
+ "嘉里大酒店",
+ "嘉里",
+ "广东",
+ "政务",
+ "xyz",
+ "yachts",
+ "yahoo",
+ "yamaxun",
+ "yandex",
+ "yodobashi",
+ "yoga",
+ "yokohama",
+ "you",
+ "youtube",
+ "yun",
+ "zappos",
+ "zara",
+ "zero",
+ "zip",
+ "zone",
+ "zuerich",
+ "cc.ua",
+ "inf.ua",
+ "ltd.ua",
+ "611.to",
+ "graphox.us",
+ "*.devcdnaccesso.com",
+ "adobeaemcloud.com",
+ "*.dev.adobeaemcloud.com",
+ "hlx.live",
+ "adobeaemcloud.net",
+ "hlx.page",
+ "hlx3.page",
+ "beep.pl",
+ "airkitapps.com",
+ "airkitapps-au.com",
+ "airkitapps.eu",
+ "aivencloud.com",
+ "barsy.ca",
+ "*.compute.estate",
+ "*.alces.network",
+ "kasserver.com",
+ "altervista.org",
+ "alwaysdata.net",
+ "cloudfront.net",
+ "*.compute.amazonaws.com",
+ "*.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com.cn",
+ "us-east-1.amazonaws.com",
+ "cn-north-1.eb.amazonaws.com.cn",
+ "cn-northwest-1.eb.amazonaws.com.cn",
+ "elasticbeanstalk.com",
+ "ap-northeast-1.elasticbeanstalk.com",
+ "ap-northeast-2.elasticbeanstalk.com",
+ "ap-northeast-3.elasticbeanstalk.com",
+ "ap-south-1.elasticbeanstalk.com",
+ "ap-southeast-1.elasticbeanstalk.com",
+ "ap-southeast-2.elasticbeanstalk.com",
+ "ca-central-1.elasticbeanstalk.com",
+ "eu-central-1.elasticbeanstalk.com",
+ "eu-west-1.elasticbeanstalk.com",
+ "eu-west-2.elasticbeanstalk.com",
+ "eu-west-3.elasticbeanstalk.com",
+ "sa-east-1.elasticbeanstalk.com",
+ "us-east-1.elasticbeanstalk.com",
+ "us-east-2.elasticbeanstalk.com",
+ "us-gov-west-1.elasticbeanstalk.com",
+ "us-west-1.elasticbeanstalk.com",
+ "us-west-2.elasticbeanstalk.com",
+ "*.elb.amazonaws.com",
+ "*.elb.amazonaws.com.cn",
+ "awsglobalaccelerator.com",
+ "s3.amazonaws.com",
+ "s3-ap-northeast-1.amazonaws.com",
+ "s3-ap-northeast-2.amazonaws.com",
+ "s3-ap-south-1.amazonaws.com",
+ "s3-ap-southeast-1.amazonaws.com",
+ "s3-ap-southeast-2.amazonaws.com",
+ "s3-ca-central-1.amazonaws.com",
+ "s3-eu-central-1.amazonaws.com",
+ "s3-eu-west-1.amazonaws.com",
+ "s3-eu-west-2.amazonaws.com",
+ "s3-eu-west-3.amazonaws.com",
+ "s3-external-1.amazonaws.com",
+ "s3-fips-us-gov-west-1.amazonaws.com",
+ "s3-sa-east-1.amazonaws.com",
+ "s3-us-gov-west-1.amazonaws.com",
+ "s3-us-east-2.amazonaws.com",
+ "s3-us-west-1.amazonaws.com",
+ "s3-us-west-2.amazonaws.com",
+ "s3.ap-northeast-2.amazonaws.com",
+ "s3.ap-south-1.amazonaws.com",
+ "s3.cn-north-1.amazonaws.com.cn",
+ "s3.ca-central-1.amazonaws.com",
+ "s3.eu-central-1.amazonaws.com",
+ "s3.eu-west-2.amazonaws.com",
+ "s3.eu-west-3.amazonaws.com",
+ "s3.us-east-2.amazonaws.com",
+ "s3.dualstack.ap-northeast-1.amazonaws.com",
+ "s3.dualstack.ap-northeast-2.amazonaws.com",
+ "s3.dualstack.ap-south-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-2.amazonaws.com",
+ "s3.dualstack.ca-central-1.amazonaws.com",
+ "s3.dualstack.eu-central-1.amazonaws.com",
+ "s3.dualstack.eu-west-1.amazonaws.com",
+ "s3.dualstack.eu-west-2.amazonaws.com",
+ "s3.dualstack.eu-west-3.amazonaws.com",
+ "s3.dualstack.sa-east-1.amazonaws.com",
+ "s3.dualstack.us-east-1.amazonaws.com",
+ "s3.dualstack.us-east-2.amazonaws.com",
+ "s3-website-us-east-1.amazonaws.com",
+ "s3-website-us-west-1.amazonaws.com",
+ "s3-website-us-west-2.amazonaws.com",
+ "s3-website-ap-northeast-1.amazonaws.com",
+ "s3-website-ap-southeast-1.amazonaws.com",
+ "s3-website-ap-southeast-2.amazonaws.com",
+ "s3-website-eu-west-1.amazonaws.com",
+ "s3-website-sa-east-1.amazonaws.com",
+ "s3-website.ap-northeast-2.amazonaws.com",
+ "s3-website.ap-south-1.amazonaws.com",
+ "s3-website.ca-central-1.amazonaws.com",
+ "s3-website.eu-central-1.amazonaws.com",
+ "s3-website.eu-west-2.amazonaws.com",
+ "s3-website.eu-west-3.amazonaws.com",
+ "s3-website.us-east-2.amazonaws.com",
+ "t3l3p0rt.net",
+ "tele.amune.org",
+ "apigee.io",
+ "siiites.com",
+ "appspacehosted.com",
+ "appspaceusercontent.com",
+ "appudo.net",
+ "on-aptible.com",
+ "user.aseinet.ne.jp",
+ "gv.vc",
+ "d.gv.vc",
+ "user.party.eus",
+ "pimienta.org",
+ "poivron.org",
+ "potager.org",
+ "sweetpepper.org",
+ "myasustor.com",
+ "cdn.prod.atlassian-dev.net",
+ "translated.page",
+ "myfritz.net",
+ "onavstack.net",
+ "*.awdev.ca",
+ "*.advisor.ws",
+ "ecommerce-shop.pl",
+ "b-data.io",
+ "backplaneapp.io",
+ "balena-devices.com",
+ "rs.ba",
+ "*.banzai.cloud",
+ "app.banzaicloud.io",
+ "*.backyards.banzaicloud.io",
+ "base.ec",
+ "official.ec",
+ "buyshop.jp",
+ "fashionstore.jp",
+ "handcrafted.jp",
+ "kawaiishop.jp",
+ "supersale.jp",
+ "theshop.jp",
+ "shopselect.net",
+ "base.shop",
+ "*.beget.app",
+ "betainabox.com",
+ "bnr.la",
+ "bitbucket.io",
+ "blackbaudcdn.net",
+ "of.je",
+ "bluebite.io",
+ "boomla.net",
+ "boutir.com",
+ "boxfuse.io",
+ "square7.ch",
+ "bplaced.com",
+ "bplaced.de",
+ "square7.de",
+ "bplaced.net",
+ "square7.net",
+ "shop.brendly.rs",
+ "browsersafetymark.io",
+ "uk0.bigv.io",
+ "dh.bytemark.co.uk",
+ "vm.bytemark.co.uk",
+ "cafjs.com",
+ "mycd.eu",
+ "drr.ac",
+ "uwu.ai",
+ "carrd.co",
+ "crd.co",
+ "ju.mp",
+ "ae.org",
+ "br.com",
+ "cn.com",
+ "com.de",
+ "com.se",
+ "de.com",
+ "eu.com",
+ "gb.net",
+ "hu.net",
+ "jp.net",
+ "jpn.com",
+ "mex.com",
+ "ru.com",
+ "sa.com",
+ "se.net",
+ "uk.com",
+ "uk.net",
+ "us.com",
+ "za.bz",
+ "za.com",
+ "ar.com",
+ "hu.com",
+ "kr.com",
+ "no.com",
+ "qc.com",
+ "uy.com",
+ "africa.com",
+ "gr.com",
+ "in.net",
+ "web.in",
+ "us.org",
+ "co.com",
+ "aus.basketball",
+ "nz.basketball",
+ "radio.am",
+ "radio.fm",
+ "c.la",
+ "certmgr.org",
+ "cx.ua",
+ "discourse.group",
+ "discourse.team",
+ "cleverapps.io",
+ "clerk.app",
+ "clerkstage.app",
+ "*.lcl.dev",
+ "*.lclstage.dev",
+ "*.stg.dev",
+ "*.stgstage.dev",
+ "clickrising.net",
+ "c66.me",
+ "cloud66.ws",
+ "cloud66.zone",
+ "jdevcloud.com",
+ "wpdevcloud.com",
+ "cloudaccess.host",
+ "freesite.host",
+ "cloudaccess.net",
+ "cloudcontrolled.com",
+ "cloudcontrolapp.com",
+ "*.cloudera.site",
+ "pages.dev",
+ "trycloudflare.com",
+ "workers.dev",
+ "wnext.app",
+ "co.ca",
+ "*.otap.co",
+ "co.cz",
+ "c.cdn77.org",
+ "cdn77-ssl.net",
+ "r.cdn77.net",
+ "rsc.cdn77.org",
+ "ssl.origin.cdn77-secure.org",
+ "cloudns.asia",
+ "cloudns.biz",
+ "cloudns.club",
+ "cloudns.cc",
+ "cloudns.eu",
+ "cloudns.in",
+ "cloudns.info",
+ "cloudns.org",
+ "cloudns.pro",
+ "cloudns.pw",
+ "cloudns.us",
+ "cnpy.gdn",
+ "codeberg.page",
+ "co.nl",
+ "co.no",
+ "webhosting.be",
+ "hosting-cluster.nl",
+ "ac.ru",
+ "edu.ru",
+ "gov.ru",
+ "int.ru",
+ "mil.ru",
+ "test.ru",
+ "dyn.cosidns.de",
+ "dynamisches-dns.de",
+ "dnsupdater.de",
+ "internet-dns.de",
+ "l-o-g-i-n.de",
+ "dynamic-dns.info",
+ "feste-ip.net",
+ "knx-server.net",
+ "static-access.net",
+ "realm.cz",
+ "*.cryptonomic.net",
+ "cupcake.is",
+ "curv.dev",
+ "*.customer-oci.com",
+ "*.oci.customer-oci.com",
+ "*.ocp.customer-oci.com",
+ "*.ocs.customer-oci.com",
+ "cyon.link",
+ "cyon.site",
+ "fnwk.site",
+ "folionetwork.site",
+ "platform0.app",
+ "daplie.me",
+ "localhost.daplie.me",
+ "dattolocal.com",
+ "dattorelay.com",
+ "dattoweb.com",
+ "mydatto.com",
+ "dattolocal.net",
+ "mydatto.net",
+ "biz.dk",
+ "co.dk",
+ "firm.dk",
+ "reg.dk",
+ "store.dk",
+ "dyndns.dappnode.io",
+ "*.dapps.earth",
+ "*.bzz.dapps.earth",
+ "builtwithdark.com",
+ "demo.datadetect.com",
+ "instance.datadetect.com",
+ "edgestack.me",
+ "ddns5.com",
+ "debian.net",
+ "deno.dev",
+ "deno-staging.dev",
+ "dedyn.io",
+ "deta.app",
+ "deta.dev",
+ "*.rss.my.id",
+ "*.diher.solutions",
+ "discordsays.com",
+ "discordsez.com",
+ "jozi.biz",
+ "dnshome.de",
+ "online.th",
+ "shop.th",
+ "drayddns.com",
+ "shoparena.pl",
+ "dreamhosters.com",
+ "mydrobo.com",
+ "drud.io",
+ "drud.us",
+ "duckdns.org",
+ "bip.sh",
+ "bitbridge.net",
+ "dy.fi",
+ "tunk.org",
+ "dyndns-at-home.com",
+ "dyndns-at-work.com",
+ "dyndns-blog.com",
+ "dyndns-free.com",
+ "dyndns-home.com",
+ "dyndns-ip.com",
+ "dyndns-mail.com",
+ "dyndns-office.com",
+ "dyndns-pics.com",
+ "dyndns-remote.com",
+ "dyndns-server.com",
+ "dyndns-web.com",
+ "dyndns-wiki.com",
+ "dyndns-work.com",
+ "dyndns.biz",
+ "dyndns.info",
+ "dyndns.org",
+ "dyndns.tv",
+ "at-band-camp.net",
+ "ath.cx",
+ "barrel-of-knowledge.info",
+ "barrell-of-knowledge.info",
+ "better-than.tv",
+ "blogdns.com",
+ "blogdns.net",
+ "blogdns.org",
+ "blogsite.org",
+ "boldlygoingnowhere.org",
+ "broke-it.net",
+ "buyshouses.net",
+ "cechire.com",
+ "dnsalias.com",
+ "dnsalias.net",
+ "dnsalias.org",
+ "dnsdojo.com",
+ "dnsdojo.net",
+ "dnsdojo.org",
+ "does-it.net",
+ "doesntexist.com",
+ "doesntexist.org",
+ "dontexist.com",
+ "dontexist.net",
+ "dontexist.org",
+ "doomdns.com",
+ "doomdns.org",
+ "dvrdns.org",
+ "dyn-o-saur.com",
+ "dynalias.com",
+ "dynalias.net",
+ "dynalias.org",
+ "dynathome.net",
+ "dyndns.ws",
+ "endofinternet.net",
+ "endofinternet.org",
+ "endoftheinternet.org",
+ "est-a-la-maison.com",
+ "est-a-la-masion.com",
+ "est-le-patron.com",
+ "est-mon-blogueur.com",
+ "for-better.biz",
+ "for-more.biz",
+ "for-our.info",
+ "for-some.biz",
+ "for-the.biz",
+ "forgot.her.name",
+ "forgot.his.name",
+ "from-ak.com",
+ "from-al.com",
+ "from-ar.com",
+ "from-az.net",
+ "from-ca.com",
+ "from-co.net",
+ "from-ct.com",
+ "from-dc.com",
+ "from-de.com",
+ "from-fl.com",
+ "from-ga.com",
+ "from-hi.com",
+ "from-ia.com",
+ "from-id.com",
+ "from-il.com",
+ "from-in.com",
+ "from-ks.com",
+ "from-ky.com",
+ "from-la.net",
+ "from-ma.com",
+ "from-md.com",
+ "from-me.org",
+ "from-mi.com",
+ "from-mn.com",
+ "from-mo.com",
+ "from-ms.com",
+ "from-mt.com",
+ "from-nc.com",
+ "from-nd.com",
+ "from-ne.com",
+ "from-nh.com",
+ "from-nj.com",
+ "from-nm.com",
+ "from-nv.com",
+ "from-ny.net",
+ "from-oh.com",
+ "from-ok.com",
+ "from-or.com",
+ "from-pa.com",
+ "from-pr.com",
+ "from-ri.com",
+ "from-sc.com",
+ "from-sd.com",
+ "from-tn.com",
+ "from-tx.com",
+ "from-ut.com",
+ "from-va.com",
+ "from-vt.com",
+ "from-wa.com",
+ "from-wi.com",
+ "from-wv.com",
+ "from-wy.com",
+ "ftpaccess.cc",
+ "fuettertdasnetz.de",
+ "game-host.org",
+ "game-server.cc",
+ "getmyip.com",
+ "gets-it.net",
+ "go.dyndns.org",
+ "gotdns.com",
+ "gotdns.org",
+ "groks-the.info",
+ "groks-this.info",
+ "ham-radio-op.net",
+ "here-for-more.info",
+ "hobby-site.com",
+ "hobby-site.org",
+ "home.dyndns.org",
+ "homedns.org",
+ "homeftp.net",
+ "homeftp.org",
+ "homeip.net",
+ "homelinux.com",
+ "homelinux.net",
+ "homelinux.org",
+ "homeunix.com",
+ "homeunix.net",
+ "homeunix.org",
+ "iamallama.com",
+ "in-the-band.net",
+ "is-a-anarchist.com",
+ "is-a-blogger.com",
+ "is-a-bookkeeper.com",
+ "is-a-bruinsfan.org",
+ "is-a-bulls-fan.com",
+ "is-a-candidate.org",
+ "is-a-caterer.com",
+ "is-a-celticsfan.org",
+ "is-a-chef.com",
+ "is-a-chef.net",
+ "is-a-chef.org",
+ "is-a-conservative.com",
+ "is-a-cpa.com",
+ "is-a-cubicle-slave.com",
+ "is-a-democrat.com",
+ "is-a-designer.com",
+ "is-a-doctor.com",
+ "is-a-financialadvisor.com",
+ "is-a-geek.com",
+ "is-a-geek.net",
+ "is-a-geek.org",
+ "is-a-green.com",
+ "is-a-guru.com",
+ "is-a-hard-worker.com",
+ "is-a-hunter.com",
+ "is-a-knight.org",
+ "is-a-landscaper.com",
+ "is-a-lawyer.com",
+ "is-a-liberal.com",
+ "is-a-libertarian.com",
+ "is-a-linux-user.org",
+ "is-a-llama.com",
+ "is-a-musician.com",
+ "is-a-nascarfan.com",
+ "is-a-nurse.com",
+ "is-a-painter.com",
+ "is-a-patsfan.org",
+ "is-a-personaltrainer.com",
+ "is-a-photographer.com",
+ "is-a-player.com",
+ "is-a-republican.com",
+ "is-a-rockstar.com",
+ "is-a-socialist.com",
+ "is-a-soxfan.org",
+ "is-a-student.com",
+ "is-a-teacher.com",
+ "is-a-techie.com",
+ "is-a-therapist.com",
+ "is-an-accountant.com",
+ "is-an-actor.com",
+ "is-an-actress.com",
+ "is-an-anarchist.com",
+ "is-an-artist.com",
+ "is-an-engineer.com",
+ "is-an-entertainer.com",
+ "is-by.us",
+ "is-certified.com",
+ "is-found.org",
+ "is-gone.com",
+ "is-into-anime.com",
+ "is-into-cars.com",
+ "is-into-cartoons.com",
+ "is-into-games.com",
+ "is-leet.com",
+ "is-lost.org",
+ "is-not-certified.com",
+ "is-saved.org",
+ "is-slick.com",
+ "is-uberleet.com",
+ "is-very-bad.org",
+ "is-very-evil.org",
+ "is-very-good.org",
+ "is-very-nice.org",
+ "is-very-sweet.org",
+ "is-with-theband.com",
+ "isa-geek.com",
+ "isa-geek.net",
+ "isa-geek.org",
+ "isa-hockeynut.com",
+ "issmarterthanyou.com",
+ "isteingeek.de",
+ "istmein.de",
+ "kicks-ass.net",
+ "kicks-ass.org",
+ "knowsitall.info",
+ "land-4-sale.us",
+ "lebtimnetz.de",
+ "leitungsen.de",
+ "likes-pie.com",
+ "likescandy.com",
+ "merseine.nu",
+ "mine.nu",
+ "misconfused.org",
+ "mypets.ws",
+ "myphotos.cc",
+ "neat-url.com",
+ "office-on-the.net",
+ "on-the-web.tv",
+ "podzone.net",
+ "podzone.org",
+ "readmyblog.org",
+ "saves-the-whales.com",
+ "scrapper-site.net",
+ "scrapping.cc",
+ "selfip.biz",
+ "selfip.com",
+ "selfip.info",
+ "selfip.net",
+ "selfip.org",
+ "sells-for-less.com",
+ "sells-for-u.com",
+ "sells-it.net",
+ "sellsyourhome.org",
+ "servebbs.com",
+ "servebbs.net",
+ "servebbs.org",
+ "serveftp.net",
+ "serveftp.org",
+ "servegame.org",
+ "shacknet.nu",
+ "simple-url.com",
+ "space-to-rent.com",
+ "stuff-4-sale.org",
+ "stuff-4-sale.us",
+ "teaches-yoga.com",
+ "thruhere.net",
+ "traeumtgerade.de",
+ "webhop.biz",
+ "webhop.info",
+ "webhop.net",
+ "webhop.org",
+ "worse-than.tv",
+ "writesthisblog.com",
+ "ddnss.de",
+ "dyn.ddnss.de",
+ "dyndns.ddnss.de",
+ "dyndns1.de",
+ "dyn-ip24.de",
+ "home-webserver.de",
+ "dyn.home-webserver.de",
+ "myhome-server.de",
+ "ddnss.org",
+ "definima.net",
+ "definima.io",
+ "ondigitalocean.app",
+ "*.digitaloceanspaces.com",
+ "bci.dnstrace.pro",
+ "ddnsfree.com",
+ "ddnsgeek.com",
+ "giize.com",
+ "gleeze.com",
+ "kozow.com",
+ "loseyourip.com",
+ "ooguy.com",
+ "theworkpc.com",
+ "casacam.net",
+ "dynu.net",
+ "accesscam.org",
+ "camdvr.org",
+ "freeddns.org",
+ "mywire.org",
+ "webredirect.org",
+ "myddns.rocks",
+ "blogsite.xyz",
+ "dynv6.net",
+ "e4.cz",
+ "eero.online",
+ "eero-stage.online",
+ "elementor.cloud",
+ "elementor.cool",
+ "en-root.fr",
+ "mytuleap.com",
+ "tuleap-partners.com",
+ "encr.app",
+ "encoreapi.com",
+ "onred.one",
+ "staging.onred.one",
+ "eu.encoway.cloud",
+ "eu.org",
+ "al.eu.org",
+ "asso.eu.org",
+ "at.eu.org",
+ "au.eu.org",
+ "be.eu.org",
+ "bg.eu.org",
+ "ca.eu.org",
+ "cd.eu.org",
+ "ch.eu.org",
+ "cn.eu.org",
+ "cy.eu.org",
+ "cz.eu.org",
+ "de.eu.org",
+ "dk.eu.org",
+ "edu.eu.org",
+ "ee.eu.org",
+ "es.eu.org",
+ "fi.eu.org",
+ "fr.eu.org",
+ "gr.eu.org",
+ "hr.eu.org",
+ "hu.eu.org",
+ "ie.eu.org",
+ "il.eu.org",
+ "in.eu.org",
+ "int.eu.org",
+ "is.eu.org",
+ "it.eu.org",
+ "jp.eu.org",
+ "kr.eu.org",
+ "lt.eu.org",
+ "lu.eu.org",
+ "lv.eu.org",
+ "mc.eu.org",
+ "me.eu.org",
+ "mk.eu.org",
+ "mt.eu.org",
+ "my.eu.org",
+ "net.eu.org",
+ "ng.eu.org",
+ "nl.eu.org",
+ "no.eu.org",
+ "nz.eu.org",
+ "paris.eu.org",
+ "pl.eu.org",
+ "pt.eu.org",
+ "q-a.eu.org",
+ "ro.eu.org",
+ "ru.eu.org",
+ "se.eu.org",
+ "si.eu.org",
+ "sk.eu.org",
+ "tr.eu.org",
+ "uk.eu.org",
+ "us.eu.org",
+ "eurodir.ru",
+ "eu-1.evennode.com",
+ "eu-2.evennode.com",
+ "eu-3.evennode.com",
+ "eu-4.evennode.com",
+ "us-1.evennode.com",
+ "us-2.evennode.com",
+ "us-3.evennode.com",
+ "us-4.evennode.com",
+ "twmail.cc",
+ "twmail.net",
+ "twmail.org",
+ "mymailer.com.tw",
+ "url.tw",
+ "onfabrica.com",
+ "apps.fbsbx.com",
+ "ru.net",
+ "adygeya.ru",
+ "bashkiria.ru",
+ "bir.ru",
+ "cbg.ru",
+ "com.ru",
+ "dagestan.ru",
+ "grozny.ru",
+ "kalmykia.ru",
+ "kustanai.ru",
+ "marine.ru",
+ "mordovia.ru",
+ "msk.ru",
+ "mytis.ru",
+ "nalchik.ru",
+ "nov.ru",
+ "pyatigorsk.ru",
+ "spb.ru",
+ "vladikavkaz.ru",
+ "vladimir.ru",
+ "abkhazia.su",
+ "adygeya.su",
+ "aktyubinsk.su",
+ "arkhangelsk.su",
+ "armenia.su",
+ "ashgabad.su",
+ "azerbaijan.su",
+ "balashov.su",
+ "bashkiria.su",
+ "bryansk.su",
+ "bukhara.su",
+ "chimkent.su",
+ "dagestan.su",
+ "east-kazakhstan.su",
+ "exnet.su",
+ "georgia.su",
+ "grozny.su",
+ "ivanovo.su",
+ "jambyl.su",
+ "kalmykia.su",
+ "kaluga.su",
+ "karacol.su",
+ "karaganda.su",
+ "karelia.su",
+ "khakassia.su",
+ "krasnodar.su",
+ "kurgan.su",
+ "kustanai.su",
+ "lenug.su",
+ "mangyshlak.su",
+ "mordovia.su",
+ "msk.su",
+ "murmansk.su",
+ "nalchik.su",
+ "navoi.su",
+ "north-kazakhstan.su",
+ "nov.su",
+ "obninsk.su",
+ "penza.su",
+ "pokrovsk.su",
+ "sochi.su",
+ "spb.su",
+ "tashkent.su",
+ "termez.su",
+ "togliatti.su",
+ "troitsk.su",
+ "tselinograd.su",
+ "tula.su",
+ "tuva.su",
+ "vladikavkaz.su",
+ "vladimir.su",
+ "vologda.su",
+ "channelsdvr.net",
+ "u.channelsdvr.net",
+ "edgecompute.app",
+ "fastly-terrarium.com",
+ "fastlylb.net",
+ "map.fastlylb.net",
+ "freetls.fastly.net",
+ "map.fastly.net",
+ "a.prod.fastly.net",
+ "global.prod.fastly.net",
+ "a.ssl.fastly.net",
+ "b.ssl.fastly.net",
+ "global.ssl.fastly.net",
+ "fastvps-server.com",
+ "fastvps.host",
+ "myfast.host",
+ "fastvps.site",
+ "myfast.space",
+ "fedorainfracloud.org",
+ "fedorapeople.org",
+ "cloud.fedoraproject.org",
+ "app.os.fedoraproject.org",
+ "app.os.stg.fedoraproject.org",
+ "conn.uk",
+ "copro.uk",
+ "hosp.uk",
+ "mydobiss.com",
+ "fh-muenster.io",
+ "filegear.me",
+ "filegear-au.me",
+ "filegear-de.me",
+ "filegear-gb.me",
+ "filegear-ie.me",
+ "filegear-jp.me",
+ "filegear-sg.me",
+ "firebaseapp.com",
+ "fireweb.app",
+ "flap.id",
+ "onflashdrive.app",
+ "fldrv.com",
+ "fly.dev",
+ "edgeapp.net",
+ "shw.io",
+ "flynnhosting.net",
+ "forgeblocks.com",
+ "id.forgerock.io",
+ "framer.app",
+ "framercanvas.com",
+ "*.frusky.de",
+ "ravpage.co.il",
+ "0e.vc",
+ "freebox-os.com",
+ "freeboxos.com",
+ "fbx-os.fr",
+ "fbxos.fr",
+ "freebox-os.fr",
+ "freeboxos.fr",
+ "freedesktop.org",
+ "freemyip.com",
+ "wien.funkfeuer.at",
+ "*.futurecms.at",
+ "*.ex.futurecms.at",
+ "*.in.futurecms.at",
+ "futurehosting.at",
+ "futuremailing.at",
+ "*.ex.ortsinfo.at",
+ "*.kunden.ortsinfo.at",
+ "*.statics.cloud",
+ "independent-commission.uk",
+ "independent-inquest.uk",
+ "independent-inquiry.uk",
+ "independent-panel.uk",
+ "independent-review.uk",
+ "public-inquiry.uk",
+ "royal-commission.uk",
+ "campaign.gov.uk",
+ "service.gov.uk",
+ "api.gov.uk",
+ "gehirn.ne.jp",
+ "usercontent.jp",
+ "gentapps.com",
+ "gentlentapis.com",
+ "lab.ms",
+ "cdn-edges.net",
+ "ghost.io",
+ "gsj.bz",
+ "githubusercontent.com",
+ "githubpreview.dev",
+ "github.io",
+ "gitlab.io",
+ "gitapp.si",
+ "gitpage.si",
+ "glitch.me",
+ "nog.community",
+ "co.ro",
+ "shop.ro",
+ "lolipop.io",
+ "angry.jp",
+ "babyblue.jp",
+ "babymilk.jp",
+ "backdrop.jp",
+ "bambina.jp",
+ "bitter.jp",
+ "blush.jp",
+ "boo.jp",
+ "boy.jp",
+ "boyfriend.jp",
+ "but.jp",
+ "candypop.jp",
+ "capoo.jp",
+ "catfood.jp",
+ "cheap.jp",
+ "chicappa.jp",
+ "chillout.jp",
+ "chips.jp",
+ "chowder.jp",
+ "chu.jp",
+ "ciao.jp",
+ "cocotte.jp",
+ "coolblog.jp",
+ "cranky.jp",
+ "cutegirl.jp",
+ "daa.jp",
+ "deca.jp",
+ "deci.jp",
+ "digick.jp",
+ "egoism.jp",
+ "fakefur.jp",
+ "fem.jp",
+ "flier.jp",
+ "floppy.jp",
+ "fool.jp",
+ "frenchkiss.jp",
+ "girlfriend.jp",
+ "girly.jp",
+ "gloomy.jp",
+ "gonna.jp",
+ "greater.jp",
+ "hacca.jp",
+ "heavy.jp",
+ "her.jp",
+ "hiho.jp",
+ "hippy.jp",
+ "holy.jp",
+ "hungry.jp",
+ "icurus.jp",
+ "itigo.jp",
+ "jellybean.jp",
+ "kikirara.jp",
+ "kill.jp",
+ "kilo.jp",
+ "kuron.jp",
+ "littlestar.jp",
+ "lolipopmc.jp",
+ "lolitapunk.jp",
+ "lomo.jp",
+ "lovepop.jp",
+ "lovesick.jp",
+ "main.jp",
+ "mods.jp",
+ "mond.jp",
+ "mongolian.jp",
+ "moo.jp",
+ "namaste.jp",
+ "nikita.jp",
+ "nobushi.jp",
+ "noor.jp",
+ "oops.jp",
+ "parallel.jp",
+ "parasite.jp",
+ "pecori.jp",
+ "peewee.jp",
+ "penne.jp",
+ "pepper.jp",
+ "perma.jp",
+ "pigboat.jp",
+ "pinoko.jp",
+ "punyu.jp",
+ "pupu.jp",
+ "pussycat.jp",
+ "pya.jp",
+ "raindrop.jp",
+ "readymade.jp",
+ "sadist.jp",
+ "schoolbus.jp",
+ "secret.jp",
+ "staba.jp",
+ "stripper.jp",
+ "sub.jp",
+ "sunnyday.jp",
+ "thick.jp",
+ "tonkotsu.jp",
+ "under.jp",
+ "upper.jp",
+ "velvet.jp",
+ "verse.jp",
+ "versus.jp",
+ "vivian.jp",
+ "watson.jp",
+ "weblike.jp",
+ "whitesnow.jp",
+ "zombie.jp",
+ "heteml.net",
+ "cloudapps.digital",
+ "london.cloudapps.digital",
+ "pymnt.uk",
+ "homeoffice.gov.uk",
+ "ro.im",
+ "goip.de",
+ "run.app",
+ "a.run.app",
+ "web.app",
+ "*.0emm.com",
+ "appspot.com",
+ "*.r.appspot.com",
+ "codespot.com",
+ "googleapis.com",
+ "googlecode.com",
+ "pagespeedmobilizer.com",
+ "publishproxy.com",
+ "withgoogle.com",
+ "withyoutube.com",
+ "*.gateway.dev",
+ "cloud.goog",
+ "translate.goog",
+ "*.usercontent.goog",
+ "cloudfunctions.net",
+ "blogspot.ae",
+ "blogspot.al",
+ "blogspot.am",
+ "blogspot.ba",
+ "blogspot.be",
+ "blogspot.bg",
+ "blogspot.bj",
+ "blogspot.ca",
+ "blogspot.cf",
+ "blogspot.ch",
+ "blogspot.cl",
+ "blogspot.co.at",
+ "blogspot.co.id",
+ "blogspot.co.il",
+ "blogspot.co.ke",
+ "blogspot.co.nz",
+ "blogspot.co.uk",
+ "blogspot.co.za",
+ "blogspot.com",
+ "blogspot.com.ar",
+ "blogspot.com.au",
+ "blogspot.com.br",
+ "blogspot.com.by",
+ "blogspot.com.co",
+ "blogspot.com.cy",
+ "blogspot.com.ee",
+ "blogspot.com.eg",
+ "blogspot.com.es",
+ "blogspot.com.mt",
+ "blogspot.com.ng",
+ "blogspot.com.tr",
+ "blogspot.com.uy",
+ "blogspot.cv",
+ "blogspot.cz",
+ "blogspot.de",
+ "blogspot.dk",
+ "blogspot.fi",
+ "blogspot.fr",
+ "blogspot.gr",
+ "blogspot.hk",
+ "blogspot.hr",
+ "blogspot.hu",
+ "blogspot.ie",
+ "blogspot.in",
+ "blogspot.is",
+ "blogspot.it",
+ "blogspot.jp",
+ "blogspot.kr",
+ "blogspot.li",
+ "blogspot.lt",
+ "blogspot.lu",
+ "blogspot.md",
+ "blogspot.mk",
+ "blogspot.mr",
+ "blogspot.mx",
+ "blogspot.my",
+ "blogspot.nl",
+ "blogspot.no",
+ "blogspot.pe",
+ "blogspot.pt",
+ "blogspot.qa",
+ "blogspot.re",
+ "blogspot.ro",
+ "blogspot.rs",
+ "blogspot.ru",
+ "blogspot.se",
+ "blogspot.sg",
+ "blogspot.si",
+ "blogspot.sk",
+ "blogspot.sn",
+ "blogspot.td",
+ "blogspot.tw",
+ "blogspot.ug",
+ "blogspot.vn",
+ "goupile.fr",
+ "gov.nl",
+ "awsmppl.com",
+ "günstigbestellen.de",
+ "günstigliefern.de",
+ "fin.ci",
+ "free.hr",
+ "caa.li",
+ "ua.rs",
+ "conf.se",
+ "hs.zone",
+ "hs.run",
+ "hashbang.sh",
+ "hasura.app",
+ "hasura-app.io",
+ "pages.it.hs-heilbronn.de",
+ "hepforge.org",
+ "herokuapp.com",
+ "herokussl.com",
+ "ravendb.cloud",
+ "myravendb.com",
+ "ravendb.community",
+ "ravendb.me",
+ "development.run",
+ "ravendb.run",
+ "homesklep.pl",
+ "secaas.hk",
+ "hoplix.shop",
+ "orx.biz",
+ "biz.gl",
+ "col.ng",
+ "firm.ng",
+ "gen.ng",
+ "ltd.ng",
+ "ngo.ng",
+ "edu.scot",
+ "sch.so",
+ "hostyhosting.io",
+ "häkkinen.fi",
+ "*.moonscale.io",
+ "moonscale.net",
+ "iki.fi",
+ "ibxos.it",
+ "iliadboxos.it",
+ "impertrixcdn.com",
+ "impertrix.com",
+ "smushcdn.com",
+ "wphostedmail.com",
+ "wpmucdn.com",
+ "tempurl.host",
+ "wpmudev.host",
+ "dyn-berlin.de",
+ "in-berlin.de",
+ "in-brb.de",
+ "in-butter.de",
+ "in-dsl.de",
+ "in-dsl.net",
+ "in-dsl.org",
+ "in-vpn.de",
+ "in-vpn.net",
+ "in-vpn.org",
+ "biz.at",
+ "info.at",
+ "info.cx",
+ "ac.leg.br",
+ "al.leg.br",
+ "am.leg.br",
+ "ap.leg.br",
+ "ba.leg.br",
+ "ce.leg.br",
+ "df.leg.br",
+ "es.leg.br",
+ "go.leg.br",
+ "ma.leg.br",
+ "mg.leg.br",
+ "ms.leg.br",
+ "mt.leg.br",
+ "pa.leg.br",
+ "pb.leg.br",
+ "pe.leg.br",
+ "pi.leg.br",
+ "pr.leg.br",
+ "rj.leg.br",
+ "rn.leg.br",
+ "ro.leg.br",
+ "rr.leg.br",
+ "rs.leg.br",
+ "sc.leg.br",
+ "se.leg.br",
+ "sp.leg.br",
+ "to.leg.br",
+ "pixolino.com",
+ "na4u.ru",
+ "iopsys.se",
+ "ipifony.net",
+ "iservschule.de",
+ "mein-iserv.de",
+ "schulplattform.de",
+ "schulserver.de",
+ "test-iserv.de",
+ "iserv.dev",
+ "iobb.net",
+ "mel.cloudlets.com.au",
+ "cloud.interhostsolutions.be",
+ "users.scale.virtualcloud.com.br",
+ "mycloud.by",
+ "alp1.ae.flow.ch",
+ "appengine.flow.ch",
+ "es-1.axarnet.cloud",
+ "diadem.cloud",
+ "vip.jelastic.cloud",
+ "jele.cloud",
+ "it1.eur.aruba.jenv-aruba.cloud",
+ "it1.jenv-aruba.cloud",
+ "keliweb.cloud",
+ "cs.keliweb.cloud",
+ "oxa.cloud",
+ "tn.oxa.cloud",
+ "uk.oxa.cloud",
+ "primetel.cloud",
+ "uk.primetel.cloud",
+ "ca.reclaim.cloud",
+ "uk.reclaim.cloud",
+ "us.reclaim.cloud",
+ "ch.trendhosting.cloud",
+ "de.trendhosting.cloud",
+ "jele.club",
+ "amscompute.com",
+ "clicketcloud.com",
+ "dopaas.com",
+ "hidora.com",
+ "paas.hosted-by-previder.com",
+ "rag-cloud.hosteur.com",
+ "rag-cloud-ch.hosteur.com",
+ "jcloud.ik-server.com",
+ "jcloud-ver-jpc.ik-server.com",
+ "demo.jelastic.com",
+ "kilatiron.com",
+ "paas.massivegrid.com",
+ "jed.wafaicloud.com",
+ "lon.wafaicloud.com",
+ "ryd.wafaicloud.com",
+ "j.scaleforce.com.cy",
+ "jelastic.dogado.eu",
+ "fi.cloudplatform.fi",
+ "demo.datacenter.fi",
+ "paas.datacenter.fi",
+ "jele.host",
+ "mircloud.host",
+ "paas.beebyte.io",
+ "sekd1.beebyteapp.io",
+ "jele.io",
+ "cloud-fr1.unispace.io",
+ "jc.neen.it",
+ "cloud.jelastic.open.tim.it",
+ "jcloud.kz",
+ "upaas.kazteleport.kz",
+ "cloudjiffy.net",
+ "fra1-de.cloudjiffy.net",
+ "west1-us.cloudjiffy.net",
+ "jls-sto1.elastx.net",
+ "jls-sto2.elastx.net",
+ "jls-sto3.elastx.net",
+ "faststacks.net",
+ "fr-1.paas.massivegrid.net",
+ "lon-1.paas.massivegrid.net",
+ "lon-2.paas.massivegrid.net",
+ "ny-1.paas.massivegrid.net",
+ "ny-2.paas.massivegrid.net",
+ "sg-1.paas.massivegrid.net",
+ "jelastic.saveincloud.net",
+ "nordeste-idc.saveincloud.net",
+ "j.scaleforce.net",
+ "jelastic.tsukaeru.net",
+ "sdscloud.pl",
+ "unicloud.pl",
+ "mircloud.ru",
+ "jelastic.regruhosting.ru",
+ "enscaled.sg",
+ "jele.site",
+ "jelastic.team",
+ "orangecloud.tn",
+ "j.layershift.co.uk",
+ "phx.enscaled.us",
+ "mircloud.us",
+ "myjino.ru",
+ "*.hosting.myjino.ru",
+ "*.landing.myjino.ru",
+ "*.spectrum.myjino.ru",
+ "*.vps.myjino.ru",
+ "jotelulu.cloud",
+ "*.triton.zone",
+ "*.cns.joyent.com",
+ "js.org",
+ "kaas.gg",
+ "khplay.nl",
+ "ktistory.com",
+ "kapsi.fi",
+ "keymachine.de",
+ "kinghost.net",
+ "uni5.net",
+ "knightpoint.systems",
+ "koobin.events",
+ "oya.to",
+ "kuleuven.cloud",
+ "ezproxy.kuleuven.be",
+ "co.krd",
+ "edu.krd",
+ "krellian.net",
+ "webthings.io",
+ "git-repos.de",
+ "lcube-server.de",
+ "svn-repos.de",
+ "leadpages.co",
+ "lpages.co",
+ "lpusercontent.com",
+ "lelux.site",
+ "co.business",
+ "co.education",
+ "co.events",
+ "co.financial",
+ "co.network",
+ "co.place",
+ "co.technology",
+ "app.lmpm.com",
+ "linkyard.cloud",
+ "linkyard-cloud.ch",
+ "members.linode.com",
+ "*.nodebalancer.linode.com",
+ "*.linodeobjects.com",
+ "ip.linodeusercontent.com",
+ "we.bs",
+ "*.user.localcert.dev",
+ "localzone.xyz",
+ "loginline.app",
+ "loginline.dev",
+ "loginline.io",
+ "loginline.services",
+ "loginline.site",
+ "servers.run",
+ "lohmus.me",
+ "krasnik.pl",
+ "leczna.pl",
+ "lubartow.pl",
+ "lublin.pl",
+ "poniatowa.pl",
+ "swidnik.pl",
+ "glug.org.uk",
+ "lug.org.uk",
+ "lugs.org.uk",
+ "barsy.bg",
+ "barsy.co.uk",
+ "barsyonline.co.uk",
+ "barsycenter.com",
+ "barsyonline.com",
+ "barsy.club",
+ "barsy.de",
+ "barsy.eu",
+ "barsy.in",
+ "barsy.info",
+ "barsy.io",
+ "barsy.me",
+ "barsy.menu",
+ "barsy.mobi",
+ "barsy.net",
+ "barsy.online",
+ "barsy.org",
+ "barsy.pro",
+ "barsy.pub",
+ "barsy.ro",
+ "barsy.shop",
+ "barsy.site",
+ "barsy.support",
+ "barsy.uk",
+ "*.magentosite.cloud",
+ "mayfirst.info",
+ "mayfirst.org",
+ "hb.cldmail.ru",
+ "cn.vu",
+ "mazeplay.com",
+ "mcpe.me",
+ "mcdir.me",
+ "mcdir.ru",
+ "mcpre.ru",
+ "vps.mcdir.ru",
+ "mediatech.by",
+ "mediatech.dev",
+ "hra.health",
+ "miniserver.com",
+ "memset.net",
+ "messerli.app",
+ "*.cloud.metacentrum.cz",
+ "custom.metacentrum.cz",
+ "flt.cloud.muni.cz",
+ "usr.cloud.muni.cz",
+ "meteorapp.com",
+ "eu.meteorapp.com",
+ "co.pl",
+ "*.azurecontainer.io",
+ "azurewebsites.net",
+ "azure-mobile.net",
+ "cloudapp.net",
+ "azurestaticapps.net",
+ "1.azurestaticapps.net",
+ "centralus.azurestaticapps.net",
+ "eastasia.azurestaticapps.net",
+ "eastus2.azurestaticapps.net",
+ "westeurope.azurestaticapps.net",
+ "westus2.azurestaticapps.net",
+ "csx.cc",
+ "mintere.site",
+ "forte.id",
+ "mozilla-iot.org",
+ "bmoattachments.org",
+ "net.ru",
+ "org.ru",
+ "pp.ru",
+ "hostedpi.com",
+ "customer.mythic-beasts.com",
+ "caracal.mythic-beasts.com",
+ "fentiger.mythic-beasts.com",
+ "lynx.mythic-beasts.com",
+ "ocelot.mythic-beasts.com",
+ "oncilla.mythic-beasts.com",
+ "onza.mythic-beasts.com",
+ "sphinx.mythic-beasts.com",
+ "vs.mythic-beasts.com",
+ "x.mythic-beasts.com",
+ "yali.mythic-beasts.com",
+ "cust.retrosnub.co.uk",
+ "ui.nabu.casa",
+ "pony.club",
+ "of.fashion",
+ "in.london",
+ "of.london",
+ "from.marketing",
+ "with.marketing",
+ "for.men",
+ "repair.men",
+ "and.mom",
+ "for.mom",
+ "for.one",
+ "under.one",
+ "for.sale",
+ "that.win",
+ "from.work",
+ "to.work",
+ "cloud.nospamproxy.com",
+ "netlify.app",
+ "4u.com",
+ "ngrok.io",
+ "nh-serv.co.uk",
+ "nfshost.com",
+ "*.developer.app",
+ "noop.app",
+ "*.northflank.app",
+ "*.build.run",
+ "*.code.run",
+ "*.database.run",
+ "*.migration.run",
+ "noticeable.news",
+ "dnsking.ch",
+ "mypi.co",
+ "n4t.co",
+ "001www.com",
+ "ddnslive.com",
+ "myiphost.com",
+ "forumz.info",
+ "16-b.it",
+ "32-b.it",
+ "64-b.it",
+ "soundcast.me",
+ "tcp4.me",
+ "dnsup.net",
+ "hicam.net",
+ "now-dns.net",
+ "ownip.net",
+ "vpndns.net",
+ "dynserv.org",
+ "now-dns.org",
+ "x443.pw",
+ "now-dns.top",
+ "ntdll.top",
+ "freeddns.us",
+ "crafting.xyz",
+ "zapto.xyz",
+ "nsupdate.info",
+ "nerdpol.ovh",
+ "blogsyte.com",
+ "brasilia.me",
+ "cable-modem.org",
+ "ciscofreak.com",
+ "collegefan.org",
+ "couchpotatofries.org",
+ "damnserver.com",
+ "ddns.me",
+ "ditchyourip.com",
+ "dnsfor.me",
+ "dnsiskinky.com",
+ "dvrcam.info",
+ "dynns.com",
+ "eating-organic.net",
+ "fantasyleague.cc",
+ "geekgalaxy.com",
+ "golffan.us",
+ "health-carereform.com",
+ "homesecuritymac.com",
+ "homesecuritypc.com",
+ "hopto.me",
+ "ilovecollege.info",
+ "loginto.me",
+ "mlbfan.org",
+ "mmafan.biz",
+ "myactivedirectory.com",
+ "mydissent.net",
+ "myeffect.net",
+ "mymediapc.net",
+ "mypsx.net",
+ "mysecuritycamera.com",
+ "mysecuritycamera.net",
+ "mysecuritycamera.org",
+ "net-freaks.com",
+ "nflfan.org",
+ "nhlfan.net",
+ "no-ip.ca",
+ "no-ip.co.uk",
+ "no-ip.net",
+ "noip.us",
+ "onthewifi.com",
+ "pgafan.net",
+ "point2this.com",
+ "pointto.us",
+ "privatizehealthinsurance.net",
+ "quicksytes.com",
+ "read-books.org",
+ "securitytactics.com",
+ "serveexchange.com",
+ "servehumour.com",
+ "servep2p.com",
+ "servesarcasm.com",
+ "stufftoread.com",
+ "ufcfan.org",
+ "unusualperson.com",
+ "workisboring.com",
+ "3utilities.com",
+ "bounceme.net",
+ "ddns.net",
+ "ddnsking.com",
+ "gotdns.ch",
+ "hopto.org",
+ "myftp.biz",
+ "myftp.org",
+ "myvnc.com",
+ "no-ip.biz",
+ "no-ip.info",
+ "no-ip.org",
+ "noip.me",
+ "redirectme.net",
+ "servebeer.com",
+ "serveblog.net",
+ "servecounterstrike.com",
+ "serveftp.com",
+ "servegame.com",
+ "servehalflife.com",
+ "servehttp.com",
+ "serveirc.com",
+ "serveminecraft.net",
+ "servemp3.com",
+ "servepics.com",
+ "servequake.com",
+ "sytes.net",
+ "webhop.me",
+ "zapto.org",
+ "stage.nodeart.io",
+ "pcloud.host",
+ "nyc.mn",
+ "static.observableusercontent.com",
+ "cya.gg",
+ "omg.lol",
+ "cloudycluster.net",
+ "omniwe.site",
+ "service.one",
+ "nid.io",
+ "opensocial.site",
+ "opencraft.hosting",
+ "orsites.com",
+ "operaunite.com",
+ "tech.orange",
+ "authgear-staging.com",
+ "authgearapps.com",
+ "skygearapp.com",
+ "outsystemscloud.com",
+ "*.webpaas.ovh.net",
+ "*.hosting.ovh.net",
+ "ownprovider.com",
+ "own.pm",
+ "*.owo.codes",
+ "ox.rs",
+ "oy.lc",
+ "pgfog.com",
+ "pagefrontapp.com",
+ "pagexl.com",
+ "*.paywhirl.com",
+ "bar0.net",
+ "bar1.net",
+ "bar2.net",
+ "rdv.to",
+ "art.pl",
+ "gliwice.pl",
+ "krakow.pl",
+ "poznan.pl",
+ "wroc.pl",
+ "zakopane.pl",
+ "pantheonsite.io",
+ "gotpantheon.com",
+ "mypep.link",
+ "perspecta.cloud",
+ "lk3.ru",
+ "on-web.fr",
+ "bc.platform.sh",
+ "ent.platform.sh",
+ "eu.platform.sh",
+ "us.platform.sh",
+ "*.platformsh.site",
+ "*.tst.site",
+ "platter-app.com",
+ "platter-app.dev",
+ "platterp.us",
+ "pdns.page",
+ "plesk.page",
+ "pleskns.com",
+ "dyn53.io",
+ "onporter.run",
+ "co.bn",
+ "postman-echo.com",
+ "pstmn.io",
+ "mock.pstmn.io",
+ "httpbin.org",
+ "prequalifyme.today",
+ "xen.prgmr.com",
+ "priv.at",
+ "prvcy.page",
+ "*.dweb.link",
+ "protonet.io",
+ "chirurgiens-dentistes-en-france.fr",
+ "byen.site",
+ "pubtls.org",
+ "pythonanywhere.com",
+ "eu.pythonanywhere.com",
+ "qoto.io",
+ "qualifioapp.com",
+ "qbuser.com",
+ "cloudsite.builders",
+ "instances.spawn.cc",
+ "instantcloud.cn",
+ "ras.ru",
+ "qa2.com",
+ "qcx.io",
+ "*.sys.qcx.io",
+ "dev-myqnapcloud.com",
+ "alpha-myqnapcloud.com",
+ "myqnapcloud.com",
+ "*.quipelements.com",
+ "vapor.cloud",
+ "vaporcloud.io",
+ "rackmaze.com",
+ "rackmaze.net",
+ "g.vbrplsbx.io",
+ "*.on-k3s.io",
+ "*.on-rancher.cloud",
+ "*.on-rio.io",
+ "readthedocs.io",
+ "rhcloud.com",
+ "app.render.com",
+ "onrender.com",
+ "repl.co",
+ "id.repl.co",
+ "repl.run",
+ "resindevice.io",
+ "devices.resinstaging.io",
+ "hzc.io",
+ "wellbeingzone.eu",
+ "wellbeingzone.co.uk",
+ "adimo.co.uk",
+ "itcouldbewor.se",
+ "git-pages.rit.edu",
+ "rocky.page",
+ "биз.рус",
+ "ком.рус",
+ "крым.рус",
+ "мир.рус",
+ "мск.рус",
+ "орг.рус",
+ "самара.рус",
+ "сочи.рус",
+ "спб.рус",
+ "я.рус",
+ "*.builder.code.com",
+ "*.dev-builder.code.com",
+ "*.stg-builder.code.com",
+ "sandcats.io",
+ "logoip.de",
+ "logoip.com",
+ "fr-par-1.baremetal.scw.cloud",
+ "fr-par-2.baremetal.scw.cloud",
+ "nl-ams-1.baremetal.scw.cloud",
+ "fnc.fr-par.scw.cloud",
+ "functions.fnc.fr-par.scw.cloud",
+ "k8s.fr-par.scw.cloud",
+ "nodes.k8s.fr-par.scw.cloud",
+ "s3.fr-par.scw.cloud",
+ "s3-website.fr-par.scw.cloud",
+ "whm.fr-par.scw.cloud",
+ "priv.instances.scw.cloud",
+ "pub.instances.scw.cloud",
+ "k8s.scw.cloud",
+ "k8s.nl-ams.scw.cloud",
+ "nodes.k8s.nl-ams.scw.cloud",
+ "s3.nl-ams.scw.cloud",
+ "s3-website.nl-ams.scw.cloud",
+ "whm.nl-ams.scw.cloud",
+ "k8s.pl-waw.scw.cloud",
+ "nodes.k8s.pl-waw.scw.cloud",
+ "s3.pl-waw.scw.cloud",
+ "s3-website.pl-waw.scw.cloud",
+ "scalebook.scw.cloud",
+ "smartlabeling.scw.cloud",
+ "dedibox.fr",
+ "schokokeks.net",
+ "gov.scot",
+ "service.gov.scot",
+ "scrysec.com",
+ "firewall-gateway.com",
+ "firewall-gateway.de",
+ "my-gateway.de",
+ "my-router.de",
+ "spdns.de",
+ "spdns.eu",
+ "firewall-gateway.net",
+ "my-firewall.org",
+ "myfirewall.org",
+ "spdns.org",
+ "seidat.net",
+ "sellfy.store",
+ "senseering.net",
+ "minisite.ms",
+ "magnet.page",
+ "biz.ua",
+ "co.ua",
+ "pp.ua",
+ "shiftcrypto.dev",
+ "shiftcrypto.io",
+ "shiftedit.io",
+ "myshopblocks.com",
+ "myshopify.com",
+ "shopitsite.com",
+ "shopware.store",
+ "mo-siemens.io",
+ "1kapp.com",
+ "appchizi.com",
+ "applinzi.com",
+ "sinaapp.com",
+ "vipsinaapp.com",
+ "siteleaf.net",
+ "bounty-full.com",
+ "alpha.bounty-full.com",
+ "beta.bounty-full.com",
+ "small-web.org",
+ "vp4.me",
+ "try-snowplow.com",
+ "srht.site",
+ "stackhero-network.com",
+ "musician.io",
+ "novecore.site",
+ "static.land",
+ "dev.static.land",
+ "sites.static.land",
+ "storebase.store",
+ "vps-host.net",
+ "atl.jelastic.vps-host.net",
+ "njs.jelastic.vps-host.net",
+ "ric.jelastic.vps-host.net",
+ "playstation-cloud.com",
+ "apps.lair.io",
+ "*.stolos.io",
+ "spacekit.io",
+ "customer.speedpartner.de",
+ "myspreadshop.at",
+ "myspreadshop.com.au",
+ "myspreadshop.be",
+ "myspreadshop.ca",
+ "myspreadshop.ch",
+ "myspreadshop.com",
+ "myspreadshop.de",
+ "myspreadshop.dk",
+ "myspreadshop.es",
+ "myspreadshop.fi",
+ "myspreadshop.fr",
+ "myspreadshop.ie",
+ "myspreadshop.it",
+ "myspreadshop.net",
+ "myspreadshop.nl",
+ "myspreadshop.no",
+ "myspreadshop.pl",
+ "myspreadshop.se",
+ "myspreadshop.co.uk",
+ "api.stdlib.com",
+ "storj.farm",
+ "utwente.io",
+ "soc.srcf.net",
+ "user.srcf.net",
+ "temp-dns.com",
+ "supabase.co",
+ "supabase.in",
+ "supabase.net",
+ "su.paba.se",
+ "*.s5y.io",
+ "*.sensiosite.cloud",
+ "syncloud.it",
+ "dscloud.biz",
+ "direct.quickconnect.cn",
+ "dsmynas.com",
+ "familyds.com",
+ "diskstation.me",
+ "dscloud.me",
+ "i234.me",
+ "myds.me",
+ "synology.me",
+ "dscloud.mobi",
+ "dsmynas.net",
+ "familyds.net",
+ "dsmynas.org",
+ "familyds.org",
+ "vpnplus.to",
+ "direct.quickconnect.to",
+ "tabitorder.co.il",
+ "taifun-dns.de",
+ "beta.tailscale.net",
+ "ts.net",
+ "gda.pl",
+ "gdansk.pl",
+ "gdynia.pl",
+ "med.pl",
+ "sopot.pl",
+ "site.tb-hosting.com",
+ "edugit.io",
+ "s3.teckids.org",
+ "telebit.app",
+ "telebit.io",
+ "*.telebit.xyz",
+ "gwiddle.co.uk",
+ "*.firenet.ch",
+ "*.svc.firenet.ch",
+ "reservd.com",
+ "thingdustdata.com",
+ "cust.dev.thingdust.io",
+ "cust.disrec.thingdust.io",
+ "cust.prod.thingdust.io",
+ "cust.testing.thingdust.io",
+ "reservd.dev.thingdust.io",
+ "reservd.disrec.thingdust.io",
+ "reservd.testing.thingdust.io",
+ "tickets.io",
+ "arvo.network",
+ "azimuth.network",
+ "tlon.network",
+ "torproject.net",
+ "pages.torproject.net",
+ "bloxcms.com",
+ "townnews-staging.com",
+ "tbits.me",
+ "12hp.at",
+ "2ix.at",
+ "4lima.at",
+ "lima-city.at",
+ "12hp.ch",
+ "2ix.ch",
+ "4lima.ch",
+ "lima-city.ch",
+ "trafficplex.cloud",
+ "de.cool",
+ "12hp.de",
+ "2ix.de",
+ "4lima.de",
+ "lima-city.de",
+ "1337.pictures",
+ "clan.rip",
+ "lima-city.rocks",
+ "webspace.rocks",
+ "lima.zone",
+ "*.transurl.be",
+ "*.transurl.eu",
+ "*.transurl.nl",
+ "site.transip.me",
+ "tuxfamily.org",
+ "dd-dns.de",
+ "diskstation.eu",
+ "diskstation.org",
+ "dray-dns.de",
+ "draydns.de",
+ "dyn-vpn.de",
+ "dynvpn.de",
+ "mein-vigor.de",
+ "my-vigor.de",
+ "my-wan.de",
+ "syno-ds.de",
+ "synology-diskstation.de",
+ "synology-ds.de",
+ "typedream.app",
+ "pro.typeform.com",
+ "uber.space",
+ "*.uberspace.de",
+ "hk.com",
+ "hk.org",
+ "ltd.hk",
+ "inc.hk",
+ "name.pm",
+ "sch.tf",
+ "biz.wf",
+ "sch.wf",
+ "org.yt",
+ "virtualuser.de",
+ "virtual-user.de",
+ "upli.io",
+ "urown.cloud",
+ "dnsupdate.info",
+ "lib.de.us",
+ "2038.io",
+ "vercel.app",
+ "vercel.dev",
+ "now.sh",
+ "router.management",
+ "v-info.info",
+ "voorloper.cloud",
+ "neko.am",
+ "nyaa.am",
+ "be.ax",
+ "cat.ax",
+ "es.ax",
+ "eu.ax",
+ "gg.ax",
+ "mc.ax",
+ "us.ax",
+ "xy.ax",
+ "nl.ci",
+ "xx.gl",
+ "app.gp",
+ "blog.gt",
+ "de.gt",
+ "to.gt",
+ "be.gy",
+ "cc.hn",
+ "blog.kg",
+ "io.kg",
+ "jp.kg",
+ "tv.kg",
+ "uk.kg",
+ "us.kg",
+ "de.ls",
+ "at.md",
+ "de.md",
+ "jp.md",
+ "to.md",
+ "indie.porn",
+ "vxl.sh",
+ "ch.tc",
+ "me.tc",
+ "we.tc",
+ "nyan.to",
+ "at.vg",
+ "blog.vu",
+ "dev.vu",
+ "me.vu",
+ "v.ua",
+ "*.vultrobjects.com",
+ "wafflecell.com",
+ "*.webhare.dev",
+ "reserve-online.net",
+ "reserve-online.com",
+ "bookonline.app",
+ "hotelwithflight.com",
+ "wedeploy.io",
+ "wedeploy.me",
+ "wedeploy.sh",
+ "remotewd.com",
+ "pages.wiardweb.com",
+ "wmflabs.org",
+ "toolforge.org",
+ "wmcloud.org",
+ "panel.gg",
+ "daemon.panel.gg",
+ "messwithdns.com",
+ "woltlab-demo.com",
+ "myforum.community",
+ "community-pro.de",
+ "diskussionsbereich.de",
+ "community-pro.net",
+ "meinforum.net",
+ "affinitylottery.org.uk",
+ "raffleentry.org.uk",
+ "weeklylottery.org.uk",
+ "wpenginepowered.com",
+ "js.wpenginepowered.com",
+ "wixsite.com",
+ "editorx.io",
+ "half.host",
+ "xnbay.com",
+ "u2.xnbay.com",
+ "u2-local.xnbay.com",
+ "cistron.nl",
+ "demon.nl",
+ "xs4all.space",
+ "yandexcloud.net",
+ "storage.yandexcloud.net",
+ "website.yandexcloud.net",
+ "official.academy",
+ "yolasite.com",
+ "ybo.faith",
+ "yombo.me",
+ "homelink.one",
+ "ybo.party",
+ "ybo.review",
+ "ybo.science",
+ "ybo.trade",
+ "ynh.fr",
+ "nohost.me",
+ "noho.st",
+ "za.net",
+ "za.org",
+ "bss.design",
+ "basicserver.io",
+ "virtualserver.io",
+ "enterprisecloud.nu"
+];
+
+/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
+
+(function (exports) {
+
+
+ var Punycode = require$$0$1;
+
+
+ var internals = {};
+
+
+ //
+ // Read rules from file.
+ //
+ internals.rules = require$$1.map(function (rule) {
+
+ return {
+ rule: rule,
+ suffix: rule.replace(/^(\*\.|\!)/, ''),
+ punySuffix: -1,
+ wildcard: rule.charAt(0) === '*',
+ exception: rule.charAt(0) === '!'
+ };
+ });
+
+
+ //
+ // Check is given string ends with `suffix`.
+ //
+ internals.endsWith = function (str, suffix) {
+
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ };
+
+
+ //
+ // Find rule for a given domain.
+ //
+ internals.findRule = function (domain) {
+
+ var punyDomain = Punycode.toASCII(domain);
+ return internals.rules.reduce(function (memo, rule) {
+
+ if (rule.punySuffix === -1){
+ rule.punySuffix = Punycode.toASCII(rule.suffix);
+ }
+ if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
+ return memo;
+ }
+ // This has been commented out as it never seems to run. This is because
+ // sub tlds always appear after their parents and we never find a shorter
+ // match.
+ //if (memo) {
+ // var memoSuffix = Punycode.toASCII(memo.suffix);
+ // if (memoSuffix.length >= punySuffix.length) {
+ // return memo;
+ // }
+ //}
+ return rule;
+ }, null);
+ };
+
+
+ //
+ // Error codes and messages.
+ //
+ exports.errorCodes = {
+ DOMAIN_TOO_SHORT: 'Domain name too short.',
+ DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
+ LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
+ LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
+ LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
+ LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
+ LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
+ };
+
+
+ //
+ // Validate domain name and throw if not valid.
+ //
+ // From wikipedia:
+ //
+ // Hostnames are composed of series of labels concatenated with dots, as are all
+ // domain names. Each label must be between 1 and 63 characters long, and the
+ // entire hostname (including the delimiting dots) has a maximum of 255 chars.
+ //
+ // Allowed chars:
+ //
+ // * `a-z`
+ // * `0-9`
+ // * `-` but not as a starting or ending character
+ // * `.` as a separator for the textual portions of a domain name
+ //
+ // * http://en.wikipedia.org/wiki/Domain_name
+ // * http://en.wikipedia.org/wiki/Hostname
+ //
+ internals.validate = function (input) {
+
+ // Before we can validate we need to take care of IDNs with unicode chars.
+ var ascii = Punycode.toASCII(input);
+
+ if (ascii.length < 1) {
+ return 'DOMAIN_TOO_SHORT';
+ }
+ if (ascii.length > 255) {
+ return 'DOMAIN_TOO_LONG';
+ }
+
+ // Check each part's length and allowed chars.
+ var labels = ascii.split('.');
+ var label;
+
+ for (var i = 0; i < labels.length; ++i) {
+ label = labels[i];
+ if (!label.length) {
+ return 'LABEL_TOO_SHORT';
+ }
+ if (label.length > 63) {
+ return 'LABEL_TOO_LONG';
+ }
+ if (label.charAt(0) === '-') {
+ return 'LABEL_STARTS_WITH_DASH';
+ }
+ if (label.charAt(label.length - 1) === '-') {
+ return 'LABEL_ENDS_WITH_DASH';
+ }
+ if (!/^[a-z0-9\-]+$/.test(label)) {
+ return 'LABEL_INVALID_CHARS';
+ }
+ }
+ };
+
+
+ //
+ // Public API
+ //
+
+
+ //
+ // Parse domain.
+ //
+ exports.parse = function (input) {
+
+ if (typeof input !== 'string') {
+ throw new TypeError('Domain name must be a string.');
+ }
+
+ // Force domain to lowercase.
+ var domain = input.slice(0).toLowerCase();
+
+ // Handle FQDN.
+ // TODO: Simply remove trailing dot?
+ if (domain.charAt(domain.length - 1) === '.') {
+ domain = domain.slice(0, domain.length - 1);
+ }
+
+ // Validate and sanitise input.
+ var error = internals.validate(domain);
+ if (error) {
+ return {
+ input: input,
+ error: {
+ message: exports.errorCodes[error],
+ code: error
+ }
+ };
+ }
+
+ var parsed = {
+ input: input,
+ tld: null,
+ sld: null,
+ domain: null,
+ subdomain: null,
+ listed: false
+ };
+
+ var domainParts = domain.split('.');
+
+ // Non-Internet TLD
+ if (domainParts[domainParts.length - 1] === 'local') {
+ return parsed;
+ }
+
+ var handlePunycode = function () {
+
+ if (!/xn--/.test(domain)) {
+ return parsed;
+ }
+ if (parsed.domain) {
+ parsed.domain = Punycode.toASCII(parsed.domain);
+ }
+ if (parsed.subdomain) {
+ parsed.subdomain = Punycode.toASCII(parsed.subdomain);
+ }
+ return parsed;
+ };
+
+ var rule = internals.findRule(domain);
+
+ // Unlisted tld.
+ if (!rule) {
+ if (domainParts.length < 2) {
+ return parsed;
+ }
+ parsed.tld = domainParts.pop();
+ parsed.sld = domainParts.pop();
+ parsed.domain = [parsed.sld, parsed.tld].join('.');
+ if (domainParts.length) {
+ parsed.subdomain = domainParts.pop();
+ }
+ return handlePunycode();
+ }
+
+ // At this point we know the public suffix is listed.
+ parsed.listed = true;
+
+ var tldParts = rule.suffix.split('.');
+ var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
+
+ if (rule.exception) {
+ privateParts.push(tldParts.shift());
+ }
+
+ parsed.tld = tldParts.join('.');
+
+ if (!privateParts.length) {
+ return handlePunycode();
+ }
+
+ if (rule.wildcard) {
+ tldParts.unshift(privateParts.pop());
+ parsed.tld = tldParts.join('.');
+ }
+
+ if (!privateParts.length) {
+ return handlePunycode();
+ }
+
+ parsed.sld = privateParts.pop();
+ parsed.domain = [parsed.sld, parsed.tld].join('.');
+
+ if (privateParts.length) {
+ parsed.subdomain = privateParts.join('.');
+ }
+
+ return handlePunycode();
+ };
+
+
+ //
+ // Get domain.
+ //
+ exports.get = function (domain) {
+
+ if (!domain) {
+ return null;
+ }
+ return exports.parse(domain).domain || null;
+ };
+
+
+ //
+ // Check whether domain belongs to a known public suffix.
+ //
+ exports.isValid = function (domain) {
+
+ var parsed = exports.parse(domain);
+ return Boolean(parsed.domain && parsed.listed);
+ };
+} (psl$1));
+
+/*!
+ * Copyright (c) 2018, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const psl = psl$1;
+
+// RFC 6761
+const SPECIAL_USE_DOMAINS = [
+ "local",
+ "example",
+ "invalid",
+ "localhost",
+ "test"
+];
+
+const SPECIAL_TREATMENT_DOMAINS = ["localhost", "invalid"];
+
+function getPublicSuffix(domain, options = {}) {
+ const domainParts = domain.split(".");
+ const topLevelDomain = domainParts[domainParts.length - 1];
+ const allowSpecialUseDomain = !!options.allowSpecialUseDomain;
+ const ignoreError = !!options.ignoreError;
+
+ if (allowSpecialUseDomain && SPECIAL_USE_DOMAINS.includes(topLevelDomain)) {
+ if (domainParts.length > 1) {
+ const secondLevelDomain = domainParts[domainParts.length - 2];
+ // In aforementioned example, the eTLD/pubSuf will be apple.localhost
+ return `${secondLevelDomain}.${topLevelDomain}`;
+ } else if (SPECIAL_TREATMENT_DOMAINS.includes(topLevelDomain)) {
+ // For a single word special use domain, e.g. 'localhost' or 'invalid', per RFC 6761,
+ // "Application software MAY recognize {localhost/invalid} names as special, or
+ // MAY pass them to name resolution APIs as they would for other domain names."
+ return `${topLevelDomain}`;
+ }
+ }
+
+ if (!ignoreError && SPECIAL_USE_DOMAINS.includes(topLevelDomain)) {
+ throw new Error(
+ `Cookie has domain set to the public suffix "${topLevelDomain}" which is a special use domain. To allow this, configure your CookieJar with {allowSpecialUseDomain:true, rejectPublicSuffixes: false}.`
+ );
+ }
+
+ return psl.get(domain);
+}
+
+pubsuffixPsl.getPublicSuffix = getPublicSuffix;
+
+var store = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*jshint unused:false */
+
+class Store$2 {
+ constructor() {
+ this.synchronous = false;
+ }
+
+ findCookie(domain, path, key, cb) {
+ throw new Error("findCookie is not implemented");
+ }
+
+ findCookies(domain, path, allowSpecialUseDomain, cb) {
+ throw new Error("findCookies is not implemented");
+ }
+
+ putCookie(cookie, cb) {
+ throw new Error("putCookie is not implemented");
+ }
+
+ updateCookie(oldCookie, newCookie, cb) {
+ // recommended default implementation:
+ // return this.putCookie(newCookie, cb);
+ throw new Error("updateCookie is not implemented");
+ }
+
+ removeCookie(domain, path, key, cb) {
+ throw new Error("removeCookie is not implemented");
+ }
+
+ removeCookies(domain, path, cb) {
+ throw new Error("removeCookies is not implemented");
+ }
+
+ removeAllCookies(cb) {
+ throw new Error("removeAllCookies is not implemented");
+ }
+
+ getAllCookies(cb) {
+ throw new Error(
+ "getAllCookies is not implemented (therefore jar cannot be serialized)"
+ );
+ }
+}
+
+store.Store = Store$2;
+
+var memstore = {};
+
+var universalify = {};
+
+universalify.fromCallback = function (fn) {
+ return Object.defineProperty(function () {
+ if (typeof arguments[arguments.length - 1] === 'function') fn.apply(this, arguments);
+ else {
+ return new Promise((resolve, reject) => {
+ arguments[arguments.length] = (err, res) => {
+ if (err) return reject(err)
+ resolve(res);
+ };
+ arguments.length++;
+ fn.apply(this, arguments);
+ })
+ }
+ }, 'name', { value: fn.name })
+};
+
+universalify.fromPromise = function (fn) {
+ return Object.defineProperty(function () {
+ const cb = arguments[arguments.length - 1];
+ if (typeof cb !== 'function') return fn.apply(this, arguments)
+ else {
+ delete arguments[arguments.length - 1];
+ arguments.length--;
+ fn.apply(this, arguments).then(r => cb(null, r), cb);
+ }
+ }, 'name', { value: fn.name })
+};
+
+var permuteDomain$1 = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var hasRequiredPermuteDomain;
+
+function requirePermuteDomain () {
+ if (hasRequiredPermuteDomain) return permuteDomain$1;
+ hasRequiredPermuteDomain = 1;
+ const pubsuffix = pubsuffixPsl;
+
+ // Gives the permutation of all possible domainMatch()es of a given domain. The
+ // array is in shortest-to-longest order. Handy for indexing.
+
+ function permuteDomain(domain, allowSpecialUseDomain) {
+ const pubSuf = pubsuffix.getPublicSuffix(domain, {
+ allowSpecialUseDomain: allowSpecialUseDomain
+ });
+
+ if (!pubSuf) {
+ return null;
+ }
+ if (pubSuf == domain) {
+ return [domain];
+ }
+
+ // Nuke trailing dot
+ if (domain.slice(-1) == ".") {
+ domain = domain.slice(0, -1);
+ }
+
+ const prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
+ const parts = prefix.split(".").reverse();
+ let cur = pubSuf;
+ const permutations = [cur];
+ while (parts.length) {
+ cur = `${parts.shift()}.${cur}`;
+ permutations.push(cur);
+ }
+ return permutations;
+ }
+
+ permuteDomain$1.permuteDomain = permuteDomain;
+ return permuteDomain$1;
+}
+
+var pathMatch$3 = {};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * "A request-path path-matches a given cookie-path if at least one of the
+ * following conditions holds:"
+ */
+function pathMatch$2(reqPath, cookiePath) {
+ // "o The cookie-path and the request-path are identical."
+ if (cookiePath === reqPath) {
+ return true;
+ }
+
+ const idx = reqPath.indexOf(cookiePath);
+ if (idx === 0) {
+ // "o The cookie-path is a prefix of the request-path, and the last
+ // character of the cookie-path is %x2F ("/")."
+ if (cookiePath.substr(-1) === "/") {
+ return true;
+ }
+
+ // " o The cookie-path is a prefix of the request-path, and the first
+ // character of the request-path that is not included in the cookie- path
+ // is a %x2F ("/") character."
+ if (reqPath.substr(cookiePath.length, 1) === "/") {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+pathMatch$3.pathMatch = pathMatch$2;
+
+var utilHelper = {};
+
+function requireUtil() {
+ try {
+ // eslint-disable-next-line no-restricted-modules
+ return require("util");
+ } catch (e) {
+ return null;
+ }
+}
+
+// for v10.12.0+
+function lookupCustomInspectSymbol() {
+ return Symbol.for("nodejs.util.inspect.custom");
+}
+
+// for older node environments
+function tryReadingCustomSymbolFromUtilInspect(options) {
+ const _requireUtil = options.requireUtil || requireUtil;
+ const util = _requireUtil();
+ return util ? util.inspect.custom : null;
+}
+
+utilHelper.getUtilInspect = function getUtilInspect(fallback, options = {}) {
+ const _requireUtil = options.requireUtil || requireUtil;
+ const util = _requireUtil();
+ return function inspect(value, showHidden, depth) {
+ return util ? util.inspect(value, showHidden, depth) : fallback(value);
+ };
+};
+
+utilHelper.getCustomInspectSymbol = function getCustomInspectSymbol(options = {}) {
+ const _lookupCustomInspectSymbol =
+ options.lookupCustomInspectSymbol || lookupCustomInspectSymbol;
+
+ // get custom inspect symbol for node environments
+ return (
+ _lookupCustomInspectSymbol() ||
+ tryReadingCustomSymbolFromUtilInspect(options)
+ );
+};
+
+/*!
+ * Copyright (c) 2015, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const { fromCallback: fromCallback$1 } = universalify;
+const Store$1 = store.Store;
+const permuteDomain = requirePermuteDomain().permuteDomain;
+const pathMatch$1 = pathMatch$3.pathMatch;
+const { getCustomInspectSymbol: getCustomInspectSymbol$1, getUtilInspect } = utilHelper;
+
+class MemoryCookieStore$1 extends Store$1 {
+ constructor() {
+ super();
+ this.synchronous = true;
+ this.idx = Object.create(null);
+ const customInspectSymbol = getCustomInspectSymbol$1();
+ if (customInspectSymbol) {
+ this[customInspectSymbol] = this.inspect;
+ }
+ }
+
+ inspect() {
+ const util = { inspect: getUtilInspect(inspectFallback) };
+ return `{ idx: ${util.inspect(this.idx, false, 2)} }`;
+ }
+
+ findCookie(domain, path, key, cb) {
+ if (!this.idx[domain]) {
+ return cb(null, undefined);
+ }
+ if (!this.idx[domain][path]) {
+ return cb(null, undefined);
+ }
+ return cb(null, this.idx[domain][path][key] || null);
+ }
+ findCookies(domain, path, allowSpecialUseDomain, cb) {
+ const results = [];
+ if (typeof allowSpecialUseDomain === "function") {
+ cb = allowSpecialUseDomain;
+ allowSpecialUseDomain = true;
+ }
+ if (!domain) {
+ return cb(null, []);
+ }
+
+ let pathMatcher;
+ if (!path) {
+ // null means "all paths"
+ pathMatcher = function matchAll(domainIndex) {
+ for (const curPath in domainIndex) {
+ const pathIndex = domainIndex[curPath];
+ for (const key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ }
+ };
+ } else {
+ pathMatcher = function matchRFC(domainIndex) {
+ //NOTE: we should use path-match algorithm from S5.1.4 here
+ //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
+ Object.keys(domainIndex).forEach(cookiePath => {
+ if (pathMatch$1(path, cookiePath)) {
+ const pathIndex = domainIndex[cookiePath];
+ for (const key in pathIndex) {
+ results.push(pathIndex[key]);
+ }
+ }
+ });
+ };
+ }
+
+ const domains = permuteDomain(domain, allowSpecialUseDomain) || [domain];
+ const idx = this.idx;
+ domains.forEach(curDomain => {
+ const domainIndex = idx[curDomain];
+ if (!domainIndex) {
+ return;
+ }
+ pathMatcher(domainIndex);
+ });
+
+ cb(null, results);
+ }
+
+ putCookie(cookie, cb) {
+ if (!this.idx[cookie.domain]) {
+ this.idx[cookie.domain] = Object.create(null);
+ }
+ if (!this.idx[cookie.domain][cookie.path]) {
+ this.idx[cookie.domain][cookie.path] = Object.create(null);
+ }
+ this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
+ cb(null);
+ }
+ updateCookie(oldCookie, newCookie, cb) {
+ // updateCookie() may avoid updating cookies that are identical. For example,
+ // lastAccessed may not be important to some stores and an equality
+ // comparison could exclude that field.
+ this.putCookie(newCookie, cb);
+ }
+ removeCookie(domain, path, key, cb) {
+ if (
+ this.idx[domain] &&
+ this.idx[domain][path] &&
+ this.idx[domain][path][key]
+ ) {
+ delete this.idx[domain][path][key];
+ }
+ cb(null);
+ }
+ removeCookies(domain, path, cb) {
+ if (this.idx[domain]) {
+ if (path) {
+ delete this.idx[domain][path];
+ } else {
+ delete this.idx[domain];
+ }
+ }
+ return cb(null);
+ }
+ removeAllCookies(cb) {
+ this.idx = Object.create(null);
+ return cb(null);
+ }
+ getAllCookies(cb) {
+ const cookies = [];
+ const idx = this.idx;
+
+ const domains = Object.keys(idx);
+ domains.forEach(domain => {
+ const paths = Object.keys(idx[domain]);
+ paths.forEach(path => {
+ const keys = Object.keys(idx[domain][path]);
+ keys.forEach(key => {
+ if (key !== null) {
+ cookies.push(idx[domain][path][key]);
+ }
+ });
+ });
+ });
+
+ // Sort by creationIndex so deserializing retains the creation order.
+ // When implementing your own store, this SHOULD retain the order too
+ cookies.sort((a, b) => {
+ return (a.creationIndex || 0) - (b.creationIndex || 0);
+ });
+
+ cb(null, cookies);
+ }
+}
+
+[
+ "findCookie",
+ "findCookies",
+ "putCookie",
+ "updateCookie",
+ "removeCookie",
+ "removeCookies",
+ "removeAllCookies",
+ "getAllCookies"
+].forEach(name => {
+ MemoryCookieStore$1.prototype[name] = fromCallback$1(
+ MemoryCookieStore$1.prototype[name]
+ );
+});
+
+memstore.MemoryCookieStore = MemoryCookieStore$1;
+
+function inspectFallback(val) {
+ const domains = Object.keys(val);
+ if (domains.length === 0) {
+ return "[Object: null prototype] {}";
+ }
+ let result = "[Object: null prototype] {\n";
+ Object.keys(val).forEach((domain, i) => {
+ result += formatDomain(domain, val[domain]);
+ if (i < domains.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += "}";
+ return result;
+}
+
+function formatDomain(domainName, domainValue) {
+ const indent = " ";
+ let result = `${indent}'${domainName}': [Object: null prototype] {\n`;
+ Object.keys(domainValue).forEach((path, i, paths) => {
+ result += formatPath(path, domainValue[path]);
+ if (i < paths.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += `${indent}}`;
+ return result;
+}
+
+function formatPath(pathName, pathValue) {
+ const indent = " ";
+ let result = `${indent}'${pathName}': [Object: null prototype] {\n`;
+ Object.keys(pathValue).forEach((cookieName, i, cookieNames) => {
+ const cookie = pathValue[cookieName];
+ result += ` ${cookieName}: ${cookie.inspect()}`;
+ if (i < cookieNames.length - 1) {
+ result += ",";
+ }
+ result += "\n";
+ });
+ result += `${indent}}`;
+ return result;
+}
+
+memstore.inspectFallback = inspectFallback;
+
+var validators$1 = {};
+
+/* ************************************************************************************
+Extracted from check-types.js
+https://gitlab.com/philbooth/check-types.js
+
+MIT License
+
+Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Phil Booth
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+************************************************************************************ */
+
+/* Validation functions copied from check-types package - https://www.npmjs.com/package/check-types */
+function isFunction$2(data) {
+ return typeof data === "function";
+}
+
+function isNonEmptyString(data) {
+ return isString$1(data) && data !== "";
+}
+
+function isDate$1(data) {
+ return isInstanceStrict(data, Date) && isInteger(data.getTime());
+}
+
+function isEmptyString(data) {
+ return data === "" || (data instanceof String && data.toString() === "");
+}
+
+function isString$1(data) {
+ return typeof data === "string" || data instanceof String;
+}
+
+function isObject$1(data) {
+ return toString.call(data) === "[object Object]";
+}
+function isInstanceStrict(data, prototype) {
+ try {
+ return data instanceof prototype;
+ } catch (error) {
+ return false;
+ }
+}
+
+function isInteger(data) {
+ return typeof data === "number" && data % 1 === 0;
+}
+/* End validation functions */
+
+function validate$2(bool, cb, options) {
+ if (!isFunction$2(cb)) {
+ options = cb;
+ cb = null;
+ }
+ if (!isObject$1(options)) options = { Error: "Failed Check" };
+ if (!bool) {
+ if (cb) {
+ cb(new ParameterError(options));
+ } else {
+ throw new ParameterError(options);
+ }
+ }
+}
+
+class ParameterError extends Error {
+ constructor(...params) {
+ super(...params);
+ }
+}
+
+validators$1.ParameterError = ParameterError;
+validators$1.isFunction = isFunction$2;
+validators$1.isNonEmptyString = isNonEmptyString;
+validators$1.isDate = isDate$1;
+validators$1.isEmptyString = isEmptyString;
+validators$1.isString = isString$1;
+validators$1.isObject = isObject$1;
+validators$1.validate = validate$2;
+
+// generated by genversion
+var version$1 = '4.1.3';
+
+/*!
+ * Copyright (c) 2015-2020, Salesforce.com, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+const punycode = require$$0;
+const urlParse = urlParse$1;
+const pubsuffix = pubsuffixPsl;
+const Store = store.Store;
+const MemoryCookieStore = memstore.MemoryCookieStore;
+const pathMatch = pathMatch$3.pathMatch;
+const validators = validators$1;
+const VERSION = version$1;
+const { fromCallback } = universalify;
+const { getCustomInspectSymbol } = utilHelper;
+
+// From RFC6265 S4.1.1
+// note that it excludes \x3B ";"
+const COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
+
+const CONTROL_CHARS = /[\x00-\x1F]/;
+
+// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
+// the "relaxed" mode, see:
+// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
+const TERMINATORS = ["\n", "\r", "\0"];
+
+// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
+// Note ';' is \x3B
+const PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
+
+// date-time parsing constants (RFC6265 S5.1.1)
+
+const DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
+
+const MONTH_TO_NUM = {
+ jan: 0,
+ feb: 1,
+ mar: 2,
+ apr: 3,
+ may: 4,
+ jun: 5,
+ jul: 6,
+ aug: 7,
+ sep: 8,
+ oct: 9,
+ nov: 10,
+ dec: 11
+};
+
+const MAX_TIME = 2147483647000; // 31-bit max
+const MIN_TIME = 0; // 31-bit min
+const SAME_SITE_CONTEXT_VAL_ERR =
+ 'Invalid sameSiteContext option for getCookies(); expected one of "strict", "lax", or "none"';
+
+function checkSameSiteContext(value) {
+ validators.validate(validators.isNonEmptyString(value), value);
+ const context = String(value).toLowerCase();
+ if (context === "none" || context === "lax" || context === "strict") {
+ return context;
+ } else {
+ return null;
+ }
+}
+
+const PrefixSecurityEnum = Object.freeze({
+ SILENT: "silent",
+ STRICT: "strict",
+ DISABLED: "unsafe-disabled"
+});
+
+// Dumped from ip-regex@4.0.0, with the following changes:
+// * all capturing groups converted to non-capturing -- "(?:)"
+// * support for IPv6 Scoped Literal ("%eth1") removed
+// * lowercase hexadecimal only
+const IP_REGEX_LOWERCASE = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|(?:[a-f\d]{1,4}:){1}(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|(?::(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:)))$)/;
+const IP_V6_REGEX = `
+\\[?(?:
+(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|
+(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|
+(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|
+(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|
+(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|
+(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:))
+)(?:%[0-9a-zA-Z]{1,})?\\]?
+`
+ .replace(/\s*\/\/.*$/gm, "")
+ .replace(/\n/g, "")
+ .trim();
+const IP_V6_REGEX_OBJECT = new RegExp(`^${IP_V6_REGEX}$`);
+
+/*
+ * Parses a Natural number (i.e., non-negative integer) with either the
+ * *DIGIT ( non-digit *OCTET )
+ * or
+ * *DIGIT
+ * grammar (RFC6265 S5.1.1).
+ *
+ * The "trailingOK" boolean controls if the grammar accepts a
+ * "( non-digit *OCTET )" trailer.
+ */
+function parseDigits(token, minDigits, maxDigits, trailingOK) {
+ let count = 0;
+ while (count < token.length) {
+ const c = token.charCodeAt(count);
+ // "non-digit = %x00-2F / %x3A-FF"
+ if (c <= 0x2f || c >= 0x3a) {
+ break;
+ }
+ count++;
+ }
+
+ // constrain to a minimum and maximum number of digits.
+ if (count < minDigits || count > maxDigits) {
+ return null;
+ }
+
+ if (!trailingOK && count != token.length) {
+ return null;
+ }
+
+ return parseInt(token.substr(0, count), 10);
+}
+
+function parseTime(token) {
+ const parts = token.split(":");
+ const result = [0, 0, 0];
+
+ /* RF6256 S5.1.1:
+ * time = hms-time ( non-digit *OCTET )
+ * hms-time = time-field ":" time-field ":" time-field
+ * time-field = 1*2DIGIT
+ */
+
+ if (parts.length !== 3) {
+ return null;
+ }
+
+ for (let i = 0; i < 3; i++) {
+ // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
+ // followed by "( non-digit *OCTET )" so therefore the last time-field can
+ // have a trailer
+ const trailingOK = i == 2;
+ const num = parseDigits(parts[i], 1, 2, trailingOK);
+ if (num === null) {
+ return null;
+ }
+ result[i] = num;
+ }
+
+ return result;
+}
+
+function parseMonth(token) {
+ token = String(token)
+ .substr(0, 3)
+ .toLowerCase();
+ const num = MONTH_TO_NUM[token];
+ return num >= 0 ? num : null;
+}
+
+/*
+ * RFC6265 S5.1.1 date parser (see RFC for full grammar)
+ */
+function parseDate(str) {
+ if (!str) {
+ return;
+ }
+
+ /* RFC6265 S5.1.1:
+ * 2. Process each date-token sequentially in the order the date-tokens
+ * appear in the cookie-date
+ */
+ const tokens = str.split(DATE_DELIM);
+ if (!tokens) {
+ return;
+ }
+
+ let hour = null;
+ let minute = null;
+ let second = null;
+ let dayOfMonth = null;
+ let month = null;
+ let year = null;
+
+ for (let i = 0; i < tokens.length; i++) {
+ const token = tokens[i].trim();
+ if (!token.length) {
+ continue;
+ }
+
+ let result;
+
+ /* 2.1. If the found-time flag is not set and the token matches the time
+ * production, set the found-time flag and set the hour- value,
+ * minute-value, and second-value to the numbers denoted by the digits in
+ * the date-token, respectively. Skip the remaining sub-steps and continue
+ * to the next date-token.
+ */
+ if (second === null) {
+ result = parseTime(token);
+ if (result) {
+ hour = result[0];
+ minute = result[1];
+ second = result[2];
+ continue;
+ }
+ }
+
+ /* 2.2. If the found-day-of-month flag is not set and the date-token matches
+ * the day-of-month production, set the found-day-of- month flag and set
+ * the day-of-month-value to the number denoted by the date-token. Skip
+ * the remaining sub-steps and continue to the next date-token.
+ */
+ if (dayOfMonth === null) {
+ // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
+ result = parseDigits(token, 1, 2, true);
+ if (result !== null) {
+ dayOfMonth = result;
+ continue;
+ }
+ }
+
+ /* 2.3. If the found-month flag is not set and the date-token matches the
+ * month production, set the found-month flag and set the month-value to
+ * the month denoted by the date-token. Skip the remaining sub-steps and
+ * continue to the next date-token.
+ */
+ if (month === null) {
+ result = parseMonth(token);
+ if (result !== null) {
+ month = result;
+ continue;
+ }
+ }
+
+ /* 2.4. If the found-year flag is not set and the date-token matches the
+ * year production, set the found-year flag and set the year-value to the
+ * number denoted by the date-token. Skip the remaining sub-steps and
+ * continue to the next date-token.
+ */
+ if (year === null) {
+ // "year = 2*4DIGIT ( non-digit *OCTET )"
+ result = parseDigits(token, 2, 4, true);
+ if (result !== null) {
+ year = result;
+ /* From S5.1.1:
+ * 3. If the year-value is greater than or equal to 70 and less
+ * than or equal to 99, increment the year-value by 1900.
+ * 4. If the year-value is greater than or equal to 0 and less
+ * than or equal to 69, increment the year-value by 2000.
+ */
+ if (year >= 70 && year <= 99) {
+ year += 1900;
+ } else if (year >= 0 && year <= 69) {
+ year += 2000;
+ }
+ }
+ }
+ }
+
+ /* RFC 6265 S5.1.1
+ * "5. Abort these steps and fail to parse the cookie-date if:
+ * * at least one of the found-day-of-month, found-month, found-
+ * year, or found-time flags is not set,
+ * * the day-of-month-value is less than 1 or greater than 31,
+ * * the year-value is less than 1601,
+ * * the hour-value is greater than 23,
+ * * the minute-value is greater than 59, or
+ * * the second-value is greater than 59.
+ * (Note that leap seconds cannot be represented in this syntax.)"
+ *
+ * So, in order as above:
+ */
+ if (
+ dayOfMonth === null ||
+ month === null ||
+ year === null ||
+ second === null ||
+ dayOfMonth < 1 ||
+ dayOfMonth > 31 ||
+ year < 1601 ||
+ hour > 23 ||
+ minute > 59 ||
+ second > 59
+ ) {
+ return;
+ }
+
+ return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
+}
+
+function formatDate(date) {
+ validators.validate(validators.isDate(date), date);
+ return date.toUTCString();
+}
+
+// S5.1.2 Canonicalized Host Names
+function canonicalDomain(str) {
+ if (str == null) {
+ return null;
+ }
+ str = str.trim().replace(/^\./, ""); // S4.1.2.3 & S5.2.3: ignore leading .
+
+ if (IP_V6_REGEX_OBJECT.test(str)) {
+ str = str.replace("[", "").replace("]", "");
+ }
+
+ // convert to IDN if any non-ASCII characters
+ if (punycode && /[^\u0001-\u007f]/.test(str)) {
+ str = punycode.toASCII(str);
+ }
+
+ return str.toLowerCase();
+}
+
+// S5.1.3 Domain Matching
+function domainMatch(str, domStr, canonicalize) {
+ if (str == null || domStr == null) {
+ return null;
+ }
+ if (canonicalize !== false) {
+ str = canonicalDomain(str);
+ domStr = canonicalDomain(domStr);
+ }
+
+ /*
+ * S5.1.3:
+ * "A string domain-matches a given domain string if at least one of the
+ * following conditions hold:"
+ *
+ * " o The domain string and the string are identical. (Note that both the
+ * domain string and the string will have been canonicalized to lower case at
+ * this point)"
+ */
+ if (str == domStr) {
+ return true;
+ }
+
+ /* " o All of the following [three] conditions hold:" */
+
+ /* "* The domain string is a suffix of the string" */
+ const idx = str.lastIndexOf(domStr);
+ if (idx <= 0) {
+ return false; // it's a non-match (-1) or prefix (0)
+ }
+
+ // next, check it's a proper suffix
+ // e.g., "a.b.c".indexOf("b.c") === 2
+ // 5 === 3+2
+ if (str.length !== domStr.length + idx) {
+ return false; // it's not a suffix
+ }
+
+ /* " * The last character of the string that is not included in the
+ * domain string is a %x2E (".") character." */
+ if (str.substr(idx - 1, 1) !== ".") {
+ return false; // doesn't align on "."
+ }
+
+ /* " * The string is a host name (i.e., not an IP address)." */
+ if (IP_REGEX_LOWERCASE.test(str)) {
+ return false; // it's an IP address
+ }
+
+ return true;
+}
+
+// RFC6265 S5.1.4 Paths and Path-Match
+
+/*
+ * "The user agent MUST use an algorithm equivalent to the following algorithm
+ * to compute the default-path of a cookie:"
+ *
+ * Assumption: the path (and not query part or absolute uri) is passed in.
+ */
+function defaultPath(path) {
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
+ if (!path || path.substr(0, 1) !== "/") {
+ return "/";
+ }
+
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
+ // %x2F ("/") and skip the remaining step."
+ if (path === "/") {
+ return path;
+ }
+
+ const rightSlash = path.lastIndexOf("/");
+ if (rightSlash === 0) {
+ return "/";
+ }
+
+ // "4. Output the characters of the uri-path from the first character up to,
+ // but not including, the right-most %x2F ("/")."
+ return path.slice(0, rightSlash);
+}
+
+function trimTerminator(str) {
+ if (validators.isEmptyString(str)) return str;
+ for (let t = 0; t < TERMINATORS.length; t++) {
+ const terminatorIdx = str.indexOf(TERMINATORS[t]);
+ if (terminatorIdx !== -1) {
+ str = str.substr(0, terminatorIdx);
+ }
+ }
+
+ return str;
+}
+
+function parseCookiePair(cookiePair, looseMode) {
+ cookiePair = trimTerminator(cookiePair);
+ validators.validate(validators.isString(cookiePair), cookiePair);
+
+ let firstEq = cookiePair.indexOf("=");
+ if (looseMode) {
+ if (firstEq === 0) {
+ // '=' is immediately at start
+ cookiePair = cookiePair.substr(1);
+ firstEq = cookiePair.indexOf("="); // might still need to split on '='
+ }
+ } else {
+ // non-loose mode
+ if (firstEq <= 0) {
+ // no '=' or is at start
+ return; // needs to have non-empty "cookie-name"
+ }
+ }
+
+ let cookieName, cookieValue;
+ if (firstEq <= 0) {
+ cookieName = "";
+ cookieValue = cookiePair.trim();
+ } else {
+ cookieName = cookiePair.substr(0, firstEq).trim();
+ cookieValue = cookiePair.substr(firstEq + 1).trim();
+ }
+
+ if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
+ return;
+ }
+
+ const c = new Cookie();
+ c.key = cookieName;
+ c.value = cookieValue;
+ return c;
+}
+
+function parse$1(str, options) {
+ if (!options || typeof options !== "object") {
+ options = {};
+ }
+
+ if (validators.isEmptyString(str) || !validators.isString(str)) {
+ return null;
+ }
+
+ str = str.trim();
+
+ // We use a regex to parse the "name-value-pair" part of S5.2
+ const firstSemi = str.indexOf(";"); // S5.2 step 1
+ const cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi);
+ const c = parseCookiePair(cookiePair, !!options.loose);
+ if (!c) {
+ return;
+ }
+
+ if (firstSemi === -1) {
+ return c;
+ }
+
+ // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
+ // (including the %x3B (";") in question)." plus later on in the same section
+ // "discard the first ";" and trim".
+ const unparsed = str.slice(firstSemi + 1).trim();
+
+ // "If the unparsed-attributes string is empty, skip the rest of these
+ // steps."
+ if (unparsed.length === 0) {
+ return c;
+ }
+
+ /*
+ * S5.2 says that when looping over the items "[p]rocess the attribute-name
+ * and attribute-value according to the requirements in the following
+ * subsections" for every item. Plus, for many of the individual attributes
+ * in S5.3 it says to use the "attribute-value of the last attribute in the
+ * cookie-attribute-list". Therefore, in this implementation, we overwrite
+ * the previous value.
+ */
+ const cookie_avs = unparsed.split(";");
+ while (cookie_avs.length) {
+ const av = cookie_avs.shift().trim();
+ if (av.length === 0) {
+ // happens if ";;" appears
+ continue;
+ }
+ const av_sep = av.indexOf("=");
+ let av_key, av_value;
+
+ if (av_sep === -1) {
+ av_key = av;
+ av_value = null;
+ } else {
+ av_key = av.substr(0, av_sep);
+ av_value = av.substr(av_sep + 1);
+ }
+
+ av_key = av_key.trim().toLowerCase();
+
+ if (av_value) {
+ av_value = av_value.trim();
+ }
+
+ switch (av_key) {
+ case "expires": // S5.2.1
+ if (av_value) {
+ const exp = parseDate(av_value);
+ // "If the attribute-value failed to parse as a cookie date, ignore the
+ // cookie-av."
+ if (exp) {
+ // over and underflow not realistically a concern: V8's getTime() seems to
+ // store something larger than a 32-bit time_t (even with 32-bit node)
+ c.expires = exp;
+ }
+ }
+ break;
+
+ case "max-age": // S5.2.2
+ if (av_value) {
+ // "If the first character of the attribute-value is not a DIGIT or a "-"
+ // character ...[or]... If the remainder of attribute-value contains a
+ // non-DIGIT character, ignore the cookie-av."
+ if (/^-?[0-9]+$/.test(av_value)) {
+ const delta = parseInt(av_value, 10);
+ // "If delta-seconds is less than or equal to zero (0), let expiry-time
+ // be the earliest representable date and time."
+ c.setMaxAge(delta);
+ }
+ }
+ break;
+
+ case "domain": // S5.2.3
+ // "If the attribute-value is empty, the behavior is undefined. However,
+ // the user agent SHOULD ignore the cookie-av entirely."
+ if (av_value) {
+ // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
+ // (".") character."
+ const domain = av_value.trim().replace(/^\./, "");
+ if (domain) {
+ // "Convert the cookie-domain to lower case."
+ c.domain = domain.toLowerCase();
+ }
+ }
+ break;
+
+ case "path": // S5.2.4
+ /*
+ * "If the attribute-value is empty or if the first character of the
+ * attribute-value is not %x2F ("/"):
+ * Let cookie-path be the default-path.
+ * Otherwise:
+ * Let cookie-path be the attribute-value."
+ *
+ * We'll represent the default-path as null since it depends on the
+ * context of the parsing.
+ */
+ c.path = av_value && av_value[0] === "/" ? av_value : null;
+ break;
+
+ case "secure": // S5.2.5
+ /*
+ * "If the attribute-name case-insensitively matches the string "Secure",
+ * the user agent MUST append an attribute to the cookie-attribute-list
+ * with an attribute-name of Secure and an empty attribute-value."
+ */
+ c.secure = true;
+ break;
+
+ case "httponly": // S5.2.6 -- effectively the same as 'secure'
+ c.httpOnly = true;
+ break;
+
+ case "samesite": // RFC6265bis-02 S5.3.7
+ const enforcement = av_value ? av_value.toLowerCase() : "";
+ switch (enforcement) {
+ case "strict":
+ c.sameSite = "strict";
+ break;
+ case "lax":
+ c.sameSite = "lax";
+ break;
+ case "none":
+ c.sameSite = "none";
+ break;
+ default:
+ c.sameSite = undefined;
+ break;
+ }
+ break;
+
+ default:
+ c.extensions = c.extensions || [];
+ c.extensions.push(av);
+ break;
+ }
+ }
+
+ return c;
+}
+
+/**
+ * If the cookie-name begins with a case-sensitive match for the
+ * string "__Secure-", abort these steps and ignore the cookie
+ * entirely unless the cookie's secure-only-flag is true.
+ * @param cookie
+ * @returns boolean
+ */
+function isSecurePrefixConditionMet(cookie) {
+ validators.validate(validators.isObject(cookie), cookie);
+ return !cookie.key.startsWith("__Secure-") || cookie.secure;
+}
+
+/**
+ * If the cookie-name begins with a case-sensitive match for the
+ * string "__Host-", abort these steps and ignore the cookie
+ * entirely unless the cookie meets all the following criteria:
+ * 1. The cookie's secure-only-flag is true.
+ * 2. The cookie's host-only-flag is true.
+ * 3. The cookie-attribute-list contains an attribute with an
+ * attribute-name of "Path", and the cookie's path is "/".
+ * @param cookie
+ * @returns boolean
+ */
+function isHostPrefixConditionMet(cookie) {
+ validators.validate(validators.isObject(cookie));
+ return (
+ !cookie.key.startsWith("__Host-") ||
+ (cookie.secure &&
+ cookie.hostOnly &&
+ cookie.path != null &&
+ cookie.path === "/")
+ );
+}
+
+// avoid the V8 deoptimization monster!
+function jsonParse(str) {
+ let obj;
+ try {
+ obj = JSON.parse(str);
+ } catch (e) {
+ return e;
+ }
+ return obj;
+}
+
+function fromJSON(str) {
+ if (!str || validators.isEmptyString(str)) {
+ return null;
+ }
+
+ let obj;
+ if (typeof str === "string") {
+ obj = jsonParse(str);
+ if (obj instanceof Error) {
+ return null;
+ }
+ } else {
+ // assume it's an Object
+ obj = str;
+ }
+
+ const c = new Cookie();
+ for (let i = 0; i < Cookie.serializableProperties.length; i++) {
+ const prop = Cookie.serializableProperties[i];
+ if (obj[prop] === undefined || obj[prop] === cookieDefaults[prop]) {
+ continue; // leave as prototype default
+ }
+
+ if (prop === "expires" || prop === "creation" || prop === "lastAccessed") {
+ if (obj[prop] === null) {
+ c[prop] = null;
+ } else {
+ c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]);
+ }
+ } else {
+ c[prop] = obj[prop];
+ }
+ }
+
+ return c;
+}
+
+/* Section 5.4 part 2:
+ * "* Cookies with longer paths are listed before cookies with
+ * shorter paths.
+ *
+ * * Among cookies that have equal-length path fields, cookies with
+ * earlier creation-times are listed before cookies with later
+ * creation-times."
+ */
+
+function cookieCompare(a, b) {
+ validators.validate(validators.isObject(a), a);
+ validators.validate(validators.isObject(b), b);
+ let cmp = 0;
+
+ // descending for length: b CMP a
+ const aPathLen = a.path ? a.path.length : 0;
+ const bPathLen = b.path ? b.path.length : 0;
+ cmp = bPathLen - aPathLen;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ // ascending for time: a CMP b
+ const aTime = a.creation ? a.creation.getTime() : MAX_TIME;
+ const bTime = b.creation ? b.creation.getTime() : MAX_TIME;
+ cmp = aTime - bTime;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ // break ties for the same millisecond (precision of JavaScript's clock)
+ cmp = a.creationIndex - b.creationIndex;
+
+ return cmp;
+}
+
+// Gives the permutation of all possible pathMatch()es of a given path. The
+// array is in longest-to-shortest order. Handy for indexing.
+function permutePath(path) {
+ validators.validate(validators.isString(path));
+ if (path === "/") {
+ return ["/"];
+ }
+ const permutations = [path];
+ while (path.length > 1) {
+ const lindex = path.lastIndexOf("/");
+ if (lindex === 0) {
+ break;
+ }
+ path = path.substr(0, lindex);
+ permutations.push(path);
+ }
+ permutations.push("/");
+ return permutations;
+}
+
+function getCookieContext(url) {
+ if (url instanceof Object) {
+ return url;
+ }
+ // NOTE: decodeURI will throw on malformed URIs (see GH-32).
+ // Therefore, we will just skip decoding for such URIs.
+ try {
+ url = decodeURI(url);
+ } catch (err) {
+ // Silently swallow error
+ }
+
+ return urlParse(url);
+}
+
+const cookieDefaults = {
+ // the order in which the RFC has them:
+ key: "",
+ value: "",
+ expires: "Infinity",
+ maxAge: null,
+ domain: null,
+ path: null,
+ secure: false,
+ httpOnly: false,
+ extensions: null,
+ // set by the CookieJar:
+ hostOnly: null,
+ pathIsDefault: null,
+ creation: null,
+ lastAccessed: null,
+ sameSite: undefined
+};
+
+class Cookie {
+ constructor(options = {}) {
+ const customInspectSymbol = getCustomInspectSymbol();
+ if (customInspectSymbol) {
+ this[customInspectSymbol] = this.inspect;
+ }
+
+ Object.assign(this, cookieDefaults, options);
+ this.creation = this.creation || new Date();
+
+ // used to break creation ties in cookieCompare():
+ Object.defineProperty(this, "creationIndex", {
+ configurable: false,
+ enumerable: false, // important for assert.deepEqual checks
+ writable: true,
+ value: ++Cookie.cookiesCreated
+ });
+ }
+
+ inspect() {
+ const now = Date.now();
+ const hostOnly = this.hostOnly != null ? this.hostOnly : "?";
+ const createAge = this.creation
+ ? `${now - this.creation.getTime()}ms`
+ : "?";
+ const accessAge = this.lastAccessed
+ ? `${now - this.lastAccessed.getTime()}ms`
+ : "?";
+ return `Cookie="${this.toString()}; hostOnly=${hostOnly}; aAge=${accessAge}; cAge=${createAge}"`;
+ }
+
+ toJSON() {
+ const obj = {};
+
+ for (const prop of Cookie.serializableProperties) {
+ if (this[prop] === cookieDefaults[prop]) {
+ continue; // leave as prototype default
+ }
+
+ if (
+ prop === "expires" ||
+ prop === "creation" ||
+ prop === "lastAccessed"
+ ) {
+ if (this[prop] === null) {
+ obj[prop] = null;
+ } else {
+ obj[prop] =
+ this[prop] == "Infinity" // intentionally not ===
+ ? "Infinity"
+ : this[prop].toISOString();
+ }
+ } else if (prop === "maxAge") {
+ if (this[prop] !== null) {
+ // again, intentionally not ===
+ obj[prop] =
+ this[prop] == Infinity || this[prop] == -Infinity
+ ? this[prop].toString()
+ : this[prop];
+ }
+ } else {
+ if (this[prop] !== cookieDefaults[prop]) {
+ obj[prop] = this[prop];
+ }
+ }
+ }
+
+ return obj;
+ }
+
+ clone() {
+ return fromJSON(this.toJSON());
+ }
+
+ validate() {
+ if (!COOKIE_OCTETS.test(this.value)) {
+ return false;
+ }
+ if (
+ this.expires != Infinity &&
+ !(this.expires instanceof Date) &&
+ !parseDate(this.expires)
+ ) {
+ return false;
+ }
+ if (this.maxAge != null && this.maxAge <= 0) {
+ return false; // "Max-Age=" non-zero-digit *DIGIT
+ }
+ if (this.path != null && !PATH_VALUE.test(this.path)) {
+ return false;
+ }
+
+ const cdomain = this.cdomain();
+ if (cdomain) {
+ if (cdomain.match(/\.$/)) {
+ return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
+ }
+ const suffix = pubsuffix.getPublicSuffix(cdomain);
+ if (suffix == null) {
+ // it's a public suffix
+ return false;
+ }
+ }
+ return true;
+ }
+
+ setExpires(exp) {
+ if (exp instanceof Date) {
+ this.expires = exp;
+ } else {
+ this.expires = parseDate(exp) || "Infinity";
+ }
+ }
+
+ setMaxAge(age) {
+ if (age === Infinity || age === -Infinity) {
+ this.maxAge = age.toString(); // so JSON.stringify() works
+ } else {
+ this.maxAge = age;
+ }
+ }
+
+ cookieString() {
+ let val = this.value;
+ if (val == null) {
+ val = "";
+ }
+ if (this.key === "") {
+ return val;
+ }
+ return `${this.key}=${val}`;
+ }
+
+ // gives Set-Cookie header format
+ toString() {
+ let str = this.cookieString();
+
+ if (this.expires != Infinity) {
+ if (this.expires instanceof Date) {
+ str += `; Expires=${formatDate(this.expires)}`;
+ } else {
+ str += `; Expires=${this.expires}`;
+ }
+ }
+
+ if (this.maxAge != null && this.maxAge != Infinity) {
+ str += `; Max-Age=${this.maxAge}`;
+ }
+
+ if (this.domain && !this.hostOnly) {
+ str += `; Domain=${this.domain}`;
+ }
+ if (this.path) {
+ str += `; Path=${this.path}`;
+ }
+
+ if (this.secure) {
+ str += "; Secure";
+ }
+ if (this.httpOnly) {
+ str += "; HttpOnly";
+ }
+ if (this.sameSite && this.sameSite !== "none") {
+ const ssCanon = Cookie.sameSiteCanonical[this.sameSite.toLowerCase()];
+ str += `; SameSite=${ssCanon ? ssCanon : this.sameSite}`;
+ }
+ if (this.extensions) {
+ this.extensions.forEach(ext => {
+ str += `; ${ext}`;
+ });
+ }
+
+ return str;
+ }
+
+ // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere)
+ // S5.3 says to give the "latest representable date" for which we use Infinity
+ // For "expired" we use 0
+ TTL(now) {
+ /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
+ * attribute, the Max-Age attribute has precedence and controls the
+ * expiration date of the cookie.
+ * (Concurs with S5.3 step 3)
+ */
+ if (this.maxAge != null) {
+ return this.maxAge <= 0 ? 0 : this.maxAge * 1000;
+ }
+
+ let expires = this.expires;
+ if (expires != Infinity) {
+ if (!(expires instanceof Date)) {
+ expires = parseDate(expires) || Infinity;
+ }
+
+ if (expires == Infinity) {
+ return Infinity;
+ }
+
+ return expires.getTime() - (now || Date.now());
+ }
+
+ return Infinity;
+ }
+
+ // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere)
+ expiryTime(now) {
+ if (this.maxAge != null) {
+ const relativeTo = now || this.creation || new Date();
+ const age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000;
+ return relativeTo.getTime() + age;
+ }
+
+ if (this.expires == Infinity) {
+ return Infinity;
+ }
+ return this.expires.getTime();
+ }
+
+ // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
+ // elsewhere), except it returns a Date
+ expiryDate(now) {
+ const millisec = this.expiryTime(now);
+ if (millisec == Infinity) {
+ return new Date(MAX_TIME);
+ } else if (millisec == -Infinity) {
+ return new Date(MIN_TIME);
+ } else {
+ return new Date(millisec);
+ }
+ }
+
+ // This replaces the "persistent-flag" parts of S5.3 step 3
+ isPersistent() {
+ return this.maxAge != null || this.expires != Infinity;
+ }
+
+ // Mostly S5.1.2 and S5.2.3:
+ canonicalizedDomain() {
+ if (this.domain == null) {
+ return null;
+ }
+ return canonicalDomain(this.domain);
+ }
+
+ cdomain() {
+ return this.canonicalizedDomain();
+ }
+}
+
+Cookie.cookiesCreated = 0;
+Cookie.parse = parse$1;
+Cookie.fromJSON = fromJSON;
+Cookie.serializableProperties = Object.keys(cookieDefaults);
+Cookie.sameSiteLevel = {
+ strict: 3,
+ lax: 2,
+ none: 1
+};
+
+Cookie.sameSiteCanonical = {
+ strict: "Strict",
+ lax: "Lax"
+};
+
+function getNormalizedPrefixSecurity(prefixSecurity) {
+ if (prefixSecurity != null) {
+ const normalizedPrefixSecurity = prefixSecurity.toLowerCase();
+ /* The three supported options */
+ switch (normalizedPrefixSecurity) {
+ case PrefixSecurityEnum.STRICT:
+ case PrefixSecurityEnum.SILENT:
+ case PrefixSecurityEnum.DISABLED:
+ return normalizedPrefixSecurity;
+ }
+ }
+ /* Default is SILENT */
+ return PrefixSecurityEnum.SILENT;
+}
+
+class CookieJar {
+ constructor(store, options = { rejectPublicSuffixes: true }) {
+ if (typeof options === "boolean") {
+ options = { rejectPublicSuffixes: options };
+ }
+ validators.validate(validators.isObject(options), options);
+ this.rejectPublicSuffixes = options.rejectPublicSuffixes;
+ this.enableLooseMode = !!options.looseMode;
+ this.allowSpecialUseDomain =
+ typeof options.allowSpecialUseDomain === "boolean"
+ ? options.allowSpecialUseDomain
+ : true;
+ this.store = store || new MemoryCookieStore();
+ this.prefixSecurity = getNormalizedPrefixSecurity(options.prefixSecurity);
+ this._cloneSync = syncWrap("clone");
+ this._importCookiesSync = syncWrap("_importCookies");
+ this.getCookiesSync = syncWrap("getCookies");
+ this.getCookieStringSync = syncWrap("getCookieString");
+ this.getSetCookieStringsSync = syncWrap("getSetCookieStrings");
+ this.removeAllCookiesSync = syncWrap("removeAllCookies");
+ this.setCookieSync = syncWrap("setCookie");
+ this.serializeSync = syncWrap("serialize");
+ }
+
+ setCookie(cookie, url, options, cb) {
+ validators.validate(validators.isNonEmptyString(url), cb, options);
+ let err;
+
+ if (validators.isFunction(url)) {
+ cb = url;
+ return cb(new Error("No URL was specified"));
+ }
+
+ const context = getCookieContext(url);
+ if (validators.isFunction(options)) {
+ cb = options;
+ options = {};
+ }
+
+ validators.validate(validators.isFunction(cb), cb);
+
+ if (
+ !validators.isNonEmptyString(cookie) &&
+ !validators.isObject(cookie) &&
+ cookie instanceof String &&
+ cookie.length == 0
+ ) {
+ return cb(null);
+ }
+
+ const host = canonicalDomain(context.hostname);
+ const loose = options.loose || this.enableLooseMode;
+
+ let sameSiteContext = null;
+ if (options.sameSiteContext) {
+ sameSiteContext = checkSameSiteContext(options.sameSiteContext);
+ if (!sameSiteContext) {
+ return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
+ }
+ }
+
+ // S5.3 step 1
+ if (typeof cookie === "string" || cookie instanceof String) {
+ cookie = Cookie.parse(cookie, { loose: loose });
+ if (!cookie) {
+ err = new Error("Cookie failed to parse");
+ return cb(options.ignoreError ? null : err);
+ }
+ } else if (!(cookie instanceof Cookie)) {
+ // If you're seeing this error, and are passing in a Cookie object,
+ // it *might* be a Cookie object from another loaded version of tough-cookie.
+ err = new Error(
+ "First argument to setCookie must be a Cookie object or string"
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+
+ // S5.3 step 2
+ const now = options.now || new Date(); // will assign later to save effort in the face of errors
+
+ // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
+
+ // S5.3 step 4: NOOP; domain is null by default
+
+ // S5.3 step 5: public suffixes
+ if (this.rejectPublicSuffixes && cookie.domain) {
+ const suffix = pubsuffix.getPublicSuffix(cookie.cdomain(), {
+ allowSpecialUseDomain: this.allowSpecialUseDomain,
+ ignoreError: options.ignoreError
+ });
+ if (suffix == null && !IP_V6_REGEX_OBJECT.test(cookie.domain)) {
+ // e.g. "com"
+ err = new Error("Cookie has domain set to a public suffix");
+ return cb(options.ignoreError ? null : err);
+ }
+ }
+
+ // S5.3 step 6:
+ if (cookie.domain) {
+ if (!domainMatch(host, cookie.cdomain(), false)) {
+ err = new Error(
+ `Cookie not in this host's domain. Cookie:${cookie.cdomain()} Request:${host}`
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+
+ if (cookie.hostOnly == null) {
+ // don't reset if already set
+ cookie.hostOnly = false;
+ }
+ } else {
+ cookie.hostOnly = true;
+ cookie.domain = host;
+ }
+
+ //S5.2.4 If the attribute-value is empty or if the first character of the
+ //attribute-value is not %x2F ("/"):
+ //Let cookie-path be the default-path.
+ if (!cookie.path || cookie.path[0] !== "/") {
+ cookie.path = defaultPath(context.pathname);
+ cookie.pathIsDefault = true;
+ }
+
+ // S5.3 step 8: NOOP; secure attribute
+ // S5.3 step 9: NOOP; httpOnly attribute
+
+ // S5.3 step 10
+ if (options.http === false && cookie.httpOnly) {
+ err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+
+ // 6252bis-02 S5.4 Step 13 & 14:
+ if (
+ cookie.sameSite !== "none" &&
+ cookie.sameSite !== undefined &&
+ sameSiteContext
+ ) {
+ // "If the cookie's "same-site-flag" is not "None", and the cookie
+ // is being set from a context whose "site for cookies" is not an
+ // exact match for request-uri's host's registered domain, then
+ // abort these steps and ignore the newly created cookie entirely."
+ if (sameSiteContext === "none") {
+ err = new Error(
+ "Cookie is SameSite but this is a cross-origin request"
+ );
+ return cb(options.ignoreError ? null : err);
+ }
+ }
+
+ /* 6265bis-02 S5.4 Steps 15 & 16 */
+ const ignoreErrorForPrefixSecurity =
+ this.prefixSecurity === PrefixSecurityEnum.SILENT;
+ const prefixSecurityDisabled =
+ this.prefixSecurity === PrefixSecurityEnum.DISABLED;
+ /* If prefix checking is not disabled ...*/
+ if (!prefixSecurityDisabled) {
+ let errorFound = false;
+ let errorMsg;
+ /* Check secure prefix condition */
+ if (!isSecurePrefixConditionMet(cookie)) {
+ errorFound = true;
+ errorMsg = "Cookie has __Secure prefix but Secure attribute is not set";
+ } else if (!isHostPrefixConditionMet(cookie)) {
+ /* Check host prefix condition */
+ errorFound = true;
+ errorMsg =
+ "Cookie has __Host prefix but either Secure or HostOnly attribute is not set or Path is not '/'";
+ }
+ if (errorFound) {
+ return cb(
+ options.ignoreError || ignoreErrorForPrefixSecurity
+ ? null
+ : new Error(errorMsg)
+ );
+ }
+ }
+
+ const store = this.store;
+
+ if (!store.updateCookie) {
+ store.updateCookie = function(oldCookie, newCookie, cb) {
+ this.putCookie(newCookie, cb);
+ };
+ }
+
+ function withCookie(err, oldCookie) {
+ if (err) {
+ return cb(err);
+ }
+
+ const next = function(err) {
+ if (err) {
+ return cb(err);
+ } else {
+ cb(null, cookie);
+ }
+ };
+
+ if (oldCookie) {
+ // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
+ // domain, and path as the newly created cookie:"
+ if (options.http === false && oldCookie.httpOnly) {
+ // step 11.2
+ err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
+ return cb(options.ignoreError ? null : err);
+ }
+ cookie.creation = oldCookie.creation; // step 11.3
+ cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
+ cookie.lastAccessed = now;
+ // Step 11.4 (delete cookie) is implied by just setting the new one:
+ store.updateCookie(oldCookie, cookie, next); // step 12
+ } else {
+ cookie.creation = cookie.lastAccessed = now;
+ store.putCookie(cookie, next); // step 12
+ }
+ }
+
+ store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
+ }
+
+ // RFC6365 S5.4
+ getCookies(url, options, cb) {
+ validators.validate(validators.isNonEmptyString(url), cb, url);
+ const context = getCookieContext(url);
+ if (validators.isFunction(options)) {
+ cb = options;
+ options = {};
+ }
+ validators.validate(validators.isObject(options), cb, options);
+ validators.validate(validators.isFunction(cb), cb);
+
+ const host = canonicalDomain(context.hostname);
+ const path = context.pathname || "/";
+
+ let secure = options.secure;
+ if (
+ secure == null &&
+ context.protocol &&
+ (context.protocol == "https:" || context.protocol == "wss:")
+ ) {
+ secure = true;
+ }
+
+ let sameSiteLevel = 0;
+ if (options.sameSiteContext) {
+ const sameSiteContext = checkSameSiteContext(options.sameSiteContext);
+ sameSiteLevel = Cookie.sameSiteLevel[sameSiteContext];
+ if (!sameSiteLevel) {
+ return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
+ }
+ }
+
+ let http = options.http;
+ if (http == null) {
+ http = true;
+ }
+
+ const now = options.now || Date.now();
+ const expireCheck = options.expire !== false;
+ const allPaths = !!options.allPaths;
+ const store = this.store;
+
+ function matchingCookie(c) {
+ // "Either:
+ // The cookie's host-only-flag is true and the canonicalized
+ // request-host is identical to the cookie's domain.
+ // Or:
+ // The cookie's host-only-flag is false and the canonicalized
+ // request-host domain-matches the cookie's domain."
+ if (c.hostOnly) {
+ if (c.domain != host) {
+ return false;
+ }
+ } else {
+ if (!domainMatch(host, c.domain, false)) {
+ return false;
+ }
+ }
+
+ // "The request-uri's path path-matches the cookie's path."
+ if (!allPaths && !pathMatch(path, c.path)) {
+ return false;
+ }
+
+ // "If the cookie's secure-only-flag is true, then the request-uri's
+ // scheme must denote a "secure" protocol"
+ if (c.secure && !secure) {
+ return false;
+ }
+
+ // "If the cookie's http-only-flag is true, then exclude the cookie if the
+ // cookie-string is being generated for a "non-HTTP" API"
+ if (c.httpOnly && !http) {
+ return false;
+ }
+
+ // RFC6265bis-02 S5.3.7
+ if (sameSiteLevel) {
+ const cookieLevel = Cookie.sameSiteLevel[c.sameSite || "none"];
+ if (cookieLevel > sameSiteLevel) {
+ // only allow cookies at or below the request level
+ return false;
+ }
+ }
+
+ // deferred from S5.3
+ // non-RFC: allow retention of expired cookies by choice
+ if (expireCheck && c.expiryTime() <= now) {
+ store.removeCookie(c.domain, c.path, c.key, () => {}); // result ignored
+ return false;
+ }
+
+ return true;
+ }
+
+ store.findCookies(
+ host,
+ allPaths ? null : path,
+ this.allowSpecialUseDomain,
+ (err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ cookies = cookies.filter(matchingCookie);
+
+ // sorting of S5.4 part 2
+ if (options.sort !== false) {
+ cookies = cookies.sort(cookieCompare);
+ }
+
+ // S5.4 part 3
+ const now = new Date();
+ for (const cookie of cookies) {
+ cookie.lastAccessed = now;
+ }
+ // TODO persist lastAccessed
+
+ cb(null, cookies);
+ }
+ );
+ }
+
+ getCookieString(...args) {
+ const cb = args.pop();
+ validators.validate(validators.isFunction(cb), cb);
+ const next = function(err, cookies) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(
+ null,
+ cookies
+ .sort(cookieCompare)
+ .map(c => c.cookieString())
+ .join("; ")
+ );
+ }
+ };
+ args.push(next);
+ this.getCookies.apply(this, args);
+ }
+
+ getSetCookieStrings(...args) {
+ const cb = args.pop();
+ validators.validate(validators.isFunction(cb), cb);
+ const next = function(err, cookies) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(
+ null,
+ cookies.map(c => {
+ return c.toString();
+ })
+ );
+ }
+ };
+ args.push(next);
+ this.getCookies.apply(this, args);
+ }
+
+ serialize(cb) {
+ validators.validate(validators.isFunction(cb), cb);
+ let type = this.store.constructor.name;
+ if (validators.isObject(type)) {
+ type = null;
+ }
+
+ // update README.md "Serialization Format" if you change this, please!
+ const serialized = {
+ // The version of tough-cookie that serialized this jar. Generally a good
+ // practice since future versions can make data import decisions based on
+ // known past behavior. When/if this matters, use `semver`.
+ version: `tough-cookie@${VERSION}`,
+
+ // add the store type, to make humans happy:
+ storeType: type,
+
+ // CookieJar configuration:
+ rejectPublicSuffixes: !!this.rejectPublicSuffixes,
+ enableLooseMode: !!this.enableLooseMode,
+ allowSpecialUseDomain: !!this.allowSpecialUseDomain,
+ prefixSecurity: getNormalizedPrefixSecurity(this.prefixSecurity),
+
+ // this gets filled from getAllCookies:
+ cookies: []
+ };
+
+ if (
+ !(
+ this.store.getAllCookies &&
+ typeof this.store.getAllCookies === "function"
+ )
+ ) {
+ return cb(
+ new Error(
+ "store does not support getAllCookies and cannot be serialized"
+ )
+ );
+ }
+
+ this.store.getAllCookies((err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ serialized.cookies = cookies.map(cookie => {
+ // convert to serialized 'raw' cookies
+ cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie;
+
+ // Remove the index so new ones get assigned during deserialization
+ delete cookie.creationIndex;
+
+ return cookie;
+ });
+
+ return cb(null, serialized);
+ });
+ }
+
+ toJSON() {
+ return this.serializeSync();
+ }
+
+ // use the class method CookieJar.deserialize instead of calling this directly
+ _importCookies(serialized, cb) {
+ let cookies = serialized.cookies;
+ if (!cookies || !Array.isArray(cookies)) {
+ return cb(new Error("serialized jar has no cookies array"));
+ }
+ cookies = cookies.slice(); // do not modify the original
+
+ const putNext = err => {
+ if (err) {
+ return cb(err);
+ }
+
+ if (!cookies.length) {
+ return cb(err, this);
+ }
+
+ let cookie;
+ try {
+ cookie = fromJSON(cookies.shift());
+ } catch (e) {
+ return cb(e);
+ }
+
+ if (cookie === null) {
+ return putNext(null); // skip this cookie
+ }
+
+ this.store.putCookie(cookie, putNext);
+ };
+
+ putNext();
+ }
+
+ clone(newStore, cb) {
+ if (arguments.length === 1) {
+ cb = newStore;
+ newStore = null;
+ }
+
+ this.serialize((err, serialized) => {
+ if (err) {
+ return cb(err);
+ }
+ CookieJar.deserialize(serialized, newStore, cb);
+ });
+ }
+
+ cloneSync(newStore) {
+ if (arguments.length === 0) {
+ return this._cloneSync();
+ }
+ if (!newStore.synchronous) {
+ throw new Error(
+ "CookieJar clone destination store is not synchronous; use async API instead."
+ );
+ }
+ return this._cloneSync(newStore);
+ }
+
+ removeAllCookies(cb) {
+ validators.validate(validators.isFunction(cb), cb);
+ const store = this.store;
+
+ // Check that the store implements its own removeAllCookies(). The default
+ // implementation in Store will immediately call the callback with a "not
+ // implemented" Error.
+ if (
+ typeof store.removeAllCookies === "function" &&
+ store.removeAllCookies !== Store.prototype.removeAllCookies
+ ) {
+ return store.removeAllCookies(cb);
+ }
+
+ store.getAllCookies((err, cookies) => {
+ if (err) {
+ return cb(err);
+ }
+
+ if (cookies.length === 0) {
+ return cb(null);
+ }
+
+ let completedCount = 0;
+ const removeErrors = [];
+
+ function removeCookieCb(removeErr) {
+ if (removeErr) {
+ removeErrors.push(removeErr);
+ }
+
+ completedCount++;
+
+ if (completedCount === cookies.length) {
+ return cb(removeErrors.length ? removeErrors[0] : null);
+ }
+ }
+
+ cookies.forEach(cookie => {
+ store.removeCookie(
+ cookie.domain,
+ cookie.path,
+ cookie.key,
+ removeCookieCb
+ );
+ });
+ });
+ }
+
+ static deserialize(strOrObj, store, cb) {
+ if (arguments.length !== 3) {
+ // store is optional
+ cb = store;
+ store = null;
+ }
+ validators.validate(validators.isFunction(cb), cb);
+
+ let serialized;
+ if (typeof strOrObj === "string") {
+ serialized = jsonParse(strOrObj);
+ if (serialized instanceof Error) {
+ return cb(serialized);
+ }
+ } else {
+ serialized = strOrObj;
+ }
+
+ const jar = new CookieJar(store, {
+ rejectPublicSuffixes: serialized.rejectPublicSuffixes,
+ looseMode: serialized.enableLooseMode,
+ allowSpecialUseDomain: serialized.allowSpecialUseDomain,
+ prefixSecurity: serialized.prefixSecurity
+ });
+ jar._importCookies(serialized, err => {
+ if (err) {
+ return cb(err);
+ }
+ cb(null, jar);
+ });
+ }
+
+ static deserializeSync(strOrObj, store) {
+ const serialized =
+ typeof strOrObj === "string" ? JSON.parse(strOrObj) : strOrObj;
+ const jar = new CookieJar(store, {
+ rejectPublicSuffixes: serialized.rejectPublicSuffixes,
+ looseMode: serialized.enableLooseMode
+ });
+
+ // catch this mistake early:
+ if (!jar.store.synchronous) {
+ throw new Error(
+ "CookieJar store is not synchronous; use async API instead."
+ );
+ }
+
+ jar._importCookiesSync(serialized);
+ return jar;
+ }
+}
+CookieJar.fromJSON = CookieJar.deserializeSync;
+
+[
+ "_importCookies",
+ "clone",
+ "getCookies",
+ "getCookieString",
+ "getSetCookieStrings",
+ "removeAllCookies",
+ "serialize",
+ "setCookie"
+].forEach(name => {
+ CookieJar.prototype[name] = fromCallback(CookieJar.prototype[name]);
+});
+CookieJar.deserialize = fromCallback(CookieJar.deserialize);
+
+// Use a closure to provide a true imperative API for synchronous stores.
+function syncWrap(method) {
+ return function(...args) {
+ if (!this.store.synchronous) {
+ throw new Error(
+ "CookieJar store is not synchronous; use async API instead."
+ );
+ }
+
+ let syncErr, syncResult;
+ this[method](...args, (err, result) => {
+ syncErr = err;
+ syncResult = result;
+ });
+
+ if (syncErr) {
+ throw syncErr;
+ }
+ return syncResult;
+ };
+}
+
+cookie.version = VERSION;
+cookie.CookieJar = CookieJar;
+cookie.Cookie = Cookie;
+cookie.Store = Store;
+cookie.MemoryCookieStore = MemoryCookieStore;
+cookie.parseDate = parseDate;
+cookie.formatDate = formatDate;
+cookie.parse = parse$1;
+cookie.fromJSON = fromJSON;
+cookie.domainMatch = domainMatch;
+cookie.defaultPath = defaultPath;
+cookie.pathMatch = pathMatch;
+cookie.getPublicSuffix = pubsuffix.getPublicSuffix;
+cookie.cookieCompare = cookieCompare;
+cookie.permuteDomain = requirePermuteDomain().permuteDomain;
+cookie.permutePath = permutePath;
+cookie.canonicalDomain = canonicalDomain;
+cookie.PrefixSecurityEnum = PrefixSecurityEnum;
+cookie.ParameterError = validators.ParameterError;
+
+const { promisify: promisify$3 } = require$$0$1$1;
+const tough = cookie;
+
+var fetchCookie = function fetchCookieDecorator (fetch, jar, ignoreError = true) {
+ fetch = fetch || window.fetch;
+ jar = jar || new tough.CookieJar();
+
+ const getCookieString = promisify$3(jar.getCookieString.bind(jar));
+ const setCookie = promisify$3(jar.setCookie.bind(jar));
+
+ async function fetchCookie (url, opts) {
+ opts = opts || {};
+
+ // Prepare request
+ const cookie = await getCookieString(typeof url === 'string' ? url : url.url);
+
+ if (url.headers && typeof url.headers.append === 'function') {
+ url.headers.append('cookie', cookie);
+ } else if (opts.headers && typeof opts.headers.append === 'function') {
+ opts.headers.append('cookie', cookie);
+ } else {
+ opts.headers = Object.assign(
+ opts.headers || {},
+ cookie ? { cookie: cookie } : {}
+ );
+ }
+
+ // Actual request
+ const res = await fetch(url, opts);
+
+ // Get cookie header
+ var cookies = [];
+ if (res.headers.getAll) {
+ // node-fetch v1
+ cookies = res.headers.getAll('set-cookie');
+ // console.warn("You are using a fetch version that supports 'Headers.getAll' which is deprecated!")
+ // console.warn("In the future 'fetch-cookie-v2' may discontinue supporting that fetch implementation.")
+ // console.warn('Details: https://developer.mozilla.org/en-US/docs/Web/API/Headers/getAll')
+ } else {
+ // node-fetch v2
+ const headers = res.headers.raw();
+ if (headers['set-cookie'] !== undefined) {
+ cookies = headers['set-cookie'];
+ }
+ }
+
+ // Store all present cookies
+ await Promise.all(cookies.map((cookie) => setCookie(cookie, res.url, { ignoreError })));
+
+ return res
+ }
+
+ return fetchCookie
+};
+
+var fetchCookie$1 = /*@__PURE__*/getDefaultExportFromCjs(fetchCookie);
+
+/**
+ * @author Toru Nagashima
+ * @copyright 2015 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+/**
+ * @typedef {object} PrivateData
+ * @property {EventTarget} eventTarget The event target.
+ * @property {{type:string}} event The original event object.
+ * @property {number} eventPhase The current event phase.
+ * @property {EventTarget|null} currentTarget The current event target.
+ * @property {boolean} canceled The flag to prevent default.
+ * @property {boolean} stopped The flag to stop propagation.
+ * @property {boolean} immediateStopped The flag to stop propagation immediately.
+ * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.
+ * @property {number} timeStamp The unix time.
+ * @private
+ */
+
+/**
+ * Private data for event wrappers.
+ * @type {WeakMap}
+ * @private
+ */
+const privateData = new WeakMap();
+
+/**
+ * Cache for wrapper classes.
+ * @type {WeakMap}
+ * @private
+ */
+const wrappers = new WeakMap();
+
+/**
+ * Get private data.
+ * @param {Event} event The event object to get private data.
+ * @returns {PrivateData} The private data of the event.
+ * @private
+ */
+function pd(event) {
+ const retv = privateData.get(event);
+ console.assert(
+ retv != null,
+ "'this' is expected an Event object, but got",
+ event
+ );
+ return retv
+}
+
+/**
+ * https://dom.spec.whatwg.org/#set-the-canceled-flag
+ * @param data {PrivateData} private data.
+ */
+function setCancelFlag(data) {
+ if (data.passiveListener != null) {
+ if (
+ typeof console !== "undefined" &&
+ typeof console.error === "function"
+ ) {
+ console.error(
+ "Unable to preventDefault inside passive event listener invocation.",
+ data.passiveListener
+ );
+ }
+ return
+ }
+ if (!data.event.cancelable) {
+ return
+ }
+
+ data.canceled = true;
+ if (typeof data.event.preventDefault === "function") {
+ data.event.preventDefault();
+ }
+}
+
+/**
+ * @see https://dom.spec.whatwg.org/#interface-event
+ * @private
+ */
+/**
+ * The event wrapper.
+ * @constructor
+ * @param {EventTarget} eventTarget The event target of this dispatching.
+ * @param {Event|{type:string}} event The original event to wrap.
+ */
+function Event(eventTarget, event) {
+ privateData.set(this, {
+ eventTarget,
+ event,
+ eventPhase: 2,
+ currentTarget: eventTarget,
+ canceled: false,
+ stopped: false,
+ immediateStopped: false,
+ passiveListener: null,
+ timeStamp: event.timeStamp || Date.now(),
+ });
+
+ // https://heycam.github.io/webidl/#Unforgeable
+ Object.defineProperty(this, "isTrusted", { value: false, enumerable: true });
+
+ // Define accessors
+ const keys = Object.keys(event);
+ for (let i = 0; i < keys.length; ++i) {
+ const key = keys[i];
+ if (!(key in this)) {
+ Object.defineProperty(this, key, defineRedirectDescriptor(key));
+ }
+ }
+}
+
+// Should be enumerable, but class methods are not enumerable.
+Event.prototype = {
+ /**
+ * The type of this event.
+ * @type {string}
+ */
+ get type() {
+ return pd(this).event.type
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ */
+ get target() {
+ return pd(this).eventTarget
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ */
+ get currentTarget() {
+ return pd(this).currentTarget
+ },
+
+ /**
+ * @returns {EventTarget[]} The composed path of this event.
+ */
+ composedPath() {
+ const currentTarget = pd(this).currentTarget;
+ if (currentTarget == null) {
+ return []
+ }
+ return [currentTarget]
+ },
+
+ /**
+ * Constant of NONE.
+ * @type {number}
+ */
+ get NONE() {
+ return 0
+ },
+
+ /**
+ * Constant of CAPTURING_PHASE.
+ * @type {number}
+ */
+ get CAPTURING_PHASE() {
+ return 1
+ },
+
+ /**
+ * Constant of AT_TARGET.
+ * @type {number}
+ */
+ get AT_TARGET() {
+ return 2
+ },
+
+ /**
+ * Constant of BUBBLING_PHASE.
+ * @type {number}
+ */
+ get BUBBLING_PHASE() {
+ return 3
+ },
+
+ /**
+ * The target of this event.
+ * @type {number}
+ */
+ get eventPhase() {
+ return pd(this).eventPhase
+ },
+
+ /**
+ * Stop event bubbling.
+ * @returns {void}
+ */
+ stopPropagation() {
+ const data = pd(this);
+
+ data.stopped = true;
+ if (typeof data.event.stopPropagation === "function") {
+ data.event.stopPropagation();
+ }
+ },
+
+ /**
+ * Stop event bubbling.
+ * @returns {void}
+ */
+ stopImmediatePropagation() {
+ const data = pd(this);
+
+ data.stopped = true;
+ data.immediateStopped = true;
+ if (typeof data.event.stopImmediatePropagation === "function") {
+ data.event.stopImmediatePropagation();
+ }
+ },
+
+ /**
+ * The flag to be bubbling.
+ * @type {boolean}
+ */
+ get bubbles() {
+ return Boolean(pd(this).event.bubbles)
+ },
+
+ /**
+ * The flag to be cancelable.
+ * @type {boolean}
+ */
+ get cancelable() {
+ return Boolean(pd(this).event.cancelable)
+ },
+
+ /**
+ * Cancel this event.
+ * @returns {void}
+ */
+ preventDefault() {
+ setCancelFlag(pd(this));
+ },
+
+ /**
+ * The flag to indicate cancellation state.
+ * @type {boolean}
+ */
+ get defaultPrevented() {
+ return pd(this).canceled
+ },
+
+ /**
+ * The flag to be composed.
+ * @type {boolean}
+ */
+ get composed() {
+ return Boolean(pd(this).event.composed)
+ },
+
+ /**
+ * The unix time of this event.
+ * @type {number}
+ */
+ get timeStamp() {
+ return pd(this).timeStamp
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ * @deprecated
+ */
+ get srcElement() {
+ return pd(this).eventTarget
+ },
+
+ /**
+ * The flag to stop event bubbling.
+ * @type {boolean}
+ * @deprecated
+ */
+ get cancelBubble() {
+ return pd(this).stopped
+ },
+ set cancelBubble(value) {
+ if (!value) {
+ return
+ }
+ const data = pd(this);
+
+ data.stopped = true;
+ if (typeof data.event.cancelBubble === "boolean") {
+ data.event.cancelBubble = true;
+ }
+ },
+
+ /**
+ * The flag to indicate cancellation state.
+ * @type {boolean}
+ * @deprecated
+ */
+ get returnValue() {
+ return !pd(this).canceled
+ },
+ set returnValue(value) {
+ if (!value) {
+ setCancelFlag(pd(this));
+ }
+ },
+
+ /**
+ * Initialize this event object. But do nothing under event dispatching.
+ * @param {string} type The event type.
+ * @param {boolean} [bubbles=false] The flag to be possible to bubble up.
+ * @param {boolean} [cancelable=false] The flag to be possible to cancel.
+ * @deprecated
+ */
+ initEvent() {
+ // Do nothing.
+ },
+};
+
+// `constructor` is not enumerable.
+Object.defineProperty(Event.prototype, "constructor", {
+ value: Event,
+ configurable: true,
+ writable: true,
+});
+
+// Ensure `event instanceof window.Event` is `true`.
+if (typeof window !== "undefined" && typeof window.Event !== "undefined") {
+ Object.setPrototypeOf(Event.prototype, window.Event.prototype);
+
+ // Make association for wrappers.
+ wrappers.set(window.Event.prototype, Event);
+}
+
+/**
+ * Get the property descriptor to redirect a given property.
+ * @param {string} key Property name to define property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor to redirect the property.
+ * @private
+ */
+function defineRedirectDescriptor(key) {
+ return {
+ get() {
+ return pd(this).event[key]
+ },
+ set(value) {
+ pd(this).event[key] = value;
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Get the property descriptor to call a given method property.
+ * @param {string} key Property name to define property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor to call the method property.
+ * @private
+ */
+function defineCallDescriptor(key) {
+ return {
+ value() {
+ const event = pd(this).event;
+ return event[key].apply(event, arguments)
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Define new wrapper class.
+ * @param {Function} BaseEvent The base wrapper class.
+ * @param {Object} proto The prototype of the original event.
+ * @returns {Function} The defined wrapper class.
+ * @private
+ */
+function defineWrapper(BaseEvent, proto) {
+ const keys = Object.keys(proto);
+ if (keys.length === 0) {
+ return BaseEvent
+ }
+
+ /** CustomEvent */
+ function CustomEvent(eventTarget, event) {
+ BaseEvent.call(this, eventTarget, event);
+ }
+
+ CustomEvent.prototype = Object.create(BaseEvent.prototype, {
+ constructor: { value: CustomEvent, configurable: true, writable: true },
+ });
+
+ // Define accessors.
+ for (let i = 0; i < keys.length; ++i) {
+ const key = keys[i];
+ if (!(key in BaseEvent.prototype)) {
+ const descriptor = Object.getOwnPropertyDescriptor(proto, key);
+ const isFunc = typeof descriptor.value === "function";
+ Object.defineProperty(
+ CustomEvent.prototype,
+ key,
+ isFunc
+ ? defineCallDescriptor(key)
+ : defineRedirectDescriptor(key)
+ );
+ }
+ }
+
+ return CustomEvent
+}
+
+/**
+ * Get the wrapper class of a given prototype.
+ * @param {Object} proto The prototype of the original event to get its wrapper.
+ * @returns {Function} The wrapper class.
+ * @private
+ */
+function getWrapper(proto) {
+ if (proto == null || proto === Object.prototype) {
+ return Event
+ }
+
+ let wrapper = wrappers.get(proto);
+ if (wrapper == null) {
+ wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);
+ wrappers.set(proto, wrapper);
+ }
+ return wrapper
+}
+
+/**
+ * Wrap a given event to management a dispatching.
+ * @param {EventTarget} eventTarget The event target of this dispatching.
+ * @param {Object} event The event to wrap.
+ * @returns {Event} The wrapper instance.
+ * @private
+ */
+function wrapEvent(eventTarget, event) {
+ const Wrapper = getWrapper(Object.getPrototypeOf(event));
+ return new Wrapper(eventTarget, event)
+}
+
+/**
+ * Get the immediateStopped flag of a given event.
+ * @param {Event} event The event to get.
+ * @returns {boolean} The flag to stop propagation immediately.
+ * @private
+ */
+function isStopped(event) {
+ return pd(event).immediateStopped
+}
+
+/**
+ * Set the current event phase of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {number} eventPhase New event phase.
+ * @returns {void}
+ * @private
+ */
+function setEventPhase(event, eventPhase) {
+ pd(event).eventPhase = eventPhase;
+}
+
+/**
+ * Set the current target of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {EventTarget|null} currentTarget New current target.
+ * @returns {void}
+ * @private
+ */
+function setCurrentTarget(event, currentTarget) {
+ pd(event).currentTarget = currentTarget;
+}
+
+/**
+ * Set a passive listener of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {Function|null} passiveListener New passive listener.
+ * @returns {void}
+ * @private
+ */
+function setPassiveListener(event, passiveListener) {
+ pd(event).passiveListener = passiveListener;
+}
+
+/**
+ * @typedef {object} ListenerNode
+ * @property {Function} listener
+ * @property {1|2|3} listenerType
+ * @property {boolean} passive
+ * @property {boolean} once
+ * @property {ListenerNode|null} next
+ * @private
+ */
+
+/**
+ * @type {WeakMap>}
+ * @private
+ */
+const listenersMap = new WeakMap();
+
+// Listener types
+const CAPTURE = 1;
+const BUBBLE = 2;
+const ATTRIBUTE = 3;
+
+/**
+ * Check whether a given value is an object or not.
+ * @param {any} x The value to check.
+ * @returns {boolean} `true` if the value is an object.
+ */
+function isObject$2(x) {
+ return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax
+}
+
+/**
+ * Get listeners.
+ * @param {EventTarget} eventTarget The event target to get.
+ * @returns {Map} The listeners.
+ * @private
+ */
+function getListeners(eventTarget) {
+ const listeners = listenersMap.get(eventTarget);
+ if (listeners == null) {
+ throw new TypeError(
+ "'this' is expected an EventTarget object, but got another value."
+ )
+ }
+ return listeners
+}
+
+/**
+ * Get the property descriptor for the event attribute of a given event.
+ * @param {string} eventName The event name to get property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor.
+ * @private
+ */
+function defineEventAttributeDescriptor(eventName) {
+ return {
+ get() {
+ const listeners = getListeners(this);
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (node.listenerType === ATTRIBUTE) {
+ return node.listener
+ }
+ node = node.next;
+ }
+ return null
+ },
+
+ set(listener) {
+ if (typeof listener !== "function" && !isObject$2(listener)) {
+ listener = null; // eslint-disable-line no-param-reassign
+ }
+ const listeners = getListeners(this);
+
+ // Traverse to the tail while removing old value.
+ let prev = null;
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (node.listenerType === ATTRIBUTE) {
+ // Remove old value.
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ } else {
+ prev = node;
+ }
+
+ node = node.next;
+ }
+
+ // Add new value.
+ if (listener !== null) {
+ const newNode = {
+ listener,
+ listenerType: ATTRIBUTE,
+ passive: false,
+ once: false,
+ next: null,
+ };
+ if (prev === null) {
+ listeners.set(eventName, newNode);
+ } else {
+ prev.next = newNode;
+ }
+ }
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Define an event attribute (e.g. `eventTarget.onclick`).
+ * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.
+ * @param {string} eventName The event name to define.
+ * @returns {void}
+ */
+function defineEventAttribute(eventTargetPrototype, eventName) {
+ Object.defineProperty(
+ eventTargetPrototype,
+ `on${eventName}`,
+ defineEventAttributeDescriptor(eventName)
+ );
+}
+
+/**
+ * Define a custom EventTarget with event attributes.
+ * @param {string[]} eventNames Event names for event attributes.
+ * @returns {EventTarget} The custom EventTarget.
+ * @private
+ */
+function defineCustomEventTarget(eventNames) {
+ /** CustomEventTarget */
+ function CustomEventTarget() {
+ EventTarget.call(this);
+ }
+
+ CustomEventTarget.prototype = Object.create(EventTarget.prototype, {
+ constructor: {
+ value: CustomEventTarget,
+ configurable: true,
+ writable: true,
+ },
+ });
+
+ for (let i = 0; i < eventNames.length; ++i) {
+ defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);
+ }
+
+ return CustomEventTarget
+}
+
+/**
+ * EventTarget.
+ *
+ * - This is constructor if no arguments.
+ * - This is a function which returns a CustomEventTarget constructor if there are arguments.
+ *
+ * For example:
+ *
+ * class A extends EventTarget {}
+ * class B extends EventTarget("message") {}
+ * class C extends EventTarget("message", "error") {}
+ * class D extends EventTarget(["message", "error"]) {}
+ */
+function EventTarget() {
+ /*eslint-disable consistent-return */
+ if (this instanceof EventTarget) {
+ listenersMap.set(this, new Map());
+ return
+ }
+ if (arguments.length === 1 && Array.isArray(arguments[0])) {
+ return defineCustomEventTarget(arguments[0])
+ }
+ if (arguments.length > 0) {
+ const types = new Array(arguments.length);
+ for (let i = 0; i < arguments.length; ++i) {
+ types[i] = arguments[i];
+ }
+ return defineCustomEventTarget(types)
+ }
+ throw new TypeError("Cannot call a class as a function")
+ /*eslint-enable consistent-return */
+}
+
+// Should be enumerable, but class methods are not enumerable.
+EventTarget.prototype = {
+ /**
+ * Add a given listener to this event target.
+ * @param {string} eventName The event name to add.
+ * @param {Function} listener The listener to add.
+ * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.
+ * @returns {void}
+ */
+ addEventListener(eventName, listener, options) {
+ if (listener == null) {
+ return
+ }
+ if (typeof listener !== "function" && !isObject$2(listener)) {
+ throw new TypeError("'listener' should be a function or an object.")
+ }
+
+ const listeners = getListeners(this);
+ const optionsIsObj = isObject$2(options);
+ const capture = optionsIsObj
+ ? Boolean(options.capture)
+ : Boolean(options);
+ const listenerType = capture ? CAPTURE : BUBBLE;
+ const newNode = {
+ listener,
+ listenerType,
+ passive: optionsIsObj && Boolean(options.passive),
+ once: optionsIsObj && Boolean(options.once),
+ next: null,
+ };
+
+ // Set it as the first node if the first node is null.
+ let node = listeners.get(eventName);
+ if (node === undefined) {
+ listeners.set(eventName, newNode);
+ return
+ }
+
+ // Traverse to the tail while checking duplication..
+ let prev = null;
+ while (node != null) {
+ if (
+ node.listener === listener &&
+ node.listenerType === listenerType
+ ) {
+ // Should ignore duplication.
+ return
+ }
+ prev = node;
+ node = node.next;
+ }
+
+ // Add it.
+ prev.next = newNode;
+ },
+
+ /**
+ * Remove a given listener from this event target.
+ * @param {string} eventName The event name to remove.
+ * @param {Function} listener The listener to remove.
+ * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.
+ * @returns {void}
+ */
+ removeEventListener(eventName, listener, options) {
+ if (listener == null) {
+ return
+ }
+
+ const listeners = getListeners(this);
+ const capture = isObject$2(options)
+ ? Boolean(options.capture)
+ : Boolean(options);
+ const listenerType = capture ? CAPTURE : BUBBLE;
+
+ let prev = null;
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (
+ node.listener === listener &&
+ node.listenerType === listenerType
+ ) {
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ return
+ }
+
+ prev = node;
+ node = node.next;
+ }
+ },
+
+ /**
+ * Dispatch a given event.
+ * @param {Event|{type:string}} event The event to dispatch.
+ * @returns {boolean} `false` if canceled.
+ */
+ dispatchEvent(event) {
+ if (event == null || typeof event.type !== "string") {
+ throw new TypeError('"event.type" should be a string.')
+ }
+
+ // If listeners aren't registered, terminate.
+ const listeners = getListeners(this);
+ const eventName = event.type;
+ let node = listeners.get(eventName);
+ if (node == null) {
+ return true
+ }
+
+ // Since we cannot rewrite several properties, so wrap object.
+ const wrappedEvent = wrapEvent(this, event);
+
+ // This doesn't process capturing phase and bubbling phase.
+ // This isn't participating in a tree.
+ let prev = null;
+ while (node != null) {
+ // Remove this listener if it's once
+ if (node.once) {
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ } else {
+ prev = node;
+ }
+
+ // Call this listener
+ setPassiveListener(
+ wrappedEvent,
+ node.passive ? node.listener : null
+ );
+ if (typeof node.listener === "function") {
+ try {
+ node.listener.call(this, wrappedEvent);
+ } catch (err) {
+ if (
+ typeof console !== "undefined" &&
+ typeof console.error === "function"
+ ) {
+ console.error(err);
+ }
+ }
+ } else if (
+ node.listenerType !== ATTRIBUTE &&
+ typeof node.listener.handleEvent === "function"
+ ) {
+ node.listener.handleEvent(wrappedEvent);
+ }
+
+ // Break if `event.stopImmediatePropagation` was called.
+ if (isStopped(wrappedEvent)) {
+ break
+ }
+
+ node = node.next;
+ }
+ setPassiveListener(wrappedEvent, null);
+ setEventPhase(wrappedEvent, 0);
+ setCurrentTarget(wrappedEvent, null);
+
+ return !wrappedEvent.defaultPrevented
+ },
+};
+
+// `constructor` is not enumerable.
+Object.defineProperty(EventTarget.prototype, "constructor", {
+ value: EventTarget,
+ configurable: true,
+ writable: true,
+});
+
+// Ensure `eventTarget instanceof window.EventTarget` is `true`.
+if (
+ typeof window !== "undefined" &&
+ typeof window.EventTarget !== "undefined"
+) {
+ Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);
+}
+
+/**
+ * @author Toru Nagashima
+ * See LICENSE file in root directory for full license.
+ */
+
+/**
+ * The signal class.
+ * @see https://dom.spec.whatwg.org/#abortsignal
+ */
+class AbortSignal extends EventTarget {
+ /**
+ * AbortSignal cannot be constructed directly.
+ */
+ constructor() {
+ super();
+ throw new TypeError("AbortSignal cannot be constructed directly");
+ }
+ /**
+ * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.
+ */
+ get aborted() {
+ const aborted = abortedFlags.get(this);
+ if (typeof aborted !== "boolean") {
+ throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`);
+ }
+ return aborted;
+ }
+}
+defineEventAttribute(AbortSignal.prototype, "abort");
+/**
+ * Aborted flag for each instances.
+ */
+const abortedFlags = new WeakMap();
+// Properties should be enumerable.
+Object.defineProperties(AbortSignal.prototype, {
+ aborted: { enumerable: true },
+});
+// `toString()` should return `"[object AbortSignal]"`
+if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") {
+ Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {
+ configurable: true,
+ value: "AbortSignal",
+ });
+}
+
+// 'use strict'; is default when ESM
+
+var fetch = fetchCookie$1(fetch$1);
+
+class PouchError extends Error {
+ constructor(status, error, reason) {
+ super();
+ this.status = status;
+ this.name = error;
+ this.message = reason;
+ this.error = true;
+ }
+
+ toString() {
+ return JSON.stringify({
+ status: this.status,
+ name: this.name,
+ message: this.message,
+ reason: this.reason
+ });
+ }
+}
+
+new PouchError(401, 'unauthorized', "Name or password is incorrect.");
+var MISSING_BULK_DOCS = new PouchError(400, 'bad_request', "Missing JSON list of 'docs'");
+var MISSING_DOC = new PouchError(404, 'not_found', 'missing');
+var REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');
+var INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');
+var MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');
+var RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');
+var NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');
+var UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');
+var BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');
+new PouchError(400, 'invalid_request', 'Request was invalid');
+var QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');
+var DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');
+var BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');
+var NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');
+new PouchError(404, 'not_found', 'Database not found');
+new PouchError(500, 'indexed_db_went_bad', 'unknown');
+new PouchError(500, 'web_sql_went_bad', 'unknown');
+new PouchError(500, 'levelDB_went_went_bad', 'unknown');
+new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');
+var INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');
+new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');
+var MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\'t found');
+new PouchError(413, 'invalid_url', 'Provided URL is invalid');
+
+function createError$2(error, reason) {
+ function CustomPouchError(reason) {
+ // inherit error properties from our parent error manually
+ // so as to allow proper JSON parsing.
+ /* jshint ignore:start */
+ var names = Object.getOwnPropertyNames(error);
+ for (var i = 0, len = names.length; i < len; i++) {
+ if (typeof error[names[i]] !== 'function') {
+ this[names[i]] = error[names[i]];
+ }
+ }
+
+ if (this.stack === undefined) {
+ this.stack = (new Error()).stack;
+ }
+
+ /* jshint ignore:end */
+ if (reason !== undefined) {
+ this.reason = reason;
+ }
+ }
+ CustomPouchError.prototype = PouchError.prototype;
+ return new CustomPouchError(reason);
+}
+
+function generateErrorFromResponse(err) {
+
+ if (typeof err !== 'object') {
+ var data = err;
+ err = UNKNOWN_ERROR;
+ err.data = data;
+ }
+
+ if ('error' in err && err.error === 'conflict') {
+ err.name = 'conflict';
+ err.status = 409;
+ }
+
+ if (!('name' in err)) {
+ err.name = err.error || 'unknown';
+ }
+
+ if (!('status' in err)) {
+ err.status = 500;
+ }
+
+ if (!('message' in err)) {
+ err.message = err.message || err.reason;
+ }
+
+ if (!('stack' in err)) {
+ err.stack = (new Error()).stack;
+ }
+
+ return err;
+}
+
+function stringMd5$1(string) {
+ return crypto$1.createHash('md5').update(string, 'binary').digest('hex');
+}
+
+// Unique ID creation requires a high quality random # generator. In the browser we therefore
+// require the crypto API and do not support built-in fallback to lower quality random number
+// generators (like Math.random()).
+var getRandomValues;
+var rnds8 = new Uint8Array(16);
+function rng() {
+ // lazy load so that environments that need to polyfill have a chance to do so
+ if (!getRandomValues) {
+ // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
+ // find the complete implementation of crypto (msCrypto) on IE11.
+ getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
+
+ if (!getRandomValues) {
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
+ }
+ }
+
+ return getRandomValues(rnds8);
+}
+
+var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
+
+function validate$1(uuid) {
+ return typeof uuid === 'string' && REGEX.test(uuid);
+}
+
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+
+var byteToHex = [];
+
+for (var i = 0; i < 256; ++i) {
+ byteToHex.push((i + 0x100).toString(16).substr(1));
+}
+
+function stringify$2(arr) {
+ var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+ // Note: Be careful editing this code! It's been tuned for performance
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
+ var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
+ // of the following:
+ // - One or more input array values don't map to a hex octet (leading to
+ // "undefined" in the uuid)
+ // - Invalid input values for the RFC `version` or `variant` fields
+
+ if (!validate$1(uuid)) {
+ throw TypeError('Stringified UUID is invalid');
+ }
+
+ return uuid;
+}
+
+function v4(options, buf, offset) {
+ options = options || {};
+ var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+
+ rnds[6] = rnds[6] & 0x0f | 0x40;
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+
+ if (buf) {
+ offset = offset || 0;
+
+ for (var i = 0; i < 16; ++i) {
+ buf[offset + i] = rnds[i];
+ }
+
+ return buf;
+ }
+
+ return stringify$2(rnds);
+}
+
+// like underscore/lodash _.pick()
+function pick$1(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var prop = arr[i];
+ if (prop in obj) {
+ res[prop] = obj[prop];
+ }
+ }
+ return res;
+}
+
+// Most browsers throttle concurrent requests at 6, so it's silly
+// to shim _bulk_get by trying to launch potentially hundreds of requests
+// and then letting the majority time out. We can handle this ourselves.
+var MAX_NUM_CONCURRENT_REQUESTS = 6;
+
+function identityFunction(x) {
+ return x;
+}
+
+function formatResultForOpenRevsGet(result) {
+ return [{
+ ok: result
+ }];
+}
+
+// shim for P/CouchDB adapters that don't directly implement _bulk_get
+function bulkGet(db, opts, callback) {
+ var requests = opts.docs;
+
+ // consolidate into one request per doc if possible
+ var requestsById = new Map();
+ requests.forEach(function (request) {
+ if (requestsById.has(request.id)) {
+ requestsById.get(request.id).push(request);
+ } else {
+ requestsById.set(request.id, [request]);
+ }
+ });
+
+ var numDocs = requestsById.size;
+ var numDone = 0;
+ var perDocResults = new Array(numDocs);
+
+ function collapseResultsAndFinish() {
+ var results = [];
+ perDocResults.forEach(function (res) {
+ res.docs.forEach(function (info) {
+ results.push({
+ id: res.id,
+ docs: [info]
+ });
+ });
+ });
+ callback(null, {results: results});
+ }
+
+ function checkDone() {
+ if (++numDone === numDocs) {
+ collapseResultsAndFinish();
+ }
+ }
+
+ function gotResult(docIndex, id, docs) {
+ perDocResults[docIndex] = {id: id, docs: docs};
+ checkDone();
+ }
+
+ var allRequests = [];
+ requestsById.forEach(function (value, key) {
+ allRequests.push(key);
+ });
+
+ var i = 0;
+
+ function nextBatch() {
+
+ if (i >= allRequests.length) {
+ return;
+ }
+
+ var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);
+ var batch = allRequests.slice(i, upTo);
+ processBatch(batch, i);
+ i += batch.length;
+ }
+
+ function processBatch(batch, offset) {
+ batch.forEach(function (docId, j) {
+ var docIdx = offset + j;
+ var docRequests = requestsById.get(docId);
+
+ // just use the first request as the "template"
+ // TODO: The _bulk_get API allows for more subtle use cases than this,
+ // but for now it is unlikely that there will be a mix of different
+ // "atts_since" or "attachments" in the same request, since it's just
+ // replicate.js that is using this for the moment.
+ // Also, atts_since is aspirational, since we don't support it yet.
+ var docOpts = pick$1(docRequests[0], ['atts_since', 'attachments']);
+ docOpts.open_revs = docRequests.map(function (request) {
+ // rev is optional, open_revs disallowed
+ return request.rev;
+ });
+
+ // remove falsey / undefined revisions
+ docOpts.open_revs = docOpts.open_revs.filter(identityFunction);
+
+ var formatResult = identityFunction;
+
+ if (docOpts.open_revs.length === 0) {
+ delete docOpts.open_revs;
+
+ // when fetching only the "winning" leaf,
+ // transform the result so it looks like an open_revs
+ // request
+ formatResult = formatResultForOpenRevsGet;
+ }
+
+ // globally-supplied options
+ ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {
+ if (param in opts) {
+ docOpts[param] = opts[param];
+ }
+ });
+ db.get(docId, docOpts, function (err, res) {
+ var result;
+ /* istanbul ignore if */
+ if (err) {
+ result = [{error: err}];
+ } else {
+ result = formatResult(res);
+ }
+ gotResult(docIdx, docId, result);
+ nextBatch();
+ });
+ });
+ }
+
+ nextBatch();
+
+}
+
+// in Node of course this is false
+function hasLocalStorage() {
+ return false;
+}
+
+// Determine id an ID is valid
+// - invalid IDs begin with an underescore that does not begin '_design' or
+// '_local'
+// - any other string value is a valid id
+// Returns the specific error object for each case
+function invalidIdError(id) {
+ var err;
+ if (!id) {
+ err = createError$2(MISSING_ID);
+ } else if (typeof id !== 'string') {
+ err = createError$2(INVALID_ID);
+ } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {
+ err = createError$2(RESERVED_ID);
+ }
+ if (err) {
+ throw err;
+ }
+}
+
+function listenerCount(ee, type) {
+ return 'listenerCount' in ee ? ee.listenerCount(type) :
+ EE.listenerCount(ee, type);
+}
+
+/**
+ * Creates a new revision string that does NOT include the revision height
+ * For example '56649f1b0506c6ca9fda0746eb0cacdf'
+ */
+function rev(doc, deterministic_revs) {
+ if (!deterministic_revs) {
+ return v4().replace(/-/g, '').toLowerCase();
+ }
+
+ var mutateableDoc = Object.assign({}, doc);
+ delete mutateableDoc._rev_tree;
+ return stringMd5$1(JSON.stringify(mutateableDoc));
+}
+
+function nextTick$9(fn) {
+ process.nextTick(fn);
+}
+
+var Buffer$3 = require$$0$2.Buffer;
+
+function hasFrom() {
+ // Node versions 5.x below 5.10 seem to have a `from` method
+ // However, it doesn't clone Buffers
+ // Luckily, it reports as `false` to hasOwnProperty
+ return (Buffer$3.hasOwnProperty('from') && typeof Buffer$3.from === 'function');
+}
+
+function cloneBuffer(buf) {
+ if (!Buffer$3.isBuffer(buf)) {
+ throw new Error('Can only clone Buffer.');
+ }
+
+ if (hasFrom()) {
+ return Buffer$3.from(buf);
+ }
+
+ var copy = new Buffer$3(buf.length);
+ buf.copy(copy);
+ return copy;
+}
+
+cloneBuffer.hasFrom = hasFrom;
+
+var cloneBuffer_1 = cloneBuffer;
+
+var cloneBuffer$1 = /*@__PURE__*/getDefaultExportFromCjs(cloneBuffer_1);
+
+// most of this is borrowed from lodash.isPlainObject:
+// https://github.com/fis-components/lodash.isplainobject/
+// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js
+
+var funcToString = Function.prototype.toString;
+var objectCtorString = funcToString.call(Object);
+
+function isPlainObject(value) {
+ var proto = Object.getPrototypeOf(value);
+ /* istanbul ignore if */
+ if (proto === null) { // not sure when this happens, but I guess it can
+ return true;
+ }
+ var Ctor = proto.constructor;
+ return (typeof Ctor == 'function' &&
+ Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);
+}
+if (process.env.COVERAGE) ;
+
+// shim for Function.prototype.name,
+// for browsers that don't support it like IE
+
+/* istanbul ignore next */
+function f() {}
+
+var hasName = f.name;
+var res;
+
+// We dont run coverage in IE
+/* istanbul ignore else */
+if (hasName) {
+ res = function (fun) {
+ return fun.name;
+ };
+} else {
+ res = function (fun) {
+ var match = fun.toString().match(/^\s*function\s*(?:(\S+)\s*)?\(/);
+ if (match && match[1]) {
+ return match[1];
+ }
+ else {
+ return '';
+ }
+ };
+}
+
+var functionName = res;
+
+function isBinaryObject(object) {
+ return object instanceof Buffer;
+}
+
+function clone$1(object) {
+ var newObject;
+ var i;
+ var len;
+
+ if (!object || typeof object !== 'object') {
+ return object;
+ }
+
+ if (Array.isArray(object)) {
+ newObject = [];
+ for (i = 0, len = object.length; i < len; i++) {
+ newObject[i] = clone$1(object[i]);
+ }
+ return newObject;
+ }
+
+ // special case: to avoid inconsistencies between IndexedDB
+ // and other backends, we automatically stringify Dates
+ if (object instanceof Date && isFinite(object)) {
+ return object.toISOString();
+ }
+
+ if (isBinaryObject(object)) {
+ return cloneBuffer$1(object);
+ }
+
+ if (!isPlainObject(object)) {
+ return object; // don't clone objects like Workers
+ }
+
+ newObject = {};
+ for (i in object) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(object, i)) {
+ var value = clone$1(object[i]);
+ if (typeof value !== 'undefined') {
+ newObject[i] = value;
+ }
+ }
+ }
+ return newObject;
+}
+
+function guardedConsole(method) {
+ /* istanbul ignore else */
+ if (typeof console !== 'undefined' && typeof console[method] === 'function') {
+ var args = Array.prototype.slice.call(arguments, 1);
+ console[method].apply(console, args);
+ }
+}
+
+// Checks if a PouchDB object is "remote" or not. This is
+
+function isRemote(db) {
+ if (typeof db._remote === 'boolean') {
+ return db._remote;
+ }
+ /* istanbul ignore next */
+ if (typeof db.type === 'function') {
+ guardedConsole('warn',
+ 'db.type() is deprecated and will be removed in ' +
+ 'a future version of PouchDB');
+ return db.type() === 'http';
+ }
+ /* istanbul ignore next */
+ return false;
+}
+
+// this is essentially the "update sugar" function from daleharvey/pouchdb#1388
+// the diffFun tells us what delta to apply to the doc. it either returns
+// the doc, or false if it doesn't need to do an update after all
+function upsert(db, docId, diffFun) {
+ return db.get(docId)
+ .catch(function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {};
+ })
+ .then(function (doc) {
+ // the user might change the _rev, so save it for posterity
+ var docRev = doc._rev;
+ var newDoc = diffFun(doc);
+
+ if (!newDoc) {
+ // if the diffFun returns falsy, we short-circuit as
+ // an optimization
+ return {updated: false, rev: docRev};
+ }
+
+ // users aren't allowed to modify these values,
+ // so reset them here
+ newDoc._id = docId;
+ newDoc._rev = docRev;
+ return tryAndPut(db, newDoc, diffFun);
+ });
+}
+
+function tryAndPut(db, doc, diffFun) {
+ return db.put(doc).then(function (res) {
+ return {
+ updated: true,
+ rev: res.rev
+ };
+ }, function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 409) {
+ throw err;
+ }
+ return upsert(db, doc._id, diffFun);
+ });
+}
+
+function once(fun) {
+ var called = false;
+ return function (...args) {
+ /* istanbul ignore if */
+ if (called) {
+ // this is a smoke test and should never actually happen
+ throw new Error('once called more than once');
+ } else {
+ called = true;
+ fun.apply(this, args);
+ }
+ };
+}
+
+// We fetch all leafs of the revision tree, and sort them based on tree length
+// and whether they were deleted, undeleted documents with the longest revision
+// tree (most edits) win
+// The final sort algorithm is slightly documented in a sidebar here:
+// http://guide.couchdb.org/draft/conflicts.html
+function winningRev(metadata) {
+ var winningId;
+ var winningPos;
+ var winningDeleted;
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var tree = node.ids;
+ var branches = tree[2];
+ var pos = node.pos;
+ if (branches.length) { // non-leaf
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i]});
+ }
+ continue;
+ }
+ var deleted = !!tree[1].deleted;
+ var id = tree[0];
+ // sort by deleted, then pos, then id
+ if (!winningId || (winningDeleted !== deleted ? winningDeleted :
+ winningPos !== pos ? winningPos < pos : winningId < id)) {
+ winningId = id;
+ winningPos = pos;
+ winningDeleted = deleted;
+ }
+ }
+
+ return winningPos + '-' + winningId;
+}
+
+// Pretty much all below can be combined into a higher order function to
+// traverse revisions
+// The return value from the callback will be passed as context to all
+// children of that node
+function traverseRevTree(revs, callback) {
+ var toVisit = revs.slice();
+
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var branches = tree[2];
+ var newCtx =
+ callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});
+ }
+ }
+}
+
+// build up a list of all the paths to the leafs in this revision tree
+function rootToLeaf(revs) {
+ var paths = [];
+ var toVisit = revs.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, opts: opts});
+ if (isLeaf) {
+ paths.push({pos: (pos + 1 - history.length), ids: history});
+ }
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], history: history});
+ }
+ }
+ return paths.reverse();
+}
+
+function sortByPos$1(a, b) {
+ return a.pos - b.pos;
+}
+
+function collectLeaves(revs) {
+ var leaves = [];
+ traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {
+ if (isLeaf) {
+ leaves.push({rev: pos + "-" + id, pos: pos, opts: opts});
+ }
+ });
+ leaves.sort(sortByPos$1).reverse();
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ delete leaves[i].pos;
+ }
+ return leaves;
+}
+
+// returns revs of all conflicts that is leaves such that
+// 1. are not deleted and
+// 2. are different than winning revision
+function collectConflicts(metadata) {
+ var win = winningRev(metadata);
+ var leaves = collectLeaves(metadata.rev_tree);
+ var conflicts = [];
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ var leaf = leaves[i];
+ if (leaf.rev !== win && !leaf.opts.deleted) {
+ conflicts.push(leaf.rev);
+ }
+ }
+ return conflicts;
+}
+
+function getTrees(node) {
+ return node.ids;
+}
+
+// check if a specific revision of a doc has been deleted
+// - metadata: the metadata object from the doc store
+// - rev: (optional) the revision to check. defaults to winning revision
+function isDeleted(metadata, rev) {
+ if (!rev) {
+ rev = winningRev(metadata);
+ }
+ var id = rev.substring(rev.indexOf('-') + 1);
+ var toVisit = metadata.rev_tree.map(getTrees);
+
+ var tree;
+ while ((tree = toVisit.pop())) {
+ if (tree[0] === id) {
+ return !!tree[1].deleted;
+ }
+ toVisit = toVisit.concat(tree[2]);
+ }
+}
+
+function isLocalId(id) {
+ return typeof id === 'string' && id.startsWith('_local/');
+}
+
+// Creates
+import('./environment-4ed993c7-4ed993c7.js');
+
+// `findPathToLeaf()` returns an array of revs that goes from the specified
+// leaf rev to the root of that leaf’s branch.
+//
+// eg. for this rev tree:
+// 1-9692 ▶ 2-37aa ▶ 3-df22 ▶ 4-6e94 ▶ 5-df4a ▶ 6-6a3a ▶ 7-57e5
+// ┃ ┗━━━━━━▶ 5-8d8c ▶ 6-65e0
+// ┗━━━━━━▶ 3-43f6 ▶ 4-a3b4
+//
+// For a `targetRev` of '7-57e5', `findPathToLeaf()` would return ['7-57e5', '6-6a3a', '5-df4a']
+// The `revs` arument has the same structure as what `revs_tree` has on e.g.
+// the IndexedDB representation of the rev tree datastructure. Please refer to
+// tests/unit/test.purge.js for examples of what these look like.
+//
+// This function will throw an error if:
+// - The requested revision does not exist
+// - The requested revision is not a leaf
+function findPathToLeaf(revs, targetRev) {
+ let path = [];
+ const toVisit = revs.slice();
+
+ let node;
+ while ((node = toVisit.pop())) {
+ const { pos, ids: tree } = node;
+ const rev = `${pos}-${tree[0]}`;
+ const branches = tree[2];
+
+ // just assuming we're already working on the path up towards our desired leaf.
+ path.push(rev);
+
+ // we've reached the leaf of our dreams, so return the computed path.
+ if (rev === targetRev) {
+ //…unleeeeess
+ if (branches.length !== 0) {
+ throw new Error('The requested revision is not a leaf');
+ }
+ return path.reverse();
+ }
+
+ // this is based on the assumption that after we have a leaf (`branches.length == 0`), we handle the next
+ // branch. this is true for all branches other than the path leading to the winning rev (which is 7-57e5 in
+ // the example above. i've added a reset condition for branching nodes (`branches.length > 1`) as well.
+ if (branches.length === 0 || branches.length > 1) {
+ path = [];
+ }
+
+ // as a next step, we push the branches of this node to `toVisit` for visiting it during the next iteration
+ for (let i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({ pos: pos + 1, ids: branches[i] });
+ }
+ }
+ if (path.length === 0) {
+ throw new Error('The requested revision does not exist');
+ }
+ return path.reverse();
+}
+
+function parseDesignDocFunctionName(s) {
+ if (!s) {
+ return null;
+ }
+ var parts = s.split('/');
+ if (parts.length === 2) {
+ return parts;
+ }
+ if (parts.length === 1) {
+ return [s, s];
+ }
+ return null;
+}
+
+function normalizeDesignDocFunctionName(s) {
+ var normalized = parseDesignDocFunctionName(s);
+ return normalized ? normalized.join('/') : null;
+}
+
+// 'use strict'; is default when ESM
+
+function pad(str, padWith, upToLength) {
+ var padding = '';
+ var targetLength = upToLength - str.length;
+ /* istanbul ignore next */
+ while (padding.length < targetLength) {
+ padding += padWith;
+ }
+ return padding;
+}
+
+function padLeft(str, padWith, upToLength) {
+ var padding = pad(str, padWith, upToLength);
+ return padding + str;
+}
+
+// 'use strict'; is default when ESM
+
+var MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE
+var MAGNITUDE_DIGITS = 3; // ditto
+var SEP = ''; // set to '_' for easier debugging
+
+function collate(a, b) {
+
+ if (a === b) {
+ return 0;
+ }
+
+ a = normalizeKey(a);
+ b = normalizeKey(b);
+
+ var ai = collationIndex(a);
+ var bi = collationIndex(b);
+ if ((ai - bi) !== 0) {
+ return ai - bi;
+ }
+ switch (typeof a) {
+ case 'number':
+ return a - b;
+ case 'boolean':
+ return a < b ? -1 : 1;
+ case 'string':
+ return stringCollate(a, b);
+ }
+ return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);
+}
+
+// couch considers null/NaN/Infinity/-Infinity === undefined,
+// for the purposes of mapreduce indexes. also, dates get stringified.
+function normalizeKey(key) {
+ switch (typeof key) {
+ case 'undefined':
+ return null;
+ case 'number':
+ if (key === Infinity || key === -Infinity || isNaN(key)) {
+ return null;
+ }
+ return key;
+ case 'object':
+ var origKey = key;
+ if (Array.isArray(key)) {
+ var len = key.length;
+ key = new Array(len);
+ for (var i = 0; i < len; i++) {
+ key[i] = normalizeKey(origKey[i]);
+ }
+ /* istanbul ignore next */
+ } else if (key instanceof Date) {
+ return key.toJSON();
+ } else if (key !== null) { // generic object
+ key = {};
+ for (var k in origKey) {
+ if (Object.prototype.hasOwnProperty.call(origKey, k)) {
+ var val = origKey[k];
+ if (typeof val !== 'undefined') {
+ key[k] = normalizeKey(val);
+ }
+ }
+ }
+ }
+ }
+ return key;
+}
+
+function indexify(key) {
+ if (key !== null) {
+ switch (typeof key) {
+ case 'boolean':
+ return key ? 1 : 0;
+ case 'number':
+ return numToIndexableString(key);
+ case 'string':
+ // We've to be sure that key does not contain \u0000
+ // Do order-preserving replacements:
+ // 0 -> 1, 1
+ // 1 -> 1, 2
+ // 2 -> 2, 2
+ /* eslint-disable no-control-regex */
+ return key
+ .replace(/\u0002/g, '\u0002\u0002')
+ .replace(/\u0001/g, '\u0001\u0002')
+ .replace(/\u0000/g, '\u0001\u0001');
+ /* eslint-enable no-control-regex */
+ case 'object':
+ var isArray = Array.isArray(key);
+ var arr = isArray ? key : Object.keys(key);
+ var i = -1;
+ var len = arr.length;
+ var result = '';
+ if (isArray) {
+ while (++i < len) {
+ result += toIndexableString(arr[i]);
+ }
+ } else {
+ while (++i < len) {
+ var objKey = arr[i];
+ result += toIndexableString(objKey) +
+ toIndexableString(key[objKey]);
+ }
+ }
+ return result;
+ }
+ }
+ return '';
+}
+
+// convert the given key to a string that would be appropriate
+// for lexical sorting, e.g. within a database, where the
+// sorting is the same given by the collate() function.
+function toIndexableString(key) {
+ var zero = '\u0000';
+ key = normalizeKey(key);
+ return collationIndex(key) + SEP + indexify(key) + zero;
+}
+
+function parseNumber(str, i) {
+ var originalIdx = i;
+ var num;
+ var zero = str[i] === '1';
+ if (zero) {
+ num = 0;
+ i++;
+ } else {
+ var neg = str[i] === '0';
+ i++;
+ var numAsString = '';
+ var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);
+ var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;
+ /* istanbul ignore next */
+ if (neg) {
+ magnitude = -magnitude;
+ }
+ i += MAGNITUDE_DIGITS;
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ } else {
+ numAsString += ch;
+ }
+ i++;
+ }
+ numAsString = numAsString.split('.');
+ if (numAsString.length === 1) {
+ num = parseInt(numAsString, 10);
+ } else {
+ /* istanbul ignore next */
+ num = parseFloat(numAsString[0] + '.' + numAsString[1]);
+ }
+ /* istanbul ignore next */
+ if (neg) {
+ num = num - 10;
+ }
+ /* istanbul ignore next */
+ if (magnitude !== 0) {
+ // parseFloat is more reliable than pow due to rounding errors
+ // e.g. Number.MAX_VALUE would return Infinity if we did
+ // num * Math.pow(10, magnitude);
+ num = parseFloat(num + 'e' + magnitude);
+ }
+ }
+ return {num: num, length : i - originalIdx};
+}
+
+// move up the stack while parsing
+// this function moved outside of parseIndexableString for performance
+function pop$1(stack, metaStack) {
+ var obj = stack.pop();
+
+ if (metaStack.length) {
+ var lastMetaElement = metaStack[metaStack.length - 1];
+ if (obj === lastMetaElement.element) {
+ // popping a meta-element, e.g. an object whose value is another object
+ metaStack.pop();
+ lastMetaElement = metaStack[metaStack.length - 1];
+ }
+ var element = lastMetaElement.element;
+ var lastElementIndex = lastMetaElement.index;
+ if (Array.isArray(element)) {
+ element.push(obj);
+ } else if (lastElementIndex === stack.length - 2) { // obj with key+value
+ var key = stack.pop();
+ element[key] = obj;
+ } else {
+ stack.push(obj); // obj with key only
+ }
+ }
+}
+
+function parseIndexableString(str) {
+ var stack = [];
+ var metaStack = []; // stack for arrays and objects
+ var i = 0;
+
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var collationIndex = str[i++];
+ if (collationIndex === '\u0000') {
+ if (stack.length === 1) {
+ return stack.pop();
+ } else {
+ pop$1(stack, metaStack);
+ continue;
+ }
+ }
+ switch (collationIndex) {
+ case '1':
+ stack.push(null);
+ break;
+ case '2':
+ stack.push(str[i] === '1');
+ i++;
+ break;
+ case '3':
+ var parsedNum = parseNumber(str, i);
+ stack.push(parsedNum.num);
+ i += parsedNum.length;
+ break;
+ case '4':
+ var parsedStr = '';
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ }
+ parsedStr += ch;
+ i++;
+ }
+ // perform the reverse of the order-preserving replacement
+ // algorithm (see above)
+ /* eslint-disable no-control-regex */
+ parsedStr = parsedStr.replace(/\u0001\u0001/g, '\u0000')
+ .replace(/\u0001\u0002/g, '\u0001')
+ .replace(/\u0002\u0002/g, '\u0002');
+ /* eslint-enable no-control-regex */
+ stack.push(parsedStr);
+ break;
+ case '5':
+ var arrayElement = { element: [], index: stack.length };
+ stack.push(arrayElement.element);
+ metaStack.push(arrayElement);
+ break;
+ case '6':
+ var objElement = { element: {}, index: stack.length };
+ stack.push(objElement.element);
+ metaStack.push(objElement);
+ break;
+ /* istanbul ignore next */
+ default:
+ throw new Error(
+ 'bad collationIndex or unexpectedly reached end of input: ' +
+ collationIndex);
+ }
+ }
+}
+
+function arrayCollate(a, b) {
+ var len = Math.min(a.length, b.length);
+ for (var i = 0; i < len; i++) {
+ var sort = collate(a[i], b[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ }
+ return (a.length === b.length) ? 0 :
+ (a.length > b.length) ? 1 : -1;
+}
+function stringCollate(a, b) {
+ // See: https://github.com/daleharvey/pouchdb/issues/40
+ // This is incompatible with the CouchDB implementation, but its the
+ // best we can do for now
+ return (a === b) ? 0 : ((a > b) ? 1 : -1);
+}
+function objectCollate(a, b) {
+ var ak = Object.keys(a), bk = Object.keys(b);
+ var len = Math.min(ak.length, bk.length);
+ for (var i = 0; i < len; i++) {
+ // First sort the keys
+ var sort = collate(ak[i], bk[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ // if the keys are equal sort the values
+ sort = collate(a[ak[i]], b[bk[i]]);
+ if (sort !== 0) {
+ return sort;
+ }
+
+ }
+ return (ak.length === bk.length) ? 0 :
+ (ak.length > bk.length) ? 1 : -1;
+}
+// The collation is defined by erlangs ordered terms
+// the atoms null, true, false come first, then numbers, strings,
+// arrays, then objects
+// null/undefined/NaN/Infinity/-Infinity are all considered null
+function collationIndex(x) {
+ var id = ['boolean', 'number', 'string', 'object'];
+ var idx = id.indexOf(typeof x);
+ //false if -1 otherwise true, but fast!!!!1
+ if (~idx) {
+ if (x === null) {
+ return 1;
+ }
+ if (Array.isArray(x)) {
+ return 5;
+ }
+ return idx < 3 ? (idx + 2) : (idx + 3);
+ }
+ /* istanbul ignore next */
+ if (Array.isArray(x)) {
+ return 5;
+ }
+}
+
+// conversion:
+// x yyy zz...zz
+// x = 0 for negative, 1 for 0, 2 for positive
+// y = exponent (for negative numbers negated) moved so that it's >= 0
+// z = mantisse
+function numToIndexableString(num) {
+
+ if (num === 0) {
+ return '1';
+ }
+
+ // convert number to exponential format for easier and
+ // more succinct string sorting
+ var expFormat = num.toExponential().split(/e\+?/);
+ var magnitude = parseInt(expFormat[1], 10);
+
+ var neg = num < 0;
+
+ var result = neg ? '0' : '2';
+
+ // first sort by magnitude
+ // it's easier if all magnitudes are positive
+ var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);
+ var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);
+
+ result += SEP + magString;
+
+ // then sort by the factor
+ var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)
+ /* istanbul ignore next */
+ if (neg) { // for negative reverse ordering
+ factor = 10 - factor;
+ }
+
+ var factorStr = factor.toFixed(20);
+
+ // strip zeros from the end
+ factorStr = factorStr.replace(/\.?0+$/, '');
+
+ result += SEP + factorStr;
+
+ return result;
+}
+
+var collate$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ collate: collate,
+ normalizeKey: normalizeKey,
+ parseIndexableString: parseIndexableString,
+ toIndexableString: toIndexableString
+});
+
+// this would just be "return doc[field]", but fields
+// can be "deep" due to dot notation
+function getFieldFromDoc(doc, parsedField) {
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (!value) {
+ break;
+ }
+ }
+ return value;
+}
+
+function setFieldInDoc(doc, parsedField, value) {
+ for (var i = 0, len = parsedField.length; i < len-1; i++) {
+ var elem = parsedField[i];
+ doc = doc[elem] = doc[elem] || {};
+ }
+ doc[parsedField[len-1]] = value;
+}
+
+function compare$1(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Converts a string in dot notation to an array of its components, with backslash escaping
+function parseField(fieldName) {
+ // fields may be deep (e.g. "foo.bar.baz"), so parse
+ var fields = [];
+ var current = '';
+ for (var i = 0, len = fieldName.length; i < len; i++) {
+ var ch = fieldName[i];
+ if (i > 0 && fieldName[i - 1] === '\\' && (ch === '$' || ch === '.')) {
+ // escaped delimiter
+ current = current.substring(0, current.length - 1) + ch;
+ } else if (ch === '.') {
+ // When `.` is not escaped (above), it is a field delimiter
+ fields.push(current);
+ current = '';
+ } else { // normal character
+ current += ch;
+ }
+ }
+ fields.push(current);
+ return fields;
+}
+
+var combinationFields = ['$or', '$nor', '$not'];
+function isCombinationalField(field) {
+ return combinationFields.indexOf(field) > -1;
+}
+
+function getKey(obj) {
+ return Object.keys(obj)[0];
+}
+
+function getValue(obj) {
+ return obj[getKey(obj)];
+}
+
+
+// flatten an array of selectors joined by an $and operator
+function mergeAndedSelectors(selectors) {
+
+ // sort to ensure that e.g. if the user specified
+ // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into
+ // just {$gt: 'b'}
+ var res = {};
+ var first = {$or: true, $nor: true};
+
+ selectors.forEach(function (selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ if (typeof matcher !== 'object') {
+ matcher = {$eq: matcher};
+ }
+
+ if (isCombinationalField(field)) {
+ // or, nor
+ if (matcher instanceof Array) {
+ if (first[field]) {
+ first[field] = false;
+ res[field] = matcher;
+ return;
+ }
+
+ var entries = [];
+ res[field].forEach(function (existing) {
+ Object.keys(matcher).forEach(function (key) {
+ var m = matcher[key];
+ var longest = Math.max(Object.keys(existing).length, Object.keys(m).length);
+ var merged = mergeAndedSelectors([existing, m]);
+ if (Object.keys(merged).length <= longest) {
+ // we have a situation like: (a :{$eq :1} || ...) && (a {$eq: 2} || ...)
+ // merging would produce a $eq 2 when actually we shouldn't ever match against these merged conditions
+ // merged should always contain more values to be valid
+ return;
+ }
+ entries.push(merged);
+ });
+ });
+ res[field] = entries;
+ } else {
+ // not
+ res[field] = mergeAndedSelectors([matcher]);
+ }
+ } else {
+ var fieldMatchers = res[field] = res[field] || {};
+ Object.keys(matcher).forEach(function (operator) {
+ var value = matcher[operator];
+
+ if (operator === '$gt' || operator === '$gte') {
+ return mergeGtGte(operator, value, fieldMatchers);
+ } else if (operator === '$lt' || operator === '$lte') {
+ return mergeLtLte(operator, value, fieldMatchers);
+ } else if (operator === '$ne') {
+ return mergeNe(value, fieldMatchers);
+ } else if (operator === '$eq') {
+ return mergeEq(value, fieldMatchers);
+ } else if (operator === "$regex") {
+ return mergeRegex(value, fieldMatchers);
+ }
+ fieldMatchers[operator] = value;
+ });
+ }
+ });
+ });
+
+ return res;
+}
+
+
+
+// collapse logically equivalent gt/gte values
+function mergeGtGte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$gte !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gte) { // more specificity
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value >= fieldMatchers.$gte) { // more specificity
+ delete fieldMatchers.$gte;
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$gt !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gt) { // more specificity
+ delete fieldMatchers.$gt;
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value > fieldMatchers.$gt) { // more specificity
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// collapse logically equivalent lt/lte values
+function mergeLtLte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$lte !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lte) { // more specificity
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value <= fieldMatchers.$lte) { // more specificity
+ delete fieldMatchers.$lte;
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$lt !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lt) { // more specificity
+ delete fieldMatchers.$lt;
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value < fieldMatchers.$lt) { // more specificity
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// combine $ne values into one array
+function mergeNe(value, fieldMatchers) {
+ if ('$ne' in fieldMatchers) {
+ // there are many things this could "not" be
+ fieldMatchers.$ne.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$ne = [value];
+ }
+}
+
+// add $eq into the mix
+function mergeEq(value, fieldMatchers) {
+ // these all have less specificity than the $eq
+ // TODO: check for user errors here
+ delete fieldMatchers.$gt;
+ delete fieldMatchers.$gte;
+ delete fieldMatchers.$lt;
+ delete fieldMatchers.$lte;
+ delete fieldMatchers.$ne;
+ fieldMatchers.$eq = value;
+}
+
+// combine $regex values into one array
+function mergeRegex(value, fieldMatchers) {
+ if ('$regex' in fieldMatchers) {
+ // a value could match multiple regexes
+ fieldMatchers.$regex.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$regex = [value];
+ }
+}
+
+//#7458: execute function mergeAndedSelectors on nested $and
+function mergeAndedSelectorsNested(obj) {
+ for (var prop in obj) {
+ if (Array.isArray(obj)) {
+ for (var i in obj) {
+ if (obj[i]['$and']) {
+ obj[i] = mergeAndedSelectors(obj[i]['$and']);
+ }
+ }
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ mergeAndedSelectorsNested(value); // <- recursive call
+ }
+ }
+ return obj;
+}
+
+//#7458: determine id $and is present in selector (at any level)
+function isAndInSelector(obj, isAnd) {
+ for (var prop in obj) {
+ if (prop === '$and') {
+ isAnd = true;
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ isAnd = isAndInSelector(value, isAnd); // <- recursive call
+ }
+ }
+ return isAnd;
+}
+
+//
+// normalize the selector
+//
+function massageSelector(input) {
+ var result = clone$1(input);
+
+ //#7458: if $and is present in selector (at any level) merge nested $and
+ if (isAndInSelector(result, false)) {
+ result = mergeAndedSelectorsNested(result);
+ if ('$and' in result) {
+ result = mergeAndedSelectors(result['$and']);
+ }
+ }
+
+ ['$or', '$nor'].forEach(function (orOrNor) {
+ if (orOrNor in result) {
+ // message each individual selector
+ // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}
+ result[orOrNor].forEach(function (subSelector) {
+ var fields = Object.keys(subSelector);
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = subSelector[field];
+ if (typeof matcher !== 'object' || matcher === null) {
+ subSelector[field] = {$eq: matcher};
+ }
+ }
+ });
+ }
+ });
+
+ if ('$not' in result) {
+ //This feels a little like forcing, but it will work for now,
+ //I would like to come back to this and make the merging of selectors a little more generic
+ result['$not'] = mergeAndedSelectors([result['$not']]);
+ }
+
+ var fields = Object.keys(result);
+
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = result[field];
+
+ if (typeof matcher !== 'object' || matcher === null) {
+ matcher = {$eq: matcher};
+ }
+ result[field] = matcher;
+ }
+
+ normalizeArrayOperators(result);
+
+ return result;
+}
+
+//
+// The $ne and $regex values must be placed in an array because these operators can be used multiple times on the same field.
+// When $and is used, mergeAndedSelectors takes care of putting some of them into arrays, otherwise it's done here.
+//
+function normalizeArrayOperators(selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+
+ if (Array.isArray(matcher)) {
+ matcher.forEach(function (matcherItem) {
+ if (matcherItem && typeof matcherItem === 'object') {
+ normalizeArrayOperators(matcherItem);
+ }
+ });
+ } else if (field === '$ne') {
+ selector.$ne = [matcher];
+ } else if (field === '$regex') {
+ selector.$regex = [matcher];
+ } else if (matcher && typeof matcher === 'object') {
+ normalizeArrayOperators(matcher);
+ }
+ });
+}
+
+// create a comparator based on the sort object
+function createFieldSorter(sort) {
+
+ function getFieldValuesAsArray(doc) {
+ return sort.map(function (sorting) {
+ var fieldName = getKey(sorting);
+ var parsedField = parseField(fieldName);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ return docFieldValue;
+ });
+ }
+
+ return function (aRow, bRow) {
+ var aFieldValues = getFieldValuesAsArray(aRow.doc);
+ var bFieldValues = getFieldValuesAsArray(bRow.doc);
+ var collation = collate(aFieldValues, bFieldValues);
+ if (collation !== 0) {
+ return collation;
+ }
+ // this is what mango seems to do
+ return compare$1(aRow.doc._id, bRow.doc._id);
+ };
+}
+
+function filterInMemoryFields(rows, requestDef, inMemoryFields) {
+ rows = rows.filter(function (row) {
+ return rowFilter(row.doc, requestDef.selector, inMemoryFields);
+ });
+
+ if (requestDef.sort) {
+ // in-memory sort
+ var fieldSorter = createFieldSorter(requestDef.sort);
+ rows = rows.sort(fieldSorter);
+ if (typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc') {
+ rows = rows.reverse();
+ }
+ }
+
+ if ('limit' in requestDef || 'skip' in requestDef) {
+ // have to do the limit in-memory
+ var skip = requestDef.skip || 0;
+ var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;
+ rows = rows.slice(skip, limit);
+ }
+ return rows;
+}
+
+function rowFilter(doc, selector, inMemoryFields) {
+ return inMemoryFields.every(function (field) {
+ var matcher = selector[field];
+ var parsedField = parseField(field);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ if (isCombinationalField(field)) {
+ return matchCominationalSelector(field, matcher, doc);
+ }
+
+ return matchSelector(matcher, doc, parsedField, docFieldValue);
+ });
+}
+
+function matchSelector(matcher, doc, parsedField, docFieldValue) {
+ if (!matcher) {
+ // no filtering necessary; this field is just needed for sorting
+ return true;
+ }
+
+ // is matcher an object, if so continue recursion
+ if (typeof matcher === 'object') {
+ return Object.keys(matcher).every(function (maybeUserOperator) {
+ var userValue = matcher[ maybeUserOperator ];
+ // explicit operator
+ if (maybeUserOperator.indexOf("$") === 0) {
+ return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue);
+ } else {
+ var subParsedField = parseField(maybeUserOperator);
+
+ if (
+ docFieldValue === undefined &&
+ typeof userValue !== "object" &&
+ subParsedField.length > 0
+ ) {
+ // the field does not exist, return or getFieldFromDoc will throw
+ return false;
+ }
+
+ var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField);
+
+ if (typeof userValue === "object") {
+ // field value is an object that might contain more operators
+ return matchSelector(userValue, doc, parsedField, subDocFieldValue);
+ }
+
+ // implicit operator
+ return match("$eq", doc, userValue, subParsedField, subDocFieldValue);
+ }
+ });
+ }
+
+ // no more depth, No need to recurse further
+ return matcher === docFieldValue;
+}
+
+function matchCominationalSelector(field, matcher, doc) {
+
+ if (field === '$or') {
+ return matcher.some(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+ }
+
+ if (field === '$not') {
+ return !rowFilter(doc, matcher, Object.keys(matcher));
+ }
+
+ //`$nor`
+ return !matcher.find(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+
+}
+
+function match(userOperator, doc, userValue, parsedField, docFieldValue) {
+ if (!matchers[userOperator]) {
+ /* istanbul ignore next */
+ throw new Error('unknown operator "' + userOperator +
+ '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +
+ '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');
+ }
+ return matchers[userOperator](doc, userValue, parsedField, docFieldValue);
+}
+
+function fieldExists(docFieldValue) {
+ return typeof docFieldValue !== 'undefined' && docFieldValue !== null;
+}
+
+function fieldIsNotUndefined(docFieldValue) {
+ return typeof docFieldValue !== 'undefined';
+}
+
+function modField(docFieldValue, userValue) {
+ if (typeof docFieldValue !== "number" ||
+ parseInt(docFieldValue, 10) !== docFieldValue) {
+ return false;
+ }
+
+ var divisor = userValue[0];
+ var mod = userValue[1];
+
+ return docFieldValue % divisor === mod;
+}
+
+function arrayContainsValue(docFieldValue, userValue) {
+ return userValue.some(function (val) {
+ if (docFieldValue instanceof Array) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ }
+
+ return collate(val, docFieldValue) === 0;
+ });
+}
+
+function arrayContainsAllValues(docFieldValue, userValue) {
+ return userValue.every(function (val) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ });
+}
+
+function arraySize(docFieldValue, userValue) {
+ return docFieldValue.length === userValue;
+}
+
+function regexMatch(docFieldValue, userValue) {
+ var re = new RegExp(userValue);
+
+ return re.test(docFieldValue);
+}
+
+function typeMatch(docFieldValue, userValue) {
+
+ switch (userValue) {
+ case 'null':
+ return docFieldValue === null;
+ case 'boolean':
+ return typeof (docFieldValue) === 'boolean';
+ case 'number':
+ return typeof (docFieldValue) === 'number';
+ case 'string':
+ return typeof (docFieldValue) === 'string';
+ case 'array':
+ return docFieldValue instanceof Array;
+ case 'object':
+ return ({}).toString.call(docFieldValue) === '[object Object]';
+ }
+}
+
+var matchers = {
+
+ '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.some(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.some(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$allMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ /* istanbul ignore next */
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.every(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.every(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$eq': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;
+ },
+
+ '$gte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;
+ },
+
+ '$gt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;
+ },
+
+ '$lte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;
+ },
+
+ '$lt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;
+ },
+
+ '$exists': function (doc, userValue, parsedField, docFieldValue) {
+ //a field that is null is still considered to exist
+ if (userValue) {
+ return fieldIsNotUndefined(docFieldValue);
+ }
+
+ return !fieldIsNotUndefined(docFieldValue);
+ },
+
+ '$mod': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && modField(docFieldValue, userValue);
+ },
+
+ '$ne': function (doc, userValue, parsedField, docFieldValue) {
+ return userValue.every(function (neValue) {
+ return collate(docFieldValue, neValue) !== 0;
+ });
+ },
+ '$in': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$nin': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$size': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ Array.isArray(docFieldValue) &&
+ arraySize(docFieldValue, userValue);
+ },
+
+ '$all': function (doc, userValue, parsedField, docFieldValue) {
+ return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);
+ },
+
+ '$regex': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ typeof docFieldValue == "string" &&
+ userValue.every(function (regexValue) {
+ return regexMatch(docFieldValue, regexValue);
+ });
+ },
+
+ '$type': function (doc, userValue, parsedField, docFieldValue) {
+ return typeMatch(docFieldValue, userValue);
+ }
+};
+
+// return true if the given doc matches the supplied selector
+function matchesSelector(doc, selector) {
+ /* istanbul ignore if */
+ if (typeof selector !== 'object') {
+ // match the CouchDB error message
+ throw new Error('Selector error: expected a JSON object');
+ }
+
+ selector = massageSelector(selector);
+ var row = {
+ 'doc': doc
+ };
+
+ var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));
+ return rowsMatched && rowsMatched.length === 1;
+}
+
+function evalFilter(input) {
+ var code = '(function() {\n"use strict";\nreturn ' + input + '\n})()';
+
+ return vm.runInNewContext(code);
+}
+
+function evalView(input) {
+ var code = [
+ '"use strict";',
+ 'var emitted = false;',
+ 'var emit = function (a, b) {',
+ ' emitted = true;',
+ '};',
+ 'var view = ' + input + ';',
+ 'view(doc);',
+ 'if (emitted) {',
+ ' return true;',
+ '}'
+ ].join('\n');
+
+ return vm.runInNewContext('(function(doc) {\n' + code + '\n})');
+}
+
+function validate(opts, callback) {
+ if (opts.selector) {
+ if (opts.filter && opts.filter !== '_selector') {
+ var filterName = typeof opts.filter === 'string' ?
+ opts.filter : 'function';
+ return callback(new Error('selector invalid for filter "' + filterName + '"'));
+ }
+ }
+ callback();
+}
+
+function normalize(opts) {
+ if (opts.view && !opts.filter) {
+ opts.filter = '_view';
+ }
+
+ if (opts.selector && !opts.filter) {
+ opts.filter = '_selector';
+ }
+
+ if (opts.filter && typeof opts.filter === 'string') {
+ if (opts.filter === '_view') {
+ opts.view = normalizeDesignDocFunctionName(opts.view);
+ } else {
+ opts.filter = normalizeDesignDocFunctionName(opts.filter);
+ }
+ }
+}
+
+function shouldFilter(changesHandler, opts) {
+ return opts.filter && typeof opts.filter === 'string' &&
+ !opts.doc_ids && !isRemote(changesHandler.db);
+}
+
+function filter(changesHandler, opts) {
+ var callback = opts.complete;
+ if (opts.filter === '_view') {
+ if (!opts.view || typeof opts.view !== 'string') {
+ var err = createError$2(BAD_REQUEST,
+ '`view` filter parameter not found or invalid.');
+ return callback(err);
+ }
+ // fetch a view from a design doc, make it behave like a filter
+ var viewName = parseDesignDocFunctionName(opts.view);
+ changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&
+ ddoc.views[viewName[1]].map;
+ if (!mapFun) {
+ return callback(createError$2(MISSING_DOC,
+ (ddoc.views ? 'missing json key: ' + viewName[1] :
+ 'missing json key: views')));
+ }
+ opts.filter = evalView(mapFun);
+ changesHandler.doChanges(opts);
+ });
+ } else if (opts.selector) {
+ opts.filter = function (doc) {
+ return matchesSelector(doc, opts.selector);
+ };
+ changesHandler.doChanges(opts);
+ } else {
+ // fetch a filter from a design doc
+ var filterName = parseDesignDocFunctionName(opts.filter);
+ changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];
+ if (!filterFun) {
+ return callback(createError$2(MISSING_DOC,
+ ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]
+ : 'missing json key: filters')));
+ }
+ opts.filter = evalFilter(filterFun);
+ changesHandler.doChanges(opts);
+ });
+ }
+}
+
+function applyChangesFilterPlugin(PouchDB) {
+ PouchDB._changesFilterPlugin = {
+ validate: validate,
+ normalize: normalize,
+ shouldFilter: shouldFilter,
+ filter: filter
+ };
+}
+
+class ActiveTasks {
+ constructor() {
+ this.tasks = {};
+ }
+
+ list() {
+ return Object.values(this.tasks);
+ }
+
+ add(task) {
+ const id = v4();
+ this.tasks[id] = {
+ id,
+ name: task.name,
+ total_items: task.total_items,
+ created_at: new Date().toJSON()
+ };
+ return id;
+ }
+
+ get(id) {
+ return this.tasks[id];
+ }
+
+ /* eslint-disable no-unused-vars */
+ remove(id, reason) {
+ delete this.tasks[id];
+ return this.tasks;
+ }
+
+ update(id, updatedTask) {
+ const task = this.tasks[id];
+ if (typeof task !== 'undefined') {
+ const mergedTask = {
+ id: task.id,
+ name: task.name,
+ created_at: task.created_at,
+ total_items: updatedTask.total_items || task.total_items,
+ completed_items: updatedTask.completed_items || task.completed_items,
+ updated_at: new Date().toJSON()
+ };
+ this.tasks[id] = mergedTask;
+ }
+ return this.tasks;
+ }
+}
+
+function inherits$8(A, B) {
+ A.prototype = Object.create(B.prototype, {
+ constructor: { value: A }
+ });
+}
+
+function createClass(parent, init) {
+ let klass = function (...args) {
+ if (!(this instanceof klass)) {
+ return new klass(...args);
+ }
+ init.apply(this, args);
+ };
+ inherits$8(klass, parent);
+ return klass;
+}
+
+function tryCatchInChangeListener(self, change, pending, lastSeq) {
+ // isolate try/catches to avoid V8 deoptimizations
+ try {
+ self.emit('change', change, pending, lastSeq);
+ } catch (e) {
+ guardedConsole('error', 'Error in .on("change", function):', e);
+ }
+}
+
+function processChange(doc, metadata, opts) {
+ var changeList = [{rev: doc._rev}];
+ if (opts.style === 'all_docs') {
+ changeList = collectLeaves(metadata.rev_tree)
+ .map(function (x) { return {rev: x.rev}; });
+ }
+ var change = {
+ id: metadata.id,
+ changes: changeList,
+ doc: doc
+ };
+
+ if (isDeleted(metadata, doc._rev)) {
+ change.deleted = true;
+ }
+ if (opts.conflicts) {
+ change.doc._conflicts = collectConflicts(metadata);
+ if (!change.doc._conflicts.length) {
+ delete change.doc._conflicts;
+ }
+ }
+ return change;
+}
+
+class Changes$1 extends EE {
+ constructor(db, opts, callback) {
+ super();
+ this.db = db;
+ opts = opts ? clone$1(opts) : {};
+ var complete = opts.complete = once((err, resp) => {
+ if (err) {
+ if (listenerCount(this, 'error') > 0) {
+ this.emit('error', err);
+ }
+ } else {
+ this.emit('complete', resp);
+ }
+ this.removeAllListeners();
+ db.removeListener('destroyed', onDestroy);
+ });
+ if (callback) {
+ this.on('complete', function (resp) {
+ callback(null, resp);
+ });
+ this.on('error', callback);
+ }
+ const onDestroy = () => {
+ this.cancel();
+ };
+ db.once('destroyed', onDestroy);
+
+ opts.onChange = (change, pending, lastSeq) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ return;
+ }
+ tryCatchInChangeListener(this, change, pending, lastSeq);
+ };
+
+ var promise = new Promise(function (fulfill, reject) {
+ opts.complete = function (err, res) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(res);
+ }
+ };
+ });
+ this.once('cancel', function () {
+ db.removeListener('destroyed', onDestroy);
+ opts.complete(null, {status: 'cancelled'});
+ });
+ this.then = promise.then.bind(promise);
+ this['catch'] = promise['catch'].bind(promise);
+ this.then(function (result) {
+ complete(null, result);
+ }, complete);
+
+
+
+ if (!db.taskqueue.isReady) {
+ db.taskqueue.addTask((failed) => {
+ if (failed) {
+ opts.complete(failed);
+ } else if (this.isCancelled) {
+ this.emit('cancel');
+ } else {
+ this.validateChanges(opts);
+ }
+ });
+ } else {
+ this.validateChanges(opts);
+ }
+ }
+
+ cancel() {
+ this.isCancelled = true;
+ if (this.db.taskqueue.isReady) {
+ this.emit('cancel');
+ }
+ }
+
+ validateChanges(opts) {
+ var callback = opts.complete;
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.validate(opts, (err) => {
+ if (err) {
+ return callback(err);
+ }
+ this.doChanges(opts);
+ });
+ } else {
+ this.doChanges(opts);
+ }
+ }
+
+ doChanges(opts) {
+ var callback = opts.complete;
+
+ opts = clone$1(opts);
+ if ('live' in opts && !('continuous' in opts)) {
+ opts.continuous = opts.live;
+ }
+ opts.processChange = processChange;
+
+ if (opts.since === 'latest') {
+ opts.since = 'now';
+ }
+ if (!opts.since) {
+ opts.since = 0;
+ }
+ if (opts.since === 'now') {
+ this.db.info().then((info) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ callback(null, {status: 'cancelled'});
+ return;
+ }
+ opts.since = info.update_seq;
+ this.doChanges(opts);
+ }, callback);
+ return;
+ }
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.normalize(opts);
+ if (PouchDB$1._changesFilterPlugin.shouldFilter(this, opts)) {
+ return PouchDB$1._changesFilterPlugin.filter(this, opts);
+ }
+ } else {
+ ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {
+ if (key in opts) {
+ guardedConsole('warn',
+ 'The "' + key + '" option was passed in to changes/replicate, ' +
+ 'but pouchdb-changes-filter plugin is not installed, so it ' +
+ 'was ignored. Please install the plugin to enable filtering.'
+ );
+ }
+ });
+ }
+
+ if (!('descending' in opts)) {
+ opts.descending = false;
+ }
+
+ // 0 and 1 should return 1 document
+ opts.limit = opts.limit === 0 ? 1 : opts.limit;
+ opts.complete = callback;
+ var newPromise = this.db._changes(opts);
+ /* istanbul ignore else */
+ if (newPromise && typeof newPromise.cancel === 'function') {
+ const cancel = this.cancel;
+ this.cancel = (...args) => {
+ newPromise.cancel();
+ cancel.apply(this, args);
+ };
+ }
+ }
+}
+
+/**
+ * About Adapter FUN it is not funny
+ * we can use new Proxy to get all calls or we simple use
+ * the new message bassed api which can log for obvious reaasons
+ */
+
+
+/*
+ * A generic pouch adapter
+ */
+
+function compare(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Wrapper for functions that call the bulkdocs api with a single doc,
+// if the first result is an error, return an error
+function yankError(callback, docId) {
+ return (err, results) => {
+ if (err || (results[0] && results[0].error)) {
+ err = err || results[0];
+ err.docId = docId;
+ callback(err);
+ } else {
+ callback(null, results.length ? results[0] : results);
+ }
+ };
+}
+
+// clean docs given to us by the user
+function cleanDocs(docs) {
+ for (let i = 0; i < docs.length; i++) {
+ const doc = docs[i];
+ if (doc._deleted) {
+ delete doc._attachments; // ignore atts for deleted docs
+ } else if (doc._attachments) {
+ // filter out extraneous keys from _attachments
+ const atts = Object.keys(doc._attachments);
+ for (let j = 0; j < atts.length; j++) {
+ const att = atts[j];
+ doc._attachments[att] = pick$1(doc._attachments[att],
+ ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);
+ }
+ }
+ }
+}
+
+// compare two docs, first by _id then by _rev
+function compareByIdThenRev({_id, _revisions}, b) {
+ const idCompare = compare(_id, b._id);
+ if (idCompare !== 0) {
+ return idCompare;
+ }
+ const aStart = _revisions ? _revisions.start : 0;
+ const bStart = b._revisions ? b._revisions.start : 0;
+ return compare(aStart, bStart);
+}
+
+// for every node in a revision tree computes its distance from the closest
+// leaf
+function computeHeight(revs) {
+ const height = {};
+ const edges = [];
+ traverseRevTree(revs, (isLeaf, pos, id, prnt) => {
+ const rev = `${pos}-${id}`;
+ if (isLeaf) {
+ height[rev] = 0;
+ }
+ if (prnt !== undefined) {
+ edges.push({from: prnt, to: rev});
+ }
+ return rev;
+ });
+
+ edges.reverse();
+ edges.forEach(({from, to}) => {
+ if (height[from] === undefined) {
+ height[from] = 1 + height[to];
+ } else {
+ height[from] = Math.min(height[from], 1 + height[to]);
+ }
+ });
+ return height;
+}
+
+function allDocsKeysParse(opts) {
+ const keys = ('limit' in opts) ?
+ opts.keys.slice(opts.skip, opts.limit + opts.skip) :
+ (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;
+ opts.keys = keys;
+ opts.skip = 0;
+ delete opts.limit;
+ if (opts.descending) {
+ keys.reverse();
+ opts.descending = false;
+ }
+}
+
+// all compaction is done in a queue, to avoid attaching
+// too many listeners at once
+function doNextCompaction(self) {
+ const task = self._compactionQueue[0];
+ const opts = task.opts;
+ const callback = task.callback;
+ self.get('_local/compaction').catch(() => false).then(doc => {
+ if (doc && doc.last_seq) {
+ opts.last_seq = doc.last_seq;
+ }
+ self._compact(opts, (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ callback(null, res);
+ }
+ nextTick$9(() => {
+ self._compactionQueue.shift();
+ if (self._compactionQueue.length) {
+ doNextCompaction(self);
+ }
+ });
+ });
+ });
+}
+
+function appendPurgeSeq(db, docId, rev) {
+ return db.get('_local/purges').then(doc => {
+ const purgeSeq = doc.purgeSeq + 1;
+ doc.purges.push({
+ docId,
+ rev,
+ purgeSeq,
+ });
+ if (doc.purges.length > self.purged_infos_limit) {
+ doc.purges.splice(0, doc.purges.length - self.purged_infos_limit);
+ }
+ doc.purgeSeq = purgeSeq;
+ return doc;
+ }).catch(err => {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {
+ _id: '_local/purges',
+ purges: [{
+ docId,
+ rev,
+ purgeSeq: 0,
+ }],
+ purgeSeq: 0,
+ };
+ }).then(doc => db.put(doc));
+}
+
+function attachmentNameError(name) {
+ if (name.charAt(0) === '_') {
+ return `${name} is not a valid attachment name, attachment names cannot start with '_'`;
+ }
+ return false;
+}
+
+class AbstractPouchDB extends BroadcastChannel {
+ _setup() {
+ this.post = (doc, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return callback(createError$2(NOT_AN_OBJECT));
+ }
+ this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));
+ };
+
+ this.put = (doc, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return cb(createError$2(NOT_AN_OBJECT));
+ }
+ invalidIdError(doc._id);
+ if (isLocalId(doc._id) && typeof this._putLocal === 'function') {
+ if (doc._deleted) {
+ return this._removeLocal(doc, cb);
+ } else {
+ return this._putLocal(doc, cb);
+ }
+ }
+
+ const putDoc = (next) => {
+ if (typeof this._put === 'function' && opts.new_edits !== false) {
+ this._put(doc, opts, next);
+ } else {
+ this.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));
+ }
+ };
+
+ if (opts.force && doc._rev) {
+ transformForceOptionToNewEditsOption();
+ putDoc(err => {
+ const result = err ? null : {ok: true, id: doc._id, rev: doc._rev};
+ cb(err, result);
+ });
+ } else {
+ putDoc(cb);
+ }
+
+ function transformForceOptionToNewEditsOption() {
+ const parts = doc._rev.split('-');
+ const oldRevId = parts[1];
+ const oldRevNum = parseInt(parts[0], 10);
+
+ const newRevNum = oldRevNum + 1;
+ const newRevId = rev();
+
+ doc._revisions = {
+ start: newRevNum,
+ ids: [newRevId, oldRevId]
+ };
+ doc._rev = `${newRevNum}-${newRevId}`;
+ opts.new_edits = false;
+ }
+ };
+
+ this.putAttachment = (docId, attachmentId, rev, blob, type) => {
+ const api = this;
+ if (typeof type === 'function') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267
+ /* istanbul ignore if */
+ if (typeof type === 'undefined') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ if (!type) {
+ guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');
+ }
+
+ function createAttachment(doc) {
+ let prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;
+ doc._attachments = doc._attachments || {};
+ doc._attachments[attachmentId] = {
+ content_type: type,
+ data: blob,
+ revpos: ++prevrevpos
+ };
+ return api.put(doc);
+ }
+
+ return api.get(docId).then(doc => {
+ if (doc._rev !== rev) {
+ throw createError$2(REV_CONFLICT);
+ }
+
+ return createAttachment(doc);
+ }, err => {
+ // create new doc
+ /* istanbul ignore else */
+ if (err.reason === MISSING_DOC.message) {
+ return createAttachment({_id: docId});
+ } else {
+ throw err;
+ }
+ });
+ };
+
+ this.removeAttachment = (docId, attachmentId, rev, callback) => {
+ this.get(docId, (err, obj) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ return;
+ }
+ if (obj._rev !== rev) {
+ callback(createError$2(REV_CONFLICT));
+ return;
+ }
+ /* istanbul ignore if */
+ if (!obj._attachments) {
+ return callback();
+ }
+ delete obj._attachments[attachmentId];
+ if (Object.keys(obj._attachments).length === 0) {
+ delete obj._attachments;
+ }
+ this.put(obj, callback);
+ });
+ };
+
+ this.remove = (docOrId, optsOrRev, opts, callback) => {
+ let doc;
+ if (typeof optsOrRev === 'string') {
+ // id, rev, opts, callback style
+ doc = {
+ _id: docOrId,
+ _rev: optsOrRev
+ };
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ } else {
+ // doc, opts, callback style
+ doc = docOrId;
+ if (typeof optsOrRev === 'function') {
+ callback = optsOrRev;
+ opts = {};
+ } else {
+ callback = opts;
+ opts = optsOrRev;
+ }
+ }
+ opts = opts || {};
+ opts.was_delete = true;
+ const newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};
+ newDoc._deleted = true;
+ if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {
+ return this._removeLocal(doc, callback);
+ }
+ this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));
+ };
+
+ this.revsDiff = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ const ids = Object.keys(req);
+
+ if (!ids.length) {
+ return callback(null, {});
+ }
+
+ let count = 0;
+ const missing = new Map();
+
+ function addToMissing(id, revId) {
+ if (!missing.has(id)) {
+ missing.set(id, {missing: []});
+ }
+ missing.get(id).missing.push(revId);
+ }
+
+ function processDoc(id, rev_tree) {
+ // Is this fast enough? Maybe we should switch to a set simulated by a map
+ const missingForId = req[id].slice(0);
+ traverseRevTree(rev_tree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ const idx = missingForId.indexOf(rev);
+ if (idx === -1) {
+ return;
+ }
+
+ missingForId.splice(idx, 1);
+ /* istanbul ignore if */
+ if (status !== 'available') {
+ addToMissing(id, rev);
+ }
+ });
+
+ // Traversing the tree is synchronous, so now `missingForId` contains
+ // revisions that were not found in the tree
+ missingForId.forEach(rev => {
+ addToMissing(id, rev);
+ });
+ }
+
+ ids.map(function (id) {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ if (err && err.status === 404 && err.message === 'missing') {
+ missing.set(id, {missing: req[id]});
+ } else if (err) {
+ /* istanbul ignore next */
+ return callback(err);
+ } else {
+ processDoc(id, rev_tree);
+ }
+
+ if (++count === ids.length) {
+ // convert LazyMap to object
+ const missingObj = {};
+ missing.forEach((value, key) => {
+ missingObj[key] = value;
+ });
+ return callback(null, missingObj);
+ }
+ });
+ }, this);
+ };
+
+ // _bulk_get API for faster replication, as described in
+ // https://github.com/apache/couchdb-chttpd/pull/33
+ // At the "abstract" level, it will just run multiple get()s in
+ // parallel, because this isn't much of a performance cost
+ // for local databases (except the cost of multiple transactions, which is
+ // small). The http adapter overrides this in order
+ // to do a more efficient single HTTP request.
+ this.bulkGet = (opts, callback) => {
+ bulkGet(this, opts, callback);
+ };
+
+ // compact one document and fire callback
+ // by compacting we mean removing all revisions which
+ // are further from the leaf in revision tree than max_height
+ this.compactDocument = (docId, maxHeight, callback) => {
+ this._getRevisionTree(docId, (err, revTree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ const height = computeHeight(revTree);
+ const candidates = [];
+ const revs = [];
+ Object.keys(height).forEach(rev => {
+ if (height[rev] > maxHeight) {
+ candidates.push(rev);
+ }
+ });
+
+ traverseRevTree(revTree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ if (status === 'available' && candidates.includes(rev)) {
+ revs.push(rev);
+ }
+ });
+ this._doCompaction(docId, revs, callback);
+ });
+ };
+
+ // compact the whole database using single document
+ // compaction
+ this.compact = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ this._compactionQueue = this._compactionQueue || [];
+ this._compactionQueue.push({opts, callback});
+ if (this._compactionQueue.length === 1) {
+ doNextCompaction(this);
+ }
+ };
+
+ /* Begin api wrappers. Specific functionality to storage belongs in the _[method] */
+ this.get = (id, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof id !== 'string') {
+ return cb(createError$2(INVALID_ID));
+ }
+ if (isLocalId(id) && typeof this._getLocal === 'function') {
+ return this._getLocal(id, cb);
+ }
+ let leaves = [];
+
+ const finishOpenRevs = () => {
+ const result = [];
+ let count = leaves.length;
+ /* istanbul ignore if */
+ if (!count) {
+ return cb(null, result);
+ }
+
+ // order with open_revs is unspecified
+ leaves.forEach((leaf) => {
+ this.get(id, {
+ rev: leaf,
+ revs: opts.revs,
+ latest: opts.latest,
+ attachments: opts.attachments,
+ binary: opts.binary
+ }, (err, doc) => {
+ if (!err) {
+ // using latest=true can produce duplicates
+ let existing;
+ for (let i = 0, l = result.length; i < l; i++) {
+ if (result[i].ok && result[i].ok._rev === doc._rev) {
+ existing = true;
+ break;
+ }
+ }
+ if (!existing) {
+ result.push({ok: doc});
+ }
+ } else {
+ result.push({missing: leaf});
+ }
+ count--;
+ if (!count) {
+ cb(null, result);
+ }
+ });
+ });
+ };
+
+ if (opts.open_revs) {
+ if (opts.open_revs === "all") {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return cb(err);
+ }
+ leaves = collectLeaves(rev_tree).map(leaf => leaf.rev);
+ finishOpenRevs();
+ });
+ } else {
+ if (Array.isArray(opts.open_revs)) {
+ leaves = opts.open_revs;
+ for (let i = 0; i < leaves.length; i++) {
+ const l = leaves[i];
+ // looks like it's the only thing couchdb checks
+ if (!(typeof (l) === "string" && /^\d+-/.test(l))) {
+ return cb(createError$2(INVALID_REV));
+ }
+ }
+ finishOpenRevs();
+ } else {
+ return cb(createError$2(UNKNOWN_ERROR, 'function_clause'));
+ }
+ }
+ return; // open_revs does not like other options
+ }
+
+ return this._get(id, opts, (err, result) => {
+ if (err) {
+ err.docId = id;
+ return cb(err);
+ }
+
+ const doc = result.doc;
+ const metadata = result.metadata;
+ const ctx = result.ctx;
+
+ if (opts.conflicts) {
+ const conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc._conflicts = conflicts;
+ }
+ }
+
+ if (isDeleted(metadata, doc._rev)) {
+ doc._deleted = true;
+ }
+
+ if (opts.revs || opts.revs_info) {
+ const splittedRev = doc._rev.split('-');
+ const revNo = parseInt(splittedRev[0], 10);
+ const revHash = splittedRev[1];
+
+ const paths = rootToLeaf(metadata.rev_tree);
+ let path = null;
+
+ for (let i = 0; i < paths.length; i++) {
+ const currentPath = paths[i];
+ const hashIndex = currentPath.ids.map(x => x.id)
+ .indexOf(revHash);
+ const hashFoundAtRevPos = hashIndex === (revNo - 1);
+
+ if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {
+ path = currentPath;
+ }
+ }
+
+ /* istanbul ignore if */
+ if (!path) {
+ err = new Error('invalid rev tree');
+ err.docId = id;
+ return cb(err);
+ }
+
+ const indexOfRev = path.ids.map(x => x.id)
+ .indexOf(doc._rev.split('-')[1]) + 1;
+ const howMany = path.ids.length - indexOfRev;
+ path.ids.splice(indexOfRev, howMany);
+ path.ids.reverse();
+
+ if (opts.revs) {
+ doc._revisions = {
+ start: (path.pos + path.ids.length) - 1,
+ ids: path.ids.map(rev => rev.id)
+ };
+ }
+ if (opts.revs_info) {
+ let pos = path.pos + path.ids.length;
+ doc._revs_info = path.ids.map(rev => {
+ pos--;
+ return {
+ rev: `${pos}-${rev.id}`,
+ status: rev.opts.status
+ };
+ });
+ }
+ }
+
+ if (opts.attachments && doc._attachments) {
+ const attachments = doc._attachments;
+ let count = Object.keys(attachments).length;
+ if (count === 0) {
+ return cb(null, doc);
+ }
+ Object.keys(attachments).forEach((key) => {
+ this._getAttachment(doc._id, key, attachments[key], {
+ // Previously the revision handling was done in adapter.js
+ // getAttachment, however since idb-next doesnt we need to
+ // pass the rev through
+ rev: doc._rev,
+ binary: opts.binary,
+ ctx
+ }, (err, data) => {
+ const att = doc._attachments[key];
+ att.data = data;
+ delete att.stub;
+ delete att.length;
+ if (!--count) {
+ cb(null, doc);
+ }
+ });
+ });
+ } else {
+ if (doc._attachments) {
+ for (const key in doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc._attachments, key)) {
+ doc._attachments[key].stub = true;
+ }
+ }
+ }
+ cb(null, doc);
+ }
+ });
+ };
+
+ // TODO: I dont like this, it forces an extra read for every
+ // attachment read and enforces a confusing api between
+ // adapter.js and the adapter implementation
+ this.getAttachment = (docId, attachmentId, opts, callback) => {
+ if (opts instanceof Function) {
+ callback = opts;
+ opts = {};
+ }
+ this._get(docId, opts, (err, {doc, ctx}) => {
+ if (err) {
+ return callback(err);
+ }
+ if (doc._attachments && doc._attachments[attachmentId]) {
+ opts.ctx = ctx;
+ opts.binary = true;
+ this._getAttachment(docId, attachmentId,
+ doc._attachments[attachmentId], opts, callback);
+ } else {
+ return callback(createError$2(MISSING_DOC));
+ }
+ });
+ };
+
+ this.allDocs = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;
+ if (opts.start_key) {
+ opts.startkey = opts.start_key;
+ }
+ if (opts.end_key) {
+ opts.endkey = opts.end_key;
+ }
+ if ('keys' in opts) {
+ if (!Array.isArray(opts.keys)) {
+ return callback(new TypeError('options.keys must be an array'));
+ }
+ const incompatibleOpt =
+ ['startkey', 'endkey', 'key'].filter(incompatibleOpt => incompatibleOpt in opts)[0];
+ if (incompatibleOpt) {
+ callback(createError$2(QUERY_PARSE_ERROR,
+ `Query parameter \`${incompatibleOpt}\` is not compatible with multi-get`
+ ));
+ return;
+ }
+ if (!isRemote(this)) {
+ allDocsKeysParse(opts);
+ if (opts.keys.length === 0) {
+ return this._allDocs({limit: 0}, callback);
+ }
+ }
+ }
+
+ return this._allDocs(opts, callback);
+ };
+
+ this.close = (callback) => {
+ this._closed = true;
+ this.postMessage('closed');
+ return this._close(callback);
+ };
+
+ this.info = function (callback) {
+ this._info((err, info) => {
+ if (err) {
+ return callback(err);
+ }
+ // assume we know better than the adapter, unless it informs us
+ info.db_name = info.db_name || this.name;
+ info.auto_compaction = !!(this.auto_compaction && !isRemote(this));
+ info.adapter = this.adapter;
+ callback(null, info);
+ });
+ };
+
+ this.id = (callback) => {
+ return this._id(callback);
+ };
+
+ this.bulkDocs = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ if (Array.isArray(req)) {
+ req = {
+ docs: req
+ };
+ }
+
+ if (!req || !req.docs || !Array.isArray(req.docs)) {
+ return callback(createError$2(MISSING_BULK_DOCS));
+ }
+
+ for (let i = 0; i < req.docs.length; ++i) {
+ if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {
+ return callback(createError$2(NOT_AN_OBJECT));
+ }
+ }
+
+ let attachmentError;
+ req.docs.forEach(({_attachments, _id}) => {
+ if (_attachments) {
+ Object.keys(_attachments).forEach(name => {
+ attachmentError = attachmentError || attachmentNameError(name);
+ if (!_attachments[name].content_type) {
+ guardedConsole('warn', 'Attachment', name, 'on document', _id, 'is missing content_type');
+ }
+ });
+ }
+ });
+
+ if (attachmentError) {
+ return callback(createError$2(BAD_REQUEST, attachmentError));
+ }
+
+ if (!('new_edits' in opts)) {
+ if ('new_edits' in req) {
+ opts.new_edits = req.new_edits;
+ } else {
+ opts.new_edits = true;
+ }
+ }
+
+ const adapter = this;
+ if (!opts.new_edits && !isRemote(adapter)) {
+ // ensure revisions of the same doc are sorted, so that
+ // the local adapter processes them correctly (#2935)
+ req.docs.sort(compareByIdThenRev);
+ }
+
+ cleanDocs(req.docs);
+
+ // in the case of conflicts, we want to return the _ids to the user
+ // however, the underlying adapter may destroy the docs array, so
+ // create a copy here
+ const ids = req.docs.map(({_id}) => _id);
+
+ this._bulkDocs(req, opts, (err, res) => {
+ if (err) {
+ return callback(err);
+ }
+ if (!opts.new_edits) {
+ // this is what couch does when new_edits is false
+ res = res.filter(({error}) => error);
+ }
+ // add ids for error/conflict responses (not required for CouchDB)
+ if (!isRemote(adapter)) {
+ for (let i = 0, l = res.length; i < l; i++) {
+ res[i].id = res[i].id || ids[i];
+ }
+ }
+
+ callback(null, res);
+ });
+ };
+
+ this.registerDependentDatabase = (dependentDb, callback) => {
+ const dbOptions = clone$1(this.__opts);
+ if (this.__opts.view_adapter) {
+ dbOptions.adapter = this.__opts.view_adapter;
+ }
+
+ const depDB = new this.constructor(dependentDb, dbOptions);
+
+ function diffFun(doc) {
+ doc.dependentDbs = doc.dependentDbs || {};
+ if (doc.dependentDbs[dependentDb]) {
+ return false; // no update required
+ }
+ doc.dependentDbs[dependentDb] = true;
+ return doc;
+ }
+ upsert(this, '_local/_pouch_dependentDbs', diffFun).then(() => {
+ callback(null, {db: depDB});
+ }).catch(callback);
+ };
+
+ this.destroy = (opts, callback) => {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ const usePrefix = 'use_prefix' in this ? this.use_prefix : true;
+
+ const destroyDb = () => {
+ // call destroy method of the particular adaptor
+ this._destroy(opts, (err, resp) => {
+ if (err) {
+ return callback(err);
+ }
+ this._destroyed = true;
+ this.postMessage('destroyed');
+ callback(null, resp || { 'ok': true });
+ });
+ };
+
+ if (isRemote(this)) {
+ // no need to check for dependent DBs if it's a remote DB
+ return destroyDb();
+ }
+
+ this.get('_local/_pouch_dependentDbs', (err, localDoc) => {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ return callback(err);
+ } else { // no dependencies
+ return destroyDb();
+ }
+ }
+ const dependentDbs = localDoc.dependentDbs;
+ const PouchDB = this.constructor;
+ const deletedMap = Object.keys(dependentDbs).map((name) => {
+ // use_prefix is only false in the browser
+ /* istanbul ignore next */
+ const trueName = usePrefix ?
+ name.replace(new RegExp(`^${PouchDB.prefix}`), '') : name;
+ return new PouchDB(trueName, this.__opts).destroy();
+ });
+ Promise.all(deletedMap).then(destroyDb, callback);
+ });
+ };
+ }
+
+ _compact({last_seq}, callback) {
+ const changesOpts = {
+ return_docs: false,
+ last_seq: last_seq || 0
+ };
+ const promises = [];
+
+ let taskId;
+ let compactedDocs = 0;
+
+ const onChange = ({id}) => {
+ this.activeTasks.update(taskId, {
+ completed_items: ++compactedDocs
+ });
+ promises.push(this.compactDocument(id, 0));
+ };
+ const onError = (err) => {
+ this.activeTasks.remove(taskId, err);
+ callback(err);
+ };
+ const onComplete = ({last_seq}) => {
+ const lastSeq = last_seq;
+ Promise.all(promises).then(() => upsert(this, '_local/compaction', (doc) => {
+ if (!doc.last_seq || doc.last_seq < lastSeq) {
+ doc.last_seq = lastSeq;
+ return doc;
+ }
+ return false; // somebody else got here first, don't update
+ })).then(() => {
+ this.activeTasks.remove(taskId);
+ callback(null, {ok: true});
+ }).catch(onError);
+ };
+
+ this.info().then(({update_seq}) => {
+ taskId = this.activeTasks.add({
+ name: 'database_compaction',
+ total_items: update_seq - changesOpts.last_seq,
+ });
+
+ this.changes(changesOpts)
+ .on('change', onChange)
+ .on('complete', onComplete)
+ .on('error', onError);
+ });
+ }
+
+ changes(opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ // By default set return_docs to false if the caller has opts.live = true,
+ // this will prevent us from collecting the set of changes indefinitely
+ // resulting in growing memory
+ opts.return_docs = ('return_docs' in opts) ? opts.return_docs : !opts.live;
+
+ return new Changes$1(this, opts, callback);
+ }
+
+ type() {
+ return (typeof this._type === 'function') ? this._type() : this.adapter;
+ }
+}
+
+// The abstract purge implementation expects a doc id and the rev of a leaf node in that doc.
+// It will return errors if the rev doesn’t exist or isn’t a leaf.
+AbstractPouchDB.prototype.purge = function purge(docId, rev, callback) {
+ if (typeof this._purge === 'undefined') {
+ return callback(createError$2(UNKNOWN_ERROR,
+ `Purge is not implemented in the ${this.adapter} adapter.`
+ ));
+ }
+ const self = this;
+
+ self._getRevisionTree(docId, (error, revs) => {
+ if (error) {
+ return callback(error);
+ }
+ if (!revs) {
+ return callback(createError$2(MISSING_DOC));
+ }
+ let path;
+ try {
+ path = findPathToLeaf(revs, rev);
+ } catch (error) {
+ return callback(error.message || error);
+ }
+ self._purge(docId, path, (error, result) => {
+ if (error) {
+ return callback(error);
+ } else {
+ appendPurgeSeq(self, docId, rev).then(() => callback(null, result));
+ }
+ });
+ });
+};
+
+class TaskQueue$1 {
+ constructor() {
+ this.isReady = false;
+ this.failed = false;
+ this.queue = [];
+ }
+
+ execute() {
+ var fun;
+ if (this.failed) {
+ while ((fun = this.queue.shift())) {
+ fun(this.failed);
+ }
+ } else {
+ while ((fun = this.queue.shift())) {
+ fun();
+ }
+ }
+ }
+
+ fail(err) {
+ this.failed = err;
+ this.execute();
+ }
+
+ ready(db) {
+ this.isReady = true;
+ this.db = db;
+ this.execute();
+ }
+
+ addTask(fun) {
+ this.queue.push(fun);
+ if (this.failed) {
+ this.execute();
+ }
+ }
+}
+
+const getParseAdapter = (PouchDB) => function parseAdapter(name, opts) {
+ var match = name.match(/([a-z-]*):\/\/(.*)/);
+ if (match) {
+ // the http adapter expects the fully qualified name
+ return {
+ name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],
+ adapter: match[1]
+ };
+ }
+
+ var adapters = PouchDB.adapters;
+ var preferredAdapters = PouchDB.preferredAdapters;
+ var prefix = PouchDB.prefix;
+ var adapterName = opts.adapter;
+
+ if (!adapterName) { // automatically determine adapter
+ for (var i = 0; i < preferredAdapters.length; ++i) {
+ adapterName = preferredAdapters[i];
+ // check for browsers that have been upgraded from websql-only to websql+idb
+ /* istanbul ignore if */
+ if (adapterName === 'idb' && 'websql' in adapters &&
+ hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {
+ // log it, because this can be confusing during development
+ guardedConsole('log', 'PouchDB is downgrading "' + name + '" to WebSQL to' +
+ ' avoid data loss, because it was already opened with WebSQL.');
+ continue; // keep using websql to avoid user data loss
+ }
+ break;
+ }
+ }
+
+ var adapter = adapters[adapterName];
+
+ // if adapter is invalid, then an error will be thrown later
+ var usePrefix = (adapter && 'use_prefix' in adapter) ?
+ adapter.use_prefix : true;
+
+ return {
+ name: usePrefix ? (prefix + name) : name,
+ adapter: adapterName
+ };
+};
+
+class PouchInternal extends AbstractPouchDB {
+ constructor(name, opts) {
+ super();
+ this._setup(name, opts);
+ }
+
+ _setup(name, opts) {
+ super._setup();
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ if (opts.deterministic_revs === undefined) {
+ opts.deterministic_revs = true;
+ }
+
+ this.__opts = opts = clone$3(opts);
+
+ this.auto_compaction = opts.auto_compaction;
+ this.purged_infos_limit = opts.purged_infos_limit || 1000;
+ this.prefix = PouchDB.prefix;
+
+ if (typeof name !== 'string') {
+ throw new Error('Missing/invalid DB name');
+ }
+
+ var prefixedName = (opts.prefix || '') + name;
+ var backend = parseAdapter(prefixedName, opts);
+
+ opts.name = backend.name;
+ opts.adapter = opts.adapter || backend.adapter;
+
+ this.name = name;
+ this._adapter = opts.adapter;
+ PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);
+
+ if (!PouchDB.adapters[opts.adapter] ||
+ !PouchDB.adapters[opts.adapter].valid()) {
+ throw new Error('Invalid Adapter: ' + opts.adapter);
+ }
+
+ if (opts.view_adapter) {
+ if (!PouchDB.adapters[opts.view_adapter] ||
+ !PouchDB.adapters[opts.view_adapter].valid()) {
+ throw new Error('Invalid View Adapter: ' + opts.view_adapter);
+ }
+ }
+
+ this.taskqueue = new TaskQueue$1();
+
+ this.adapter = opts.adapter;
+
+ PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
+ if (err) {
+ return this.taskqueue.fail(err);
+ }
+
+
+ this.emit('created', this);
+ PouchDB.emit('created', this.name);
+ this.taskqueue.ready(this);
+ });
+ }
+}
+
+const PouchDB = createClass(PouchInternal, function (name, opts) {
+ PouchInternal.prototype._setup.call(this, name, opts);
+});
+
+const parseAdapter = getParseAdapter(PouchDB);
+
+
+
+PouchDB.adapters = {};
+PouchDB.preferredAdapters = [];
+
+PouchDB.prefix = '_pouch_';
+
+var eventEmitter = new EE();
+
+
+ Object.keys(EE.prototype).forEach(function (key) {
+ if (typeof EE.prototype[key] === 'function') {
+ PouchDB[key] = eventEmitter[key].bind(eventEmitter);
+ }
+ });
+
+ // these are created in constructor.js, and allow us to notify each DB with
+ // the same name that it was destroyed, via the constructor object
+ var destructListeners = PouchDB._destructionListeners = new Map();
+
+ PouchDB.on('ref', function onConstructorRef(db) {
+ if (!destructListeners.has(db.name)) {
+ destructListeners.set(db.name, []);
+ }
+ destructListeners.get(db.name).push(db);
+ });
+
+ PouchDB.on('unref', function onConstructorUnref(db) {
+ if (!destructListeners.has(db.name)) {
+ return;
+ }
+ var dbList = destructListeners.get(db.name);
+ var pos = dbList.indexOf(db);
+ if (pos < 0) {
+ /* istanbul ignore next */
+ return;
+ }
+ dbList.splice(pos, 1);
+ if (dbList.length > 1) {
+ /* istanbul ignore next */
+ destructListeners.set(db.name, dbList);
+ } else {
+ destructListeners.delete(db.name);
+ }
+ });
+
+ PouchDB.on('destroyed', function onConstructorDestroyed(name) {
+ if (!destructListeners.has(name)) {
+ return;
+ }
+ var dbList = destructListeners.get(name);
+ destructListeners.delete(name);
+ dbList.forEach(function (db) {
+ db.emit('destroyed',true);
+ });
+ });
+
+
+PouchDB.adapter = function (id, obj, addToPreferredAdapters) {
+ /* istanbul ignore else */
+ if (obj.valid()) {
+ PouchDB.adapters[id] = obj;
+ if (addToPreferredAdapters) {
+ PouchDB.preferredAdapters.push(id);
+ }
+ }
+};
+
+PouchDB.plugin = function (obj) {
+ if (typeof obj === 'function') { // function style for plugins
+ obj(PouchDB);
+ } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {
+ throw new Error('Invalid plugin: got "' + obj + '", expected an object or a function');
+ } else {
+ Object.keys(obj).forEach(function (id) { // object style for plugins
+ PouchDB.prototype[id] = obj[id];
+ });
+ }
+ if (this.__defaults) {
+ PouchDB.__defaults = Object.assign({}, this.__defaults);
+ }
+ return PouchDB;
+};
+
+PouchDB.defaults = function (defaultOpts) {
+ let PouchWithDefaults = createClass(PouchDB, function (name, opts) {
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ opts = Object.assign({}, PouchWithDefaults.__defaults, opts);
+ PouchDB.call(this, name, opts);
+ });
+
+ PouchWithDefaults.preferredAdapters = PouchDB.preferredAdapters.slice();
+ Object.keys(PouchDB).forEach(function (key) {
+ if (!(key in PouchWithDefaults)) {
+ PouchWithDefaults[key] = PouchDB[key];
+ }
+ });
+
+ // make default options transitive
+ // https://github.com/pouchdb/pouchdb/issues/5922
+ PouchWithDefaults.__defaults = Object.assign({}, this.__defaults, defaultOpts);
+
+ return PouchWithDefaults;
+};
+
+PouchDB.fetch = function (url, opts) {
+ return fetch(url, opts);
+};
+
+PouchDB.prototype.activeTasks = PouchDB.activeTasks = new ActiveTasks();
+
+var PouchDB$1 = PouchDB;
+
+// TODO: remove from pouchdb-core (breaking)
+PouchDB$1.plugin(applyChangesFilterPlugin);
+
+function flatten$1(arrs) {
+ var res = [];
+ for (var i = 0, len = arrs.length; i < len; i++) {
+ res = res.concat(arrs[i]);
+ }
+ return res;
+}
+
+// Based on https://github.com/alexdavid/scope-eval v0.0.3
+// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)
+// This is basically just a wrapper around new Function()
+
+function scopeEval(source, scope) {
+ var keys = [];
+ var values = [];
+ for (var key in scope) {
+ if (Object.prototype.hasOwnProperty.call(scope, key)) {
+ keys.push(key);
+ values.push(scope[key]);
+ }
+ }
+ keys.push(source);
+ return Function.apply(null, keys).apply(null, values);
+}
+
+function toPromise(func) {
+ //create the function we will be returning
+ return function (...args) {
+ // Clone arguments
+ args = clone$1(args);
+ var self = this;
+ // if the last argument is a function, assume its a callback
+ var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;
+ var promise = new Promise(function (fulfill, reject) {
+ var resp;
+ try {
+ var callback = once(function (err, mesg) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(mesg);
+ }
+ });
+ // create a callback for this invocation
+ // apply the function in the orig context
+ args.push(callback);
+ resp = func.apply(self, args);
+ if (resp && typeof resp.then === 'function') {
+ fulfill(resp);
+ }
+ } catch (e) {
+ reject(e);
+ }
+ });
+ // if there is a callback, call it back
+ if (usedCB) {
+ promise.then(function (result) {
+ usedCB(null, result);
+ }, usedCB);
+ }
+ return promise;
+ };
+}
+
+class Changes extends EE {
+ constructor() {
+ super();
+
+ this._listeners = {};
+ }
+
+ addListener(dbName, id, db, opts) {
+ if (this._listeners[id]) {
+ return;
+ }
+ var inprogress = false;
+ var self = this;
+ function eventFunction() {
+ if (!self._listeners[id]) {
+ return;
+ }
+ if (inprogress) {
+ inprogress = 'waiting';
+ return;
+ }
+ inprogress = true;
+ var changesOpts = pick$1(opts, [
+ 'style', 'include_docs', 'attachments', 'conflicts', 'filter',
+ 'doc_ids', 'view', 'since', 'query_params', 'binary', 'return_docs'
+ ]);
+
+ function onError() {
+ inprogress = false;
+ }
+
+ db.changes(changesOpts).on('change', function (c) {
+ if (c.seq > opts.since && !opts.cancelled) {
+ opts.since = c.seq;
+ opts.onChange(c);
+ }
+ }).on('complete', function () {
+ if (inprogress === 'waiting') {
+ nextTick$9(eventFunction);
+ }
+ inprogress = false;
+ }).on('error', onError);
+ }
+ this._listeners[id] = eventFunction;
+ this.on(dbName, eventFunction);
+ }
+
+ removeListener(dbName, id) {
+ if (!(id in this._listeners)) {
+ return;
+ }
+ super.removeListener(dbName, this._listeners[id]);
+ delete this._listeners[id];
+ }
+
+ notifyLocalWindows(dbName) {
+ }
+
+ notify(dbName) {
+ this.emit(dbName);
+ this.notifyLocalWindows(dbName);
+ }
+}
+
+function randomNumber(min, max) {
+ var maxTimeout = 600000; // Hard-coded default of 10 minutes
+ min = parseInt(min, 10) || 0;
+ max = parseInt(max, 10);
+ if (max !== max || max <= min) {
+ max = (min || 1) << 1; //doubling
+ } else {
+ max = max + 1;
+ }
+ // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout
+ if (max > maxTimeout) {
+ min = maxTimeout >> 1; // divide by two
+ max = maxTimeout;
+ }
+ var ratio = Math.random();
+ var range = max - min;
+
+ return ~~(range * ratio + min); // ~~ coerces to an int, but fast.
+}
+
+function defaultBackOff(min) {
+ var max = 0;
+ if (!min) {
+ max = 2000;
+ }
+ return randomNumber(min, max);
+}
+
+function tryFilter(filter, doc, req) {
+ try {
+ return !filter(doc, req);
+ } catch (err) {
+ var msg = 'Filter function threw: ' + err.toString();
+ return createError$2(BAD_REQUEST, msg);
+ }
+}
+
+function filterChange(opts) {
+ var req = {};
+ var hasFilter = opts.filter && typeof opts.filter === 'function';
+ req.query = opts.query_params;
+
+ return function filter(change) {
+ if (!change.doc) {
+ // CSG sends events on the changes feed that don't have documents,
+ // this hack makes a whole lot of existing code robust.
+ change.doc = {};
+ }
+
+ var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);
+
+ if (typeof filterReturn === 'object') {
+ return filterReturn;
+ }
+
+ if (filterReturn) {
+ return false;
+ }
+
+ if (!opts.include_docs) {
+ delete change.doc;
+ } else if (!opts.attachments) {
+ for (var att in change.doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(change.doc._attachments, att)) {
+ change.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ return true;
+ };
+}
+
+var uuid = v4; // mimic old import, only v4 is ever used elsewhere
+
+// eslint-disable-next-line no-unused-vars
+async function allDocsKeysQuery(api, {limit, skip: offset, keys,...subOpts}) {
+
+ const finalResults = {
+ offset, rows: await Promise.all(keys.map(async (key) => {
+ return await new Promise((resolve) => (api._allDocs(Object.assign(
+ {key: key, deleted: 'ok'}, subOpts
+ ), (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ throw new Error(err);
+ }
+ /* istanbul ignore if */
+ if (subOpts.update_seq && res.update_seq !== undefined) {
+ finalResults.update_seq = res.update_seq;
+ }
+ finalResults.total_rows = res.total_rows;
+ resolve(res.rows[0] || {key: key, error: 'not_found'});
+ })));
+ })),
+ };
+
+ return finalResults;
+
+}
+
+function toObject(array) {
+ return array.reduce(function (obj, item) {
+ obj[item] = true;
+ return obj;
+ }, {});
+}
+// List of top level reserved words for doc
+var reservedWords = toObject([
+ '_id',
+ '_rev',
+ '_access',
+ '_attachments',
+ '_deleted',
+ '_revisions',
+ '_revs_info',
+ '_conflicts',
+ '_deleted_conflicts',
+ '_local_seq',
+ '_rev_tree',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats',
+ // Specific to Couchbase Sync Gateway
+ '_removed'
+]);
+
+// List of reserved words that should end up in the document
+var dataWords = toObject([
+ '_access',
+ '_attachments',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats'
+]);
+
+function parseRevisionInfo(rev) {
+ if (!/^\d+-/.test(rev)) {
+ return createError$2(INVALID_REV);
+ }
+ var idx = rev.indexOf('-');
+ var left = rev.substring(0, idx);
+ var right = rev.substring(idx + 1);
+ return {
+ prefix: parseInt(left, 10),
+ id: right
+ };
+}
+
+function makeRevTreeFromRevisions(revisions, opts) {
+ var pos = revisions.start - revisions.ids.length + 1;
+
+ var revisionIds = revisions.ids;
+ var ids = [revisionIds[0], opts, []];
+
+ for (var i = 1, len = revisionIds.length; i < len; i++) {
+ ids = [revisionIds[i], {status: 'missing'}, [ids]];
+ }
+
+ return [{
+ pos: pos,
+ ids: ids
+ }];
+}
+
+// Preprocess documents, parse their revisions, assign an id and a
+// revision for new writes that are missing them, etc
+function parseDoc(doc, newEdits, dbOpts) {
+ if (!dbOpts) {
+ dbOpts = {
+ deterministic_revs: true
+ };
+ }
+
+ var nRevNum;
+ var newRevId;
+ var revInfo;
+ var opts = {status: 'available'};
+ if (doc._deleted) {
+ opts.deleted = true;
+ }
+
+ if (newEdits) {
+ if (!doc._id) {
+ doc._id = uuid();
+ }
+ newRevId = rev(doc, dbOpts.deterministic_revs);
+ if (doc._rev) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ doc._rev_tree = [{
+ pos: revInfo.prefix,
+ ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]
+ }];
+ nRevNum = revInfo.prefix + 1;
+ } else {
+ doc._rev_tree = [{
+ pos: 1,
+ ids : [newRevId, opts, []]
+ }];
+ nRevNum = 1;
+ }
+ } else {
+ if (doc._revisions) {
+ doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);
+ nRevNum = doc._revisions.start;
+ newRevId = doc._revisions.ids[0];
+ }
+ if (!doc._rev_tree) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ nRevNum = revInfo.prefix;
+ newRevId = revInfo.id;
+ doc._rev_tree = [{
+ pos: nRevNum,
+ ids: [newRevId, opts, []]
+ }];
+ }
+ }
+
+ invalidIdError(doc._id);
+
+ doc._rev = nRevNum + '-' + newRevId;
+
+ var result = {metadata : {}, data : {}};
+ for (var key in doc) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc, key)) {
+ var specialKey = key[0] === '_';
+ if (specialKey && !reservedWords[key]) {
+ var error = createError$2(DOC_VALIDATION, key);
+ error.message = DOC_VALIDATION.message + ': ' + key;
+ throw error;
+ } else if (specialKey && !dataWords[key]) {
+ result.metadata[key.slice(1)] = doc[key];
+ } else {
+ result.data[key] = doc[key];
+ }
+ }
+ }
+ return result;
+}
+
+// compact a tree by marking its non-leafs as missing,
+// and return a list of revs to delete
+function compactTree(metadata) {
+ var revs = [];
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ if (opts.status === 'available' && !isLeaf) {
+ revs.push(pos + '-' + revHash);
+ opts.status = 'missing';
+ }
+ });
+ return revs;
+}
+
+// returns the current leaf node for a given revision
+function latest(rev, metadata) {
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, pos: pos, opts: opts});
+
+ if (isLeaf) {
+ for (var i = 0, len = history.length; i < len; i++) {
+ var historyNode = history[i];
+ var historyRev = historyNode.pos + '-' + historyNode.id;
+
+ if (historyRev === rev) {
+ // return the rev of this leaf
+ return pos + '-' + id;
+ }
+ }
+ }
+
+ for (var j = 0, l = branches.length; j < l; j++) {
+ toVisit.push({pos: pos + 1, ids: branches[j], history: history});
+ }
+ }
+
+ /* istanbul ignore next */
+ throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);
+}
+
+function typedBuffer(binString, buffType, type) {
+ // buffType is either 'binary' or 'base64'
+ const buff = Buffer.from(binString, buffType);
+ buff.type = type; // non-standard, but used for consistency with the browser
+ return buff;
+}
+
+function binStringToBluffer(binString, type) {
+ return typedBuffer(binString, 'binary', type);
+}
+
+function binaryMd5(data, callback) {
+ var base64 = crypto$1.createHash('md5').update(data, 'binary').digest('base64');
+ callback(base64);
+}
+
+// for a better overview of what this is doing, read:
+
+function sortByPos(a, b) {
+ return a.pos - b.pos;
+}
+
+// classic binary search
+function binarySearch(arr, item, comparator) {
+ var low = 0;
+ var high = arr.length;
+ var mid;
+ while (low < high) {
+ mid = (low + high) >>> 1;
+ if (comparator(arr[mid], item) < 0) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return low;
+}
+
+// assuming the arr is sorted, insert the item in the proper place
+function insertSorted(arr, item, comparator) {
+ var idx = binarySearch(arr, item, comparator);
+ arr.splice(idx, 0, item);
+}
+
+// Turn a path as a flat array into a tree with a single branch.
+// If any should be stemmed from the beginning of the array, that's passed
+// in as the second argument
+function pathToTree(path, numStemmed) {
+ var root;
+ var leaf;
+ for (var i = numStemmed, len = path.length; i < len; i++) {
+ var node = path[i];
+ var currentLeaf = [node.id, node.opts, []];
+ if (leaf) {
+ leaf[2].push(currentLeaf);
+ leaf = currentLeaf;
+ } else {
+ root = leaf = currentLeaf;
+ }
+ }
+ return root;
+}
+
+// compare the IDs of two trees
+function compareTree(a, b) {
+ return a[0] < b[0] ? -1 : 1;
+}
+
+// Merge two trees together
+// The roots of tree1 and tree2 must be the same revision
+function mergeTree(in_tree1, in_tree2) {
+ var queue = [{tree1: in_tree1, tree2: in_tree2}];
+ var conflicts = false;
+ while (queue.length > 0) {
+ var item = queue.pop();
+ var tree1 = item.tree1;
+ var tree2 = item.tree2;
+
+ if (tree1[1].status || tree2[1].status) {
+ tree1[1].status =
+ (tree1[1].status === 'available' ||
+ tree2[1].status === 'available') ? 'available' : 'missing';
+ }
+
+ for (var i = 0; i < tree2[2].length; i++) {
+ if (!tree1[2][0]) {
+ conflicts = 'new_leaf';
+ tree1[2][0] = tree2[2][i];
+ continue;
+ }
+
+ var merged = false;
+ for (var j = 0; j < tree1[2].length; j++) {
+ if (tree1[2][j][0] === tree2[2][i][0]) {
+ queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});
+ merged = true;
+ }
+ }
+ if (!merged) {
+ conflicts = 'new_branch';
+ insertSorted(tree1[2], tree2[2][i], compareTree);
+ }
+ }
+ }
+ return {conflicts: conflicts, tree: in_tree1};
+}
+
+function doMerge(tree, path, dontExpand) {
+ var restree = [];
+ var conflicts = false;
+ var merged = false;
+ var res;
+
+ if (!tree.length) {
+ return {tree: [path], conflicts: 'new_leaf'};
+ }
+
+ for (var i = 0, len = tree.length; i < len; i++) {
+ var branch = tree[i];
+ if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {
+ // Paths start at the same position and have the same root, so they need
+ // merged
+ res = mergeTree(branch.ids, path.ids);
+ restree.push({pos: branch.pos, ids: res.tree});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ } else if (dontExpand !== true) {
+ // The paths start at a different position, take the earliest path and
+ // traverse up until it as at the same point from root as the path we
+ // want to merge. If the keys match we return the longer path with the
+ // other merged After stemming we dont want to expand the trees
+
+ var t1 = branch.pos < path.pos ? branch : path;
+ var t2 = branch.pos < path.pos ? path : branch;
+ var diff = t2.pos - t1.pos;
+
+ var candidateParents = [];
+
+ var trees = [];
+ trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});
+ while (trees.length > 0) {
+ var item = trees.pop();
+ if (item.diff === 0) {
+ if (item.ids[0] === t2.ids[0]) {
+ candidateParents.push(item);
+ }
+ continue;
+ }
+ var elements = item.ids[2];
+ for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {
+ trees.push({
+ ids: elements[j],
+ diff: item.diff - 1,
+ parent: item.ids,
+ parentIdx: j
+ });
+ }
+ }
+
+ var el = candidateParents[0];
+
+ if (!el) {
+ restree.push(branch);
+ } else {
+ res = mergeTree(el.ids, t2.ids);
+ el.parent[2][el.parentIdx] = res.tree;
+ restree.push({pos: t1.pos, ids: t1.ids});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ }
+ } else {
+ restree.push(branch);
+ }
+ }
+
+ // We didnt find
+ if (!merged) {
+ restree.push(path);
+ }
+
+ restree.sort(sortByPos);
+
+ return {
+ tree: restree,
+ conflicts: conflicts || 'internal_node'
+ };
+}
+
+// To ensure we dont grow the revision tree infinitely, we stem old revisions
+function stem(tree, depth) {
+ // First we break out the tree into a complete list of root to leaf paths
+ var paths = rootToLeaf(tree);
+ var stemmedRevs;
+
+ var result;
+ for (var i = 0, len = paths.length; i < len; i++) {
+ // Then for each path, we cut off the start of the path based on the
+ // `depth` to stem to, and generate a new set of flat trees
+ var path = paths[i];
+ var stemmed = path.ids;
+ var node;
+ if (stemmed.length > depth) {
+ // only do the stemming work if we actually need to stem
+ if (!stemmedRevs) {
+ stemmedRevs = {}; // avoid allocating this object unnecessarily
+ }
+ var numStemmed = stemmed.length - depth;
+ node = {
+ pos: path.pos + numStemmed,
+ ids: pathToTree(stemmed, numStemmed)
+ };
+
+ for (var s = 0; s < numStemmed; s++) {
+ var rev = (path.pos + s) + '-' + stemmed[s].id;
+ stemmedRevs[rev] = true;
+ }
+ } else { // no need to actually stem
+ node = {
+ pos: path.pos,
+ ids: pathToTree(stemmed, 0)
+ };
+ }
+
+ // Then we remerge all those flat trees together, ensuring that we dont
+ // connect trees that would go beyond the depth limit
+ if (result) {
+ result = doMerge(result, node, true).tree;
+ } else {
+ result = [node];
+ }
+ }
+
+ // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed
+ if (stemmedRevs) {
+ traverseRevTree(result, function (isLeaf, pos, revHash) {
+ // some revisions may have been removed in a branch but not in another
+ delete stemmedRevs[pos + '-' + revHash];
+ });
+ }
+
+ return {
+ tree: result,
+ revs: stemmedRevs ? Object.keys(stemmedRevs) : []
+ };
+}
+
+function merge(tree, path, depth) {
+ var newTree = doMerge(tree, path);
+ var stemmed = stem(newTree.tree, depth);
+ return {
+ tree: stemmed.tree,
+ stemmedRevs: stemmed.revs,
+ conflicts: newTree.conflicts
+ };
+}
+
+// return true if a rev exists in the rev tree, false otherwise
+function revExists(revs, rev) {
+ var toVisit = revs.slice();
+ var splitRev = rev.split('-');
+ var targetPos = parseInt(splitRev[0], 10);
+ var targetId = splitRev[1];
+
+ var node;
+ while ((node = toVisit.pop())) {
+ if (node.pos === targetPos && node.ids[0] === targetId) {
+ return true;
+ }
+ var branches = node.ids[2];
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: node.pos + 1, ids: branches[i]});
+ }
+ }
+ return false;
+}
+
+function updateDoc(revLimit, prev, docInfo, results,
+ i, cb, writeDoc, newEdits) {
+
+ if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
+ results[i] = docInfo;
+ return cb();
+ }
+
+ // sometimes this is pre-calculated. historically not always
+ var previousWinningRev = prev.winningRev || winningRev(prev);
+ var previouslyDeleted = 'deleted' in prev ? prev.deleted :
+ isDeleted(prev, previousWinningRev);
+ var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
+ isDeleted(docInfo.metadata);
+ var isRoot = /^1-/.test(docInfo.metadata.rev);
+
+ if (previouslyDeleted && !deleted && newEdits && isRoot) {
+ var newDoc = docInfo.data;
+ newDoc._rev = previousWinningRev;
+ newDoc._id = docInfo.metadata.id;
+ docInfo = parseDoc(newDoc, newEdits);
+ }
+
+ var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
+
+ var inConflict = newEdits && ((
+ (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
+ (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
+ (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
+
+ if (inConflict) {
+ var err = createError$2(REV_CONFLICT);
+ results[i] = err;
+ return cb();
+ }
+
+ var newRev = docInfo.metadata.rev;
+ docInfo.metadata.rev_tree = merged.tree;
+ docInfo.stemmedRevs = merged.stemmedRevs || [];
+ /* istanbul ignore else */
+ if (prev.rev_map) {
+ docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
+ }
+
+ // recalculate
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$1);
+
+ // calculate the total number of documents that were added/removed,
+ // from the perspective of total_rows/doc_count
+ var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
+ previouslyDeleted < winningRevIsDeleted ? -1 : 1;
+
+ var newRevIsDeleted;
+ if (newRev === winningRev$1) {
+ // if the new rev is the same as the winning rev, we can reuse that value
+ newRevIsDeleted = winningRevIsDeleted;
+ } else {
+ // if they're not the same, then we need to recalculate
+ newRevIsDeleted = isDeleted(docInfo.metadata, newRev);
+ }
+
+ writeDoc(docInfo, winningRev$1, winningRevIsDeleted, newRevIsDeleted,
+ true, delta, i, cb);
+}
+
+function rootIsMissing(docInfo) {
+ return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';
+}
+
+function processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,
+ writeDoc, opts, overallCallback) {
+
+ // Default to 1000 locally
+ revLimit = revLimit || 1000;
+
+ function insertDoc(docInfo, resultsIdx, callback) {
+ // Cant insert new deleted documents
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var deleted = isDeleted(docInfo.metadata, winningRev$1);
+ if ('was_delete' in opts && deleted) {
+ results[resultsIdx] = createError$2(MISSING_DOC, 'deleted');
+ return callback();
+ }
+
+ // 4712 - detect whether a new document was inserted with a _rev
+ var inConflict = newEdits && rootIsMissing(docInfo);
+
+ if (inConflict) {
+ var err = createError$2(REV_CONFLICT);
+ results[resultsIdx] = err;
+ return callback();
+ }
+
+ var delta = deleted ? 0 : 1;
+
+ writeDoc(docInfo, winningRev$1, deleted, deleted, false,
+ delta, resultsIdx, callback);
+ }
+
+ var newEdits = opts.new_edits;
+ var idsToDocs = new Map();
+
+ var docsDone = 0;
+ var docsToDo = docInfos.length;
+
+ function checkAllDocsDone() {
+ if (++docsDone === docsToDo && overallCallback) {
+ overallCallback();
+ }
+ }
+
+ docInfos.forEach(function (currentDoc, resultsIdx) {
+
+ if (currentDoc._id && isLocalId(currentDoc._id)) {
+ var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';
+ api[fun](currentDoc, {ctx: tx}, function (err, res) {
+ results[resultsIdx] = err || res;
+ checkAllDocsDone();
+ });
+ return;
+ }
+
+ var id = currentDoc.metadata.id;
+ if (idsToDocs.has(id)) {
+ docsToDo--; // duplicate
+ idsToDocs.get(id).push([currentDoc, resultsIdx]);
+ } else {
+ idsToDocs.set(id, [[currentDoc, resultsIdx]]);
+ }
+ });
+
+ // in the case of new_edits, the user can provide multiple docs
+ // with the same id. these need to be processed sequentially
+ idsToDocs.forEach(function (docs, id) {
+ var numDone = 0;
+
+ function docWritten() {
+ if (++numDone < docs.length) {
+ nextDoc();
+ } else {
+ checkAllDocsDone();
+ }
+ }
+ function nextDoc() {
+ var value = docs[numDone];
+ var currentDoc = value[0];
+ var resultsIdx = value[1];
+
+ if (fetchedDocs.has(id)) {
+ updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,
+ resultsIdx, docWritten, writeDoc, newEdits);
+ } else {
+ // Ensure stemming applies to new writes as well
+ var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);
+ currentDoc.metadata.rev_tree = merged.tree;
+ currentDoc.stemmedRevs = merged.stemmedRevs || [];
+ insertDoc(currentDoc, resultsIdx, docWritten);
+ }
+ }
+ nextDoc();
+ });
+}
+
+/**
+ * Stringify/parse functions that don't operate
+ * recursively, so they avoid call stack exceeded
+ * errors.
+ */
+var stringify$1 = function stringify(input) {
+ var queue = [];
+ queue.push({obj: input});
+
+ var res = '';
+ var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;
+ while ((next = queue.pop())) {
+ obj = next.obj;
+ prefix = next.prefix || '';
+ val = next.val || '';
+ res += prefix;
+ if (val) {
+ res += val;
+ } else if (typeof obj !== 'object') {
+ res += typeof obj === 'undefined' ? null : JSON.stringify(obj);
+ } else if (obj === null) {
+ res += 'null';
+ } else if (Array.isArray(obj)) {
+ queue.push({val: ']'});
+ for (i = obj.length - 1; i >= 0; i--) {
+ arrayPrefix = i === 0 ? '' : ',';
+ queue.push({obj: obj[i], prefix: arrayPrefix});
+ }
+ queue.push({val: '['});
+ } else { // object
+ keys = [];
+ for (k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ queue.push({val: '}'});
+ for (i = keys.length - 1; i >= 0; i--) {
+ key = keys[i];
+ value = obj[key];
+ objPrefix = (i > 0 ? ',' : '');
+ objPrefix += JSON.stringify(key) + ':';
+ queue.push({obj: value, prefix: objPrefix});
+ }
+ queue.push({val: '{'});
+ }
+ }
+ return res;
+};
+
+// Convenience function for the parse function.
+// This pop function is basically copied from
+// pouchCollate.parseIndexableString
+function pop(obj, stack, metaStack) {
+ var lastMetaElement = metaStack[metaStack.length - 1];
+ if (obj === lastMetaElement.element) {
+ // popping a meta-element, e.g. an object whose value is another object
+ metaStack.pop();
+ lastMetaElement = metaStack[metaStack.length - 1];
+ }
+ var element = lastMetaElement.element;
+ var lastElementIndex = lastMetaElement.index;
+ if (Array.isArray(element)) {
+ element.push(obj);
+ } else if (lastElementIndex === stack.length - 2) { // obj with key+value
+ var key = stack.pop();
+ element[key] = obj;
+ } else {
+ stack.push(obj); // obj with key only
+ }
+}
+
+var parse = function (str) {
+ var stack = [];
+ var metaStack = []; // stack for arrays and objects
+ var i = 0;
+ var collationIndex,parsedNum,numChar;
+ var parsedString,lastCh,numConsecutiveSlashes,ch;
+ var arrayElement, objElement;
+ while (true) {
+ collationIndex = str[i++];
+ if (collationIndex === '}' ||
+ collationIndex === ']' ||
+ typeof collationIndex === 'undefined') {
+ if (stack.length === 1) {
+ return stack.pop();
+ } else {
+ pop(stack.pop(), stack, metaStack);
+ continue;
+ }
+ }
+ switch (collationIndex) {
+ case ' ':
+ case '\t':
+ case '\n':
+ case ':':
+ case ',':
+ break;
+ case 'n':
+ i += 3; // 'ull'
+ pop(null, stack, metaStack);
+ break;
+ case 't':
+ i += 3; // 'rue'
+ pop(true, stack, metaStack);
+ break;
+ case 'f':
+ i += 4; // 'alse'
+ pop(false, stack, metaStack);
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '-':
+ parsedNum = '';
+ i--;
+ while (true) {
+ numChar = str[i++];
+ if (/[\d\.\-e\+]/.test(numChar)) {
+ parsedNum += numChar;
+ } else {
+ i--;
+ break;
+ }
+ }
+ pop(parseFloat(parsedNum), stack, metaStack);
+ break;
+ case '"':
+ parsedString = '';
+ lastCh = void 0;
+ numConsecutiveSlashes = 0;
+ while (true) {
+ ch = str[i++];
+ if (ch !== '"' || (lastCh === '\\' &&
+ numConsecutiveSlashes % 2 === 1)) {
+ parsedString += ch;
+ lastCh = ch;
+ if (lastCh === '\\') {
+ numConsecutiveSlashes++;
+ } else {
+ numConsecutiveSlashes = 0;
+ }
+ } else {
+ break;
+ }
+ }
+ pop(JSON.parse('"' + parsedString + '"'), stack, metaStack);
+ break;
+ case '[':
+ arrayElement = { element: [], index: stack.length };
+ stack.push(arrayElement.element);
+ metaStack.push(arrayElement);
+ break;
+ case '{':
+ objElement = { element: {}, index: stack.length };
+ stack.push(objElement.element);
+ metaStack.push(objElement);
+ break;
+ default:
+ throw new Error(
+ 'unexpectedly reached end of input: ' + collationIndex);
+ }
+ }
+};
+
+function safeJsonParse(str) {
+ // This try/catch guards against stack overflow errors.
+ // JSON.parse() is faster than vuvuzela.parse() but vuvuzela
+ // cannot overflow.
+ try {
+ return JSON.parse(str);
+ } catch (e) {
+ /* istanbul ignore next */
+ return parse(str);
+ }
+}
+
+function safeJsonStringify(json) {
+ try {
+ return JSON.stringify(json);
+ } catch (e) {
+ /* istanbul ignore next */
+ return stringify$1(json);
+ }
+}
+
+var immutable = extend$3;
+
+var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+
+function extend$3() {
+ var target = {};
+
+ for (var i = 0; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (hasOwnProperty$2.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+var deferredLeveldown = {exports: {}};
+
+var abstractLeveldown$1$1 = {};
+
+var mutable = extend$2;
+
+var hasOwnProperty$1$1 = Object.prototype.hasOwnProperty;
+
+function extend$2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (hasOwnProperty$1$1.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+// For (old) browser support
+var xtend$2$1 = immutable;
+var assign$1$1 = mutable;
+
+var levelSupports$1$1 = function supports () {
+ var manifest = xtend$2$1.apply(null, arguments);
+
+ return assign$1$1(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$2$1(manifest.additionalMethods)
+ })
+};
+
+var nextTick$3$1 = process.nextTick;
+
+var nextTick$2$1 = nextTick$3$1;
+
+function AbstractIterator$2$1 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2$1.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$2$1(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$2$1(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$2$1.prototype._next = function (callback) {
+ nextTick$2$1(callback);
+};
+
+AbstractIterator$2$1.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$2$1.prototype._seek = function (target) {};
+
+AbstractIterator$2$1.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$2$1(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$2$1.prototype._end = function (callback) {
+ nextTick$2$1(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$2$1.prototype._nextTick = nextTick$2$1;
+
+var abstractIterator$2 = AbstractIterator$2$1;
+
+var nextTick$1$1 = nextTick$3$1;
+
+function AbstractChainedBatch$1$1 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$1$1.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$1$1.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$1$1.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$1$1.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$1$1.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$1$1.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$1$1.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$1$1.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$1$1.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$1$1.prototype._nextTick = nextTick$1$1;
+
+var abstractChainedBatch$2 = AbstractChainedBatch$1$1;
+
+var xtend$1$1 = immutable;
+var supports$1$1 = levelSupports$1$1;
+var Buffer$1$1 = require$$0$2.Buffer;
+var AbstractIterator$1$1 = abstractIterator$2;
+var AbstractChainedBatch$6 = abstractChainedBatch$2;
+var nextTick$8 = nextTick$3$1;
+var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
+var rangeOptions$2 = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$1$1 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports$1$1(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$1$1.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1$1.prototype._open = function (options, callback) {
+ nextTick$8(callback);
+};
+
+AbstractLevelDOWN$1$1.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1$1.prototype._close = function (callback) {
+ nextTick$8(callback);
+};
+
+AbstractLevelDOWN$1$1.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$8(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$1$1.prototype._get = function (key, options, callback) {
+ nextTick$8(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$1$1.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick$8(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$1$1.prototype._put = function (key, value, options, callback) {
+ nextTick$8(callback);
+};
+
+AbstractLevelDOWN$1$1.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$8(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$1$1.prototype._del = function (key, options, callback) {
+ nextTick$8(callback);
+};
+
+AbstractLevelDOWN$1$1.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick$8(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick$8(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick$8(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend$1$1(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick$8(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick$8(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick$8(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$1$1.prototype._batch = function (array, options, callback) {
+ nextTick$8(callback);
+};
+
+AbstractLevelDOWN$1$1.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions$2(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$1$1.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$1$1.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions$2(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions$2 (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty$3.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption$2(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption$2 (k) {
+ return rangeOptions$2.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$1$1.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$1$1.prototype._iterator = function (options) {
+ return new AbstractIterator$1$1(this)
+};
+
+AbstractLevelDOWN$1$1.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch$6(this)
+};
+
+AbstractLevelDOWN$1$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$1$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$1$1.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$1$1.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$1$1.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$1$1.prototype._nextTick = nextTick$8;
+
+var abstractLeveldown$4 = AbstractLevelDOWN$1$1;
+
+abstractLeveldown$1$1.AbstractLevelDOWN = abstractLeveldown$4;
+abstractLeveldown$1$1.AbstractIterator = abstractIterator$2;
+abstractLeveldown$1$1.AbstractChainedBatch = abstractChainedBatch$2;
+
+var inherits$6 = {exports: {}};
+
+var inherits_browser = {exports: {}};
+
+var hasRequiredInherits_browser;
+
+function requireInherits_browser () {
+ if (hasRequiredInherits_browser) return inherits_browser.exports;
+ hasRequiredInherits_browser = 1;
+ if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ }
+ };
+ } else {
+ // old school shim for old browsers
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ var TempCtor = function () {};
+ TempCtor.prototype = superCtor.prototype;
+ ctor.prototype = new TempCtor();
+ ctor.prototype.constructor = ctor;
+ }
+ };
+ }
+ return inherits_browser.exports;
+}
+
+try {
+ var util$3 = require('util');
+ /* istanbul ignore next */
+ if (typeof util$3.inherits !== 'function') throw '';
+ inherits$6.exports = util$3.inherits;
+} catch (e) {
+ /* istanbul ignore next */
+ inherits$6.exports = requireInherits_browser();
+}
+
+var inheritsExports = inherits$6.exports;
+var inherits$5 = /*@__PURE__*/getDefaultExportFromCjs(inheritsExports);
+
+var AbstractIterator$6 = abstractLeveldown$1$1.AbstractIterator;
+var inherits$4 = inheritsExports;
+
+function DeferredIterator$1 (db, options) {
+ AbstractIterator$6.call(this, db);
+
+ this._options = options;
+ this._iterator = null;
+ this._operations = [];
+}
+
+inherits$4(DeferredIterator$1, AbstractIterator$6);
+
+DeferredIterator$1.prototype.setDb = function (db) {
+ var it = this._iterator = db.iterator(this._options);
+ this._operations.forEach(function (op) {
+ it[op.method].apply(it, op.args);
+ });
+};
+
+DeferredIterator$1.prototype._operation = function (method, args) {
+ if (this._iterator) return this._iterator[method].apply(this._iterator, args)
+ this._operations.push({ method: method, args: args });
+};
+
+'next end'.split(' ').forEach(function (m) {
+ DeferredIterator$1.prototype['_' + m] = function () {
+ this._operation(m, arguments);
+ };
+});
+
+// Must defer seek() rather than _seek() because it requires db._serializeKey to be available
+DeferredIterator$1.prototype.seek = function () {
+ this._operation('seek', arguments);
+};
+
+var deferredIterator = DeferredIterator$1;
+
+var AbstractLevelDOWN$4 = abstractLeveldown$1$1.AbstractLevelDOWN;
+var inherits$3 = inheritsExports;
+var DeferredIterator = deferredIterator;
+var deferrables = 'put get del batch clear'.split(' ');
+var optionalDeferrables = 'approximateSize compactRange'.split(' ');
+
+function DeferredLevelDOWN$1 (db) {
+ AbstractLevelDOWN$4.call(this, db.supports || {});
+
+ // TODO (future major): remove this fallback; db must have manifest that
+ // declares approximateSize and compactRange in additionalMethods.
+ optionalDeferrables.forEach(function (m) {
+ if (typeof db[m] === 'function' && !this.supports.additionalMethods[m]) {
+ this.supports.additionalMethods[m] = true;
+ }
+ }, this);
+
+ this._db = db;
+ this._operations = [];
+ closed(this);
+}
+
+inherits$3(DeferredLevelDOWN$1, AbstractLevelDOWN$4);
+
+DeferredLevelDOWN$1.prototype.type = 'deferred-leveldown';
+
+DeferredLevelDOWN$1.prototype._open = function (options, callback) {
+ var self = this;
+
+ this._db.open(options, function (err) {
+ if (err) return callback(err)
+
+ self._operations.forEach(function (op) {
+ if (op.iterator) {
+ op.iterator.setDb(self._db);
+ } else {
+ self._db[op.method].apply(self._db, op.args);
+ }
+ });
+ self._operations = [];
+
+ open(self);
+ callback();
+ });
+};
+
+DeferredLevelDOWN$1.prototype._close = function (callback) {
+ var self = this;
+
+ this._db.close(function (err) {
+ if (err) return callback(err)
+ closed(self);
+ callback();
+ });
+};
+
+function open (self) {
+ deferrables.concat('iterator').forEach(function (m) {
+ self['_' + m] = function () {
+ return this._db[m].apply(this._db, arguments)
+ };
+ });
+ Object.keys(self.supports.additionalMethods).forEach(function (m) {
+ self[m] = function () {
+ return this._db[m].apply(this._db, arguments)
+ };
+ });
+}
+
+function closed (self) {
+ deferrables.forEach(function (m) {
+ self['_' + m] = function () {
+ this._operations.push({ method: m, args: arguments });
+ };
+ });
+ Object.keys(self.supports.additionalMethods).forEach(function (m) {
+ self[m] = function () {
+ this._operations.push({ method: m, args: arguments });
+ };
+ });
+ self._iterator = function (options) {
+ var it = new DeferredIterator(self, options);
+ this._operations.push({ iterator: it });
+ return it
+ };
+}
+
+DeferredLevelDOWN$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+DeferredLevelDOWN$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+deferredLeveldown.exports = DeferredLevelDOWN$1;
+deferredLeveldown.exports.DeferredIterator = DeferredIterator;
+
+var deferredLeveldownExports = deferredLeveldown.exports;
+
+var readable$2 = {exports: {}};
+
+var stream$1;
+var hasRequiredStream$1;
+
+function requireStream$1 () {
+ if (hasRequiredStream$1) return stream$1;
+ hasRequiredStream$1 = 1;
+ stream$1 = Stream;
+ return stream$1;
+}
+
+var buffer_list$1;
+var hasRequiredBuffer_list$1;
+
+function requireBuffer_list$1 () {
+ if (hasRequiredBuffer_list$1) return buffer_list$1;
+ hasRequiredBuffer_list$1 = 1;
+
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var _require = require$$0$2,
+ Buffer = _require.Buffer;
+ var _require2 = require$$0$1$1,
+ inspect = _require2.inspect;
+ var custom = inspect && inspect.custom || 'inspect';
+ function copyBuffer(src, target, offset) {
+ Buffer.prototype.copy.call(src, target, offset);
+ }
+ buffer_list$1 = /*#__PURE__*/function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+ _createClass(BufferList, [{
+ key: "push",
+ value: function push(v) {
+ var entry = {
+ data: v,
+ next: null
+ };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ }
+ }, {
+ key: "unshift",
+ value: function unshift(v) {
+ var entry = {
+ data: v,
+ next: this.head
+ };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ }
+ }, {
+ key: "shift",
+ value: function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ }
+ }, {
+ key: "join",
+ value: function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) ret += s + p.data;
+ return ret;
+ }
+ }, {
+ key: "concat",
+ value: function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes or characters from the buffered data.
+ }, {
+ key: "consume",
+ value: function consume(n, hasStrings) {
+ var ret;
+ if (n < this.head.data.length) {
+ // `slice` is the same for buffers and strings.
+ ret = this.head.data.slice(0, n);
+ this.head.data = this.head.data.slice(n);
+ } else if (n === this.head.data.length) {
+ // First chunk is a perfect match.
+ ret = this.shift();
+ } else {
+ // Result spans more than one buffer.
+ ret = hasStrings ? this._getString(n) : this._getBuffer(n);
+ }
+ return ret;
+ }
+ }, {
+ key: "first",
+ value: function first() {
+ return this.head.data;
+ }
+
+ // Consumes a specified amount of characters from the buffered data.
+ }, {
+ key: "_getString",
+ value: function _getString(n) {
+ var p = this.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes from the buffered data.
+ }, {
+ key: "_getBuffer",
+ value: function _getBuffer(n) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = this.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Make sure the linked list only shows the minimal necessary information.
+ }, {
+ key: custom,
+ value: function value(_, options) {
+ return inspect(this, _objectSpread(_objectSpread({}, options), {}, {
+ // Only inspect one level.
+ depth: 0,
+ // It should not recurse.
+ customInspect: false
+ }));
+ }
+ }]);
+ return BufferList;
+ }();
+ return buffer_list$1;
+}
+
+var destroy_1$1;
+var hasRequiredDestroy$1;
+
+function requireDestroy$1 () {
+ if (hasRequiredDestroy$1) return destroy_1$1;
+ hasRequiredDestroy$1 = 1;
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err) {
+ if (!this._writableState) {
+ process.nextTick(emitErrorNT, this, err);
+ } else if (!this._writableState.errorEmitted) {
+ this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorNT, this, err);
+ }
+ }
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ if (!_this._writableState) {
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else if (!_this._writableState.errorEmitted) {
+ _this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ } else if (cb) {
+ process.nextTick(emitCloseNT, _this);
+ cb(err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ });
+ return this;
+ }
+ function emitErrorAndCloseNT(self, err) {
+ emitErrorNT(self, err);
+ emitCloseNT(self);
+ }
+ function emitCloseNT(self) {
+ if (self._writableState && !self._writableState.emitClose) return;
+ if (self._readableState && !self._readableState.emitClose) return;
+ self.emit('close');
+ }
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finalCalled = false;
+ this._writableState.prefinished = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+ function errorOrDestroy(stream, err) {
+ // We have tests that rely on errors being emitted
+ // in the same tick, so changing this is semver major.
+ // For now when you opt-in to autoDestroy we allow
+ // the error to be emitted nextTick. In a future
+ // semver major update we should change the default to this.
+
+ var rState = stream._readableState;
+ var wState = stream._writableState;
+ if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
+ }
+ destroy_1$1 = {
+ destroy: destroy,
+ undestroy: undestroy,
+ errorOrDestroy: errorOrDestroy
+ };
+ return destroy_1$1;
+}
+
+var errors$3 = {};
+
+var hasRequiredErrors$1;
+
+function requireErrors$1 () {
+ if (hasRequiredErrors$1) return errors$3;
+ hasRequiredErrors$1 = 1;
+
+ const codes = {};
+
+ function createErrorType(code, message, Base) {
+ if (!Base) {
+ Base = Error;
+ }
+
+ function getMessage (arg1, arg2, arg3) {
+ if (typeof message === 'string') {
+ return message
+ } else {
+ return message(arg1, arg2, arg3)
+ }
+ }
+
+ class NodeError extends Base {
+ constructor (arg1, arg2, arg3) {
+ super(getMessage(arg1, arg2, arg3));
+ }
+ }
+
+ NodeError.prototype.name = Base.name;
+ NodeError.prototype.code = code;
+
+ codes[code] = NodeError;
+ }
+
+ // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
+ function oneOf(expected, thing) {
+ if (Array.isArray(expected)) {
+ const len = expected.length;
+ expected = expected.map((i) => String(i));
+ if (len > 2) {
+ return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
+ expected[len - 1];
+ } else if (len === 2) {
+ return `one of ${thing} ${expected[0]} or ${expected[1]}`;
+ } else {
+ return `of ${thing} ${expected[0]}`;
+ }
+ } else {
+ return `of ${thing} ${String(expected)}`;
+ }
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
+ function startsWith(str, search, pos) {
+ return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
+ function endsWith(str, search, this_len) {
+ if (this_len === undefined || this_len > str.length) {
+ this_len = str.length;
+ }
+ return str.substring(this_len - search.length, this_len) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ function includes(str, search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > str.length) {
+ return false;
+ } else {
+ return str.indexOf(search, start) !== -1;
+ }
+ }
+
+ createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
+ return 'The value "' + value + '" is invalid for option "' + name + '"'
+ }, TypeError);
+ createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
+ // determiner: 'must be' or 'must not be'
+ let determiner;
+ if (typeof expected === 'string' && startsWith(expected, 'not ')) {
+ determiner = 'must not be';
+ expected = expected.replace(/^not /, '');
+ } else {
+ determiner = 'must be';
+ }
+
+ let msg;
+ if (endsWith(name, ' argument')) {
+ // For cases like 'first argument'
+ msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
+ } else {
+ const type = includes(name, '.') ? 'property' : 'argument';
+ msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
+ }
+
+ msg += `. Received type ${typeof actual}`;
+ return msg;
+ }, TypeError);
+ createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
+ createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
+ return 'The ' + name + ' method is not implemented'
+ });
+ createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
+ createErrorType('ERR_STREAM_DESTROYED', function (name) {
+ return 'Cannot call ' + name + ' after a stream was destroyed';
+ });
+ createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
+ createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
+ createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
+ createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
+ createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
+ return 'Unknown encoding: ' + arg
+ }, TypeError);
+ createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
+
+ errors$3.codes = codes;
+ return errors$3;
+}
+
+var state$1;
+var hasRequiredState$1;
+
+function requireState$1 () {
+ if (hasRequiredState$1) return state$1;
+ hasRequiredState$1 = 1;
+
+ var ERR_INVALID_OPT_VALUE = requireErrors$1().codes.ERR_INVALID_OPT_VALUE;
+ function highWaterMarkFrom(options, isDuplex, duplexKey) {
+ return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
+ }
+ function getHighWaterMark(state, options, duplexKey, isDuplex) {
+ var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
+ if (hwm != null) {
+ if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
+ var name = isDuplex ? duplexKey : 'highWaterMark';
+ throw new ERR_INVALID_OPT_VALUE(name, hwm);
+ }
+ return Math.floor(hwm);
+ }
+
+ // Default value
+ return state.objectMode ? 16 : 16 * 1024;
+ }
+ state$1 = {
+ getHighWaterMark: getHighWaterMark
+ };
+ return state$1;
+}
+
+var node;
+var hasRequiredNode;
+
+function requireNode () {
+ if (hasRequiredNode) return node;
+ hasRequiredNode = 1;
+ /**
+ * For Node.js, simply re-export the core `util.deprecate` function.
+ */
+
+ node = require$$0$1$1.deprecate;
+ return node;
+}
+
+var _stream_writable$2;
+var hasRequired_stream_writable$2;
+
+function require_stream_writable$2 () {
+ if (hasRequired_stream_writable$2) return _stream_writable$2;
+ hasRequired_stream_writable$2 = 1;
+
+ _stream_writable$2 = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream$1();
+ /**/
+
+ var Buffer = require$$0$2.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+ var destroyImpl = requireDestroy$1();
+ var _require = requireState$1(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors$1().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
+ ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
+ ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
+ ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ inheritsExports(Writable, Stream);
+ function nop() {}
+ function WritableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex$2();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream,
+ // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'finish' (and potentially 'end')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function writableStateBufferGetter() {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function value(object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function realHasInstance(object) {
+ return object instanceof this;
+ };
+ }
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex$2();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the WritableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
+ this._writableState = new WritableState(options, this, isDuplex);
+
+ // legacy.
+ this.writable = true;
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+ if (typeof options.writev === 'function') this._writev = options.writev;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
+ };
+ function writeAfterEnd(stream, cb) {
+ var er = new ERR_STREAM_WRITE_AFTER_END();
+ // TODO: defer error events consistently everywhere, not just the cb
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var er;
+ if (chunk === null) {
+ er = new ERR_STREAM_NULL_VALUES();
+ } else if (typeof chunk !== 'string' && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
+ }
+ if (er) {
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ return false;
+ }
+ return true;
+ }
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+ if (typeof cb !== 'function') cb = nop;
+ if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+ return ret;
+ };
+ Writable.prototype.cork = function () {
+ this._writableState.corked++;
+ };
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+ if (state.corked) {
+ state.corked--;
+ if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+ state.length += len;
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+ return ret;
+ }
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ process.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ process.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+ if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
+ onwriteStateUpdate(state);
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state) || stream.destroyed;
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+ if (sync) {
+ process.nextTick(afterWrite, stream, state, finished, cb);
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
+ };
+ Writable.prototype._writev = null;
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending) endWritable(this, state, cb);
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ errorOrDestroy(stream, err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function' && !state.destroyed) {
+ state.pendingcb++;
+ state.finalCalled = true;
+ process.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the readable side is ready for autoDestroy as well
+ var rState = stream._readableState;
+ if (!rState || rState.autoDestroy && rState.endEmitted) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ return need;
+ }
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+
+ // reuse the free corkReq.
+ state.corkedRequestsFree.next = corkReq;
+ }
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+ return _stream_writable$2;
+}
+
+var _stream_duplex$2;
+var hasRequired_stream_duplex$2;
+
+function require_stream_duplex$2 () {
+ if (hasRequired_stream_duplex$2) return _stream_duplex$2;
+ hasRequired_stream_duplex$2 = 1;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+ _stream_duplex$2 = Duplex;
+ var Readable = require_stream_readable$2();
+ var Writable = require_stream_writable$2();
+ inheritsExports(Duplex, Readable);
+ {
+ // Allow the keys array to be GC'ed.
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+ Readable.call(this, options);
+ Writable.call(this, options);
+ this.allowHalfOpen = true;
+ if (options) {
+ if (options.readable === false) this.readable = false;
+ if (options.writable === false) this.writable = false;
+ if (options.allowHalfOpen === false) {
+ this.allowHalfOpen = false;
+ this.once('end', onend);
+ }
+ }
+ }
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // If the writable side ended, then we're ok.
+ if (this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(onEndNT, this);
+ }
+ function onEndNT(self) {
+ self.end();
+ }
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+ return _stream_duplex$2;
+}
+
+var string_decoder$1 = {};
+
+var safeBuffer = {exports: {}};
+
+/*! safe-buffer. MIT License. Feross Aboukhadijeh */
+safeBuffer.exports;
+
+var hasRequiredSafeBuffer;
+
+function requireSafeBuffer () {
+ if (hasRequiredSafeBuffer) return safeBuffer.exports;
+ hasRequiredSafeBuffer = 1;
+ (function (module, exports) {
+ /* eslint-disable node/no-deprecated-api */
+ var buffer = require$$0$2;
+ var Buffer = buffer.Buffer;
+
+ // alternative to using Object.keys for old browsers
+ function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key];
+ }
+ }
+ if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer;
+ } else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports);
+ exports.Buffer = SafeBuffer;
+ }
+
+ function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+ }
+
+ SafeBuffer.prototype = Object.create(Buffer.prototype);
+
+ // Copy static methods from Buffer
+ copyProps(Buffer, SafeBuffer);
+
+ SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+ };
+
+ SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size);
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding);
+ } else {
+ buf.fill(fill);
+ }
+ } else {
+ buf.fill(0);
+ }
+ return buf
+ };
+
+ SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+ };
+
+ SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+ };
+ } (safeBuffer, safeBuffer.exports));
+ return safeBuffer.exports;
+}
+
+var hasRequiredString_decoder$1;
+
+function requireString_decoder$1 () {
+ if (hasRequiredString_decoder$1) return string_decoder$1;
+ hasRequiredString_decoder$1 = 1;
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ /**/
+
+ var isEncoding = Buffer.isEncoding || function (encoding) {
+ encoding = '' + encoding;
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ function _normalizeEncoding(enc) {
+ if (!enc) return 'utf8';
+ var retried;
+ while (true) {
+ switch (enc) {
+ case 'utf8':
+ case 'utf-8':
+ return 'utf8';
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return 'utf16le';
+ case 'latin1':
+ case 'binary':
+ return 'latin1';
+ case 'base64':
+ case 'ascii':
+ case 'hex':
+ return enc;
+ default:
+ if (retried) return; // undefined
+ enc = ('' + enc).toLowerCase();
+ retried = true;
+ }
+ }
+ }
+ // Do not cache `Buffer.isEncoding` when checking encoding names as some
+ // modules monkey-patch it to support additional encodings
+ function normalizeEncoding(enc) {
+ var nenc = _normalizeEncoding(enc);
+ if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+ return nenc || enc;
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters.
+ string_decoder$1.StringDecoder = StringDecoder;
+ function StringDecoder(encoding) {
+ this.encoding = normalizeEncoding(encoding);
+ var nb;
+ switch (this.encoding) {
+ case 'utf16le':
+ this.text = utf16Text;
+ this.end = utf16End;
+ nb = 4;
+ break;
+ case 'utf8':
+ this.fillLast = utf8FillLast;
+ nb = 4;
+ break;
+ case 'base64':
+ this.text = base64Text;
+ this.end = base64End;
+ nb = 3;
+ break;
+ default:
+ this.write = simpleWrite;
+ this.end = simpleEnd;
+ return;
+ }
+ this.lastNeed = 0;
+ this.lastTotal = 0;
+ this.lastChar = Buffer.allocUnsafe(nb);
+ }
+
+ StringDecoder.prototype.write = function (buf) {
+ if (buf.length === 0) return '';
+ var r;
+ var i;
+ if (this.lastNeed) {
+ r = this.fillLast(buf);
+ if (r === undefined) return '';
+ i = this.lastNeed;
+ this.lastNeed = 0;
+ } else {
+ i = 0;
+ }
+ if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+ return r || '';
+ };
+
+ StringDecoder.prototype.end = utf8End;
+
+ // Returns only complete characters in a Buffer
+ StringDecoder.prototype.text = utf8Text;
+
+ // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+ StringDecoder.prototype.fillLast = function (buf) {
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+ this.lastNeed -= buf.length;
+ };
+
+ // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+ // continuation byte. If an invalid byte is detected, -2 is returned.
+ function utf8CheckByte(byte) {
+ if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+ return byte >> 6 === 0x02 ? -1 : -2;
+ }
+
+ // Checks at most 3 bytes at the end of a Buffer in order to detect an
+ // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+ // needed to complete the UTF-8 character (if applicable) are returned.
+ function utf8CheckIncomplete(self, buf, i) {
+ var j = buf.length - 1;
+ if (j < i) return 0;
+ var nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 1;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 2;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) {
+ if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+ }
+ return nb;
+ }
+ return 0;
+ }
+
+ // Validates as many continuation bytes for a multi-byte UTF-8 character as
+ // needed or are available. If we see a non-continuation byte where we expect
+ // one, we "replace" the validated continuation bytes we've seen so far with
+ // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
+ // behavior. The continuation byte check is included three times in the case
+ // where all of the continuation bytes for a character exist in the same buffer.
+ // It is also done this way as a slight performance increase instead of using a
+ // loop.
+ function utf8CheckExtraBytes(self, buf, p) {
+ if ((buf[0] & 0xC0) !== 0x80) {
+ self.lastNeed = 0;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 1 && buf.length > 1) {
+ if ((buf[1] & 0xC0) !== 0x80) {
+ self.lastNeed = 1;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 2 && buf.length > 2) {
+ if ((buf[2] & 0xC0) !== 0x80) {
+ self.lastNeed = 2;
+ return '\ufffd';
+ }
+ }
+ }
+ }
+
+ // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+ function utf8FillLast(buf) {
+ var p = this.lastTotal - this.lastNeed;
+ var r = utf8CheckExtraBytes(this, buf);
+ if (r !== undefined) return r;
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, p, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, p, 0, buf.length);
+ this.lastNeed -= buf.length;
+ }
+
+ // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+ // partial character, the character's bytes are buffered until the required
+ // number of bytes are available.
+ function utf8Text(buf, i) {
+ var total = utf8CheckIncomplete(this, buf, i);
+ if (!this.lastNeed) return buf.toString('utf8', i);
+ this.lastTotal = total;
+ var end = buf.length - (total - this.lastNeed);
+ buf.copy(this.lastChar, 0, end);
+ return buf.toString('utf8', i, end);
+ }
+
+ // For UTF-8, a replacement character is added when ending on a partial
+ // character.
+ function utf8End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + '\ufffd';
+ return r;
+ }
+
+ // UTF-16LE typically needs two bytes per character, but even if we have an even
+ // number of bytes available, we need to check if we end on a leading/high
+ // surrogate. In that case, we need to wait for the next two bytes in order to
+ // decode the last character properly.
+ function utf16Text(buf, i) {
+ if ((buf.length - i) % 2 === 0) {
+ var r = buf.toString('utf16le', i);
+ if (r) {
+ var c = r.charCodeAt(r.length - 1);
+ if (c >= 0xD800 && c <= 0xDBFF) {
+ this.lastNeed = 2;
+ this.lastTotal = 4;
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ return r.slice(0, -1);
+ }
+ }
+ return r;
+ }
+ this.lastNeed = 1;
+ this.lastTotal = 2;
+ this.lastChar[0] = buf[buf.length - 1];
+ return buf.toString('utf16le', i, buf.length - 1);
+ }
+
+ // For UTF-16LE we do not explicitly append special replacement characters if we
+ // end on a partial character, we simply let v8 handle that.
+ function utf16End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) {
+ var end = this.lastTotal - this.lastNeed;
+ return r + this.lastChar.toString('utf16le', 0, end);
+ }
+ return r;
+ }
+
+ function base64Text(buf, i) {
+ var n = (buf.length - i) % 3;
+ if (n === 0) return buf.toString('base64', i);
+ this.lastNeed = 3 - n;
+ this.lastTotal = 3;
+ if (n === 1) {
+ this.lastChar[0] = buf[buf.length - 1];
+ } else {
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ }
+ return buf.toString('base64', i, buf.length - n);
+ }
+
+ function base64End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+ return r;
+ }
+
+ // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+ function simpleWrite(buf) {
+ return buf.toString(this.encoding);
+ }
+
+ function simpleEnd(buf) {
+ return buf && buf.length ? this.write(buf) : '';
+ }
+ return string_decoder$1;
+}
+
+var endOfStream$1;
+var hasRequiredEndOfStream$1;
+
+function requireEndOfStream$1 () {
+ if (hasRequiredEndOfStream$1) return endOfStream$1;
+ hasRequiredEndOfStream$1 = 1;
+
+ var ERR_STREAM_PREMATURE_CLOSE = requireErrors$1().codes.ERR_STREAM_PREMATURE_CLOSE;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ callback.apply(this, args);
+ };
+ }
+ function noop() {}
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function eos(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
+ callback = once(callback || noop);
+ var readable = opts.readable || opts.readable !== false && stream.readable;
+ var writable = opts.writable || opts.writable !== false && stream.writable;
+ var onlegacyfinish = function onlegacyfinish() {
+ if (!stream.writable) onfinish();
+ };
+ var writableEnded = stream._writableState && stream._writableState.finished;
+ var onfinish = function onfinish() {
+ writable = false;
+ writableEnded = true;
+ if (!readable) callback.call(stream);
+ };
+ var readableEnded = stream._readableState && stream._readableState.endEmitted;
+ var onend = function onend() {
+ readable = false;
+ readableEnded = true;
+ if (!writable) callback.call(stream);
+ };
+ var onerror = function onerror(err) {
+ callback.call(stream, err);
+ };
+ var onclose = function onclose() {
+ var err;
+ if (readable && !readableEnded) {
+ if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ if (writable && !writableEnded) {
+ if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ };
+ var onrequest = function onrequest() {
+ stream.req.on('finish', onfinish);
+ };
+ if (isRequest(stream)) {
+ stream.on('complete', onfinish);
+ stream.on('abort', onclose);
+ if (stream.req) onrequest();else stream.on('request', onrequest);
+ } else if (writable && !stream._writableState) {
+ // legacy streams
+ stream.on('end', onlegacyfinish);
+ stream.on('close', onlegacyfinish);
+ }
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+ return function () {
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+ }
+ endOfStream$1 = eos;
+ return endOfStream$1;
+}
+
+var async_iterator$1;
+var hasRequiredAsync_iterator$1;
+
+function requireAsync_iterator$1 () {
+ if (hasRequiredAsync_iterator$1) return async_iterator$1;
+ hasRequiredAsync_iterator$1 = 1;
+
+ var _Object$setPrototypeO;
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var finished = requireEndOfStream$1();
+ var kLastResolve = Symbol('lastResolve');
+ var kLastReject = Symbol('lastReject');
+ var kError = Symbol('error');
+ var kEnded = Symbol('ended');
+ var kLastPromise = Symbol('lastPromise');
+ var kHandlePromise = Symbol('handlePromise');
+ var kStream = Symbol('stream');
+ function createIterResult(value, done) {
+ return {
+ value: value,
+ done: done
+ };
+ }
+ function readAndResolve(iter) {
+ var resolve = iter[kLastResolve];
+ if (resolve !== null) {
+ var data = iter[kStream].read();
+ // we defer if data is null
+ // we can be expecting either 'end' or
+ // 'error'
+ if (data !== null) {
+ iter[kLastPromise] = null;
+ iter[kLastResolve] = null;
+ iter[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ }
+ }
+ }
+ function onReadable(iter) {
+ // we wait for the next tick, because it might
+ // emit an error with process.nextTick
+ process.nextTick(readAndResolve, iter);
+ }
+ function wrapForNext(lastPromise, iter) {
+ return function (resolve, reject) {
+ lastPromise.then(function () {
+ if (iter[kEnded]) {
+ resolve(createIterResult(undefined, true));
+ return;
+ }
+ iter[kHandlePromise](resolve, reject);
+ }, reject);
+ };
+ }
+ var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
+ var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
+ get stream() {
+ return this[kStream];
+ },
+ next: function next() {
+ var _this = this;
+ // if we have detected an error in the meanwhile
+ // reject straight away
+ var error = this[kError];
+ if (error !== null) {
+ return Promise.reject(error);
+ }
+ if (this[kEnded]) {
+ return Promise.resolve(createIterResult(undefined, true));
+ }
+ if (this[kStream].destroyed) {
+ // We need to defer via nextTick because if .destroy(err) is
+ // called, the error will be emitted via nextTick, and
+ // we cannot guarantee that there is no error lingering around
+ // waiting to be emitted.
+ return new Promise(function (resolve, reject) {
+ process.nextTick(function () {
+ if (_this[kError]) {
+ reject(_this[kError]);
+ } else {
+ resolve(createIterResult(undefined, true));
+ }
+ });
+ });
+ }
+
+ // if we have multiple next() calls
+ // we will wait for the previous Promise to finish
+ // this logic is optimized to support for await loops,
+ // where next() is only called once at a time
+ var lastPromise = this[kLastPromise];
+ var promise;
+ if (lastPromise) {
+ promise = new Promise(wrapForNext(lastPromise, this));
+ } else {
+ // fast path needed to support multiple this.push()
+ // without triggering the next() queue
+ var data = this[kStream].read();
+ if (data !== null) {
+ return Promise.resolve(createIterResult(data, false));
+ }
+ promise = new Promise(this[kHandlePromise]);
+ }
+ this[kLastPromise] = promise;
+ return promise;
+ }
+ }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
+ return this;
+ }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
+ var _this2 = this;
+ // destroy(err, cb) is a private API
+ // we can guarantee we have that here, because we control the
+ // Readable class this is attached to
+ return new Promise(function (resolve, reject) {
+ _this2[kStream].destroy(null, function (err) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(createIterResult(undefined, true));
+ });
+ });
+ }), _Object$setPrototypeO), AsyncIteratorPrototype);
+ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
+ var _Object$create;
+ var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
+ value: stream,
+ writable: true
+ }), _defineProperty(_Object$create, kLastResolve, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kLastReject, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kError, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kEnded, {
+ value: stream._readableState.endEmitted,
+ writable: true
+ }), _defineProperty(_Object$create, kHandlePromise, {
+ value: function value(resolve, reject) {
+ var data = iterator[kStream].read();
+ if (data) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ } else {
+ iterator[kLastResolve] = resolve;
+ iterator[kLastReject] = reject;
+ }
+ },
+ writable: true
+ }), _Object$create));
+ iterator[kLastPromise] = null;
+ finished(stream, function (err) {
+ if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
+ var reject = iterator[kLastReject];
+ // reject if we are waiting for data in the Promise
+ // returned by next() and store the error
+ if (reject !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ reject(err);
+ }
+ iterator[kError] = err;
+ return;
+ }
+ var resolve = iterator[kLastResolve];
+ if (resolve !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(undefined, true));
+ }
+ iterator[kEnded] = true;
+ });
+ stream.on('readable', onReadable.bind(null, iterator));
+ return iterator;
+ };
+ async_iterator$1 = createReadableStreamAsyncIterator;
+ return async_iterator$1;
+}
+
+var from_1$1;
+var hasRequiredFrom$1;
+
+function requireFrom$1 () {
+ if (hasRequiredFrom$1) return from_1$1;
+ hasRequiredFrom$1 = 1;
+
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var ERR_INVALID_ARG_TYPE = requireErrors$1().codes.ERR_INVALID_ARG_TYPE;
+ function from(Readable, iterable, opts) {
+ var iterator;
+ if (iterable && typeof iterable.next === 'function') {
+ iterator = iterable;
+ } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);
+ var readable = new Readable(_objectSpread({
+ objectMode: true
+ }, opts));
+ // Reading boolean to protect against _read
+ // being called before last iteration completion.
+ var reading = false;
+ readable._read = function () {
+ if (!reading) {
+ reading = true;
+ next();
+ }
+ };
+ function next() {
+ return _next2.apply(this, arguments);
+ }
+ function _next2() {
+ _next2 = _asyncToGenerator(function* () {
+ try {
+ var _yield$iterator$next = yield iterator.next(),
+ value = _yield$iterator$next.value,
+ done = _yield$iterator$next.done;
+ if (done) {
+ readable.push(null);
+ } else if (readable.push(yield value)) {
+ next();
+ } else {
+ reading = false;
+ }
+ } catch (err) {
+ readable.destroy(err);
+ }
+ });
+ return _next2.apply(this, arguments);
+ }
+ return readable;
+ }
+ from_1$1 = from;
+ return from_1$1;
+}
+
+var _stream_readable$2;
+var hasRequired_stream_readable$2;
+
+function require_stream_readable$2 () {
+ if (hasRequired_stream_readable$2) return _stream_readable$2;
+ hasRequired_stream_readable$2 = 1;
+
+ _stream_readable$2 = Readable;
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$0$2$1.EventEmitter;
+ var EElistenerCount = function EElistenerCount(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream$1();
+ /**/
+
+ var Buffer = require$$0$2.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+ var debugUtil = require$$0$1$1;
+ var debug;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function debug() {};
+ }
+ /**/
+
+ var BufferList = requireBuffer_list$1();
+ var destroyImpl = requireDestroy$1();
+ var _require = requireState$1(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors$1().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
+
+ // Lazy loaded to improve the startup performance.
+ var StringDecoder;
+ var createReadableStreamAsyncIterator;
+ var from;
+ inheritsExports(Readable, Stream);
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+ function ReadableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex$2();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+ this.paused = true;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'end' (and potentially 'finish')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex$2();
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the ReadableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ this._readableState = new ReadableState(options, this, isDuplex);
+
+ // legacy
+ this.readable = true;
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+ Stream.call(this);
+ }
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ debug('readableAddChunk', chunk);
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ errorOrDestroy(stream, er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (addToFront) {
+ if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
+ } else if (state.destroyed) {
+ return false;
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ maybeReadMore(stream, state);
+ }
+ }
+
+ // We can push more data if we are below the highWaterMark.
+ // Also, if we have no data yet, we can stand some more bytes.
+ // This is to work around cases where hwm=0, such as the repl.
+ return !state.ended && (state.length < state.highWaterMark || state.length === 0);
+ }
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ state.awaitDrain = 0;
+ stream.emit('data', chunk);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
+ }
+ return er;
+ }
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ var decoder = new StringDecoder(enc);
+ this._readableState.decoder = decoder;
+ // If setEncoding(null), decoder.encoding equals utf8
+ this._readableState.encoding = this._readableState.decoder.encoding;
+
+ // Iterate over current buffer to convert already stored Buffers:
+ var p = this._readableState.buffer.head;
+ var content = '';
+ while (p !== null) {
+ content += decoder.write(p.data);
+ p = p.next;
+ }
+ this._readableState.buffer.clear();
+ if (content !== '') this._readableState.buffer.push(content);
+ this._readableState.length = content.length;
+ return this;
+ };
+
+ // Don't raise the hwm > 1GB
+ var MAX_HWM = 0x40000000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+ if (ret === null) {
+ state.needReadable = state.length <= state.highWaterMark;
+ n = 0;
+ } else {
+ state.length -= n;
+ state.awaitDrain = 0;
+ }
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+ if (ret !== null) this.emit('data', ret);
+ return ret;
+ };
+ function onEofChunk(stream, state) {
+ debug('onEofChunk');
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+ if (state.sync) {
+ // if we are sync, wait until next tick to emit the data.
+ // Otherwise we risk emitting data in the flow()
+ // the readable code triggers during a read() call
+ emitReadable(stream);
+ } else {
+ // emit 'readable' now to make sure it gets picked up.
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ state.emittedReadable = true;
+ emitReadable_(stream);
+ }
+ }
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ debug('emitReadable', state.needReadable, state.emittedReadable);
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ process.nextTick(emitReadable_, stream);
+ }
+ }
+ function emitReadable_(stream) {
+ var state = stream._readableState;
+ debug('emitReadable_', state.destroyed, state.length, state.ended);
+ if (!state.destroyed && (state.length || state.ended)) {
+ stream.emit('readable');
+ state.emittedReadable = false;
+ }
+
+ // The stream needs another readable event if
+ // 1. It is not flowing, as the flow mechanism will take
+ // care of it.
+ // 2. It is not ended.
+ // 3. It is below the highWaterMark, so we can schedule
+ // another readable later.
+ state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+ function maybeReadMore_(stream, state) {
+ // Attempt to read more data if we should.
+ //
+ // The conditions for reading more data are (one of):
+ // - Not enough data buffered (state.length < state.highWaterMark). The loop
+ // is responsible for filling the buffer with enough data if such data
+ // is available. If highWaterMark is 0 and we are not in the flowing mode
+ // we should _not_ attempt to buffer any extra data. We'll get more data
+ // when the stream consumer calls read() instead.
+ // - No data in the buffer, and the stream is in flowing mode. In this mode
+ // the loop below is responsible for ensuring read() is called. Failing to
+ // call read here would abort the flow and there's no other mechanism for
+ // continuing the flow if the stream consumer has just subscribed to the
+ // 'data' event.
+ //
+ // In addition to the above conditions to keep reading data, the following
+ // conditions prevent the data from being read:
+ // - The stream has ended (state.ended).
+ // - There is already a pending 'read' operation (state.reading). This is a
+ // case where the the stream has called the implementation defined _read()
+ // method, but they are processing the call asynchronously and have _not_
+ // called push() with new data. In this case we skip performing more
+ // read()s. The execution ends in this method again after the _read() ends
+ // up calling push() with more data.
+ while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
+ var len = state.length;
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
+ };
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ debug('dest.write', ret);
+ if (ret === false) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', state.awaitDrain);
+ state.awaitDrain++;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+ return dest;
+ };
+ function pipeOnDrain(src) {
+ return function pipeOnDrainFunctionResult() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = {
+ hasUnpiped: false
+ };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {
+ hasUnpiped: false
+ });
+ return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+ dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+ var state = this._readableState;
+ if (ev === 'data') {
+ // update readableListening so that resume() may be a no-op
+ // a few lines down. This is needed to support once('readable').
+ state.readableListening = this.listenerCount('readable') > 0;
+
+ // Try start flowing on next tick if stream isn't explicitly paused
+ if (state.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.flowing = false;
+ state.emittedReadable = false;
+ debug('on readable', state.length, state.reading);
+ if (state.length) {
+ emitReadable(this);
+ } else if (!state.reading) {
+ process.nextTick(nReadingNextTick, this);
+ }
+ }
+ }
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+ Readable.prototype.removeListener = function (ev, fn) {
+ var res = Stream.prototype.removeListener.call(this, ev, fn);
+ if (ev === 'readable') {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ Readable.prototype.removeAllListeners = function (ev) {
+ var res = Stream.prototype.removeAllListeners.apply(this, arguments);
+ if (ev === 'readable' || ev === undefined) {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ function updateReadableListening(self) {
+ var state = self._readableState;
+ state.readableListening = self.listenerCount('readable') > 0;
+ if (state.resumeScheduled && !state.paused) {
+ // flowing needs to be set to true now, otherwise
+ // the upcoming resume will not flow.
+ state.flowing = true;
+
+ // crude way to check if we should resume
+ } else if (self.listenerCount('data') > 0) {
+ self.resume();
+ }
+ }
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ // we flow only if there is no one listening
+ // for readable, but we still have to call
+ // resume()
+ state.flowing = !state.readableListening;
+ resume(this, state);
+ }
+ state.paused = false;
+ return this;
+ };
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(resume_, stream, state);
+ }
+ }
+ function resume_(stream, state) {
+ debug('resume', state.reading);
+ if (!state.reading) {
+ stream.read(0);
+ }
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (this._readableState.flowing !== false) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ this._readableState.paused = true;
+ return this;
+ };
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null);
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+ var state = this._readableState;
+ var paused = false;
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+ _this.push(null);
+ });
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function methodWrap(method) {
+ return function methodWrapReturnFunction() {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+ return this;
+ };
+ if (typeof Symbol === 'function') {
+ Readable.prototype[Symbol.asyncIterator] = function () {
+ if (createReadableStreamAsyncIterator === undefined) {
+ createReadableStreamAsyncIterator = requireAsync_iterator$1();
+ }
+ return createReadableStreamAsyncIterator(this);
+ };
+ }
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState && this._readableState.buffer;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableFlowing', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.flowing;
+ },
+ set: function set(state) {
+ if (this._readableState) {
+ this._readableState.flowing = state;
+ }
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+ Object.defineProperty(Readable.prototype, 'readableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.length;
+ }
+ });
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = state.buffer.consume(n, state.decoder);
+ }
+ return ret;
+ }
+ function endReadable(stream) {
+ var state = stream._readableState;
+ debug('endReadable', state.endEmitted);
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(endReadableNT, state, stream);
+ }
+ }
+ function endReadableNT(state, stream) {
+ debug('endReadableNT', state.endEmitted, state.length);
+
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the writable side is ready for autoDestroy as well
+ var wState = stream._writableState;
+ if (!wState || wState.autoDestroy && wState.finished) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ if (typeof Symbol === 'function') {
+ Readable.from = function (iterable, opts) {
+ if (from === undefined) {
+ from = requireFrom$1();
+ }
+ return from(Readable, iterable, opts);
+ };
+ }
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable$2;
+}
+
+var _stream_transform$2;
+var hasRequired_stream_transform$1;
+
+function require_stream_transform$1 () {
+ if (hasRequired_stream_transform$1) return _stream_transform$2;
+ hasRequired_stream_transform$1 = 1;
+
+ _stream_transform$2 = Transform;
+ var _require$codes = requireErrors$1().codes,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
+ ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
+ var Duplex = require_stream_duplex$2();
+ inheritsExports(Transform, Duplex);
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+ var cb = ts.writecb;
+ if (cb === null) {
+ return this.emit('error', new ERR_MULTIPLE_CALLBACK());
+ }
+ ts.writechunk = null;
+ ts.writecb = null;
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ this.push(data);
+ cb(er);
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+ Duplex.call(this, options);
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+ function prefinish() {
+ var _this = this;
+ if (typeof this._flush === 'function' && !this._readableState.destroyed) {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
+ };
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+ if (ts.writechunk !== null && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+ Transform.prototype._destroy = function (err, cb) {
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ });
+ };
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // TODO(BridgeAR): Write a test for these two error cases
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
+ if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
+ return stream.push(null);
+ }
+ return _stream_transform$2;
+}
+
+var _stream_passthrough$2;
+var hasRequired_stream_passthrough$1;
+
+function require_stream_passthrough$1 () {
+ if (hasRequired_stream_passthrough$1) return _stream_passthrough$2;
+ hasRequired_stream_passthrough$1 = 1;
+
+ _stream_passthrough$2 = PassThrough;
+ var Transform = require_stream_transform$1();
+ inheritsExports(PassThrough, Transform);
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+ Transform.call(this, options);
+ }
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough$2;
+}
+
+var pipeline_1$1;
+var hasRequiredPipeline$1;
+
+function requirePipeline$1 () {
+ if (hasRequiredPipeline$1) return pipeline_1$1;
+ hasRequiredPipeline$1 = 1;
+
+ var eos;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ callback.apply(void 0, arguments);
+ };
+ }
+ var _require$codes = requireErrors$1().codes,
+ ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
+ function noop(err) {
+ // Rethrow the error if it exists to avoid swallowing it
+ if (err) throw err;
+ }
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function destroyer(stream, reading, writing, callback) {
+ callback = once(callback);
+ var closed = false;
+ stream.on('close', function () {
+ closed = true;
+ });
+ if (eos === undefined) eos = requireEndOfStream$1();
+ eos(stream, {
+ readable: reading,
+ writable: writing
+ }, function (err) {
+ if (err) return callback(err);
+ closed = true;
+ callback();
+ });
+ var destroyed = false;
+ return function (err) {
+ if (closed) return;
+ if (destroyed) return;
+ destroyed = true;
+
+ // request.destroy just do .end - .abort is what we want
+ if (isRequest(stream)) return stream.abort();
+ if (typeof stream.destroy === 'function') return stream.destroy();
+ callback(err || new ERR_STREAM_DESTROYED('pipe'));
+ };
+ }
+ function call(fn) {
+ fn();
+ }
+ function pipe(from, to) {
+ return from.pipe(to);
+ }
+ function popCallback(streams) {
+ if (!streams.length) return noop;
+ if (typeof streams[streams.length - 1] !== 'function') return noop;
+ return streams.pop();
+ }
+ function pipeline() {
+ for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
+ streams[_key] = arguments[_key];
+ }
+ var callback = popCallback(streams);
+ if (Array.isArray(streams[0])) streams = streams[0];
+ if (streams.length < 2) {
+ throw new ERR_MISSING_ARGS('streams');
+ }
+ var error;
+ var destroys = streams.map(function (stream, i) {
+ var reading = i < streams.length - 1;
+ var writing = i > 0;
+ return destroyer(stream, reading, writing, function (err) {
+ if (!error) error = err;
+ if (err) destroys.forEach(call);
+ if (reading) return;
+ destroys.forEach(call);
+ callback(error);
+ });
+ });
+ return streams.reduce(pipe);
+ }
+ pipeline_1$1 = pipeline;
+ return pipeline_1$1;
+}
+
+readable$2.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1.Readable;
+ Object.assign(module.exports, Stream$1);
+ module.exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable$2();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable$2();
+ exports.Duplex = require_stream_duplex$2();
+ exports.Transform = require_stream_transform$1();
+ exports.PassThrough = require_stream_passthrough$1();
+ exports.finished = requireEndOfStream$1();
+ exports.pipeline = requirePipeline$1();
+ }
+} (readable$2, readable$2.exports));
+
+var readableExports$2 = readable$2.exports;
+
+var inherits$2 = inheritsExports;
+var Readable$1 = readableExports$2.Readable;
+var extend$1 = immutable;
+
+var levelIteratorStream = ReadStream$1;
+inherits$2(ReadStream$1, Readable$1);
+
+function ReadStream$1 (iterator, options) {
+ if (!(this instanceof ReadStream$1)) return new ReadStream$1(iterator, options)
+ options = options || {};
+ Readable$1.call(this, extend$1(options, {
+ objectMode: true
+ }));
+ this._iterator = iterator;
+ this._options = options;
+ this.on('end', this.destroy.bind(this, null, null));
+}
+
+ReadStream$1.prototype._read = function () {
+ var self = this;
+ var options = this._options;
+ if (this.destroyed) return
+
+ this._iterator.next(function (err, key, value) {
+ if (self.destroyed) return
+ if (err) return self.destroy(err)
+
+ if (key === undefined && value === undefined) {
+ self.push(null);
+ } else if (options.keys !== false && options.values === false) {
+ self.push(key);
+ } else if (options.keys === false && options.values !== false) {
+ self.push(value);
+ } else {
+ self.push({ key: key, value: value });
+ }
+ });
+};
+
+ReadStream$1.prototype._destroy = function (err, callback) {
+ this._iterator.end(function (err2) {
+ callback(err || err2);
+ });
+};
+
+var errno = {exports: {}};
+
+var prr$1 = {exports: {}};
+
+/*!
+ * prr
+ * (c) 2013 Rod Vagg
+ * https://github.com/rvagg/prr
+ * License: MIT
+ */
+prr$1.exports;
+
+(function (module) {
+ (function (name, context, definition) {
+ if (module.exports)
+ module.exports = definition();
+ else
+ context[name] = definition();
+ })('prr', commonjsGlobal, function() {
+
+ var setProperty = typeof Object.defineProperty == 'function'
+ ? function (obj, key, options) {
+ Object.defineProperty(obj, key, options);
+ return obj
+ }
+ : function (obj, key, options) { // < es5
+ obj[key] = options.value;
+ return obj
+ }
+
+ , makeOptions = function (value, options) {
+ var oo = typeof options == 'object'
+ , os = !oo && typeof options == 'string'
+ , op = function (p) {
+ return oo
+ ? !!options[p]
+ : os
+ ? options.indexOf(p[0]) > -1
+ : false
+ };
+
+ return {
+ enumerable : op('enumerable')
+ , configurable : op('configurable')
+ , writable : op('writable')
+ , value : value
+ }
+ }
+
+ , prr = function (obj, key, value, options) {
+ var k;
+
+ options = makeOptions(value, options);
+
+ if (typeof key == 'object') {
+ for (k in key) {
+ if (Object.hasOwnProperty.call(key, k)) {
+ options.value = key[k];
+ setProperty(obj, k, options);
+ }
+ }
+ return obj
+ }
+
+ return setProperty(obj, key, options)
+ };
+
+ return prr
+ });
+} (prr$1));
+
+var prrExports = prr$1.exports;
+
+var prr = prrExports;
+
+function init (type, message, cause) {
+ if (!!message && typeof message != 'string') {
+ message = message.message || message.name;
+ }
+ prr(this, {
+ type : type
+ , name : type
+ // can be passed just a 'cause'
+ , cause : typeof message != 'string' ? message : cause
+ , message : message
+ }, 'ewr');
+}
+
+// generic prototype, not intended to be actually used - helpful for `instanceof`
+function CustomError (message, cause) {
+ Error.call(this);
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, this.constructor);
+ init.call(this, 'CustomError', message, cause);
+}
+
+CustomError.prototype = new Error();
+
+function createError$1 (errno, type, proto) {
+ var err = function (message, cause) {
+ init.call(this, type, message, cause);
+ //TODO: the specificity here is stupid, errno should be available everywhere
+ if (type == 'FilesystemError') {
+ this.code = this.cause.code;
+ this.path = this.cause.path;
+ this.errno = this.cause.errno;
+ this.message =
+ (errno.errno[this.cause.errno]
+ ? errno.errno[this.cause.errno].description
+ : this.cause.message)
+ + (this.cause.path ? ' [' + this.cause.path + ']' : '');
+ }
+ Error.call(this);
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, err);
+ };
+ err.prototype = !!proto ? new proto() : new CustomError();
+ return err
+}
+
+var custom = function (errno) {
+ var ce = function (type, proto) {
+ return createError$1(errno, type, proto)
+ };
+ return {
+ CustomError : CustomError
+ , FilesystemError : ce('FilesystemError')
+ , createError : ce
+ }
+};
+
+errno.exports;
+
+(function (module) {
+ var all = module.exports.all = [
+ {
+ errno: -2,
+ code: 'ENOENT',
+ description: 'no such file or directory'
+ },
+ {
+ errno: -1,
+ code: 'UNKNOWN',
+ description: 'unknown error'
+ },
+ {
+ errno: 0,
+ code: 'OK',
+ description: 'success'
+ },
+ {
+ errno: 1,
+ code: 'EOF',
+ description: 'end of file'
+ },
+ {
+ errno: 2,
+ code: 'EADDRINFO',
+ description: 'getaddrinfo error'
+ },
+ {
+ errno: 3,
+ code: 'EACCES',
+ description: 'permission denied'
+ },
+ {
+ errno: 4,
+ code: 'EAGAIN',
+ description: 'resource temporarily unavailable'
+ },
+ {
+ errno: 5,
+ code: 'EADDRINUSE',
+ description: 'address already in use'
+ },
+ {
+ errno: 6,
+ code: 'EADDRNOTAVAIL',
+ description: 'address not available'
+ },
+ {
+ errno: 7,
+ code: 'EAFNOSUPPORT',
+ description: 'address family not supported'
+ },
+ {
+ errno: 8,
+ code: 'EALREADY',
+ description: 'connection already in progress'
+ },
+ {
+ errno: 9,
+ code: 'EBADF',
+ description: 'bad file descriptor'
+ },
+ {
+ errno: 10,
+ code: 'EBUSY',
+ description: 'resource busy or locked'
+ },
+ {
+ errno: 11,
+ code: 'ECONNABORTED',
+ description: 'software caused connection abort'
+ },
+ {
+ errno: 12,
+ code: 'ECONNREFUSED',
+ description: 'connection refused'
+ },
+ {
+ errno: 13,
+ code: 'ECONNRESET',
+ description: 'connection reset by peer'
+ },
+ {
+ errno: 14,
+ code: 'EDESTADDRREQ',
+ description: 'destination address required'
+ },
+ {
+ errno: 15,
+ code: 'EFAULT',
+ description: 'bad address in system call argument'
+ },
+ {
+ errno: 16,
+ code: 'EHOSTUNREACH',
+ description: 'host is unreachable'
+ },
+ {
+ errno: 17,
+ code: 'EINTR',
+ description: 'interrupted system call'
+ },
+ {
+ errno: 18,
+ code: 'EINVAL',
+ description: 'invalid argument'
+ },
+ {
+ errno: 19,
+ code: 'EISCONN',
+ description: 'socket is already connected'
+ },
+ {
+ errno: 20,
+ code: 'EMFILE',
+ description: 'too many open files'
+ },
+ {
+ errno: 21,
+ code: 'EMSGSIZE',
+ description: 'message too long'
+ },
+ {
+ errno: 22,
+ code: 'ENETDOWN',
+ description: 'network is down'
+ },
+ {
+ errno: 23,
+ code: 'ENETUNREACH',
+ description: 'network is unreachable'
+ },
+ {
+ errno: 24,
+ code: 'ENFILE',
+ description: 'file table overflow'
+ },
+ {
+ errno: 25,
+ code: 'ENOBUFS',
+ description: 'no buffer space available'
+ },
+ {
+ errno: 26,
+ code: 'ENOMEM',
+ description: 'not enough memory'
+ },
+ {
+ errno: 27,
+ code: 'ENOTDIR',
+ description: 'not a directory'
+ },
+ {
+ errno: 28,
+ code: 'EISDIR',
+ description: 'illegal operation on a directory'
+ },
+ {
+ errno: 29,
+ code: 'ENONET',
+ description: 'machine is not on the network'
+ },
+ {
+ errno: 31,
+ code: 'ENOTCONN',
+ description: 'socket is not connected'
+ },
+ {
+ errno: 32,
+ code: 'ENOTSOCK',
+ description: 'socket operation on non-socket'
+ },
+ {
+ errno: 33,
+ code: 'ENOTSUP',
+ description: 'operation not supported on socket'
+ },
+ {
+ errno: 34,
+ code: 'ENOENT',
+ description: 'no such file or directory'
+ },
+ {
+ errno: 35,
+ code: 'ENOSYS',
+ description: 'function not implemented'
+ },
+ {
+ errno: 36,
+ code: 'EPIPE',
+ description: 'broken pipe'
+ },
+ {
+ errno: 37,
+ code: 'EPROTO',
+ description: 'protocol error'
+ },
+ {
+ errno: 38,
+ code: 'EPROTONOSUPPORT',
+ description: 'protocol not supported'
+ },
+ {
+ errno: 39,
+ code: 'EPROTOTYPE',
+ description: 'protocol wrong type for socket'
+ },
+ {
+ errno: 40,
+ code: 'ETIMEDOUT',
+ description: 'connection timed out'
+ },
+ {
+ errno: 41,
+ code: 'ECHARSET',
+ description: 'invalid Unicode character'
+ },
+ {
+ errno: 42,
+ code: 'EAIFAMNOSUPPORT',
+ description: 'address family for hostname not supported'
+ },
+ {
+ errno: 44,
+ code: 'EAISERVICE',
+ description: 'servname not supported for ai_socktype'
+ },
+ {
+ errno: 45,
+ code: 'EAISOCKTYPE',
+ description: 'ai_socktype not supported'
+ },
+ {
+ errno: 46,
+ code: 'ESHUTDOWN',
+ description: 'cannot send after transport endpoint shutdown'
+ },
+ {
+ errno: 47,
+ code: 'EEXIST',
+ description: 'file already exists'
+ },
+ {
+ errno: 48,
+ code: 'ESRCH',
+ description: 'no such process'
+ },
+ {
+ errno: 49,
+ code: 'ENAMETOOLONG',
+ description: 'name too long'
+ },
+ {
+ errno: 50,
+ code: 'EPERM',
+ description: 'operation not permitted'
+ },
+ {
+ errno: 51,
+ code: 'ELOOP',
+ description: 'too many symbolic links encountered'
+ },
+ {
+ errno: 52,
+ code: 'EXDEV',
+ description: 'cross-device link not permitted'
+ },
+ {
+ errno: 53,
+ code: 'ENOTEMPTY',
+ description: 'directory not empty'
+ },
+ {
+ errno: 54,
+ code: 'ENOSPC',
+ description: 'no space left on device'
+ },
+ {
+ errno: 55,
+ code: 'EIO',
+ description: 'i/o error'
+ },
+ {
+ errno: 56,
+ code: 'EROFS',
+ description: 'read-only file system'
+ },
+ {
+ errno: 57,
+ code: 'ENODEV',
+ description: 'no such device'
+ },
+ {
+ errno: 58,
+ code: 'ESPIPE',
+ description: 'invalid seek'
+ },
+ {
+ errno: 59,
+ code: 'ECANCELED',
+ description: 'operation canceled'
+ }
+ ];
+
+ module.exports.errno = {};
+ module.exports.code = {};
+
+ all.forEach(function (error) {
+ module.exports.errno[error.errno] = error;
+ module.exports.code[error.code] = error;
+ });
+
+ module.exports.custom = custom(module.exports);
+ module.exports.create = module.exports.custom.createError;
+} (errno));
+
+var errnoExports = errno.exports;
+
+var createError = errnoExports.create;
+var LevelUPError = createError('LevelUPError');
+var NotFoundError$2 = createError('NotFoundError', LevelUPError);
+
+NotFoundError$2.prototype.notFound = true;
+NotFoundError$2.prototype.status = 404;
+
+var errors$2 = {
+ LevelUPError: LevelUPError,
+ InitializationError: createError('InitializationError', LevelUPError),
+ OpenError: createError('OpenError', LevelUPError),
+ ReadError: createError('ReadError', LevelUPError),
+ WriteError: createError('WriteError', LevelUPError),
+ NotFoundError: NotFoundError$2,
+ EncodingError: createError('EncodingError', LevelUPError)
+};
+
+function promisify$2 () {
+ var callback;
+ var promise = new Promise(function (resolve, reject) {
+ callback = function callback (err, value) {
+ if (err) reject(err);
+ else resolve(value);
+ };
+ });
+ callback.promise = promise;
+ return callback
+}
+
+var promisify_1 = promisify$2;
+
+var common = {};
+
+common.getCallback = function (options, callback) {
+ return typeof options === 'function' ? options : callback
+};
+
+common.getOptions = function (options) {
+ return typeof options === 'object' && options !== null ? options : {}
+};
+
+var WriteError$1 = errors$2.WriteError;
+var promisify$1 = promisify_1;
+var getCallback$1 = common.getCallback;
+var getOptions$1 = common.getOptions;
+
+function Batch$1 (levelup) {
+ // TODO (next major): remove this._levelup alias
+ this.db = this._levelup = levelup;
+ this.batch = levelup.db.batch();
+ this.ops = [];
+ this.length = 0;
+}
+
+Batch$1.prototype.put = function (key, value) {
+ try {
+ this.batch.put(key, value);
+ } catch (e) {
+ throw new WriteError$1(e)
+ }
+
+ this.ops.push({ type: 'put', key: key, value: value });
+ this.length++;
+
+ return this
+};
+
+Batch$1.prototype.del = function (key) {
+ try {
+ this.batch.del(key);
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ this.ops.push({ type: 'del', key: key });
+ this.length++;
+
+ return this
+};
+
+Batch$1.prototype.clear = function () {
+ try {
+ this.batch.clear();
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ this.ops = [];
+ this.length = 0;
+
+ return this
+};
+
+Batch$1.prototype.write = function (options, callback) {
+ var levelup = this._levelup;
+ var ops = this.ops;
+ var promise;
+
+ callback = getCallback$1(options, callback);
+
+ if (!callback) {
+ callback = promisify$1();
+ promise = callback.promise;
+ }
+
+ options = getOptions$1(options);
+
+ try {
+ this.batch.write(options, function (err) {
+ if (err) { return callback(new WriteError$1(err)) }
+ levelup.emit('batch', ops);
+ callback();
+ });
+ } catch (err) {
+ throw new WriteError$1(err)
+ }
+
+ return promise
+};
+
+var batch = Batch$1;
+
+// For (old) browser support
+var xtend$4 = immutable;
+var assign$2 = mutable;
+
+var levelSupports$2 = function supports () {
+ var manifest = xtend$4.apply(null, arguments);
+
+ return assign$2(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$4(manifest.additionalMethods)
+ })
+};
+
+var EventEmitter$1 = require$$0$2$1.EventEmitter;
+var inherits$1 = require$$0$1$1.inherits;
+var extend = immutable;
+var DeferredLevelDOWN = deferredLeveldownExports;
+var IteratorStream = levelIteratorStream;
+var Batch$2 = batch;
+var errors$1 = errors$2;
+var supports$2 = levelSupports$2;
+var assert = require$$8;
+var promisify = promisify_1;
+var getCallback = common.getCallback;
+var getOptions = common.getOptions;
+
+var WriteError = errors$1.WriteError;
+var ReadError = errors$1.ReadError;
+var NotFoundError$1 = errors$1.NotFoundError;
+var OpenError = errors$1.OpenError;
+var InitializationError = errors$1.InitializationError;
+
+// Possible AbstractLevelDOWN#status values:
+// - 'new' - newly created, not opened or closed
+// - 'opening' - waiting for the database to be opened, post open()
+// - 'open' - successfully opened the database, available for use
+// - 'closing' - waiting for the database to be closed, post close()
+// - 'closed' - database has been successfully closed, should not be
+// used except for another open() operation
+
+function LevelUP (db, options, callback) {
+ if (!(this instanceof LevelUP)) {
+ return new LevelUP(db, options, callback)
+ }
+
+ var error;
+ var self = this;
+
+ EventEmitter$1.call(this);
+ this.setMaxListeners(Infinity);
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ options = options || {};
+
+ if (!db || typeof db !== 'object') {
+ error = new InitializationError('First argument must be an abstract-leveldown compliant store');
+ if (typeof callback === 'function') {
+ return process.nextTick(callback, error)
+ }
+ throw error
+ }
+
+ assert.strictEqual(typeof db.status, 'string', '.status required, old abstract-leveldown');
+
+ this.options = getOptions(options);
+ this._db = db;
+ this.db = new DeferredLevelDOWN(db);
+ this.open(callback || function (err) {
+ if (err) self.emit('error', err);
+ });
+
+ // Create manifest based on deferred-leveldown's
+ this.supports = supports$2(this.db.supports, {
+ status: false,
+ deferredOpen: true,
+ openCallback: true,
+ promises: true,
+ streams: true
+ });
+
+ // Experimental: enrich levelup interface
+ Object.keys(this.supports.additionalMethods).forEach(function (method) {
+ if (this[method] != null) return
+
+ // Don't do this.db[method].bind() because this.db is dynamic.
+ this[method] = function () {
+ return this.db[method].apply(this.db, arguments)
+ };
+ }, this);
+}
+
+LevelUP.prototype.emit = EventEmitter$1.prototype.emit;
+LevelUP.prototype.once = EventEmitter$1.prototype.once;
+inherits$1(LevelUP, EventEmitter$1);
+
+LevelUP.prototype.open = function (opts, callback) {
+ var self = this;
+ var promise;
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = null;
+ }
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (!opts) {
+ opts = this.options;
+ }
+
+ if (this.isOpen()) {
+ process.nextTick(callback, null, self);
+ return promise
+ }
+
+ if (this._isOpening()) {
+ this.once('open', function () { callback(null, self); });
+ return promise
+ }
+
+ this.emit('opening');
+
+ this.db.open(opts, function (err) {
+ if (err) {
+ return callback(new OpenError(err))
+ }
+ self.db = self._db;
+ callback(null, self);
+ self.emit('open');
+ self.emit('ready');
+ });
+
+ return promise
+};
+
+LevelUP.prototype.close = function (callback) {
+ var self = this;
+ var promise;
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (this.isOpen()) {
+ this.db.close(function () {
+ self.emit('closed');
+ callback.apply(null, arguments);
+ });
+ this.emit('closing');
+ this.db = new DeferredLevelDOWN(this._db);
+ } else if (this.isClosed()) {
+ process.nextTick(callback);
+ } else if (this.db.status === 'closing') {
+ this.once('closed', callback);
+ } else if (this._isOpening()) {
+ this.once('open', function () {
+ self.close(callback);
+ });
+ }
+
+ return promise
+};
+
+LevelUP.prototype.isOpen = function () {
+ return this.db.status === 'open'
+};
+
+LevelUP.prototype._isOpening = function () {
+ return this.db.status === 'opening'
+};
+
+LevelUP.prototype.isClosed = function () {
+ return (/^clos|new/).test(this.db.status)
+};
+
+LevelUP.prototype.get = function (key, options, callback) {
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.get(key, options, function (err, value) {
+ if (err) {
+ if ((/notfound/i).test(err) || err.notFound) {
+ err = new NotFoundError$1('Key not found in database [' + key + ']', err);
+ } else {
+ err = new ReadError(err);
+ }
+ return callback(err)
+ }
+ callback(null, value);
+ });
+
+ return promise
+};
+
+LevelUP.prototype.put = function (key, value, options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.put(key, value, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('put', key, value);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.del = function (key, options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.del(key, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('del', key);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.batch = function (arr, options, callback) {
+ if (!arguments.length) {
+ return new Batch$2(this)
+ }
+
+ var self = this;
+ var promise;
+
+ if (typeof arr === 'function') callback = arr;
+ else callback = getCallback(options, callback);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) { return promise }
+
+ options = getOptions(options);
+
+ this.db.batch(arr, options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('batch', arr);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.iterator = function (options) {
+ return this.db.iterator(options)
+};
+
+LevelUP.prototype.clear = function (options, callback) {
+ var self = this;
+ var promise;
+
+ callback = getCallback(options, callback);
+ options = getOptions(options);
+
+ if (!callback) {
+ callback = promisify();
+ promise = callback.promise;
+ }
+
+ if (maybeError(this, callback)) {
+ return promise
+ }
+
+ this.db.clear(options, function (err) {
+ if (err) {
+ return callback(new WriteError(err))
+ }
+ self.emit('clear', options);
+ callback();
+ });
+
+ return promise
+};
+
+LevelUP.prototype.readStream =
+LevelUP.prototype.createReadStream = function (options) {
+ options = extend({ keys: true, values: true }, options);
+ if (typeof options.limit !== 'number') { options.limit = -1; }
+ return new IteratorStream(this.db.iterator(options), options)
+};
+
+LevelUP.prototype.keyStream =
+LevelUP.prototype.createKeyStream = function (options) {
+ return this.createReadStream(extend(options, { keys: true, values: false }))
+};
+
+LevelUP.prototype.valueStream =
+LevelUP.prototype.createValueStream = function (options) {
+ return this.createReadStream(extend(options, { keys: false, values: true }))
+};
+
+LevelUP.prototype.toString = function () {
+ return 'LevelUP'
+};
+
+LevelUP.prototype.type = 'levelup';
+
+function maybeError (db, callback) {
+ if (!db._isOpening() && !db.isOpen()) {
+ process.nextTick(callback, new ReadError('Database is not open'));
+ return true
+ }
+}
+
+LevelUP.errors = errors$1;
+var levelup$1 = LevelUP.default = LevelUP;
+
+var levelup$1$1 = /*@__PURE__*/getDefaultExportFromCjs(levelup$1);
+
+var ltgt$1 = {};
+
+(function (exports) {
+ exports.compare = function (a, b) {
+
+ if(Buffer.isBuffer(a)) {
+ var l = Math.min(a.length, b.length);
+ for(var i = 0; i < l; i++) {
+ var cmp = a[i] - b[i];
+ if(cmp) return cmp
+ }
+ return a.length - b.length
+ }
+
+ return a < b ? -1 : a > b ? 1 : 0
+ };
+
+ // to be compatible with the current abstract-leveldown tests
+ // nullish or empty strings.
+ // I could use !!val but I want to permit numbers and booleans,
+ // if possible.
+
+ function isDef (val) {
+ return val !== undefined && val !== ''
+ }
+
+ function has (range, name) {
+ return Object.hasOwnProperty.call(range, name)
+ }
+
+ function hasKey(range, name) {
+ return Object.hasOwnProperty.call(range, name) && name
+ }
+
+ var lowerBoundKey = exports.lowerBoundKey = function (range) {
+ return (
+ hasKey(range, 'gt')
+ || hasKey(range, 'gte')
+ || hasKey(range, 'min')
+ || (range.reverse ? hasKey(range, 'end') : hasKey(range, 'start'))
+ || undefined
+ )
+ };
+
+ var lowerBound = exports.lowerBound = function (range, def) {
+ var k = lowerBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ var lowerBoundInclusive = exports.lowerBoundInclusive = function (range) {
+ return has(range, 'gt') ? false : true
+ };
+
+ var upperBoundInclusive = exports.upperBoundInclusive =
+ function (range) {
+ return (has(range, 'lt') /*&& !range.maxEx*/) ? false : true
+ };
+
+ var lowerBoundExclusive = exports.lowerBoundExclusive =
+ function (range) {
+ return !lowerBoundInclusive(range)
+ };
+
+ var upperBoundExclusive = exports.upperBoundExclusive =
+ function (range) {
+ return !upperBoundInclusive(range)
+ };
+
+ var upperBoundKey = exports.upperBoundKey = function (range) {
+ return (
+ hasKey(range, 'lt')
+ || hasKey(range, 'lte')
+ || hasKey(range, 'max')
+ || (range.reverse ? hasKey(range, 'start') : hasKey(range, 'end'))
+ || undefined
+ )
+ };
+
+ var upperBound = exports.upperBound = function (range, def) {
+ var k = upperBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ exports.start = function (range, def) {
+ return range.reverse ? upperBound(range, def) : lowerBound(range, def)
+ };
+ exports.end = function (range, def) {
+ return range.reverse ? lowerBound(range, def) : upperBound(range, def)
+ };
+ exports.startInclusive = function (range) {
+ return (
+ range.reverse
+ ? upperBoundInclusive(range)
+ : lowerBoundInclusive(range)
+ )
+ };
+ exports.endInclusive = function (range) {
+ return (
+ range.reverse
+ ? lowerBoundInclusive(range)
+ : upperBoundInclusive(range)
+ )
+ };
+
+ function id (e) { return e }
+
+ exports.toLtgt = function (range, _range, map, lower, upper) {
+ _range = _range || {};
+ map = map || id;
+ var defaults = arguments.length > 3;
+ var lb = exports.lowerBoundKey(range);
+ var ub = exports.upperBoundKey(range);
+ if(lb) {
+ if(lb === 'gt') _range.gt = map(range.gt, false);
+ else _range.gte = map(range[lb], false);
+ }
+ else if(defaults)
+ _range.gte = map(lower, false);
+
+ if(ub) {
+ if(ub === 'lt') _range.lt = map(range.lt, true);
+ else _range.lte = map(range[ub], true);
+ }
+ else if(defaults)
+ _range.lte = map(upper, true);
+
+ if(range.reverse != null)
+ _range.reverse = !!range.reverse;
+
+ //if range was used mutably
+ //(in level-sublevel it's part of an options object
+ //that has more properties on it.)
+ if(has(_range, 'max')) delete _range.max;
+ if(has(_range, 'min')) delete _range.min;
+ if(has(_range, 'start')) delete _range.start;
+ if(has(_range, 'end')) delete _range.end;
+
+ return _range
+ };
+
+ exports.contains = function (range, key, compare) {
+ compare = compare || exports.compare;
+
+ var lb = lowerBound(range);
+ if(isDef(lb)) {
+ var cmp = compare(key, lb);
+ if(cmp < 0 || (cmp === 0 && lowerBoundExclusive(range)))
+ return false
+ }
+
+ var ub = upperBound(range);
+ if(isDef(ub)) {
+ var cmp = compare(key, ub);
+ if(cmp > 0 || (cmp === 0) && upperBoundExclusive(range))
+ return false
+ }
+
+ return true
+ };
+
+ exports.filter = function (range, compare) {
+ return function (key) {
+ return exports.contains(range, key, compare)
+ }
+ };
+} (ltgt$1));
+
+var ltgt = /*@__PURE__*/getDefaultExportFromCjs(ltgt$1);
+
+var encodings$1 = {};
+
+(function (exports) {
+ var Buffer = require$$0$2.Buffer;
+
+ exports.utf8 = exports['utf-8'] = {
+ encode: function (data) {
+ return isBinary(data) ? data : String(data)
+ },
+ decode: identity,
+ buffer: false,
+ type: 'utf8'
+ };
+
+ exports.json = {
+ encode: JSON.stringify,
+ decode: JSON.parse,
+ buffer: false,
+ type: 'json'
+ };
+
+ exports.binary = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data)
+ },
+ decode: identity,
+ buffer: true,
+ type: 'binary'
+ };
+
+ exports.none = {
+ encode: identity,
+ decode: identity,
+ buffer: false,
+ type: 'id'
+ };
+
+ exports.id = exports.none;
+
+ var bufferEncodings = [
+ 'hex',
+ 'ascii',
+ 'base64',
+ 'ucs2',
+ 'ucs-2',
+ 'utf16le',
+ 'utf-16le'
+ ];
+
+ bufferEncodings.forEach(function (type) {
+ exports[type] = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data, type)
+ },
+ decode: function (buffer) {
+ return buffer.toString(type)
+ },
+ buffer: true,
+ type: type
+ };
+ });
+
+ function identity (value) {
+ return value
+ }
+
+ function isBinary (data) {
+ return data === undefined || data === null || Buffer.isBuffer(data)
+ }
+} (encodings$1));
+
+var encodings = encodings$1;
+
+var levelCodec = Codec$1;
+
+function Codec$1 (opts) {
+ if (!(this instanceof Codec$1)) {
+ return new Codec$1(opts)
+ }
+ this.opts = opts || {};
+ this.encodings = encodings;
+}
+
+Codec$1.prototype._encoding = function (encoding) {
+ if (typeof encoding === 'string') encoding = encodings[encoding];
+ if (!encoding) encoding = encodings.id;
+ return encoding
+};
+
+Codec$1.prototype._keyEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && batchOpts.keyEncoding) ||
+ (opts && opts.keyEncoding) ||
+ this.opts.keyEncoding)
+};
+
+Codec$1.prototype._valueEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && (batchOpts.valueEncoding || batchOpts.encoding)) ||
+ (opts && (opts.valueEncoding || opts.encoding)) ||
+ (this.opts.valueEncoding || this.opts.encoding))
+};
+
+Codec$1.prototype.encodeKey = function (key, opts, batchOpts) {
+ return this._keyEncoding(opts, batchOpts).encode(key)
+};
+
+Codec$1.prototype.encodeValue = function (value, opts, batchOpts) {
+ return this._valueEncoding(opts, batchOpts).encode(value)
+};
+
+Codec$1.prototype.decodeKey = function (key, opts) {
+ return this._keyEncoding(opts).decode(key)
+};
+
+Codec$1.prototype.decodeValue = function (value, opts) {
+ return this._valueEncoding(opts).decode(value)
+};
+
+Codec$1.prototype.encodeBatch = function (ops, opts) {
+ var self = this;
+
+ return ops.map(function (_op) {
+ var op = {
+ type: _op.type,
+ key: self.encodeKey(_op.key, opts, _op)
+ };
+ if (self.keyAsBuffer(opts, _op)) op.keyEncoding = 'binary';
+ if (_op.prefix) op.prefix = _op.prefix;
+ if ('value' in _op) {
+ op.value = self.encodeValue(_op.value, opts, _op);
+ if (self.valueAsBuffer(opts, _op)) op.valueEncoding = 'binary';
+ }
+ return op
+ })
+};
+
+var ltgtKeys = ['lt', 'gt', 'lte', 'gte', 'start', 'end'];
+
+Codec$1.prototype.encodeLtgt = function (ltgt) {
+ var self = this;
+ var ret = {};
+ Object.keys(ltgt).forEach(function (key) {
+ ret[key] = ltgtKeys.indexOf(key) > -1
+ ? self.encodeKey(ltgt[key], ltgt)
+ : ltgt[key];
+ });
+ return ret
+};
+
+Codec$1.prototype.createStreamDecoder = function (opts) {
+ var self = this;
+
+ if (opts.keys && opts.values) {
+ return function (key, value) {
+ return {
+ key: self.decodeKey(key, opts),
+ value: self.decodeValue(value, opts)
+ }
+ }
+ } else if (opts.keys) {
+ return function (key) {
+ return self.decodeKey(key, opts)
+ }
+ } else if (opts.values) {
+ return function (_, value) {
+ return self.decodeValue(value, opts)
+ }
+ } else {
+ return function () {}
+ }
+};
+
+Codec$1.prototype.keyAsBuffer = function (opts) {
+ return this._keyEncoding(opts).buffer
+};
+
+Codec$1.prototype.valueAsBuffer = function (opts) {
+ return this._valueEncoding(opts).buffer
+};
+
+var Codec$1$1 = /*@__PURE__*/getDefaultExportFromCjs(levelCodec);
+
+var readable$1 = {exports: {}};
+
+var isarray = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+var util$2$1 = {};
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray$1(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+util$2$1.isArray = isArray$1;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+util$2$1.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+util$2$1.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+util$2$1.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+util$2$1.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+util$2$1.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+util$2$1.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+util$2$1.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+}
+util$2$1.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+util$2$1.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+util$2$1.isDate = isDate;
+
+function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+util$2$1.isError = isError;
+
+function isFunction$1(arg) {
+ return typeof arg === 'function';
+}
+util$2$1.isFunction = isFunction$1;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+util$2$1.isPrimitive = isPrimitive;
+
+util$2$1.isBuffer = require$$0$2.Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+var _stream_writable$1;
+var hasRequired_stream_writable$1;
+
+function require_stream_writable$1 () {
+ if (hasRequired_stream_writable$1) return _stream_writable$1;
+ hasRequired_stream_writable$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // A bit simpler than readable streams.
+ // Implement an async ._write(chunk, cb), and it'll handle all
+ // the drain event emission and buffering.
+
+ _stream_writable$1 = Writable;
+
+ /**/
+ var Buffer = require$$0$2.Buffer;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+
+ /**/
+ var util = util$2$1;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Stream$1 = Stream;
+
+ util.inherits(Writable, Stream$1);
+
+ function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+ }
+
+ function WritableState(options, stream) {
+ var Duplex = require_stream_duplex$1();
+
+ options = options || {};
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function(er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.buffer = [];
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+ }
+
+ function Writable(options) {
+ var Duplex = require_stream_duplex$1();
+
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof Duplex))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function() {
+ this.emit('error', new Error('Cannot pipe. Not readable.'));
+ };
+
+
+ function writeAfterEnd(stream, state, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ }
+
+ // If we get something that is not a buffer, string, null, or undefined,
+ // and we're not in objectMode, then that's an error.
+ // Otherwise stream chunks are all considered to be of length=1, and the
+ // watermarks determine how many objects to keep in the buffer, rather than
+ // how many bytes or characters.
+ function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ var er = new TypeError('Invalid non-string/buffer chunk');
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ valid = false;
+ }
+ return valid;
+ }
+
+ Writable.prototype.write = function(chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+
+ if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (!util.isFunction(cb))
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
+
+ return ret;
+ };
+
+ Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+ };
+
+ Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+ };
+
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ util.isString(chunk)) {
+ chunk = new Buffer(chunk, encoding);
+ }
+ return chunk;
+ }
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, chunk, encoding, cb) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret)
+ state.needDrain = true;
+
+ if (state.writing || state.corked)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ return ret;
+ }
+
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+
+ function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ state.pendingcb--;
+ cb(er);
+ });
+ else {
+ state.pendingcb--;
+ cb(er);
+ }
+
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ }
+
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er)
+ onwriteError(stream, state, sync, er, cb);
+ else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(stream, state);
+
+ if (!finished &&
+ !state.corked &&
+ !state.bufferProcessing &&
+ state.buffer.length) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ process.nextTick(function() {
+ afterWrite(stream, state, finished, cb);
+ });
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished)
+ onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
+ }
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+ }
+
+ state.bufferProcessing = false;
+ }
+
+ Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+
+ };
+
+ Writable.prototype._writev = null;
+
+ Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (util.isFunction(chunk)) {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (!util.isNullOrUndefined(chunk))
+ this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished)
+ endWritable(this, state, cb);
+ };
+
+
+ function needFinish(stream, state) {
+ return (state.ending &&
+ state.length === 0 &&
+ !state.finished &&
+ !state.writing);
+ }
+
+ function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+
+ function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
+ }
+ return need;
+ }
+
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished)
+ process.nextTick(cb);
+ else
+ stream.once('finish', cb);
+ }
+ state.ended = true;
+ }
+ return _stream_writable$1;
+}
+
+var _stream_duplex$1;
+var hasRequired_stream_duplex$1;
+
+function require_stream_duplex$1 () {
+ if (hasRequired_stream_duplex$1) return _stream_duplex$1;
+ hasRequired_stream_duplex$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // a duplex stream is just a stream that is both readable and writable.
+ // Since JS doesn't have multiple prototypal inheritance, this class
+ // prototypally inherits from Readable, and then parasitically from
+ // Writable.
+
+ _stream_duplex$1 = Duplex;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+
+ /**/
+ var util = util$2$1;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Readable = require_stream_readable$1();
+ var Writable = require_stream_writable$1();
+
+ util.inherits(Duplex, Readable);
+
+ forEach(objectKeys(Writable.prototype), function(method) {
+ if (!Duplex.prototype[method])
+ Duplex.prototype[method] = Writable.prototype[method];
+ });
+
+ function Duplex(options) {
+ if (!(this instanceof Duplex))
+ return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false)
+ this.readable = false;
+
+ if (options && options.writable === false)
+ this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false)
+ this.allowHalfOpen = false;
+
+ this.once('end', onend);
+ }
+
+ // the no-half-open enforcer
+ function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended)
+ return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(this.end.bind(this));
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+ return _stream_duplex$1;
+}
+
+var string_decoder = {};
+
+var hasRequiredString_decoder;
+
+function requireString_decoder () {
+ if (hasRequiredString_decoder) return string_decoder;
+ hasRequiredString_decoder = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var Buffer = require$$0$2.Buffer;
+
+ var isBufferEncoding = Buffer.isEncoding
+ || function(encoding) {
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+ default: return false;
+ }
+ };
+
+
+ function assertEncoding(encoding) {
+ if (encoding && !isBufferEncoding(encoding)) {
+ throw new Error('Unknown encoding: ' + encoding);
+ }
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters. CESU-8 is handled as part of the UTF-8 encoding.
+ //
+ // @TODO Handling all encodings inside a single object makes it very difficult
+ // to reason about this code, so it should be split up in the future.
+ // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+ // points as used by CESU-8.
+ var StringDecoder = string_decoder.StringDecoder = function(encoding) {
+ this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+ assertEncoding(encoding);
+ switch (this.encoding) {
+ case 'utf8':
+ // CESU-8 represents each of Surrogate Pair by 3-bytes
+ this.surrogateSize = 3;
+ break;
+ case 'ucs2':
+ case 'utf16le':
+ // UTF-16 represents each of Surrogate Pair by 2-bytes
+ this.surrogateSize = 2;
+ this.detectIncompleteChar = utf16DetectIncompleteChar;
+ break;
+ case 'base64':
+ // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+ this.surrogateSize = 3;
+ this.detectIncompleteChar = base64DetectIncompleteChar;
+ break;
+ default:
+ this.write = passThroughWrite;
+ return;
+ }
+
+ // Enough space to store all bytes of a single character. UTF-8 needs 4
+ // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+ this.charBuffer = new Buffer(6);
+ // Number of bytes received for the current incomplete multi-byte character.
+ this.charReceived = 0;
+ // Number of bytes expected for the current incomplete multi-byte character.
+ this.charLength = 0;
+ };
+
+
+ // write decodes the given buffer and returns it as JS string that is
+ // guaranteed to not contain any partial multi-byte characters. Any partial
+ // character found at the end of the buffer is buffered up, and will be
+ // returned when calling write again with the remaining bytes.
+ //
+ // Note: Converting a Buffer containing an orphan surrogate to a String
+ // currently works, but converting a String to a Buffer (via `new Buffer`, or
+ // Buffer#write) will replace incomplete surrogates with the unicode
+ // replacement character. See https://codereview.chromium.org/121173009/ .
+ StringDecoder.prototype.write = function(buffer) {
+ var charStr = '';
+ // if our last write ended with an incomplete multibyte character
+ while (this.charLength) {
+ // determine how many remaining bytes this buffer has to offer for this char
+ var available = (buffer.length >= this.charLength - this.charReceived) ?
+ this.charLength - this.charReceived :
+ buffer.length;
+
+ // add the new bytes to the char buffer
+ buffer.copy(this.charBuffer, this.charReceived, 0, available);
+ this.charReceived += available;
+
+ if (this.charReceived < this.charLength) {
+ // still not enough chars in this buffer? wait for more ...
+ return '';
+ }
+
+ // remove bytes belonging to the current character from the buffer
+ buffer = buffer.slice(available, buffer.length);
+
+ // get the character that was split
+ charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ var charCode = charStr.charCodeAt(charStr.length - 1);
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ this.charLength += this.surrogateSize;
+ charStr = '';
+ continue;
+ }
+ this.charReceived = this.charLength = 0;
+
+ // if there are no more bytes in this buffer, just emit our char
+ if (buffer.length === 0) {
+ return charStr;
+ }
+ break;
+ }
+
+ // determine and set charLength / charReceived
+ this.detectIncompleteChar(buffer);
+
+ var end = buffer.length;
+ if (this.charLength) {
+ // buffer the incomplete character bytes we got
+ buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+ end -= this.charReceived;
+ }
+
+ charStr += buffer.toString(this.encoding, 0, end);
+
+ var end = charStr.length - 1;
+ var charCode = charStr.charCodeAt(end);
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ var size = this.surrogateSize;
+ this.charLength += size;
+ this.charReceived += size;
+ this.charBuffer.copy(this.charBuffer, size, 0, size);
+ buffer.copy(this.charBuffer, 0, 0, size);
+ return charStr.substring(0, end);
+ }
+
+ // or just emit the charStr
+ return charStr;
+ };
+
+ // detectIncompleteChar determines if there is an incomplete UTF-8 character at
+ // the end of the given buffer. If so, it sets this.charLength to the byte
+ // length that character, and sets this.charReceived to the number of bytes
+ // that are available for this character.
+ StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+ // determine how many bytes we have to check at the end of this buffer
+ var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+ // Figure out if one of the last i bytes of our buffer announces an
+ // incomplete char.
+ for (; i > 0; i--) {
+ var c = buffer[buffer.length - i];
+
+ // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+ // 110XXXXX
+ if (i == 1 && c >> 5 == 0x06) {
+ this.charLength = 2;
+ break;
+ }
+
+ // 1110XXXX
+ if (i <= 2 && c >> 4 == 0x0E) {
+ this.charLength = 3;
+ break;
+ }
+
+ // 11110XXX
+ if (i <= 3 && c >> 3 == 0x1E) {
+ this.charLength = 4;
+ break;
+ }
+ }
+ this.charReceived = i;
+ };
+
+ StringDecoder.prototype.end = function(buffer) {
+ var res = '';
+ if (buffer && buffer.length)
+ res = this.write(buffer);
+
+ if (this.charReceived) {
+ var cr = this.charReceived;
+ var buf = this.charBuffer;
+ var enc = this.encoding;
+ res += buf.slice(0, cr).toString(enc);
+ }
+
+ return res;
+ };
+
+ function passThroughWrite(buffer) {
+ return buffer.toString(this.encoding);
+ }
+
+ function utf16DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 2;
+ this.charLength = this.charReceived ? 2 : 0;
+ }
+
+ function base64DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 3;
+ this.charLength = this.charReceived ? 3 : 0;
+ }
+ return string_decoder;
+}
+
+var _stream_readable$1;
+var hasRequired_stream_readable$1;
+
+function require_stream_readable$1 () {
+ if (hasRequired_stream_readable$1) return _stream_readable$1;
+ hasRequired_stream_readable$1 = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ _stream_readable$1 = Readable;
+
+ /**/
+ var isArray = isarray;
+ /**/
+
+
+ /**/
+ var Buffer = require$$0$2.Buffer;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ var EE = require$$0$2$1.EventEmitter;
+
+ /**/
+ if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ var Stream$1 = Stream;
+
+ /**/
+ var util = util$2$1;
+ util.inherits = inheritsExports;
+ /**/
+
+ var StringDecoder;
+
+
+ /**/
+ var debug = require$$0$1$1;
+ if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+ } else {
+ debug = function () {};
+ }
+ /**/
+
+
+ util.inherits(Readable, Stream$1);
+
+ function ReadableState(options, stream) {
+ var Duplex = require_stream_duplex$1();
+
+ options = options || {};
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+
+ function Readable(options) {
+ require_stream_duplex$1();
+
+ if (!(this instanceof Readable))
+ return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function(chunk, encoding) {
+ var state = this._readableState;
+
+ if (util.isString(chunk) && !state.objectMode) {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = new Buffer(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function(chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+ };
+
+ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (util.isNullOrUndefined(chunk)) {
+ state.reading = false;
+ if (!state.ended)
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var e = new Error('stream.unshift() after end event');
+ stream.emit('error', e);
+ } else {
+ if (state.decoder && !addToFront && !encoding)
+ chunk = state.decoder.write(chunk);
+
+ if (!addToFront)
+ state.reading = false;
+
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ state.buffer.push(chunk);
+
+ if (state.needReadable)
+ emitReadable(stream);
+ }
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+ }
+
+
+
+ // if it's past the high water mark, we can push in some more.
+ // Also, if we have no data yet, we can stand some
+ // more bytes. This is to work around cases where hwm=0,
+ // such as the repl. Also, if the push() triggered a
+ // readable event, and the user called read(largeNumber) such that
+ // needReadable was set, then we ought to push more, so that another
+ // 'readable' event will be triggered.
+ function needMoreData(state) {
+ return !state.ended &&
+ (state.needReadable ||
+ state.length < state.highWaterMark ||
+ state.length === 0);
+ }
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function(enc) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+ };
+
+ // Don't raise the hwm > 128MB
+ var MAX_HWM = 0x800000;
+ function roundUpToNextPowerOf2(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2
+ n--;
+ for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+ n++;
+ }
+ return n;
+ }
+
+ function howMuchToRead(n, state) {
+ if (state.length === 0 && state.ended)
+ return 0;
+
+ if (state.objectMode)
+ return n === 0 ? 0 : 1;
+
+ if (isNaN(n) || util.isNull(n)) {
+ // only flow one buffer at a time
+ if (state.flowing && state.buffer.length)
+ return state.buffer[0].length;
+ else
+ return state.length;
+ }
+
+ if (n <= 0)
+ return 0;
+
+ // If we're asking for more than the target buffer level,
+ // then raise the water mark. Bump up to the next highest
+ // power of 2, to prevent increasing it excessively in tiny
+ // amounts.
+ if (n > state.highWaterMark)
+ state.highWaterMark = roundUpToNextPowerOf2(n);
+
+ // don't have that much. return null, unless we've ended.
+ if (n > state.length) {
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ } else
+ return state.length;
+ }
+
+ return n;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function(n) {
+ debug('read', n);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (!util.isNumber(n) || n > 0)
+ state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 &&
+ state.needReadable &&
+ (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0)
+ endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ }
+
+ if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ }
+
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (doRead && !state.reading)
+ n = howMuchToRead(nOrig, state);
+
+ var ret;
+ if (n > 0)
+ ret = fromList(n, state);
+ else
+ ret = null;
+
+ if (util.isNull(ret)) {
+ state.needReadable = true;
+ n = 0;
+ }
+
+ state.length -= n;
+
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
+ endReadable(this);
+
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
+ return ret;
+ };
+
+ function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+ }
+
+
+ function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+ }
+ }
+
+ function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+ }
+
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(function() {
+ maybeReadMore_(stream, state);
+ });
+ }
+ }
+
+ function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended &&
+ state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ else
+ len = state.length;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function(n) {
+ this.emit('error', new Error('not implemented'));
+ };
+
+ Readable.prototype.pipe = function(dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+ dest !== process.stdout &&
+ dest !== process.stderr;
+
+ var endFn = doEnd ? onend : cleanup;
+ if (state.endEmitted)
+ process.nextTick(endFn);
+ else
+ src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', cleanup);
+ src.removeListener('data', ondata);
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
+ ondrain();
+ }
+
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EE.listenerCount(dest, 'error') === 0)
+ dest.emit('error', er);
+ }
+ // This is a brutally ugly hack to make sure that our error handler
+ // is attached before any userland ones. NEVER DO THIS.
+ if (!dest._events || !dest._events.error)
+ dest.on('error', onerror);
+ else if (isArray(dest._events.error))
+ dest._events.error.unshift(onerror);
+ else
+ dest._events.error = [onerror, dest._events.error];
+
+
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+ };
+
+ function pipeOnDrain(src) {
+ return function() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+
+
+ Readable.prototype.unpipe = function(dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0)
+ return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes)
+ return this;
+
+ if (!dest)
+ dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest)
+ dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++)
+ dests[i].emit('unpipe', this);
+ return this;
+ }
+
+ // try to find the right one.
+ var i = indexOf(state.pipes, dest);
+ if (i === -1)
+ return this;
+
+ state.pipes.splice(i, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1)
+ state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function(ev, fn) {
+ var res = Stream$1.prototype.on.call(this, ev, fn);
+
+ // If listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.read(0);
+ });
+ } else if (state.length) {
+ emitReadable(this);
+ }
+ }
+ }
+
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function() {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
+ };
+
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+ }
+
+ function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+ }
+
+ Readable.prototype.pause = function() {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+ };
+
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ if (state.flowing) {
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
+ }
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function(stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function() {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length)
+ self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function(chunk) {
+ debug('wrapped data');
+ if (state.decoder)
+ chunk = state.decoder.write(chunk);
+ if (!chunk || !state.objectMode && !chunk.length)
+ return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ forEach(events, function(ev) {
+ stream.on(ev, self.emit.bind(self, ev));
+ });
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function(n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+ };
+
+
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ function fromList(n, state) {
+ var list = state.buffer;
+ var length = state.length;
+ var stringMode = !!state.decoder;
+ var objectMode = !!state.objectMode;
+ var ret;
+
+ // nothing in the list, definitely empty.
+ if (list.length === 0)
+ return null;
+
+ if (length === 0)
+ ret = null;
+ else if (objectMode)
+ ret = list.shift();
+ else if (!n || n >= length) {
+ // read it all, truncate the array.
+ if (stringMode)
+ ret = list.join('');
+ else
+ ret = Buffer.concat(list, length);
+ list.length = 0;
+ } else {
+ // read just some of it.
+ if (n < list[0].length) {
+ // just take a part of the first list item.
+ // slice is the same for buffers and strings.
+ var buf = list[0];
+ ret = buf.slice(0, n);
+ list[0] = buf.slice(n);
+ } else if (n === list[0].length) {
+ // first list is a perfect match
+ ret = list.shift();
+ } else {
+ // complex case.
+ // we have enough to cover it, but it spans past the first buffer.
+ if (stringMode)
+ ret = '';
+ else
+ ret = new Buffer(n);
+
+ var c = 0;
+ for (var i = 0, l = list.length; i < l && c < n; i++) {
+ var buf = list[0];
+ var cpy = Math.min(n - c, buf.length);
+
+ if (stringMode)
+ ret += buf.slice(0, cpy);
+ else
+ buf.copy(ret, c, 0, cpy);
+
+ if (cpy < buf.length)
+ list[0] = buf.slice(cpy);
+ else
+ list.shift();
+
+ c += cpy;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0)
+ throw new Error('endReadable called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(function() {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ });
+ }
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+
+ function indexOf (xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable$1;
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+var _stream_transform$1 = Transform$2;
+
+var Duplex = require_stream_duplex$1();
+
+/**/
+var util$1$1 = util$2$1;
+util$1$1.inherits = inheritsExports;
+/**/
+
+util$1$1.inherits(Transform$2, Duplex);
+
+
+function TransformState(options, stream) {
+ this.afterTransform = function(er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb)
+ return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (!util$1$1.isNullOrUndefined(data))
+ stream.push(data);
+
+ if (cb)
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+
+function Transform$2(options) {
+ if (!(this instanceof Transform$2))
+ return new Transform$2(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = new TransformState(options, this);
+
+ // when the writable side finishes, then flush out anything remaining.
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ this.once('prefinish', function() {
+ if (util$1$1.isFunction(this._flush))
+ this._flush(function(er) {
+ done(stream, er);
+ });
+ else
+ done(stream);
+ });
+}
+
+Transform$2.prototype.push = function(chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform$2.prototype._transform = function(chunk, encoding, cb) {
+ throw new Error('not implemented');
+};
+
+Transform$2.prototype._write = function(chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform ||
+ rs.needReadable ||
+ rs.length < rs.highWaterMark)
+ this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform$2.prototype._read = function(n) {
+ var ts = this._transformState;
+
+ if (!util$1$1.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+
+function done(stream, er) {
+ if (er)
+ return stream.emit('error', er);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var ts = stream._transformState;
+
+ if (ws.length)
+ throw new Error('calling transform done when ws.length != 0');
+
+ if (ts.transforming)
+ throw new Error('calling transform done when still transforming');
+
+ return stream.push(null);
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+var _stream_passthrough$1 = PassThrough;
+
+var Transform$1 = _stream_transform$1;
+
+/**/
+var util$4 = util$2$1;
+util$4.inherits = inheritsExports;
+/**/
+
+util$4.inherits(PassThrough, Transform$1);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough))
+ return new PassThrough(options);
+
+ Transform$1.call(this, options);
+}
+
+PassThrough.prototype._transform = function(chunk, encoding, cb) {
+ cb(null, chunk);
+};
+
+readable$1.exports;
+
+(function (module, exports) {
+ exports = module.exports = require_stream_readable$1();
+ exports.Stream = Stream;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable$1();
+ exports.Duplex = require_stream_duplex$1();
+ exports.Transform = _stream_transform$1;
+ exports.PassThrough = _stream_passthrough$1;
+ if (!process.browser && process.env.READABLE_STREAM === 'disable') {
+ module.exports = Stream;
+ }
+} (readable$1, readable$1.exports));
+
+var readableExports$1 = readable$1.exports;
+var ReadableStreamCore = /*@__PURE__*/getDefaultExportFromCjs(readableExports$1);
+
+function isFunction(f) {
+ return 'function' === typeof f;
+}
+
+function getPrefix(db) {
+ if (isFunction(db.prefix)) {
+ return db.prefix();
+ }
+ return db;
+}
+
+function clone(_obj) {
+ var obj = {};
+ for (var k in _obj) {
+ obj[k] = _obj[k];
+ }
+ return obj;
+}
+
+function nut(db, precodec, codec) {
+ function encodePrefix(prefix, key, opts1, opts2) {
+ return precodec.encode([ prefix, codec.encodeKey(key, opts1, opts2 ) ]);
+ }
+
+ function addEncodings(op, prefix) {
+ if (prefix && prefix.options) {
+ op.keyEncoding =
+ op.keyEncoding || prefix.options.keyEncoding;
+ op.valueEncoding =
+ op.valueEncoding || prefix.options.valueEncoding;
+ }
+ return op;
+ }
+
+ db.open(function () { /* no-op */});
+
+ return {
+ apply: function (ops, opts, cb) {
+ opts = opts || {};
+
+ var batch = [];
+ var i = -1;
+ var len = ops.length;
+
+ while (++i < len) {
+ var op = ops[i];
+ addEncodings(op, op.prefix);
+ op.prefix = getPrefix(op.prefix);
+ batch.push({
+ key: encodePrefix(op.prefix, op.key, opts, op),
+ value: op.type !== 'del' && codec.encodeValue(op.value, opts, op),
+ type: op.type
+ });
+ }
+ db.db.batch(batch, opts, cb);
+ },
+ get: function (key, prefix, opts, cb) {
+ opts.asBuffer = codec.valueAsBuffer(opts);
+ return db.db.get(
+ encodePrefix(prefix, key, opts),
+ opts,
+ function (err, value) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, codec.decodeValue(value, opts));
+ }
+ }
+ );
+ },
+ createDecoder: function (opts) {
+ return function (key, value) {
+ return {
+ key: codec.decodeKey(precodec.decode(key)[1], opts),
+ value: codec.decodeValue(value, opts)
+ };
+ };
+ },
+ isClosed: function isClosed() {
+ return db.isClosed();
+ },
+ close: function close(cb) {
+ return db.close(cb);
+ },
+ iterator: function (_opts) {
+ var opts = clone(_opts || {});
+ var prefix = _opts.prefix || [];
+
+ function encodeKey(key) {
+ return encodePrefix(prefix, key, opts, {});
+ }
+
+ ltgt.toLtgt(_opts, opts, encodeKey, precodec.lowerBound, precodec.upperBound);
+
+ // if these legacy values are in the options, remove them
+
+ opts.prefix = null;
+
+ //************************************************
+ //hard coded defaults, for now...
+ //TODO: pull defaults and encoding out of levelup.
+ opts.keyAsBuffer = opts.valueAsBuffer = false;
+ //************************************************
+
+
+ //this is vital, otherwise limit: undefined will
+ //create an empty stream.
+ /* istanbul ignore next */
+ if ('number' !== typeof opts.limit) {
+ opts.limit = -1;
+ }
+
+ opts.keyAsBuffer = precodec.buffer;
+ opts.valueAsBuffer = codec.valueAsBuffer(opts);
+
+ function wrapIterator(iterator) {
+ return {
+ next: function (cb) {
+ return iterator.next(cb);
+ },
+ end: function (cb) {
+ iterator.end(cb);
+ }
+ };
+ }
+
+ return wrapIterator(db.db.iterator(opts));
+ }
+ };
+}
+
+function NotFoundError$3() {
+ Error.call(this);
+}
+
+inherits$5(NotFoundError$3, Error);
+
+NotFoundError$3.prototype.name = 'NotFoundError';
+
+var EventEmitter = require$$0$2$1.EventEmitter;
+var version = "6.5.4";
+
+var NOT_FOUND_ERROR = new NotFoundError$3();
+
+var sublevel = function (nut, prefix, createStream, options) {
+ var emitter = new EventEmitter();
+ emitter.sublevels = {};
+ emitter.options = options;
+
+ emitter.version = version;
+
+ emitter.methods = {};
+ prefix = prefix || [];
+
+ function mergeOpts(opts) {
+ var o = {};
+ var k;
+ if (options) {
+ for (k in options) {
+ if (typeof options[k] !== 'undefined') {
+ o[k] = options[k];
+ }
+ }
+ }
+ if (opts) {
+ for (k in opts) {
+ if (typeof opts[k] !== 'undefined') {
+ o[k] = opts[k];
+ }
+ }
+ }
+ return o;
+ }
+
+ emitter.put = function (key, value, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ nut.apply([{
+ key: key, value: value,
+ prefix: prefix.slice(), type: 'put'
+ }], mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('put', key, value);
+ cb(null);
+ });
+ };
+
+ emitter.prefix = function () {
+ return prefix.slice();
+ };
+
+ emitter.batch = function (ops, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ ops = ops.map(function (op) {
+ return {
+ key: op.key,
+ value: op.value,
+ prefix: op.prefix || prefix,
+ keyEncoding: op.keyEncoding, // *
+ valueEncoding: op.valueEncoding, // * (TODO: encodings on sublevel)
+ type: op.type
+ };
+ });
+
+ nut.apply(ops, mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('batch', ops);
+ cb(null);
+ });
+ };
+
+ emitter.get = function (key, opts, cb) {
+ /* istanbul ignore else */
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+ nut.get(key, prefix, mergeOpts(opts), function (err, value) {
+ if (err) {
+ cb(NOT_FOUND_ERROR);
+ } else {
+ cb(null, value);
+ }
+ });
+ };
+
+ emitter.sublevel = function (name, opts) {
+ return emitter.sublevels[name] =
+ emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts));
+ };
+
+ emitter.readStream = emitter.createReadStream = function (opts) {
+ opts = mergeOpts(opts);
+ opts.prefix = prefix;
+ var stream;
+ var it = nut.iterator(opts);
+
+ stream = createStream(opts, nut.createDecoder(opts));
+ stream.setIterator(it);
+
+ return stream;
+ };
+
+ emitter.close = function (cb) {
+ nut.close(cb);
+ };
+
+ emitter.isOpen = nut.isOpen;
+ emitter.isClosed = nut.isClosed;
+
+ return emitter;
+};
+
+/* Copyright (c) 2012-2014 LevelUP contributors
+ * See list at
+ * MIT License
+ */
+
+var Readable = ReadableStreamCore.Readable;
+
+function ReadStream(options, makeData) {
+ if (!(this instanceof ReadStream)) {
+ return new ReadStream(options, makeData);
+ }
+
+ Readable.call(this, { objectMode: true, highWaterMark: options.highWaterMark });
+
+ // purely to keep `db` around until we're done so it's not GCed if the user doesn't keep a ref
+
+ this._waiting = false;
+ this._options = options;
+ this._makeData = makeData;
+}
+
+inherits$5(ReadStream, Readable);
+
+ReadStream.prototype.setIterator = function (it) {
+ this._iterator = it;
+ /* istanbul ignore if */
+ if (this._destroyed) {
+ return it.end(function () {});
+ }
+ /* istanbul ignore if */
+ if (this._waiting) {
+ this._waiting = false;
+ return this._read();
+ }
+ return this;
+};
+
+ReadStream.prototype._read = function read() {
+ var self = this;
+ /* istanbul ignore if */
+ if (self._destroyed) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (!self._iterator) {
+ return this._waiting = true;
+ }
+
+ self._iterator.next(function (err, key, value) {
+ if (err || (key === undefined && value === undefined)) {
+ if (!err && !self._destroyed) {
+ self.push(null);
+ }
+ return self._cleanup(err);
+ }
+
+
+ value = self._makeData(key, value);
+ if (!self._destroyed) {
+ self.push(value);
+ }
+ });
+};
+
+ReadStream.prototype._cleanup = function (err) {
+ if (this._destroyed) {
+ return;
+ }
+
+ this._destroyed = true;
+
+ var self = this;
+ /* istanbul ignore if */
+ if (err && err.message !== 'iterator has ended') {
+ self.emit('error', err);
+ }
+
+ /* istanbul ignore else */
+ if (self._iterator) {
+ self._iterator.end(function () {
+ self._iterator = null;
+ self.emit('close');
+ });
+ } else {
+ self.emit('close');
+ }
+};
+
+ReadStream.prototype.destroy = function () {
+ this._cleanup();
+};
+
+var precodec = {
+ encode: function (decodedKey) {
+ return '\xff' + decodedKey[0] + '\xff' + decodedKey[1];
+ },
+ decode: function (encodedKeyAsBuffer) {
+ var str = encodedKeyAsBuffer.toString();
+ var idx = str.indexOf('\xff', 1);
+ return [str.substring(1, idx), str.substring(idx + 1)];
+ },
+ lowerBound: '\x00',
+ upperBound: '\xff'
+};
+
+var codec = new Codec$1$1();
+
+function sublevelPouch(db) {
+ return sublevel(nut(db, precodec, codec), [], ReadStream, db.options);
+}
+
+var through2$1 = {exports: {}};
+
+var readable = {exports: {}};
+
+var stream;
+var hasRequiredStream;
+
+function requireStream () {
+ if (hasRequiredStream) return stream;
+ hasRequiredStream = 1;
+ stream = Stream;
+ return stream;
+}
+
+var buffer_list;
+var hasRequiredBuffer_list;
+
+function requireBuffer_list () {
+ if (hasRequiredBuffer_list) return buffer_list;
+ hasRequiredBuffer_list = 1;
+
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var _require = require$$0$2,
+ Buffer = _require.Buffer;
+ var _require2 = require$$0$1$1,
+ inspect = _require2.inspect;
+ var custom = inspect && inspect.custom || 'inspect';
+ function copyBuffer(src, target, offset) {
+ Buffer.prototype.copy.call(src, target, offset);
+ }
+ buffer_list = /*#__PURE__*/function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+ _createClass(BufferList, [{
+ key: "push",
+ value: function push(v) {
+ var entry = {
+ data: v,
+ next: null
+ };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ }
+ }, {
+ key: "unshift",
+ value: function unshift(v) {
+ var entry = {
+ data: v,
+ next: this.head
+ };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ }
+ }, {
+ key: "shift",
+ value: function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ }
+ }, {
+ key: "clear",
+ value: function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ }
+ }, {
+ key: "join",
+ value: function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) ret += s + p.data;
+ return ret;
+ }
+ }, {
+ key: "concat",
+ value: function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes or characters from the buffered data.
+ }, {
+ key: "consume",
+ value: function consume(n, hasStrings) {
+ var ret;
+ if (n < this.head.data.length) {
+ // `slice` is the same for buffers and strings.
+ ret = this.head.data.slice(0, n);
+ this.head.data = this.head.data.slice(n);
+ } else if (n === this.head.data.length) {
+ // First chunk is a perfect match.
+ ret = this.shift();
+ } else {
+ // Result spans more than one buffer.
+ ret = hasStrings ? this._getString(n) : this._getBuffer(n);
+ }
+ return ret;
+ }
+ }, {
+ key: "first",
+ value: function first() {
+ return this.head.data;
+ }
+
+ // Consumes a specified amount of characters from the buffered data.
+ }, {
+ key: "_getString",
+ value: function _getString(n) {
+ var p = this.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Consumes a specified amount of bytes from the buffered data.
+ }, {
+ key: "_getBuffer",
+ value: function _getBuffer(n) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = this.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) this.head = p.next;else this.head = this.tail = null;
+ } else {
+ this.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ this.length -= c;
+ return ret;
+ }
+
+ // Make sure the linked list only shows the minimal necessary information.
+ }, {
+ key: custom,
+ value: function value(_, options) {
+ return inspect(this, _objectSpread(_objectSpread({}, options), {}, {
+ // Only inspect one level.
+ depth: 0,
+ // It should not recurse.
+ customInspect: false
+ }));
+ }
+ }]);
+ return BufferList;
+ }();
+ return buffer_list;
+}
+
+var destroy_1;
+var hasRequiredDestroy;
+
+function requireDestroy () {
+ if (hasRequiredDestroy) return destroy_1;
+ hasRequiredDestroy = 1;
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err) {
+ if (!this._writableState) {
+ process.nextTick(emitErrorNT, this, err);
+ } else if (!this._writableState.errorEmitted) {
+ this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorNT, this, err);
+ }
+ }
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ if (!_this._writableState) {
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else if (!_this._writableState.errorEmitted) {
+ _this._writableState.errorEmitted = true;
+ process.nextTick(emitErrorAndCloseNT, _this, err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ } else if (cb) {
+ process.nextTick(emitCloseNT, _this);
+ cb(err);
+ } else {
+ process.nextTick(emitCloseNT, _this);
+ }
+ });
+ return this;
+ }
+ function emitErrorAndCloseNT(self, err) {
+ emitErrorNT(self, err);
+ emitCloseNT(self);
+ }
+ function emitCloseNT(self) {
+ if (self._writableState && !self._writableState.emitClose) return;
+ if (self._readableState && !self._readableState.emitClose) return;
+ self.emit('close');
+ }
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finalCalled = false;
+ this._writableState.prefinished = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+ function errorOrDestroy(stream, err) {
+ // We have tests that rely on errors being emitted
+ // in the same tick, so changing this is semver major.
+ // For now when you opt-in to autoDestroy we allow
+ // the error to be emitted nextTick. In a future
+ // semver major update we should change the default to this.
+
+ var rState = stream._readableState;
+ var wState = stream._writableState;
+ if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
+ }
+ destroy_1 = {
+ destroy: destroy,
+ undestroy: undestroy,
+ errorOrDestroy: errorOrDestroy
+ };
+ return destroy_1;
+}
+
+var errors$4 = {};
+
+var hasRequiredErrors;
+
+function requireErrors () {
+ if (hasRequiredErrors) return errors$4;
+ hasRequiredErrors = 1;
+
+ const codes = {};
+
+ function createErrorType(code, message, Base) {
+ if (!Base) {
+ Base = Error;
+ }
+
+ function getMessage (arg1, arg2, arg3) {
+ if (typeof message === 'string') {
+ return message
+ } else {
+ return message(arg1, arg2, arg3)
+ }
+ }
+
+ class NodeError extends Base {
+ constructor (arg1, arg2, arg3) {
+ super(getMessage(arg1, arg2, arg3));
+ }
+ }
+
+ NodeError.prototype.name = Base.name;
+ NodeError.prototype.code = code;
+
+ codes[code] = NodeError;
+ }
+
+ // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
+ function oneOf(expected, thing) {
+ if (Array.isArray(expected)) {
+ const len = expected.length;
+ expected = expected.map((i) => String(i));
+ if (len > 2) {
+ return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
+ expected[len - 1];
+ } else if (len === 2) {
+ return `one of ${thing} ${expected[0]} or ${expected[1]}`;
+ } else {
+ return `of ${thing} ${expected[0]}`;
+ }
+ } else {
+ return `of ${thing} ${String(expected)}`;
+ }
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
+ function startsWith(str, search, pos) {
+ return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
+ function endsWith(str, search, this_len) {
+ if (this_len === undefined || this_len > str.length) {
+ this_len = str.length;
+ }
+ return str.substring(this_len - search.length, this_len) === search;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ function includes(str, search, start) {
+ if (typeof start !== 'number') {
+ start = 0;
+ }
+
+ if (start + search.length > str.length) {
+ return false;
+ } else {
+ return str.indexOf(search, start) !== -1;
+ }
+ }
+
+ createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
+ return 'The value "' + value + '" is invalid for option "' + name + '"'
+ }, TypeError);
+ createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
+ // determiner: 'must be' or 'must not be'
+ let determiner;
+ if (typeof expected === 'string' && startsWith(expected, 'not ')) {
+ determiner = 'must not be';
+ expected = expected.replace(/^not /, '');
+ } else {
+ determiner = 'must be';
+ }
+
+ let msg;
+ if (endsWith(name, ' argument')) {
+ // For cases like 'first argument'
+ msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
+ } else {
+ const type = includes(name, '.') ? 'property' : 'argument';
+ msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
+ }
+
+ msg += `. Received type ${typeof actual}`;
+ return msg;
+ }, TypeError);
+ createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
+ createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
+ return 'The ' + name + ' method is not implemented'
+ });
+ createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
+ createErrorType('ERR_STREAM_DESTROYED', function (name) {
+ return 'Cannot call ' + name + ' after a stream was destroyed';
+ });
+ createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
+ createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
+ createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
+ createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
+ createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
+ return 'Unknown encoding: ' + arg
+ }, TypeError);
+ createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
+
+ errors$4.codes = codes;
+ return errors$4;
+}
+
+var state;
+var hasRequiredState;
+
+function requireState () {
+ if (hasRequiredState) return state;
+ hasRequiredState = 1;
+
+ var ERR_INVALID_OPT_VALUE = requireErrors().codes.ERR_INVALID_OPT_VALUE;
+ function highWaterMarkFrom(options, isDuplex, duplexKey) {
+ return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
+ }
+ function getHighWaterMark(state, options, duplexKey, isDuplex) {
+ var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
+ if (hwm != null) {
+ if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
+ var name = isDuplex ? duplexKey : 'highWaterMark';
+ throw new ERR_INVALID_OPT_VALUE(name, hwm);
+ }
+ return Math.floor(hwm);
+ }
+
+ // Default value
+ return state.objectMode ? 16 : 16 * 1024;
+ }
+ state = {
+ getHighWaterMark: getHighWaterMark
+ };
+ return state;
+}
+
+var _stream_writable;
+var hasRequired_stream_writable;
+
+function require_stream_writable () {
+ if (hasRequired_stream_writable) return _stream_writable;
+ hasRequired_stream_writable = 1;
+
+ _stream_writable = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ var Buffer = require$$0$2.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+ var destroyImpl = requireDestroy();
+ var _require = requireState(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
+ ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
+ ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
+ ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ inheritsExports(Writable, Stream);
+ function nop() {}
+ function WritableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream,
+ // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'finish' (and potentially 'end')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function writableStateBufferGetter() {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function value(object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function realHasInstance(object) {
+ return object instanceof this;
+ };
+ }
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the WritableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
+ this._writableState = new WritableState(options, this, isDuplex);
+
+ // legacy.
+ this.writable = true;
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+ if (typeof options.writev === 'function') this._writev = options.writev;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
+ };
+ function writeAfterEnd(stream, cb) {
+ var er = new ERR_STREAM_WRITE_AFTER_END();
+ // TODO: defer error events consistently everywhere, not just the cb
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var er;
+ if (chunk === null) {
+ er = new ERR_STREAM_NULL_VALUES();
+ } else if (typeof chunk !== 'string' && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
+ }
+ if (er) {
+ errorOrDestroy(stream, er);
+ process.nextTick(cb, er);
+ return false;
+ }
+ return true;
+ }
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+ if (typeof cb !== 'function') cb = nop;
+ if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+ return ret;
+ };
+ Writable.prototype.cork = function () {
+ this._writableState.corked++;
+ };
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+ if (state.corked) {
+ state.corked--;
+ if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+ state.length += len;
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+ return ret;
+ }
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ process.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ process.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ errorOrDestroy(stream, er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+ if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
+ onwriteStateUpdate(state);
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state) || stream.destroyed;
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+ if (sync) {
+ process.nextTick(afterWrite, stream, state, finished, cb);
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
+ };
+ Writable.prototype._writev = null;
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending) endWritable(this, state, cb);
+ return this;
+ };
+ Object.defineProperty(Writable.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ errorOrDestroy(stream, err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function' && !state.destroyed) {
+ state.pendingcb++;
+ state.finalCalled = true;
+ process.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the readable side is ready for autoDestroy as well
+ var rState = stream._readableState;
+ if (!rState || rState.autoDestroy && rState.endEmitted) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ return need;
+ }
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+
+ // reuse the free corkReq.
+ state.corkedRequestsFree.next = corkReq;
+ }
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+ return _stream_writable;
+}
+
+var _stream_duplex;
+var hasRequired_stream_duplex;
+
+function require_stream_duplex () {
+ if (hasRequired_stream_duplex) return _stream_duplex;
+ hasRequired_stream_duplex = 1;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+ _stream_duplex = Duplex;
+ var Readable = require_stream_readable();
+ var Writable = require_stream_writable();
+ inheritsExports(Duplex, Readable);
+ {
+ // Allow the keys array to be GC'ed.
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+ Readable.call(this, options);
+ Writable.call(this, options);
+ this.allowHalfOpen = true;
+ if (options) {
+ if (options.readable === false) this.readable = false;
+ if (options.writable === false) this.writable = false;
+ if (options.allowHalfOpen === false) {
+ this.allowHalfOpen = false;
+ this.once('end', onend);
+ }
+ }
+ }
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState && this._writableState.getBuffer();
+ }
+ });
+ Object.defineProperty(Duplex.prototype, 'writableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._writableState.length;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // If the writable side ended, then we're ok.
+ if (this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(onEndNT, this);
+ }
+ function onEndNT(self) {
+ self.end();
+ }
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+ return _stream_duplex;
+}
+
+var endOfStream;
+var hasRequiredEndOfStream;
+
+function requireEndOfStream () {
+ if (hasRequiredEndOfStream) return endOfStream;
+ hasRequiredEndOfStream = 1;
+
+ var ERR_STREAM_PREMATURE_CLOSE = requireErrors().codes.ERR_STREAM_PREMATURE_CLOSE;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+ callback.apply(this, args);
+ };
+ }
+ function noop() {}
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function eos(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
+ callback = once(callback || noop);
+ var readable = opts.readable || opts.readable !== false && stream.readable;
+ var writable = opts.writable || opts.writable !== false && stream.writable;
+ var onlegacyfinish = function onlegacyfinish() {
+ if (!stream.writable) onfinish();
+ };
+ var writableEnded = stream._writableState && stream._writableState.finished;
+ var onfinish = function onfinish() {
+ writable = false;
+ writableEnded = true;
+ if (!readable) callback.call(stream);
+ };
+ var readableEnded = stream._readableState && stream._readableState.endEmitted;
+ var onend = function onend() {
+ readable = false;
+ readableEnded = true;
+ if (!writable) callback.call(stream);
+ };
+ var onerror = function onerror(err) {
+ callback.call(stream, err);
+ };
+ var onclose = function onclose() {
+ var err;
+ if (readable && !readableEnded) {
+ if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ if (writable && !writableEnded) {
+ if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
+ return callback.call(stream, err);
+ }
+ };
+ var onrequest = function onrequest() {
+ stream.req.on('finish', onfinish);
+ };
+ if (isRequest(stream)) {
+ stream.on('complete', onfinish);
+ stream.on('abort', onclose);
+ if (stream.req) onrequest();else stream.on('request', onrequest);
+ } else if (writable && !stream._writableState) {
+ // legacy streams
+ stream.on('end', onlegacyfinish);
+ stream.on('close', onlegacyfinish);
+ }
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+ return function () {
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+ }
+ endOfStream = eos;
+ return endOfStream;
+}
+
+var async_iterator;
+var hasRequiredAsync_iterator;
+
+function requireAsync_iterator () {
+ if (hasRequiredAsync_iterator) return async_iterator;
+ hasRequiredAsync_iterator = 1;
+
+ var _Object$setPrototypeO;
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var finished = requireEndOfStream();
+ var kLastResolve = Symbol('lastResolve');
+ var kLastReject = Symbol('lastReject');
+ var kError = Symbol('error');
+ var kEnded = Symbol('ended');
+ var kLastPromise = Symbol('lastPromise');
+ var kHandlePromise = Symbol('handlePromise');
+ var kStream = Symbol('stream');
+ function createIterResult(value, done) {
+ return {
+ value: value,
+ done: done
+ };
+ }
+ function readAndResolve(iter) {
+ var resolve = iter[kLastResolve];
+ if (resolve !== null) {
+ var data = iter[kStream].read();
+ // we defer if data is null
+ // we can be expecting either 'end' or
+ // 'error'
+ if (data !== null) {
+ iter[kLastPromise] = null;
+ iter[kLastResolve] = null;
+ iter[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ }
+ }
+ }
+ function onReadable(iter) {
+ // we wait for the next tick, because it might
+ // emit an error with process.nextTick
+ process.nextTick(readAndResolve, iter);
+ }
+ function wrapForNext(lastPromise, iter) {
+ return function (resolve, reject) {
+ lastPromise.then(function () {
+ if (iter[kEnded]) {
+ resolve(createIterResult(undefined, true));
+ return;
+ }
+ iter[kHandlePromise](resolve, reject);
+ }, reject);
+ };
+ }
+ var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
+ var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
+ get stream() {
+ return this[kStream];
+ },
+ next: function next() {
+ var _this = this;
+ // if we have detected an error in the meanwhile
+ // reject straight away
+ var error = this[kError];
+ if (error !== null) {
+ return Promise.reject(error);
+ }
+ if (this[kEnded]) {
+ return Promise.resolve(createIterResult(undefined, true));
+ }
+ if (this[kStream].destroyed) {
+ // We need to defer via nextTick because if .destroy(err) is
+ // called, the error will be emitted via nextTick, and
+ // we cannot guarantee that there is no error lingering around
+ // waiting to be emitted.
+ return new Promise(function (resolve, reject) {
+ process.nextTick(function () {
+ if (_this[kError]) {
+ reject(_this[kError]);
+ } else {
+ resolve(createIterResult(undefined, true));
+ }
+ });
+ });
+ }
+
+ // if we have multiple next() calls
+ // we will wait for the previous Promise to finish
+ // this logic is optimized to support for await loops,
+ // where next() is only called once at a time
+ var lastPromise = this[kLastPromise];
+ var promise;
+ if (lastPromise) {
+ promise = new Promise(wrapForNext(lastPromise, this));
+ } else {
+ // fast path needed to support multiple this.push()
+ // without triggering the next() queue
+ var data = this[kStream].read();
+ if (data !== null) {
+ return Promise.resolve(createIterResult(data, false));
+ }
+ promise = new Promise(this[kHandlePromise]);
+ }
+ this[kLastPromise] = promise;
+ return promise;
+ }
+ }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
+ return this;
+ }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
+ var _this2 = this;
+ // destroy(err, cb) is a private API
+ // we can guarantee we have that here, because we control the
+ // Readable class this is attached to
+ return new Promise(function (resolve, reject) {
+ _this2[kStream].destroy(null, function (err) {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(createIterResult(undefined, true));
+ });
+ });
+ }), _Object$setPrototypeO), AsyncIteratorPrototype);
+ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
+ var _Object$create;
+ var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
+ value: stream,
+ writable: true
+ }), _defineProperty(_Object$create, kLastResolve, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kLastReject, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kError, {
+ value: null,
+ writable: true
+ }), _defineProperty(_Object$create, kEnded, {
+ value: stream._readableState.endEmitted,
+ writable: true
+ }), _defineProperty(_Object$create, kHandlePromise, {
+ value: function value(resolve, reject) {
+ var data = iterator[kStream].read();
+ if (data) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ } else {
+ iterator[kLastResolve] = resolve;
+ iterator[kLastReject] = reject;
+ }
+ },
+ writable: true
+ }), _Object$create));
+ iterator[kLastPromise] = null;
+ finished(stream, function (err) {
+ if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
+ var reject = iterator[kLastReject];
+ // reject if we are waiting for data in the Promise
+ // returned by next() and store the error
+ if (reject !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ reject(err);
+ }
+ iterator[kError] = err;
+ return;
+ }
+ var resolve = iterator[kLastResolve];
+ if (resolve !== null) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(undefined, true));
+ }
+ iterator[kEnded] = true;
+ });
+ stream.on('readable', onReadable.bind(null, iterator));
+ return iterator;
+ };
+ async_iterator = createReadableStreamAsyncIterator;
+ return async_iterator;
+}
+
+var from_1;
+var hasRequiredFrom;
+
+function requireFrom () {
+ if (hasRequiredFrom) return from_1;
+ hasRequiredFrom = 1;
+
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+ var ERR_INVALID_ARG_TYPE = requireErrors().codes.ERR_INVALID_ARG_TYPE;
+ function from(Readable, iterable, opts) {
+ var iterator;
+ if (iterable && typeof iterable.next === 'function') {
+ iterator = iterable;
+ } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);
+ var readable = new Readable(_objectSpread({
+ objectMode: true
+ }, opts));
+ // Reading boolean to protect against _read
+ // being called before last iteration completion.
+ var reading = false;
+ readable._read = function () {
+ if (!reading) {
+ reading = true;
+ next();
+ }
+ };
+ function next() {
+ return _next2.apply(this, arguments);
+ }
+ function _next2() {
+ _next2 = _asyncToGenerator(function* () {
+ try {
+ var _yield$iterator$next = yield iterator.next(),
+ value = _yield$iterator$next.value,
+ done = _yield$iterator$next.done;
+ if (done) {
+ readable.push(null);
+ } else if (readable.push(yield value)) {
+ next();
+ } else {
+ reading = false;
+ }
+ } catch (err) {
+ readable.destroy(err);
+ }
+ });
+ return _next2.apply(this, arguments);
+ }
+ return readable;
+ }
+ from_1 = from;
+ return from_1;
+}
+
+var _stream_readable;
+var hasRequired_stream_readable;
+
+function require_stream_readable () {
+ if (hasRequired_stream_readable) return _stream_readable;
+ hasRequired_stream_readable = 1;
+
+ _stream_readable = Readable;
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$0$2$1.EventEmitter;
+ var EElistenerCount = function EElistenerCount(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ var Buffer = require$$0$2.Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+ var debugUtil = require$$0$1$1;
+ var debug;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function debug() {};
+ }
+ /**/
+
+ var BufferList = requireBuffer_list();
+ var destroyImpl = requireDestroy();
+ var _require = requireState(),
+ getHighWaterMark = _require.getHighWaterMark;
+ var _require$codes = requireErrors().codes,
+ ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
+ ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
+
+ // Lazy loaded to improve the startup performance.
+ var StringDecoder;
+ var createReadableStreamAsyncIterator;
+ var from;
+ inheritsExports(Readable, Stream);
+ var errorOrDestroy = destroyImpl.errorOrDestroy;
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+ function ReadableState(options, stream, isDuplex) {
+ Duplex = Duplex || require_stream_duplex();
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+ this.paused = true;
+
+ // Should close be emitted on destroy. Defaults to true.
+ this.emitClose = options.emitClose !== false;
+
+ // Should .destroy() be called after 'end' (and potentially 'finish')
+ this.autoDestroy = !!options.autoDestroy;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex();
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ // Checking for a Stream.Duplex instance is faster here instead of inside
+ // the ReadableState constructor, at least with V8 6.5
+ var isDuplex = this instanceof Duplex;
+ this._readableState = new ReadableState(options, this, isDuplex);
+
+ // legacy
+ this.readable = true;
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+ Stream.call(this);
+ }
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function set(value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ debug('readableAddChunk', chunk);
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ errorOrDestroy(stream, er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+ if (addToFront) {
+ if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
+ } else if (state.destroyed) {
+ return false;
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ maybeReadMore(stream, state);
+ }
+ }
+
+ // We can push more data if we are below the highWaterMark.
+ // Also, if we have no data yet, we can stand some more bytes.
+ // This is to work around cases where hwm=0, such as the repl.
+ return !state.ended && (state.length < state.highWaterMark || state.length === 0);
+ }
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ state.awaitDrain = 0;
+ stream.emit('data', chunk);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
+ }
+ return er;
+ }
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder$1().StringDecoder;
+ var decoder = new StringDecoder(enc);
+ this._readableState.decoder = decoder;
+ // If setEncoding(null), decoder.encoding equals utf8
+ this._readableState.encoding = this._readableState.decoder.encoding;
+
+ // Iterate over current buffer to convert already stored Buffers:
+ var p = this._readableState.buffer.head;
+ var content = '';
+ while (p !== null) {
+ content += decoder.write(p.data);
+ p = p.next;
+ }
+ this._readableState.buffer.clear();
+ if (content !== '') this._readableState.buffer.push(content);
+ this._readableState.length = content.length;
+ return this;
+ };
+
+ // Don't raise the hwm > 1GB
+ var MAX_HWM = 0x40000000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+ if (ret === null) {
+ state.needReadable = state.length <= state.highWaterMark;
+ n = 0;
+ } else {
+ state.length -= n;
+ state.awaitDrain = 0;
+ }
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+ if (ret !== null) this.emit('data', ret);
+ return ret;
+ };
+ function onEofChunk(stream, state) {
+ debug('onEofChunk');
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+ if (state.sync) {
+ // if we are sync, wait until next tick to emit the data.
+ // Otherwise we risk emitting data in the flow()
+ // the readable code triggers during a read() call
+ emitReadable(stream);
+ } else {
+ // emit 'readable' now to make sure it gets picked up.
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ state.emittedReadable = true;
+ emitReadable_(stream);
+ }
+ }
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ debug('emitReadable', state.needReadable, state.emittedReadable);
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ process.nextTick(emitReadable_, stream);
+ }
+ }
+ function emitReadable_(stream) {
+ var state = stream._readableState;
+ debug('emitReadable_', state.destroyed, state.length, state.ended);
+ if (!state.destroyed && (state.length || state.ended)) {
+ stream.emit('readable');
+ state.emittedReadable = false;
+ }
+
+ // The stream needs another readable event if
+ // 1. It is not flowing, as the flow mechanism will take
+ // care of it.
+ // 2. It is not ended.
+ // 3. It is below the highWaterMark, so we can schedule
+ // another readable later.
+ state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+ function maybeReadMore_(stream, state) {
+ // Attempt to read more data if we should.
+ //
+ // The conditions for reading more data are (one of):
+ // - Not enough data buffered (state.length < state.highWaterMark). The loop
+ // is responsible for filling the buffer with enough data if such data
+ // is available. If highWaterMark is 0 and we are not in the flowing mode
+ // we should _not_ attempt to buffer any extra data. We'll get more data
+ // when the stream consumer calls read() instead.
+ // - No data in the buffer, and the stream is in flowing mode. In this mode
+ // the loop below is responsible for ensuring read() is called. Failing to
+ // call read here would abort the flow and there's no other mechanism for
+ // continuing the flow if the stream consumer has just subscribed to the
+ // 'data' event.
+ //
+ // In addition to the above conditions to keep reading data, the following
+ // conditions prevent the data from being read:
+ // - The stream has ended (state.ended).
+ // - There is already a pending 'read' operation (state.reading). This is a
+ // case where the the stream has called the implementation defined _read()
+ // method, but they are processing the call asynchronously and have _not_
+ // called push() with new data. In this case we skip performing more
+ // read()s. The execution ends in this method again after the _read() ends
+ // up calling push() with more data.
+ while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
+ var len = state.length;
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
+ };
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ debug('dest.write', ret);
+ if (ret === false) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', state.awaitDrain);
+ state.awaitDrain++;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+ return dest;
+ };
+ function pipeOnDrain(src) {
+ return function pipeOnDrainFunctionResult() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = {
+ hasUnpiped: false
+ };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {
+ hasUnpiped: false
+ });
+ return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+ dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+ var state = this._readableState;
+ if (ev === 'data') {
+ // update readableListening so that resume() may be a no-op
+ // a few lines down. This is needed to support once('readable').
+ state.readableListening = this.listenerCount('readable') > 0;
+
+ // Try start flowing on next tick if stream isn't explicitly paused
+ if (state.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.flowing = false;
+ state.emittedReadable = false;
+ debug('on readable', state.length, state.reading);
+ if (state.length) {
+ emitReadable(this);
+ } else if (!state.reading) {
+ process.nextTick(nReadingNextTick, this);
+ }
+ }
+ }
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+ Readable.prototype.removeListener = function (ev, fn) {
+ var res = Stream.prototype.removeListener.call(this, ev, fn);
+ if (ev === 'readable') {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ Readable.prototype.removeAllListeners = function (ev) {
+ var res = Stream.prototype.removeAllListeners.apply(this, arguments);
+ if (ev === 'readable' || ev === undefined) {
+ // We need to check if there is someone still listening to
+ // readable and reset the state. However this needs to happen
+ // after readable has been emitted but before I/O (nextTick) to
+ // support once('readable', fn) cycles. This means that calling
+ // resume within the same tick will have no
+ // effect.
+ process.nextTick(updateReadableListening, this);
+ }
+ return res;
+ };
+ function updateReadableListening(self) {
+ var state = self._readableState;
+ state.readableListening = self.listenerCount('readable') > 0;
+ if (state.resumeScheduled && !state.paused) {
+ // flowing needs to be set to true now, otherwise
+ // the upcoming resume will not flow.
+ state.flowing = true;
+
+ // crude way to check if we should resume
+ } else if (self.listenerCount('data') > 0) {
+ self.resume();
+ }
+ }
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ // we flow only if there is no one listening
+ // for readable, but we still have to call
+ // resume()
+ state.flowing = !state.readableListening;
+ resume(this, state);
+ }
+ state.paused = false;
+ return this;
+ };
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(resume_, stream, state);
+ }
+ }
+ function resume_(stream, state) {
+ debug('resume', state.reading);
+ if (!state.reading) {
+ stream.read(0);
+ }
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (this._readableState.flowing !== false) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ this._readableState.paused = true;
+ return this;
+ };
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null);
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+ var state = this._readableState;
+ var paused = false;
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+ _this.push(null);
+ });
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function methodWrap(method) {
+ return function methodWrapReturnFunction() {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+ return this;
+ };
+ if (typeof Symbol === 'function') {
+ Readable.prototype[Symbol.asyncIterator] = function () {
+ if (createReadableStreamAsyncIterator === undefined) {
+ createReadableStreamAsyncIterator = requireAsync_iterator();
+ }
+ return createReadableStreamAsyncIterator(this);
+ };
+ }
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.highWaterMark;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableBuffer', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState && this._readableState.buffer;
+ }
+ });
+ Object.defineProperty(Readable.prototype, 'readableFlowing', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.flowing;
+ },
+ set: function set(state) {
+ if (this._readableState) {
+ this._readableState.flowing = state;
+ }
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+ Object.defineProperty(Readable.prototype, 'readableLength', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function get() {
+ return this._readableState.length;
+ }
+ });
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = state.buffer.consume(n, state.decoder);
+ }
+ return ret;
+ }
+ function endReadable(stream) {
+ var state = stream._readableState;
+ debug('endReadable', state.endEmitted);
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(endReadableNT, state, stream);
+ }
+ }
+ function endReadableNT(state, stream) {
+ debug('endReadableNT', state.endEmitted, state.length);
+
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ if (state.autoDestroy) {
+ // In case of duplex streams we need a way to detect
+ // if the writable side is ready for autoDestroy as well
+ var wState = stream._writableState;
+ if (!wState || wState.autoDestroy && wState.finished) {
+ stream.destroy();
+ }
+ }
+ }
+ }
+ if (typeof Symbol === 'function') {
+ Readable.from = function (iterable, opts) {
+ if (from === undefined) {
+ from = requireFrom();
+ }
+ return from(Readable, iterable, opts);
+ };
+ }
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable;
+}
+
+var _stream_transform;
+var hasRequired_stream_transform;
+
+function require_stream_transform () {
+ if (hasRequired_stream_transform) return _stream_transform;
+ hasRequired_stream_transform = 1;
+
+ _stream_transform = Transform;
+ var _require$codes = requireErrors().codes,
+ ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
+ ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
+ ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
+ ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
+ var Duplex = require_stream_duplex();
+ inheritsExports(Transform, Duplex);
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+ var cb = ts.writecb;
+ if (cb === null) {
+ return this.emit('error', new ERR_MULTIPLE_CALLBACK());
+ }
+ ts.writechunk = null;
+ ts.writecb = null;
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ this.push(data);
+ cb(er);
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+ Duplex.call(this, options);
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+ function prefinish() {
+ var _this = this;
+ if (typeof this._flush === 'function' && !this._readableState.destroyed) {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
+ };
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+ if (ts.writechunk !== null && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+ Transform.prototype._destroy = function (err, cb) {
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ });
+ };
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+ if (data != null)
+ // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // TODO(BridgeAR): Write a test for these two error cases
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
+ if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
+ return stream.push(null);
+ }
+ return _stream_transform;
+}
+
+var _stream_passthrough;
+var hasRequired_stream_passthrough;
+
+function require_stream_passthrough () {
+ if (hasRequired_stream_passthrough) return _stream_passthrough;
+ hasRequired_stream_passthrough = 1;
+
+ _stream_passthrough = PassThrough;
+ var Transform = require_stream_transform();
+ inheritsExports(PassThrough, Transform);
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+ Transform.call(this, options);
+ }
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough;
+}
+
+var pipeline_1;
+var hasRequiredPipeline;
+
+function requirePipeline () {
+ if (hasRequiredPipeline) return pipeline_1;
+ hasRequiredPipeline = 1;
+
+ var eos;
+ function once(callback) {
+ var called = false;
+ return function () {
+ if (called) return;
+ called = true;
+ callback.apply(void 0, arguments);
+ };
+ }
+ var _require$codes = requireErrors().codes,
+ ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
+ ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
+ function noop(err) {
+ // Rethrow the error if it exists to avoid swallowing it
+ if (err) throw err;
+ }
+ function isRequest(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+ }
+ function destroyer(stream, reading, writing, callback) {
+ callback = once(callback);
+ var closed = false;
+ stream.on('close', function () {
+ closed = true;
+ });
+ if (eos === undefined) eos = requireEndOfStream();
+ eos(stream, {
+ readable: reading,
+ writable: writing
+ }, function (err) {
+ if (err) return callback(err);
+ closed = true;
+ callback();
+ });
+ var destroyed = false;
+ return function (err) {
+ if (closed) return;
+ if (destroyed) return;
+ destroyed = true;
+
+ // request.destroy just do .end - .abort is what we want
+ if (isRequest(stream)) return stream.abort();
+ if (typeof stream.destroy === 'function') return stream.destroy();
+ callback(err || new ERR_STREAM_DESTROYED('pipe'));
+ };
+ }
+ function call(fn) {
+ fn();
+ }
+ function pipe(from, to) {
+ return from.pipe(to);
+ }
+ function popCallback(streams) {
+ if (!streams.length) return noop;
+ if (typeof streams[streams.length - 1] !== 'function') return noop;
+ return streams.pop();
+ }
+ function pipeline() {
+ for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
+ streams[_key] = arguments[_key];
+ }
+ var callback = popCallback(streams);
+ if (Array.isArray(streams[0])) streams = streams[0];
+ if (streams.length < 2) {
+ throw new ERR_MISSING_ARGS('streams');
+ }
+ var error;
+ var destroys = streams.map(function (stream, i) {
+ var reading = i < streams.length - 1;
+ var writing = i > 0;
+ return destroyer(stream, reading, writing, function (err) {
+ if (!error) error = err;
+ if (err) destroys.forEach(call);
+ if (reading) return;
+ destroys.forEach(call);
+ callback(error);
+ });
+ });
+ return streams.reduce(pipe);
+ }
+ pipeline_1 = pipeline;
+ return pipeline_1;
+}
+
+readable.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1.Readable;
+ Object.assign(module.exports, Stream$1);
+ module.exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable();
+ exports.Duplex = require_stream_duplex();
+ exports.Transform = require_stream_transform();
+ exports.PassThrough = require_stream_passthrough();
+ exports.finished = requireEndOfStream();
+ exports.pipeline = requirePipeline();
+ }
+} (readable, readable.exports));
+
+var readableExports = readable.exports;
+
+var Transform = readableExports.Transform
+ , inherits$7 = inheritsExports;
+
+function DestroyableTransform(opts) {
+ Transform.call(this, opts);
+ this._destroyed = false;
+}
+
+inherits$7(DestroyableTransform, Transform);
+
+DestroyableTransform.prototype.destroy = function(err) {
+ if (this._destroyed) return
+ this._destroyed = true;
+
+ var self = this;
+ process.nextTick(function() {
+ if (err)
+ self.emit('error', err);
+ self.emit('close');
+ });
+};
+
+// a noop _transform function
+function noop (chunk, enc, callback) {
+ callback(null, chunk);
+}
+
+
+// create a new export function, used by both the main export and
+// the .ctor export, contains common logic for dealing with arguments
+function through2 (construct) {
+ return function (options, transform, flush) {
+ if (typeof options == 'function') {
+ flush = transform;
+ transform = options;
+ options = {};
+ }
+
+ if (typeof transform != 'function')
+ transform = noop;
+
+ if (typeof flush != 'function')
+ flush = null;
+
+ return construct(options, transform, flush)
+ }
+}
+
+
+// main export, just make me a transform stream!
+through2$1.exports = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(options);
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+
+// make me a reusable prototype that I can `new`, or implicitly `new`
+// with a constructor call
+through2$1.exports.ctor = through2(function (options, transform, flush) {
+ function Through2 (override) {
+ if (!(this instanceof Through2))
+ return new Through2(override)
+
+ this.options = Object.assign({}, options, override);
+
+ DestroyableTransform.call(this, this.options);
+ }
+
+ inherits$7(Through2, DestroyableTransform);
+
+ Through2.prototype._transform = transform;
+
+ if (flush)
+ Through2.prototype._flush = flush;
+
+ return Through2
+});
+
+
+var obj = through2$1.exports.obj = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(Object.assign({ objectMode: true, highWaterMark: 16 }, options));
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+/**
+ * Copyright (c) 2013 Petka Antonov
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+function Deque(capacity) {
+ this._capacity = getCapacity(capacity);
+ this._length = 0;
+ this._front = 0;
+ if (isArray$2(capacity)) {
+ var len = capacity.length;
+ for (var i = 0; i < len; ++i) {
+ this[i] = capacity[i];
+ }
+ this._length = len;
+ }
+}
+
+Deque.prototype.toArray = function Deque$toArray() {
+ var len = this._length;
+ var ret = new Array(len);
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ ret[j] = this[(front + j) & (capacity - 1)];
+ }
+ return ret;
+};
+
+Deque.prototype.push = function Deque$push(item) {
+ var argsLength = arguments.length;
+ var length = this._length;
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = 0; i < argsLength; ++i) {
+ this._checkCapacity(length + 1);
+ var j = (this._front + length) & (this._capacity - 1);
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ }
+ return length;
+ }
+ else {
+ var j = this._front;
+ for (var i = 0; i < argsLength; ++i) {
+ this[(j + length) & (capacity - 1)] = arguments[i];
+ j++;
+ }
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var i = (this._front + length) & (this._capacity - 1);
+ this[i] = item;
+ this._length = length + 1;
+ return length + 1;
+};
+
+Deque.prototype.pop = function Deque$pop() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var i = (this._front + length - 1) & (this._capacity - 1);
+ var ret = this[i];
+ this[i] = void 0;
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.shift = function Deque$shift() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var front = this._front;
+ var ret = this[front];
+ this[front] = void 0;
+ this._front = (front + 1) & (this._capacity - 1);
+ this._length = length - 1;
+ return ret;
+};
+
+Deque.prototype.unshift = function Deque$unshift(item) {
+ var length = this._length;
+ var argsLength = arguments.length;
+
+
+ if (argsLength > 1) {
+ var capacity = this._capacity;
+ if (length + argsLength > capacity) {
+ for (var i = argsLength - 1; i >= 0; i--) {
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var j = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ length++;
+ this._length = length;
+ this._front = j;
+ }
+ return length;
+ }
+ else {
+ var front = this._front;
+ for (var i = argsLength - 1; i >= 0; i--) {
+ var j = (((( front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[j] = arguments[i];
+ front = j;
+ }
+ this._front = front;
+ this._length = length + argsLength;
+ return length + argsLength;
+ }
+ }
+
+ if (argsLength === 0) return length;
+
+ this._checkCapacity(length + 1);
+ var capacity = this._capacity;
+ var i = (((( this._front - 1 ) &
+ ( capacity - 1) ) ^ capacity ) - capacity );
+ this[i] = item;
+ this._length = length + 1;
+ this._front = i;
+ return length + 1;
+};
+
+Deque.prototype.peekBack = function Deque$peekBack() {
+ var length = this._length;
+ if (length === 0) {
+ return void 0;
+ }
+ var index = (this._front + length - 1) & (this._capacity - 1);
+ return this[index];
+};
+
+Deque.prototype.peekFront = function Deque$peekFront() {
+ if (this._length === 0) {
+ return void 0;
+ }
+ return this[this._front];
+};
+
+Deque.prototype.get = function Deque$get(index) {
+ var i = index;
+ if ((i !== (i | 0))) {
+ return void 0;
+ }
+ var len = this._length;
+ if (i < 0) {
+ i = i + len;
+ }
+ if (i < 0 || i >= len) {
+ return void 0;
+ }
+ return this[(this._front + i) & (this._capacity - 1)];
+};
+
+Deque.prototype.isEmpty = function Deque$isEmpty() {
+ return this._length === 0;
+};
+
+Deque.prototype.clear = function Deque$clear() {
+ var len = this._length;
+ var front = this._front;
+ var capacity = this._capacity;
+ for (var j = 0; j < len; ++j) {
+ this[(front + j) & (capacity - 1)] = void 0;
+ }
+ this._length = 0;
+ this._front = 0;
+};
+
+Deque.prototype.toString = function Deque$toString() {
+ return this.toArray().toString();
+};
+
+Deque.prototype.valueOf = Deque.prototype.toString;
+Deque.prototype.removeFront = Deque.prototype.shift;
+Deque.prototype.removeBack = Deque.prototype.pop;
+Deque.prototype.insertFront = Deque.prototype.unshift;
+Deque.prototype.insertBack = Deque.prototype.push;
+Deque.prototype.enqueue = Deque.prototype.push;
+Deque.prototype.dequeue = Deque.prototype.shift;
+Deque.prototype.toJSON = Deque.prototype.toArray;
+
+Object.defineProperty(Deque.prototype, "length", {
+ get: function() {
+ return this._length;
+ },
+ set: function() {
+ throw new RangeError("");
+ }
+});
+
+Deque.prototype._checkCapacity = function Deque$_checkCapacity(size) {
+ if (this._capacity < size) {
+ this._resizeTo(getCapacity(this._capacity * 1.5 + 16));
+ }
+};
+
+Deque.prototype._resizeTo = function Deque$_resizeTo(capacity) {
+ var oldCapacity = this._capacity;
+ this._capacity = capacity;
+ var front = this._front;
+ var length = this._length;
+ if (front + length > oldCapacity) {
+ var moveItemsCount = (front + length) & (oldCapacity - 1);
+ arrayMove(this, 0, this, oldCapacity, moveItemsCount);
+ }
+};
+
+
+var isArray$2 = Array.isArray;
+
+function arrayMove(src, srcIndex, dst, dstIndex, len) {
+ for (var j = 0; j < len; ++j) {
+ dst[j + dstIndex] = src[j + srcIndex];
+ src[j + srcIndex] = void 0;
+ }
+}
+
+function pow2AtLeast(n) {
+ n = n >>> 0;
+ n = n - 1;
+ n = n | (n >> 1);
+ n = n | (n >> 2);
+ n = n | (n >> 4);
+ n = n | (n >> 8);
+ n = n | (n >> 16);
+ return n + 1;
+}
+
+function getCapacity(capacity) {
+ if (typeof capacity !== "number") {
+ if (isArray$2(capacity)) {
+ capacity = capacity.length;
+ }
+ else {
+ return 16;
+ }
+ }
+ return pow2AtLeast(
+ Math.min(
+ Math.max(16, capacity), 1073741824)
+ );
+}
+
+var deque = Deque;
+
+var Deque$1 = /*@__PURE__*/getDefaultExportFromCjs(deque);
+
+function readAsBlobOrBuffer(storedObject, type) {
+ // In Node, we've stored a buffer
+ storedObject.type = type; // non-standard, but used for consistency
+ return storedObject;
+}
+
+// in Node, we store the buffer directly
+function prepareAttachmentForStorage(attData, cb) {
+ cb(attData);
+}
+
+function createEmptyBlobOrBuffer(type) {
+ return typedBuffer('', 'binary', type);
+}
+
+// similar to an idb or websql transaction object
+
+function getCacheFor(transaction, store) {
+ var prefix = store.prefix()[0];
+ var cache = transaction._cache;
+ var subCache = cache.get(prefix);
+ if (!subCache) {
+ subCache = new Map();
+ cache.set(prefix, subCache);
+ }
+ return subCache;
+}
+
+class LevelTransaction {
+ constructor() {
+ this._batch = [];
+ this._cache = new Map();
+ }
+
+ get(store, key, callback) {
+ var cache = getCacheFor(this, store);
+ var exists = cache.get(key);
+ if (exists) {
+ return nextTick$9(function () {
+ callback(null, exists);
+ });
+ } else if (exists === null) { // deleted marker
+ /* istanbul ignore next */
+ return nextTick$9(function () {
+ callback({name: 'NotFoundError'});
+ });
+ }
+ store.get(key, function (err, res) {
+ if (err) {
+ /* istanbul ignore else */
+ if (err.name === 'NotFoundError') {
+ cache.set(key, null);
+ }
+ return callback(err);
+ }
+ cache.set(key, res);
+ callback(null, res);
+ });
+ }
+
+ batch(batch) {
+ for (var i = 0, len = batch.length; i < len; i++) {
+ var operation = batch[i];
+
+ var cache = getCacheFor(this, operation.prefix);
+
+ if (operation.type === 'put') {
+ cache.set(operation.key, operation.value);
+ } else {
+ cache.set(operation.key, null);
+ }
+ }
+ this._batch = this._batch.concat(batch);
+ }
+
+ execute(db, callback) {
+ var keys = new Set();
+ var uniqBatches = [];
+
+ // remove duplicates; last one wins
+ for (var i = this._batch.length - 1; i >= 0; i--) {
+ var operation = this._batch[i];
+ var lookupKey = operation.prefix.prefix()[0] + '\xff' + operation.key;
+ if (keys.has(lookupKey)) {
+ continue;
+ }
+ keys.add(lookupKey);
+ uniqBatches.push(operation);
+ }
+
+ db.batch(uniqBatches, callback);
+ }
+}
+
+var DOC_STORE = 'document-store';
+var BY_SEQ_STORE = 'by-sequence';
+var ATTACHMENT_STORE = 'attach-store';
+var BINARY_STORE = 'attach-binary-store';
+var LOCAL_STORE = 'local-store';
+var META_STORE = 'meta-store';
+
+// leveldb barks if we try to open a db multiple times
+// so we cache opened connections here for initstore()
+var dbStores = new Map();
+
+// store the value of update_seq in the by-sequence store the key name will
+// never conflict, since the keys in the by-sequence store are integers
+var UPDATE_SEQ_KEY$1 = '_local_last_update_seq';
+var DOC_COUNT_KEY$1 = '_local_doc_count';
+var UUID_KEY$1 = '_local_uuid';
+
+var MD5_PREFIX = 'md5-';
+
+var safeJsonEncoding = {
+ encode: safeJsonStringify,
+ decode: safeJsonParse,
+ buffer: false,
+ type: 'cheap-json'
+};
+
+var levelChanges = new Changes();
+
+// winningRev and deleted are performance-killers, but
+// in newer versions of PouchDB, they are cached on the metadata
+function getWinningRev(metadata) {
+ return 'winningRev' in metadata ?
+ metadata.winningRev : winningRev(metadata);
+}
+
+function getIsDeleted(metadata, winningRev) {
+ return 'deleted' in metadata ?
+ metadata.deleted : isDeleted(metadata, winningRev);
+}
+
+function fetchAttachment(att, stores, opts) {
+ var type = att.content_type;
+ return new Promise(function (resolve, reject) {
+ stores.binaryStore.get(att.digest, function (err, buffer) {
+ var data;
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return reject(err);
+ } else {
+ // empty
+ if (!opts.binary) {
+ data = '';
+ } else {
+ data = binStringToBluffer('', type);
+ }
+ }
+ } else { // non-empty
+ if (opts.binary) {
+ data = readAsBlobOrBuffer(buffer, type);
+ } else {
+ data = buffer.toString('base64');
+ }
+ }
+ delete att.stub;
+ delete att.length;
+ att.data = data;
+ resolve();
+ });
+ });
+}
+
+function fetchAttachments(results, stores, opts) {
+ var atts = [];
+ results.forEach(function (row) {
+ if (!(row.doc && row.doc._attachments)) {
+ return;
+ }
+ var attNames = Object.keys(row.doc._attachments);
+ attNames.forEach(function (attName) {
+ var att = row.doc._attachments[attName];
+ if (!('data' in att)) {
+ atts.push(att);
+ }
+ });
+ });
+
+ return Promise.all(atts.map(function (att) {
+ return fetchAttachment(att, stores, opts);
+ }));
+}
+
+function LevelPouch$1(opts, callback) {
+ opts = clone$1(opts);
+ var api = this;
+ var instanceId;
+ var stores = {};
+ var revLimit = opts.revs_limit;
+ var db;
+ var name = opts.name;
+ // TODO: this is undocumented and unused probably
+ /* istanbul ignore else */
+ if (typeof opts.createIfMissing === 'undefined') {
+ opts.createIfMissing = true;
+ }
+
+ var leveldown = opts.db;
+
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ dbStore = new Map();
+ dbStores.set(leveldownName, dbStore);
+ }
+ if (dbStore.has(name)) {
+ db = dbStore.get(name);
+ afterDBCreated();
+ } else {
+ dbStore.set(name, sublevelPouch(levelup$1$1(leveldown(name), opts, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ dbStore.delete(name);
+ return callback(err);
+ }
+ db = dbStore.get(name);
+ db._docCount = -1;
+ db._queue = new Deque$1();
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationOne(name, db, afterDBCreated);
+ } else {
+ afterDBCreated();
+ }
+ })));
+ }
+
+ function afterDBCreated() {
+ stores.docStore = db.sublevel(DOC_STORE, {valueEncoding: safeJsonEncoding});
+ stores.bySeqStore = db.sublevel(BY_SEQ_STORE, {valueEncoding: 'json'});
+ stores.attachmentStore =
+ db.sublevel(ATTACHMENT_STORE, {valueEncoding: 'json'});
+ stores.binaryStore = db.sublevel(BINARY_STORE, {valueEncoding: 'binary'});
+ stores.localStore = db.sublevel(LOCAL_STORE, {valueEncoding: 'json'});
+ stores.metaStore = db.sublevel(META_STORE, {valueEncoding: 'json'});
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationTwo(db, stores, afterLastMigration);
+ } else {
+ afterLastMigration();
+ }
+ }
+
+ function afterLastMigration() {
+ stores.metaStore.get(UPDATE_SEQ_KEY$1, function (err, value) {
+ if (typeof db._updateSeq === 'undefined') {
+ db._updateSeq = value || 0;
+ }
+ stores.metaStore.get(DOC_COUNT_KEY$1, function (err, value) {
+ db._docCount = !err ? value : 0;
+ stores.metaStore.get(UUID_KEY$1, function (err, value) {
+ instanceId = !err ? value : uuid();
+ stores.metaStore.put(UUID_KEY$1, instanceId, function () {
+ nextTick$9(function () {
+ callback(null, api);
+ });
+ });
+ });
+ });
+ });
+ }
+
+ function countDocs(callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(new Error('database is closed'));
+ }
+ return callback(null, db._docCount); // use cached value
+ }
+
+ api._remote = false;
+ /* istanbul ignore next */
+ api.type = function () {
+ return 'leveldb';
+ };
+
+ api._id = function (callback) {
+ callback(null, instanceId);
+ };
+
+ api._info = function (callback) {
+ var res = {
+ doc_count: db._docCount,
+ update_seq: db._updateSeq,
+ backend_adapter: functionName(leveldown)
+ };
+ return nextTick$9(function () {
+ callback(null, res);
+ });
+ };
+
+ function tryCode(fun, args) {
+ try {
+ fun.apply(null, args);
+ } catch (err) {
+ args[args.length - 1](err);
+ }
+ }
+
+ function executeNext() {
+ var firstTask = db._queue.peekFront();
+
+ if (firstTask.type === 'read') {
+ runReadOperation(firstTask);
+ } else { // write, only do one at a time
+ runWriteOperation(firstTask);
+ }
+ }
+
+ function runReadOperation(firstTask) {
+ // do multiple reads at once simultaneously, because it's safe
+
+ var readTasks = [firstTask];
+ var i = 1;
+ var nextTask = db._queue.get(i);
+ while (typeof nextTask !== 'undefined' && nextTask.type === 'read') {
+ readTasks.push(nextTask);
+ i++;
+ nextTask = db._queue.get(i);
+ }
+
+ var numDone = 0;
+
+ readTasks.forEach(function (readTask) {
+ var args = readTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ if (++numDone === readTasks.length) {
+ nextTick$9(function () {
+ // all read tasks have finished
+ readTasks.forEach(function () {
+ db._queue.shift();
+ });
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ }
+ };
+ tryCode(readTask.fun, args);
+ });
+ }
+
+ function runWriteOperation(firstTask) {
+ var args = firstTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ nextTick$9(function () {
+ db._queue.shift();
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ };
+ tryCode(firstTask.fun, args);
+ }
+
+ // all read/write operations to the database are done in a queue,
+ // similar to how websql/idb works. this avoids problems such
+ // as e.g. compaction needing to have a lock on the database while
+ // it updates stuff. in the future we can revisit this.
+ function writeLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'write'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$9(executeNext);
+ }
+ };
+ }
+
+ // same as the writelock, but multiple can run at once
+ function readLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'read'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick$9(executeNext);
+ }
+ };
+ }
+
+ function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+ }
+
+ function parseSeq(s) {
+ return parseInt(s, 10);
+ }
+
+ api._get = readLock(function (id, opts, callback) {
+ opts = clone$1(opts);
+
+ stores.docStore.get(id, function (err, metadata) {
+
+ if (err || !metadata) {
+ return callback(createError$2(MISSING_DOC, 'missing'));
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, rev);
+ if (deleted) {
+ return callback(createError$2(MISSING_DOC, "deleted"));
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var seq = metadata.rev_map[rev];
+
+ stores.bySeqStore.get(formatSeq(seq), function (err, doc) {
+ if (!doc) {
+ return callback(createError$2(MISSING_DOC));
+ }
+ /* istanbul ignore if */
+ if ('_id' in doc && doc._id !== metadata.id) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ doc._id = metadata.id;
+ if ('_rev' in doc) {
+ /* istanbul ignore if */
+ if (doc._rev !== rev) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ } else {
+ // we didn't always store this
+ doc._rev = rev;
+ }
+ return callback(null, {doc: doc, metadata: metadata});
+ });
+ });
+ });
+
+ // not technically part of the spec, but if putAttachment has its own
+ // method...
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ stores.binaryStore.get(digest, function (err, attach) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ }
+ // Empty attachment
+ return callback(null, opts.binary ? createEmptyBlobOrBuffer(type) : '');
+ }
+
+ if (opts.binary) {
+ callback(null, readAsBlobOrBuffer(attach, type));
+ } else {
+ callback(null, attach.toString('base64'));
+ }
+ });
+ };
+
+ api._bulkDocs = writeLock(function (req, opts, callback) {
+ var newEdits = opts.new_edits;
+ var results = new Array(req.docs.length);
+ var fetchedDocs = new Map();
+ var stemmedRevs = new Map();
+
+ var txn = new LevelTransaction();
+ var docCountDelta = 0;
+ var newUpdateSeq = db._updateSeq;
+
+ // parse the docs and give each a sequence number
+ var userDocs = req.docs;
+ var docInfos = userDocs.map(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ return doc;
+ }
+ var newDoc = parseDoc(doc, newEdits, api.__opts);
+
+ if (newDoc.metadata && !newDoc.metadata.rev_map) {
+ newDoc.metadata.rev_map = {};
+ }
+
+ return newDoc;
+ });
+ var infoErrors = docInfos.filter(function (doc) {
+ return doc.error;
+ });
+
+ if (infoErrors.length) {
+ return callback(infoErrors[0]);
+ }
+
+ // verify any stub attachments as a precondition test
+
+ function verifyAttachment(digest, callback) {
+ txn.get(stores.attachmentStore, digest, function (levelErr) {
+ if (levelErr) {
+ var err = createError$2(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ callback(err);
+ } else {
+ callback();
+ }
+ });
+ }
+
+ function verifyAttachments(finish) {
+ var digests = [];
+ userDocs.forEach(function (doc) {
+ if (doc && doc._attachments) {
+ Object.keys(doc._attachments).forEach(function (filename) {
+ var att = doc._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ });
+ });
+ }
+
+ function fetchExistingDocs(finish) {
+ var numDone = 0;
+ var overallErr;
+ function checkDone() {
+ if (++numDone === userDocs.length) {
+ return finish(overallErr);
+ }
+ }
+
+ userDocs.forEach(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ // skip local docs
+ return checkDone();
+ }
+ txn.get(stores.docStore, doc._id, function (err, info) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ overallErr = err;
+ }
+ } else {
+ fetchedDocs.set(doc._id, info);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function compact(revsMap, callback) {
+ var promise = Promise.resolve();
+ revsMap.forEach(function (revs, docId) {
+ // TODO: parallelize, for now need to be sequential to
+ // pass orphaned attachment tests
+ promise = promise.then(function () {
+ return new Promise(function (resolve, reject) {
+ api._doCompactionNoLock(docId, revs, {ctx: txn}, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return reject(err);
+ }
+ resolve();
+ });
+ });
+ });
+ });
+
+ promise.then(function () {
+ callback();
+ }, callback);
+ }
+
+ function autoCompact(callback) {
+ var revsMap = new Map();
+ fetchedDocs.forEach(function (metadata, docId) {
+ revsMap.set(docId, compactTree(metadata));
+ });
+ compact(revsMap, callback);
+ }
+
+ function finish() {
+ compact(stemmedRevs, function (error) {
+ /* istanbul ignore if */
+ if (error) {
+ complete(error);
+ }
+ if (api.auto_compaction) {
+ return autoCompact(complete);
+ }
+ complete();
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback2) {
+ docCountDelta += delta;
+
+ var err = null;
+ var recv = 0;
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ docInfo.data._id = docInfo.metadata.id;
+ docInfo.data._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ docInfo.data._deleted = true;
+ }
+
+ if (docInfo.stemmedRevs.length) {
+ stemmedRevs.set(docInfo.metadata.id, docInfo.stemmedRevs);
+ }
+
+ var attachments = docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) :
+ [];
+
+ function attachmentSaved(attachmentErr) {
+ recv++;
+ if (!err) {
+ /* istanbul ignore if */
+ if (attachmentErr) {
+ err = attachmentErr;
+ callback2(err);
+ } else if (recv === attachments.length) {
+ finish();
+ }
+ }
+ }
+
+ function onMD5Load(doc, key, data, attachmentSaved) {
+ return function (result) {
+ saveAttachment(doc, MD5_PREFIX + result, key, data, attachmentSaved);
+ };
+ }
+
+ function doMD5(doc, key, attachmentSaved) {
+ return function (data) {
+ binaryMd5(data, onMD5Load(doc, key, data, attachmentSaved));
+ };
+ }
+
+ for (var i = 0; i < attachments.length; i++) {
+ var key = attachments[i];
+ var att = docInfo.data._attachments[key];
+
+ if (att.stub) {
+ // still need to update the refs mapping
+ var id = docInfo.data._id;
+ var rev = docInfo.data._rev;
+ saveAttachmentRefs(id, rev, att.digest, attachmentSaved);
+ continue;
+ }
+ var data;
+ if (typeof att.data === 'string') {
+ // input is assumed to be a base64 string
+ try {
+ data = atob(att.data);
+ } catch (e) {
+ callback(createError$2(BAD_ARG,
+ 'Attachment is not a valid base64 string'));
+ return;
+ }
+ doMD5(docInfo, key, attachmentSaved)(data);
+ } else {
+ prepareAttachmentForStorage(att.data,
+ doMD5(docInfo, key, attachmentSaved));
+ }
+ }
+
+ function finish() {
+ var seq = docInfo.metadata.rev_map[docInfo.metadata.rev];
+ /* istanbul ignore if */
+ if (seq) {
+ // check that there aren't any existing revisions with the same
+ // revision id, else we shouldn't do anything
+ return callback2();
+ }
+ seq = ++newUpdateSeq;
+ docInfo.metadata.rev_map[docInfo.metadata.rev] =
+ docInfo.metadata.seq = seq;
+ var seqKey = formatSeq(seq);
+ var batch = [{
+ key: seqKey,
+ value: docInfo.data,
+ prefix: stores.bySeqStore,
+ type: 'put'
+ }, {
+ key: docInfo.metadata.id,
+ value: docInfo.metadata,
+ prefix: stores.docStore,
+ type: 'put'
+ }];
+ txn.batch(batch);
+ results[resultsIdx] = {
+ ok: true,
+ id: docInfo.metadata.id,
+ rev: docInfo.metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ callback2();
+ }
+
+ if (!attachments.length) {
+ finish();
+ }
+ }
+
+ // attachments are queued per-digest, otherwise the refs could be
+ // overwritten by concurrent writes in the same bulkDocs session
+ var attachmentQueues = {};
+
+ function saveAttachmentRefs(id, rev, digest, callback) {
+
+ function fetchAtt() {
+ return new Promise(function (resolve, reject) {
+ txn.get(stores.attachmentStore, digest, function (err, oldAtt) {
+ /* istanbul ignore if */
+ if (err && err.name !== 'NotFoundError') {
+ return reject(err);
+ }
+ resolve(oldAtt);
+ });
+ });
+ }
+
+ function saveAtt(oldAtt) {
+ var ref = [id, rev].join('@');
+ var newAtt = {};
+
+ if (oldAtt) {
+ if (oldAtt.refs) {
+ // only update references if this attachment already has them
+ // since we cannot migrate old style attachments here without
+ // doing a full db scan for references
+ newAtt.refs = oldAtt.refs;
+ newAtt.refs[ref] = true;
+ }
+ } else {
+ newAtt.refs = {};
+ newAtt.refs[ref] = true;
+ }
+
+ return new Promise(function (resolve) {
+ txn.batch([{
+ type: 'put',
+ prefix: stores.attachmentStore,
+ key: digest,
+ value: newAtt
+ }]);
+ resolve(!oldAtt);
+ });
+ }
+
+ // put attachments in a per-digest queue, to avoid two docs with the same
+ // attachment overwriting each other
+ var queue = attachmentQueues[digest] || Promise.resolve();
+ attachmentQueues[digest] = queue.then(function () {
+ return fetchAtt().then(saveAtt).then(function (isNewAttachment) {
+ callback(null, isNewAttachment);
+ }, callback);
+ });
+ }
+
+ function saveAttachment(docInfo, digest, key, data, callback) {
+ var att = docInfo.data._attachments[key];
+ delete att.data;
+ att.digest = digest;
+ att.length = data.length;
+ var id = docInfo.metadata.id;
+ var rev = docInfo.metadata.rev;
+ att.revpos = parseInt(rev, 10);
+
+ saveAttachmentRefs(id, rev, digest, function (err, isNewAttachment) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ // do not try to store empty attachments
+ if (data.length === 0) {
+ return callback(err);
+ }
+ if (!isNewAttachment) {
+ // small optimization - don't bother writing it again
+ return callback(err);
+ }
+ txn.batch([{
+ type: 'put',
+ prefix: stores.binaryStore,
+ key: digest,
+ value: Buffer.from(data, 'binary')
+ }]);
+ callback();
+ });
+ }
+
+ function complete(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return nextTick$9(function () {
+ callback(err);
+ });
+ }
+ txn.batch([
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: UPDATE_SEQ_KEY$1,
+ value: newUpdateSeq
+ },
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: DOC_COUNT_KEY$1,
+ value: db._docCount + docCountDelta
+ }
+ ]);
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ db._docCount += docCountDelta;
+ db._updateSeq = newUpdateSeq;
+ levelChanges.notify(name);
+ nextTick$9(function () {
+ callback(null, results);
+ });
+ });
+ }
+
+ if (!docInfos.length) {
+ return callback(null, []);
+ }
+
+ verifyAttachments(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ fetchExistingDocs(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ processDocs(revLimit, docInfos, api, fetchedDocs, txn, results,
+ writeDoc, opts, finish);
+ });
+ });
+ });
+ api._allDocs = function (opts, callback) {
+ if ('keys' in opts) {
+ return allDocsKeysQuery(this, opts);
+ }
+ return readLock(function (opts, callback) {
+ opts = clone$1(opts);
+ countDocs(function (err, docCount) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var readstreamOpts = {};
+ var skip = opts.skip || 0;
+ if (opts.startkey) {
+ readstreamOpts.gte = opts.startkey;
+ }
+ if (opts.endkey) {
+ readstreamOpts.lte = opts.endkey;
+ }
+ if (opts.key) {
+ readstreamOpts.gte = readstreamOpts.lte = opts.key;
+ }
+ if (opts.descending) {
+ readstreamOpts.reverse = true;
+ // switch start and ends
+ var tmp = readstreamOpts.lte;
+ readstreamOpts.lte = readstreamOpts.gte;
+ readstreamOpts.gte = tmp;
+ }
+ var limit;
+ if (typeof opts.limit === 'number') {
+ limit = opts.limit;
+ }
+ if (limit === 0 ||
+ ('gte' in readstreamOpts && 'lte' in readstreamOpts &&
+ readstreamOpts.gte > readstreamOpts.lte)) {
+ // should return 0 results when start is greater than end.
+ // normally level would "fix" this for us by reversing the order,
+ // so short-circuit instead
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ return callback(null, returnVal);
+ }
+ var results = [];
+ var docstream = stores.docStore.readStream(readstreamOpts);
+
+ var throughStream = obj(function (entry, _, next) {
+ var metadata = entry.value;
+ // winningRev and deleted are performance-killers, but
+ // in newer versions of PouchDB, they are cached on the metadata
+ var winningRev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, winningRev);
+ if (!deleted) {
+ if (skip-- > 0) {
+ next();
+ return;
+ } else if (typeof limit === 'number' && limit-- <= 0) {
+ docstream.unpipe();
+ docstream.destroy();
+ next();
+ return;
+ }
+ } else if (opts.deleted !== 'ok') {
+ next();
+ return;
+ }
+ function allDocsInner(data) {
+ var doc = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ if (opts.include_docs) {
+ doc.doc = data;
+ doc.doc._rev = doc.value.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc.doc._conflicts = conflicts;
+ }
+ }
+ for (var att in doc.doc._attachments) {
+ if (Object.prototype.hasOwnProperty.call(doc.doc._attachments, att)) {
+ doc.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ if (opts.inclusive_end === false && metadata.id === opts.endkey) {
+ return next();
+ } else if (deleted) {
+ if (opts.deleted === 'ok') {
+ doc.value.deleted = true;
+ doc.doc = null;
+ } else {
+ /* istanbul ignore next */
+ return next();
+ }
+ }
+ results.push(doc);
+ next();
+ }
+ if (opts.include_docs) {
+ var seq = metadata.rev_map[winningRev];
+ stores.bySeqStore.get(formatSeq(seq), function (err, data) {
+ allDocsInner(data);
+ });
+ }
+ else {
+ allDocsInner();
+ }
+ }, function (next) {
+ Promise.resolve().then(function () {
+ if (opts.include_docs && opts.attachments) {
+ return fetchAttachments(results, stores, opts);
+ }
+ }).then(function () {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ callback(null, returnVal);
+ }, callback);
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ });
+
+ docstream.on('error', callback);
+
+ docstream.pipe(throughStream);
+ });
+ })(opts, callback);
+ };
+
+ api._changes = function (opts) {
+ opts = clone$1(opts);
+
+ if (opts.continuous) {
+ var id = name + ':' + uuid();
+ levelChanges.addListener(name, id, api, opts);
+ levelChanges.notify(name);
+ return {
+ cancel: function () {
+ levelChanges.removeListener(name, id);
+ }
+ };
+ }
+
+ var descending = opts.descending;
+ var results = [];
+ var lastSeq = opts.since || 0;
+ var called = 0;
+ var streamOpts = {
+ reverse: descending
+ };
+ var limit;
+ if ('limit' in opts && opts.limit > 0) {
+ limit = opts.limit;
+ }
+ if (!streamOpts.reverse) {
+ streamOpts.start = formatSeq(opts.since || 0);
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ function complete() {
+ opts.done = true;
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+ changeStream.unpipe(throughStream);
+ changeStream.destroy();
+ if (!opts.continuous && !opts.cancelled) {
+ if (opts.include_docs && opts.attachments && opts.return_docs) {
+ fetchAttachments(results, stores, opts).then(function () {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ });
+ } else {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ }
+ }
+ }
+ var changeStream = stores.bySeqStore.readStream(streamOpts);
+ var throughStream = obj(function (data, _, next) {
+ if (limit && called >= limit) {
+ complete();
+ return next();
+ }
+ if (opts.cancelled || opts.done) {
+ return next();
+ }
+
+ var seq = parseSeq(data.key);
+ var doc = data.value;
+
+ if (seq === opts.since && !descending) {
+ // couchdb ignores `since` if descending=true
+ return next();
+ }
+
+ if (docIds && !docIds.has(doc._id)) {
+ return next();
+ }
+
+ var metadata;
+
+ function onGetMetadata(metadata) {
+ var winningRev = getWinningRev(metadata);
+
+ function onGetWinningDoc(winningDoc) {
+
+ var change = opts.processChange(winningDoc, metadata, opts);
+ change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ called++;
+
+ if (opts.attachments && opts.include_docs) {
+ // fetch attachment immediately for the benefit
+ // of live listeners
+ fetchAttachments([change], stores, opts).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ }
+ next();
+ }
+
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return next();
+ }
+
+ lastSeq = seq;
+
+ if (winningRev === doc._rev) {
+ return onGetWinningDoc(doc);
+ }
+
+ // fetch the winner
+
+ var winningSeq = metadata.rev_map[winningRev];
+
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, doc) {
+ onGetWinningDoc(doc);
+ });
+ }
+
+ metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(metadata);
+ }
+ // metadata not cached, have to go fetch it
+ stores.docStore.get(doc._id, function (err, metadata) {
+ /* istanbul ignore if */
+ if (opts.cancelled || opts.done || db.isClosed() ||
+ isLocalId(metadata.id)) {
+ return next();
+ }
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(metadata);
+ });
+ }, function (next) {
+ if (opts.cancelled) {
+ return next();
+ }
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ complete();
+ });
+ changeStream.pipe(throughStream);
+ return {
+ cancel: function () {
+ opts.cancelled = true;
+ complete();
+ }
+ };
+ };
+
+ api._close = function (callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(createError$2(NOT_OPEN));
+ }
+ db.close(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ dbStore.delete(name);
+
+ var adapterName = functionName(leveldown);
+ var adapterStore = dbStores.get(adapterName);
+ var viewNamePrefix = PouchDB$1.prefix + name + "-mrview-";
+ var keys = [...adapterStore.keys()].filter(k => k.includes(viewNamePrefix));
+ keys.forEach(key => {
+ var eventEmitter = adapterStore.get(key);
+ eventEmitter.removeAllListeners();
+ eventEmitter.close();
+ adapterStore.delete(key);
+ });
+
+ callback();
+ }
+ });
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ stores.docStore.get(docId, function (err, metadata) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, metadata.rev_tree);
+ }
+ });
+ };
+
+ api._doCompaction = writeLock(function (docId, revs, opts, callback) {
+ api._doCompactionNoLock(docId, revs, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._doCompactionNoLock = function (docId, revs, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ if (!revs.length) {
+ return callback();
+ }
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.docStore, docId, function (err, metadata) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var seqs = revs.map(function (rev) {
+ var seq = metadata.rev_map[rev];
+ delete metadata.rev_map[rev];
+ return seq;
+ });
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var batch = [];
+ batch.push({
+ key: metadata.id,
+ value: metadata,
+ type: 'put',
+ prefix: stores.docStore
+ });
+
+ var digestMap = {};
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === revs.length) { // done
+ /* istanbul ignore if */
+ if (overallErr) {
+ return callback(overallErr);
+ }
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function finish(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ txn.batch(batch);
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback();
+ }
+ txn.execute(db, callback);
+ }
+
+ function deleteOrphanedAttachments() {
+ var possiblyOrphanedAttachments = Object.keys(digestMap);
+ if (!possiblyOrphanedAttachments.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === possiblyOrphanedAttachments.length) {
+ finish(overallErr);
+ }
+ }
+ var refsToDelete = new Map();
+ revs.forEach(function (rev) {
+ refsToDelete.set(docId + '@' + rev, true);
+ });
+ possiblyOrphanedAttachments.forEach(function (digest) {
+ txn.get(stores.attachmentStore, digest, function (err, attData) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var refs = Object.keys(attData.refs || {}).filter(function (ref) {
+ return !refsToDelete.has(ref);
+ });
+ var newRefs = {};
+ refs.forEach(function (ref) {
+ newRefs[ref] = true;
+ });
+ if (refs.length) { // not orphaned
+ batch.push({
+ key: digest,
+ type: 'put',
+ value: {refs: newRefs},
+ prefix: stores.attachmentStore
+ });
+ } else { // orphaned, can safely delete
+ batch = batch.concat([{
+ key: digest,
+ type: 'del',
+ prefix: stores.attachmentStore
+ }, {
+ key: digest,
+ type: 'del',
+ prefix: stores.binaryStore
+ }]);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ seqs.forEach(function (seq) {
+ batch.push({
+ key: formatSeq(seq),
+ type: 'del',
+ prefix: stores.bySeqStore
+ });
+ txn.get(stores.bySeqStore, formatSeq(seq), function (err, doc) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var atts = Object.keys(doc._attachments || {});
+ atts.forEach(function (attName) {
+ var digest = doc._attachments[attName].digest;
+ digestMap[digest] = true;
+ });
+ checkDone();
+ });
+ });
+ });
+ };
+
+ api._getLocal = function (id, callback) {
+ stores.localStore.get(id, function (err, doc) {
+ if (err) {
+ callback(createError$2(MISSING_DOC));
+ } else {
+ callback(null, doc);
+ }
+ });
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._putLocalNoLock(doc, opts, callback);
+ } else {
+ api._putLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._putLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._putLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._putLocalNoLock = function (doc, opts, callback) {
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.localStore, id, function (err, resp) {
+ if (err && oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ if (resp && resp._rev !== oldRev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ doc._rev =
+ oldRev ? '0-' + (parseInt(oldRev.split('-')[1], 10) + 1) : '0-1';
+ var batch = [
+ {
+ type: 'put',
+ prefix: stores.localStore,
+ key: id,
+ value: doc
+ }
+ ];
+
+ txn.batch(batch);
+ var ret = {ok: true, id: doc._id, rev: doc._rev};
+
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._removeLocalNoLock(doc, opts, callback);
+ } else {
+ api._removeLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._removeLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._removeLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._removeLocalNoLock = function (doc, opts, callback) {
+ var txn = opts.ctx || new LevelTransaction();
+ txn.get(stores.localStore, doc._id, function (err, resp) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ } else {
+ return callback(createError$2(MISSING_DOC));
+ }
+ }
+ if (resp._rev !== doc._rev) {
+ return callback(createError$2(REV_CONFLICT));
+ }
+ txn.batch([{
+ prefix: stores.localStore,
+ type: 'del',
+ key: doc._id
+ }]);
+ var ret = {ok: true, id: doc._id, rev: '0-0'};
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ // close and delete open leveldb stores
+ api._destroy = function (opts, callback) {
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ /* istanbul ignore else */
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ return callDestroy(name, callback);
+ }
+
+ /* istanbul ignore else */
+ if (dbStore.has(name)) {
+ levelChanges.removeAllListeners(name);
+
+ dbStore.get(name).close(function () {
+ dbStore.delete(name);
+ callDestroy(name, callback);
+ });
+ } else {
+ callDestroy(name, callback);
+ }
+ };
+ function callDestroy(name, cb) {
+ // May not exist if leveldown is backed by memory adapter
+ /* istanbul ignore else */
+ if ('destroy' in leveldown) {
+ leveldown.destroy(name, cb);
+ } else {
+ cb(null);
+ }
+ }
+}
+
+// require leveldown. provide verbose output on error as it is the default
+// nodejs adapter, which we do not provide for the user
+/* istanbul ignore next */
+var requireLeveldown = function () {
+ try {
+ return require('leveldown');
+ } catch (err) {
+ /* eslint no-ex-assign: 0*/
+ err = err || 'leveldown import error';
+ if (err.code === 'MODULE_NOT_FOUND') {
+ // handle leveldown not installed case
+ return new Error([
+ 'the \'leveldown\' package is not available. install it, or,',
+ 'specify another storage backend using the \'db\' option'
+ ].join(' '));
+ } else if (err.message && err.message.match('Module version mismatch')) {
+ // handle common user enviornment error
+ return new Error([
+ err.message,
+ 'This generally implies that leveldown was built with a different',
+ 'version of node than that which is running now. You may try',
+ 'fully removing and reinstalling PouchDB or leveldown to resolve.'
+ ].join(' '));
+ }
+ // handle general internal nodejs require error
+ return new Error(err.toString() + ': unable to import leveldown');
+ }
+};
+
+var abstractLeveldown$3 = {};
+
+// For (old) browser support
+var xtend$3 = immutable;
+var assign$1 = mutable;
+
+var levelSupports$1 = function supports () {
+ var manifest = xtend$3.apply(null, arguments);
+
+ return assign$1(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$3(manifest.additionalMethods)
+ })
+};
+
+var nextTick$7 = process.nextTick;
+
+var nextTick$6 = nextTick$7;
+
+function AbstractIterator$5 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$5.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$6(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$6(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$5.prototype._next = function (callback) {
+ nextTick$6(callback);
+};
+
+AbstractIterator$5.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$5.prototype._seek = function (target) {};
+
+AbstractIterator$5.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$6(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$5.prototype._end = function (callback) {
+ nextTick$6(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$5.prototype._nextTick = nextTick$6;
+
+var abstractIterator$1 = AbstractIterator$5;
+
+var nextTick$5 = nextTick$7;
+
+function AbstractChainedBatch$5 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$5.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$5.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$5.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$5.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$5.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$5.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$5.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$5.prototype._nextTick = nextTick$5;
+
+var abstractChainedBatch$1 = AbstractChainedBatch$5;
+
+var xtend$2 = immutable;
+var supports$1 = levelSupports$1;
+var Buffer$2 = require$$0$2.Buffer;
+var AbstractIterator$4 = abstractIterator$1;
+var AbstractChainedBatch$4 = abstractChainedBatch$1;
+var nextTick$4 = nextTick$7;
+var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+var rangeOptions$1 = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$3 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports$1(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$3.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$3.prototype._open = function (options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$3.prototype._close = function (callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._get = function (key, options, callback) {
+ nextTick$4(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$3.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._put = function (key, value, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick$4(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._del = function (key, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick$4(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick$4(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick$4(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend$2(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick$4(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick$4(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick$4(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._batch = function (array, options, callback) {
+ nextTick$4(callback);
+};
+
+AbstractLevelDOWN$3.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions$1(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$3.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$3.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions$1(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions$1 (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty$1.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption$1(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption$1 (k) {
+ return rangeOptions$1.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$3.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$3.prototype._iterator = function (options) {
+ return new AbstractIterator$4(this)
+};
+
+AbstractLevelDOWN$3.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch$4(this)
+};
+
+AbstractLevelDOWN$3.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$3.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$3.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$2.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$3.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$3.prototype._nextTick = nextTick$4;
+
+var abstractLeveldown$2 = AbstractLevelDOWN$3;
+
+abstractLeveldown$3.AbstractLevelDOWN = abstractLeveldown$2;
+abstractLeveldown$3.AbstractIterator = abstractIterator$1;
+abstractLeveldown$3.AbstractChainedBatch = abstractChainedBatch$1;
+
+var AbstractLevelDOWN$2 = abstractLeveldown$3.AbstractLevelDOWN;
+var AbstractChainedBatch$3 = abstractLeveldown$3.AbstractChainedBatch;
+var AbstractIterator$3 = abstractLeveldown$3.AbstractIterator;
+var inherits = inheritsExports;
+var Codec = levelCodec;
+var EncodingError = errors$2.EncodingError;
+var rangeMethods = ['approximateSize', 'compactRange'];
+
+var encodingDown = DB.default = DB;
+
+function DB (db, opts) {
+ if (!(this instanceof DB)) return new DB(db, opts)
+
+ var manifest = db.supports || {};
+ var additionalMethods = manifest.additionalMethods || {};
+
+ AbstractLevelDOWN$2.call(this, manifest);
+
+ this.supports.encodings = true;
+ this.supports.additionalMethods = {};
+
+ rangeMethods.forEach(function (m) {
+ // TODO (future major): remove this fallback
+ var fallback = typeof db[m] === 'function';
+
+ if (additionalMethods[m] || fallback) {
+ this.supports.additionalMethods[m] = true;
+
+ this[m] = function (start, end, opts, cb) {
+ start = this.codec.encodeKey(start, opts);
+ end = this.codec.encodeKey(end, opts);
+ return this.db[m](start, end, opts, cb)
+ };
+ }
+ }, this);
+
+ opts = opts || {};
+ if (typeof opts.keyEncoding === 'undefined') opts.keyEncoding = 'utf8';
+ if (typeof opts.valueEncoding === 'undefined') opts.valueEncoding = 'utf8';
+
+ this.db = db;
+ this.codec = new Codec(opts);
+}
+
+inherits(DB, AbstractLevelDOWN$2);
+
+DB.prototype.type = 'encoding-down';
+
+DB.prototype._serializeKey =
+DB.prototype._serializeValue = function (datum) {
+ return datum
+};
+
+DB.prototype._open = function (opts, cb) {
+ this.db.open(opts, cb);
+};
+
+DB.prototype._close = function (cb) {
+ this.db.close(cb);
+};
+
+DB.prototype._put = function (key, value, opts, cb) {
+ key = this.codec.encodeKey(key, opts);
+ value = this.codec.encodeValue(value, opts);
+ this.db.put(key, value, opts, cb);
+};
+
+DB.prototype._get = function (key, opts, cb) {
+ var self = this;
+ key = this.codec.encodeKey(key, opts);
+ opts.asBuffer = this.codec.valueAsBuffer(opts);
+ this.db.get(key, opts, function (err, value) {
+ if (err) return cb(err)
+ try {
+ value = self.codec.decodeValue(value, opts);
+ } catch (err) {
+ return cb(new EncodingError(err))
+ }
+ cb(null, value);
+ });
+};
+
+DB.prototype._del = function (key, opts, cb) {
+ key = this.codec.encodeKey(key, opts);
+ this.db.del(key, opts, cb);
+};
+
+DB.prototype._chainedBatch = function () {
+ return new Batch(this)
+};
+
+DB.prototype._batch = function (ops, opts, cb) {
+ ops = this.codec.encodeBatch(ops, opts);
+ this.db.batch(ops, opts, cb);
+};
+
+DB.prototype._iterator = function (opts) {
+ opts.keyAsBuffer = this.codec.keyAsBuffer(opts);
+ opts.valueAsBuffer = this.codec.valueAsBuffer(opts);
+ return new Iterator$2(this, opts)
+};
+
+DB.prototype._clear = function (opts, callback) {
+ opts = this.codec.encodeLtgt(opts);
+ this.db.clear(opts, callback);
+};
+
+function Iterator$2 (db, opts) {
+ AbstractIterator$3.call(this, db);
+ this.codec = db.codec;
+ this.keys = opts.keys;
+ this.values = opts.values;
+ this.opts = this.codec.encodeLtgt(opts);
+ this.it = db.db.iterator(this.opts);
+}
+
+inherits(Iterator$2, AbstractIterator$3);
+
+Iterator$2.prototype._next = function (cb) {
+ var self = this;
+ this.it.next(function (err, key, value) {
+ if (err) return cb(err)
+ try {
+ if (self.keys && typeof key !== 'undefined') {
+ key = self.codec.decodeKey(key, self.opts);
+ } else {
+ key = undefined;
+ }
+
+ if (self.values && typeof value !== 'undefined') {
+ value = self.codec.decodeValue(value, self.opts);
+ } else {
+ value = undefined;
+ }
+ } catch (err) {
+ return cb(new EncodingError(err))
+ }
+ cb(null, key, value);
+ });
+};
+
+Iterator$2.prototype._seek = function (key) {
+ key = this.codec.encodeKey(key, this.opts);
+ this.it.seek(key);
+};
+
+Iterator$2.prototype._end = function (cb) {
+ this.it.end(cb);
+};
+
+function Batch (db, codec) {
+ AbstractChainedBatch$3.call(this, db);
+ this.codec = db.codec;
+ this.batch = db.db.batch();
+}
+
+inherits(Batch, AbstractChainedBatch$3);
+
+Batch.prototype._put = function (key, value) {
+ key = this.codec.encodeKey(key);
+ value = this.codec.encodeValue(value);
+ this.batch.put(key, value);
+};
+
+Batch.prototype._del = function (key) {
+ key = this.codec.encodeKey(key);
+ this.batch.del(key);
+};
+
+Batch.prototype._clear = function () {
+ this.batch.clear();
+};
+
+Batch.prototype._write = function (opts, cb) {
+ this.batch.write(opts, cb);
+};
+
+var levelup = levelup$1;
+var encode = encodingDown;
+
+function packager (leveldown) {
+ function Level (location, options, callback) {
+ if (typeof location === 'function') {
+ callback = location;
+ } else if (typeof options === 'function') {
+ callback = options;
+ }
+
+ if (!isObject(options)) {
+ options = isObject(location) ? location : {};
+ }
+
+ return levelup(encode(leveldown(location, options), options), options, callback)
+ }
+
+ function isObject (o) {
+ return typeof o === 'object' && o !== null
+ }
+
+ ['destroy', 'repair'].forEach(function (m) {
+ if (typeof leveldown[m] === 'function') {
+ Level[m] = function () {
+ leveldown[m].apply(leveldown, arguments);
+ };
+ }
+ });
+
+ Level.errors = levelup.errors;
+
+ return Level
+}
+
+var levelPackager = packager;
+
+var abstractLeveldown$1 = {};
+
+// For (old) browser support
+var xtend$1 = immutable;
+var assign = mutable;
+
+var levelSupports = function supports () {
+ var manifest = xtend$1.apply(null, arguments);
+
+ return assign(manifest, {
+ // Features of abstract-leveldown
+ bufferKeys: manifest.bufferKeys || false,
+ snapshots: manifest.snapshots || false,
+ permanence: manifest.permanence || false,
+ seek: manifest.seek || false,
+ clear: manifest.clear || false,
+
+ // Features of abstract-leveldown that levelup doesn't have
+ status: manifest.status || false,
+
+ // Features of disk-based implementations
+ createIfMissing: manifest.createIfMissing || false,
+ errorIfExists: manifest.errorIfExists || false,
+
+ // Features of level(up) that abstract-leveldown doesn't have yet
+ deferredOpen: manifest.deferredOpen || false,
+ openCallback: manifest.openCallback || false,
+ promises: manifest.promises || false,
+ streams: manifest.streams || false,
+ encodings: manifest.encodings || false,
+
+ // Methods that are not part of abstract-leveldown or levelup
+ additionalMethods: xtend$1(manifest.additionalMethods)
+ })
+};
+
+var nextTick$3 = process.nextTick;
+
+var nextTick$2 = nextTick$3;
+
+function AbstractIterator$2 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._ended = false;
+ this._nexting = false;
+}
+
+AbstractIterator$2.prototype.next = function (callback) {
+ var self = this;
+
+ if (typeof callback !== 'function') {
+ throw new Error('next() requires a callback argument')
+ }
+
+ if (self._ended) {
+ nextTick$2(callback, new Error('cannot call next() after end()'));
+ return self
+ }
+
+ if (self._nexting) {
+ nextTick$2(callback, new Error('cannot call next() before previous next() has completed'));
+ return self
+ }
+
+ self._nexting = true;
+ self._next(function () {
+ self._nexting = false;
+ callback.apply(null, arguments);
+ });
+
+ return self
+};
+
+AbstractIterator$2.prototype._next = function (callback) {
+ nextTick$2(callback);
+};
+
+AbstractIterator$2.prototype.seek = function (target) {
+ if (this._ended) {
+ throw new Error('cannot call seek() after end()')
+ }
+ if (this._nexting) {
+ throw new Error('cannot call seek() before next() has completed')
+ }
+
+ target = this.db._serializeKey(target);
+ this._seek(target);
+};
+
+AbstractIterator$2.prototype._seek = function (target) {};
+
+AbstractIterator$2.prototype.end = function (callback) {
+ if (typeof callback !== 'function') {
+ throw new Error('end() requires a callback argument')
+ }
+
+ if (this._ended) {
+ return nextTick$2(callback, new Error('end() already called on iterator'))
+ }
+
+ this._ended = true;
+ this._end(callback);
+};
+
+AbstractIterator$2.prototype._end = function (callback) {
+ nextTick$2(callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractIterator$2.prototype._nextTick = nextTick$2;
+
+var abstractIterator = AbstractIterator$2;
+
+var nextTick$1 = nextTick$3;
+
+function AbstractChainedBatch$2 (db) {
+ if (typeof db !== 'object' || db === null) {
+ throw new TypeError('First argument must be an abstract-leveldown compliant store')
+ }
+
+ this.db = db;
+ this._operations = [];
+ this._written = false;
+}
+
+AbstractChainedBatch$2.prototype._checkWritten = function () {
+ if (this._written) {
+ throw new Error('write() already called on this batch')
+ }
+};
+
+AbstractChainedBatch$2.prototype.put = function (key, value) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key) || this.db._checkValue(value);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ value = this.db._serializeValue(value);
+
+ this._put(key, value);
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._put = function (key, value) {
+ this._operations.push({ type: 'put', key: key, value: value });
+};
+
+AbstractChainedBatch$2.prototype.del = function (key) {
+ this._checkWritten();
+
+ var err = this.db._checkKey(key);
+ if (err) throw err
+
+ key = this.db._serializeKey(key);
+ this._del(key);
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._del = function (key) {
+ this._operations.push({ type: 'del', key: key });
+};
+
+AbstractChainedBatch$2.prototype.clear = function () {
+ this._checkWritten();
+ this._clear();
+
+ return this
+};
+
+AbstractChainedBatch$2.prototype._clear = function () {
+ this._operations = [];
+};
+
+AbstractChainedBatch$2.prototype.write = function (options, callback) {
+ this._checkWritten();
+
+ if (typeof options === 'function') { callback = options; }
+ if (typeof callback !== 'function') {
+ throw new Error('write() requires a callback argument')
+ }
+ if (typeof options !== 'object' || options === null) {
+ options = {};
+ }
+
+ this._written = true;
+ this._write(options, callback);
+};
+
+AbstractChainedBatch$2.prototype._write = function (options, callback) {
+ this.db._batch(this._operations, options, callback);
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractChainedBatch$2.prototype._nextTick = nextTick$1;
+
+var abstractChainedBatch = AbstractChainedBatch$2;
+
+var xtend = immutable;
+var supports = levelSupports;
+var Buffer$1 = require$$0$2.Buffer;
+var AbstractIterator$1 = abstractIterator;
+var AbstractChainedBatch$1 = abstractChainedBatch;
+var nextTick = nextTick$3;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var rangeOptions = 'start end gt gte lt lte'.split(' ');
+
+function AbstractLevelDOWN$1 (manifest) {
+ this.status = 'new';
+
+ // TODO (next major): make this mandatory
+ this.supports = supports(manifest, {
+ status: true
+ });
+}
+
+AbstractLevelDOWN$1.prototype.open = function (options, callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('open() requires a callback argument')
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.createIfMissing = options.createIfMissing !== false;
+ options.errorIfExists = !!options.errorIfExists;
+
+ this.status = 'opening';
+ this._open(options, function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'open';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._open = function (options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.close = function (callback) {
+ var self = this;
+ var oldStatus = this.status;
+
+ if (typeof callback !== 'function') {
+ throw new Error('close() requires a callback argument')
+ }
+
+ this.status = 'closing';
+ this._close(function (err) {
+ if (err) {
+ self.status = oldStatus;
+ return callback(err)
+ }
+ self.status = 'closed';
+ callback();
+ });
+};
+
+AbstractLevelDOWN$1.prototype._close = function (callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.get = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('get() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ options.asBuffer = options.asBuffer !== false;
+
+ this._get(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._get = function (key, options, callback) {
+ nextTick(function () { callback(new Error('NotFound')); });
+};
+
+AbstractLevelDOWN$1.prototype.put = function (key, value, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('put() requires a callback argument')
+ }
+
+ var err = this._checkKey(key) || this._checkValue(value);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+ value = this._serializeValue(value);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._put(key, value, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._put = function (key, value, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.del = function (key, options, callback) {
+ if (typeof options === 'function') callback = options;
+
+ if (typeof callback !== 'function') {
+ throw new Error('del() requires a callback argument')
+ }
+
+ var err = this._checkKey(key);
+ if (err) return nextTick(callback, err)
+
+ key = this._serializeKey(key);
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ this._del(key, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._del = function (key, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.batch = function (array, options, callback) {
+ if (!arguments.length) return this._chainedBatch()
+
+ if (typeof options === 'function') callback = options;
+
+ if (typeof array === 'function') callback = array;
+
+ if (typeof callback !== 'function') {
+ throw new Error('batch(array) requires a callback argument')
+ }
+
+ if (!Array.isArray(array)) {
+ return nextTick(callback, new Error('batch(array) requires an array argument'))
+ }
+
+ if (array.length === 0) {
+ return nextTick(callback)
+ }
+
+ if (typeof options !== 'object' || options === null) options = {};
+
+ var serialized = new Array(array.length);
+
+ for (var i = 0; i < array.length; i++) {
+ if (typeof array[i] !== 'object' || array[i] === null) {
+ return nextTick(callback, new Error('batch(array) element must be an object and not `null`'))
+ }
+
+ var e = xtend(array[i]);
+
+ if (e.type !== 'put' && e.type !== 'del') {
+ return nextTick(callback, new Error("`type` must be 'put' or 'del'"))
+ }
+
+ var err = this._checkKey(e.key);
+ if (err) return nextTick(callback, err)
+
+ e.key = this._serializeKey(e.key);
+
+ if (e.type === 'put') {
+ var valueErr = this._checkValue(e.value);
+ if (valueErr) return nextTick(callback, valueErr)
+
+ e.value = this._serializeValue(e.value);
+ }
+
+ serialized[i] = e;
+ }
+
+ this._batch(serialized, options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._batch = function (array, options, callback) {
+ nextTick(callback);
+};
+
+AbstractLevelDOWN$1.prototype.clear = function (options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ } else if (typeof callback !== 'function') {
+ throw new Error('clear() requires a callback argument')
+ }
+
+ options = cleanRangeOptions(this, options);
+ options.reverse = !!options.reverse;
+ options.limit = 'limit' in options ? options.limit : -1;
+
+ this._clear(options, callback);
+};
+
+AbstractLevelDOWN$1.prototype._clear = function (options, callback) {
+ // Avoid setupIteratorOptions, would serialize range options a second time.
+ options.keys = true;
+ options.values = false;
+ options.keyAsBuffer = true;
+ options.valueAsBuffer = true;
+
+ var iterator = this._iterator(options);
+ var emptyOptions = {};
+ var self = this;
+
+ var next = function (err) {
+ if (err) {
+ return iterator.end(function () {
+ callback(err);
+ })
+ }
+
+ iterator.next(function (err, key) {
+ if (err) return next(err)
+ if (key === undefined) return iterator.end(callback)
+
+ // This could be optimized by using a batch, but the default _clear
+ // is not meant to be fast. Implementations have more room to optimize
+ // if they override _clear. Note: using _del bypasses key serialization.
+ self._del(key, emptyOptions, next);
+ });
+ };
+
+ next();
+};
+
+AbstractLevelDOWN$1.prototype._setupIteratorOptions = function (options) {
+ options = cleanRangeOptions(this, options);
+
+ options.reverse = !!options.reverse;
+ options.keys = options.keys !== false;
+ options.values = options.values !== false;
+ options.limit = 'limit' in options ? options.limit : -1;
+ options.keyAsBuffer = options.keyAsBuffer !== false;
+ options.valueAsBuffer = options.valueAsBuffer !== false;
+
+ return options
+};
+
+function cleanRangeOptions (db, options) {
+ var result = {};
+
+ for (var k in options) {
+ if (!hasOwnProperty.call(options, k)) continue
+
+ var opt = options[k];
+
+ if (isRangeOption(k)) {
+ // Note that we don't reject nullish and empty options here. While
+ // those types are invalid as keys, they are valid as range options.
+ opt = db._serializeKey(opt);
+ }
+
+ result[k] = opt;
+ }
+
+ return result
+}
+
+function isRangeOption (k) {
+ return rangeOptions.indexOf(k) !== -1
+}
+
+AbstractLevelDOWN$1.prototype.iterator = function (options) {
+ if (typeof options !== 'object' || options === null) options = {};
+ options = this._setupIteratorOptions(options);
+ return this._iterator(options)
+};
+
+AbstractLevelDOWN$1.prototype._iterator = function (options) {
+ return new AbstractIterator$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._chainedBatch = function () {
+ return new AbstractChainedBatch$1(this)
+};
+
+AbstractLevelDOWN$1.prototype._serializeKey = function (key) {
+ return key
+};
+
+AbstractLevelDOWN$1.prototype._serializeValue = function (value) {
+ return value
+};
+
+AbstractLevelDOWN$1.prototype._checkKey = function (key) {
+ if (key === null || key === undefined) {
+ return new Error('key cannot be `null` or `undefined`')
+ } else if (Buffer$1.isBuffer(key) && key.length === 0) {
+ return new Error('key cannot be an empty Buffer')
+ } else if (key === '') {
+ return new Error('key cannot be an empty String')
+ } else if (Array.isArray(key) && key.length === 0) {
+ return new Error('key cannot be an empty Array')
+ }
+};
+
+AbstractLevelDOWN$1.prototype._checkValue = function (value) {
+ if (value === null || value === undefined) {
+ return new Error('value cannot be `null` or `undefined`')
+ }
+};
+
+// Expose browser-compatible nextTick for dependents
+AbstractLevelDOWN$1.prototype._nextTick = nextTick;
+
+var abstractLeveldown = AbstractLevelDOWN$1;
+
+abstractLeveldown$1.AbstractLevelDOWN = abstractLeveldown;
+abstractLeveldown$1.AbstractIterator = abstractIterator;
+abstractLeveldown$1.AbstractChainedBatch = abstractChainedBatch;
+
+function commonjsRequire(path) {
+ throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
+}
+
+var fs = require$$0$3;
+var path = require$$1$2;
+var os = require$$2;
+
+// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'
+var runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : commonjsRequire; // eslint-disable-line
+
+var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
+var abi = process.versions.modules; // TODO: support old node where this is undef
+var runtime = isElectron() ? 'electron' : 'node';
+var arch = os.arch();
+var platform = os.platform();
+var libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc');
+var armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : process.config.variables.arm_version) || '';
+var uv = (process.versions.uv || '').split('.')[0];
+
+var nodeGypBuild = load;
+
+function load (dir) {
+ return runtimeRequire(load.path(dir))
+}
+
+load.path = function (dir) {
+ dir = path.resolve(dir || '.');
+
+ try {
+ var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_');
+ if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD'];
+ } catch (err) {}
+
+ if (!prebuildsOnly) {
+ var release = getFirst(path.join(dir, 'build/Release'), matchBuild);
+ if (release) return release
+
+ var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild);
+ if (debug) return debug
+ }
+
+ // Find most specific flavor first
+ var prebuilds = path.join(dir, 'prebuilds', platform + '-' + arch);
+ var parsed = readdirSync(prebuilds).map(parseTags);
+ var candidates = parsed.filter(matchTags(runtime, abi));
+ var winner = candidates.sort(compareTags(runtime))[0];
+ if (winner) return path.join(prebuilds, winner.file)
+
+ var target = [
+ 'platform=' + platform,
+ 'arch=' + arch,
+ 'runtime=' + runtime,
+ 'abi=' + abi,
+ 'uv=' + uv,
+ armv ? 'armv=' + armv : '',
+ 'libc=' + libc
+ ].filter(Boolean).join(' ');
+
+ throw new Error('No native build was found for ' + target)
+};
+
+function readdirSync (dir) {
+ try {
+ return fs.readdirSync(dir)
+ } catch (err) {
+ return []
+ }
+}
+
+function getFirst (dir, filter) {
+ var files = readdirSync(dir).filter(filter);
+ return files[0] && path.join(dir, files[0])
+}
+
+function matchBuild (name) {
+ return /\.node$/.test(name)
+}
+
+function parseTags (file) {
+ var arr = file.split('.');
+ var extension = arr.pop();
+ var tags = { file: file, specificity: 0 };
+
+ if (extension !== 'node') return
+
+ for (var i = 0; i < arr.length; i++) {
+ var tag = arr[i];
+
+ if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {
+ tags.runtime = tag;
+ } else if (tag === 'napi') {
+ tags.napi = true;
+ } else if (tag.slice(0, 3) === 'abi') {
+ tags.abi = tag.slice(3);
+ } else if (tag.slice(0, 2) === 'uv') {
+ tags.uv = tag.slice(2);
+ } else if (tag.slice(0, 4) === 'armv') {
+ tags.armv = tag.slice(4);
+ } else if (tag === 'glibc' || tag === 'musl') {
+ tags.libc = tag;
+ } else {
+ continue
+ }
+
+ tags.specificity++;
+ }
+
+ return tags
+}
+
+function matchTags (runtime, abi) {
+ return function (tags) {
+ if (tags == null) return false
+ if (tags.runtime !== runtime && !runtimeAgnostic(tags)) return false
+ if (tags.abi !== abi && !tags.napi) return false
+ if (tags.uv && tags.uv !== uv) return false
+ if (tags.armv && tags.armv !== armv) return false
+ if (tags.libc && tags.libc !== libc) return false
+
+ return true
+ }
+}
+
+function runtimeAgnostic (tags) {
+ return tags.runtime === 'node' && tags.napi
+}
+
+function compareTags (runtime) {
+ // Precedence: non-agnostic runtime, abi over napi, then by specificity.
+ return function (a, b) {
+ if (a.runtime !== b.runtime) {
+ return a.runtime === runtime ? -1 : 1
+ } else if (a.abi !== b.abi) {
+ return a.abi ? -1 : 1
+ } else if (a.specificity !== b.specificity) {
+ return a.specificity > b.specificity ? -1 : 1
+ } else {
+ return 0
+ }
+ }
+}
+
+function isElectron () {
+ if (process.versions && process.versions.electron) return true
+ if (process.env.ELECTRON_RUN_AS_NODE) return true
+ return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
+}
+
+function isAlpine (platform) {
+ return platform === 'linux' && fs.existsSync('/etc/alpine-release')
+}
+
+// Exposed for unit tests
+// TODO: move to lib
+load.parseTags = parseTags;
+load.matchTags = matchTags;
+load.compareTags = compareTags;
+
+var binding$3 = nodeGypBuild(__dirname);
+
+const util$2 = require$$0$1$1;
+const AbstractChainedBatch = abstractLeveldown$1.AbstractChainedBatch;
+const binding$2 = binding$3;
+
+function ChainedBatch$1 (db) {
+ AbstractChainedBatch.call(this, db);
+ this.context = binding$2.batch_init(db.context);
+}
+
+ChainedBatch$1.prototype._put = function (key, value) {
+ binding$2.batch_put(this.context, key, value);
+};
+
+ChainedBatch$1.prototype._del = function (key) {
+ binding$2.batch_del(this.context, key);
+};
+
+ChainedBatch$1.prototype._clear = function () {
+ binding$2.batch_clear(this.context);
+};
+
+ChainedBatch$1.prototype._write = function (options, callback) {
+ binding$2.batch_write(this.context, options, callback);
+};
+
+util$2.inherits(ChainedBatch$1, AbstractChainedBatch);
+
+var chainedBatch = ChainedBatch$1;
+
+const util$1 = require$$0$1$1;
+const AbstractIterator = abstractLeveldown$1.AbstractIterator;
+const binding$1 = binding$3;
+
+function Iterator$1 (db, options) {
+ AbstractIterator.call(this, db);
+
+ this.context = binding$1.iterator_init(db.context, options);
+ this.cache = null;
+ this.finished = false;
+}
+
+util$1.inherits(Iterator$1, AbstractIterator);
+
+Iterator$1.prototype._seek = function (target) {
+ if (target.length === 0) {
+ throw new Error('cannot seek() to an empty target')
+ }
+
+ this.cache = null;
+ binding$1.iterator_seek(this.context, target);
+ this.finished = false;
+};
+
+Iterator$1.prototype._next = function (callback) {
+ var that = this;
+
+ if (this.cache && this.cache.length) {
+ process.nextTick(callback, null, this.cache.pop(), this.cache.pop());
+ } else if (this.finished) {
+ process.nextTick(callback);
+ } else {
+ binding$1.iterator_next(this.context, function (err, array, finished) {
+ if (err) return callback(err)
+
+ that.cache = array;
+ that.finished = finished;
+ that._next(callback);
+ });
+ }
+
+ return this
+};
+
+Iterator$1.prototype._end = function (callback) {
+ delete this.cache;
+ binding$1.iterator_end(this.context, callback);
+};
+
+var iterator = Iterator$1;
+
+const util = require$$0$1$1;
+const AbstractLevelDOWN = abstractLeveldown$1.AbstractLevelDOWN;
+const binding = binding$3;
+const ChainedBatch = chainedBatch;
+const Iterator = iterator;
+
+function LevelDOWN (location) {
+ if (!(this instanceof LevelDOWN)) {
+ return new LevelDOWN(location)
+ }
+
+ if (typeof location !== 'string') {
+ throw new Error('constructor requires a location string argument')
+ }
+
+ AbstractLevelDOWN.call(this, {
+ bufferKeys: true,
+ snapshots: true,
+ permanence: true,
+ seek: true,
+ clear: true,
+ createIfMissing: true,
+ errorIfExists: true,
+ additionalMethods: {
+ approximateSize: true,
+ compactRange: true
+ }
+ });
+
+ this.location = location;
+ this.context = binding.db_init();
+}
+
+util.inherits(LevelDOWN, AbstractLevelDOWN);
+
+LevelDOWN.prototype._open = function (options, callback) {
+ binding.db_open(this.context, this.location, options, callback);
+};
+
+LevelDOWN.prototype._close = function (callback) {
+ binding.db_close(this.context, callback);
+};
+
+LevelDOWN.prototype._serializeKey = function (key) {
+ return Buffer.isBuffer(key) ? key : String(key)
+};
+
+LevelDOWN.prototype._serializeValue = function (value) {
+ return Buffer.isBuffer(value) ? value : String(value)
+};
+
+LevelDOWN.prototype._put = function (key, value, options, callback) {
+ binding.db_put(this.context, key, value, options, callback);
+};
+
+LevelDOWN.prototype._get = function (key, options, callback) {
+ binding.db_get(this.context, key, options, callback);
+};
+
+LevelDOWN.prototype._del = function (key, options, callback) {
+ binding.db_del(this.context, key, options, callback);
+};
+
+LevelDOWN.prototype._chainedBatch = function () {
+ return new ChainedBatch(this)
+};
+
+LevelDOWN.prototype._batch = function (operations, options, callback) {
+ binding.batch_do(this.context, operations, options, callback);
+};
+
+LevelDOWN.prototype.approximateSize = function (start, end, callback) {
+ if (start == null ||
+ end == null ||
+ typeof start === 'function' ||
+ typeof end === 'function') {
+ throw new Error('approximateSize() requires valid `start` and `end` arguments')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new Error('approximateSize() requires a callback argument')
+ }
+
+ start = this._serializeKey(start);
+ end = this._serializeKey(end);
+
+ binding.db_approximate_size(this.context, start, end, callback);
+};
+
+LevelDOWN.prototype.compactRange = function (start, end, callback) {
+ if (start == null ||
+ end == null ||
+ typeof start === 'function' ||
+ typeof end === 'function') {
+ throw new Error('compactRange() requires valid `start` and `end` arguments')
+ }
+
+ if (typeof callback !== 'function') {
+ throw new Error('compactRange() requires a callback argument')
+ }
+
+ start = this._serializeKey(start);
+ end = this._serializeKey(end);
+
+ binding.db_compact_range(this.context, start, end, callback);
+};
+
+LevelDOWN.prototype.getProperty = function (property) {
+ if (typeof property !== 'string') {
+ throw new Error('getProperty() requires a valid `property` argument')
+ }
+
+ return binding.db_get_property(this.context, property)
+};
+
+LevelDOWN.prototype._iterator = function (options) {
+ if (this.status !== 'open') {
+ // Prevent segfault
+ throw new Error('cannot call iterator() before open()')
+ }
+
+ return new Iterator(this, options)
+};
+
+LevelDOWN.destroy = function (location, callback) {
+ if (arguments.length < 2) {
+ throw new Error('destroy() requires `location` and `callback` arguments')
+ }
+ if (typeof location !== 'string') {
+ throw new Error('destroy() requires a location string argument')
+ }
+ if (typeof callback !== 'function') {
+ throw new Error('destroy() requires a callback function argument')
+ }
+
+ binding.destroy_db(location, callback);
+};
+
+LevelDOWN.repair = function (location, callback) {
+ if (arguments.length < 2) {
+ throw new Error('repair() requires `location` and `callback` arguments')
+ }
+ if (typeof location !== 'string') {
+ throw new Error('repair() requires a location string argument')
+ }
+ if (typeof callback !== 'function') {
+ throw new Error('repair() requires a callback function argument')
+ }
+
+ binding.repair_db(location, callback);
+};
+
+var leveldown = LevelDOWN.default = LevelDOWN;
+
+var level = levelPackager(leveldown);
+
+var level$1 = /*@__PURE__*/getDefaultExportFromCjs(level);
+
+var array;
+var hasRequiredArray;
+
+function requireArray () {
+ if (hasRequiredArray) return array;
+ hasRequiredArray = 1;
+ var to = requireWriteStream();
+
+ array = toArray;
+
+ function toArray(array, end) {
+ if (typeof array === "function") {
+ end = array;
+ array = [];
+ }
+
+ return to(writeArray, endArray)
+
+ function writeArray(chunk) {
+ array.push(chunk);
+ }
+
+ function endArray() {
+ end(array);
+ this.emit("end");
+ }
+ }
+ return array;
+}
+
+var writeStream;
+var hasRequiredWriteStream;
+
+function requireWriteStream () {
+ if (hasRequiredWriteStream) return writeStream;
+ hasRequiredWriteStream = 1;
+ var Stream$1 = Stream;
+
+ writeStream = WriteStream;
+
+ WriteStream.toArray = requireArray();
+
+ function WriteStream(write, end) {
+ var stream = new Stream$1()
+ , ended = false;
+
+ end = end || defaultEnd;
+
+ stream.write = handleWrite;
+ stream.end = handleEnd;
+
+ // Support 0.8 pipe [LEGACY]
+ stream.writable = true;
+
+ return stream
+
+ function handleWrite(chunk) {
+ var result = write.call(stream, chunk);
+ return result === false ? false : true
+ }
+
+ function handleEnd(chunk) {
+ if (ended) {
+ return
+ }
+
+ ended = true;
+ if (arguments.length) {
+ stream.write(chunk);
+ }
+ end.call(stream);
+ }
+ }
+
+ function defaultEnd() {
+ this.emit("finish");
+ }
+ return writeStream;
+}
+
+var WriteStream = requireWriteStream();
+
+var endStream = EndStream$1;
+
+function EndStream$1(write, end) {
+ var counter = 0
+ , ended = false;
+
+ var stream = WriteStream(function (chunk) {
+ counter++;
+ write(chunk, function (err) {
+ if (err) {
+ return stream.emit("error", err)
+ }
+
+ counter--;
+
+ if (counter === 0 && ended) {
+ stream.emit("finish");
+ }
+ });
+ }, function () {
+ ended = true;
+ if (counter === 0) {
+ this.emit("finish");
+ }
+ });
+
+ return stream
+}
+
+var EndStream = endStream;
+
+var levelWriteStream = LevelWriteStream;
+
+function LevelWriteStream(db) {
+ return writeStream
+
+ function writeStream(options) {
+ options = options || {};
+
+ var queue = []
+ , stream = EndStream(write);
+
+ return stream
+
+ function write(chunk, callback) {
+ if (queue.length === 0) {
+ process.nextTick(drain);
+ }
+
+ queue.push(chunk);
+ stream.once("_drain", callback);
+ }
+
+ function drain() {
+ if (queue.length === 1) {
+ var chunk = queue[0];
+ db.put(chunk.key, chunk.value, options, emit);
+ } else {
+ var arr = queue.map(function (chunk) {
+ chunk.type = "put";
+ return chunk
+ });
+
+ db.batch(arr, options, emit);
+ }
+
+ queue.length = 0;
+ }
+
+ function emit(err) {
+ stream.emit("_drain", err);
+ }
+ }
+}
+
+var LevelWriteStream$1 = /*@__PURE__*/getDefaultExportFromCjs(levelWriteStream);
+
+var stores = [
+ 'document-store',
+ 'by-sequence',
+ 'attach-store',
+ 'attach-binary-store'
+];
+function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+}
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var doMigrationOne = function (name, db, callback) {
+ // local require to prevent crashing if leveldown isn't installed.
+ var leveldown = require("leveldown");
+
+ var base = path$1.resolve(name);
+ function move(store, index, cb) {
+ var storePath = path$1.join(base, store);
+ var opts;
+ if (index === 3) {
+ opts = {
+ valueEncoding: 'binary'
+ };
+ } else {
+ opts = {
+ valueEncoding: 'json'
+ };
+ }
+ var sub = db.sublevel(store, opts);
+ var orig = level$1(storePath, opts);
+ var from = orig.createReadStream();
+ var writeStream = new LevelWriteStream$1(sub);
+ var to = writeStream();
+ from.on('end', function () {
+ orig.close(function (err) {
+ cb(err, storePath);
+ });
+ });
+ from.pipe(to);
+ }
+ fs$1.unlink(base + '.uuid', function (err) {
+ if (err) {
+ return callback();
+ }
+ var todo = 4;
+ var done = [];
+ stores.forEach(function (store, i) {
+ move(store, i, function (err, storePath) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ done.push(storePath);
+ if (!(--todo)) {
+ done.forEach(function (item) {
+ leveldown.destroy(item, function () {
+ if (++todo === done.length) {
+ fs$1.rmdir(base, callback);
+ }
+ });
+ });
+ }
+ });
+ });
+ });
+};
+var doMigrationTwo = function (db, stores, callback) {
+ var batches = [];
+ stores.bySeqStore.get(UUID_KEY, function (err, value) {
+ if (err) {
+ // no uuid key, so don't need to migrate;
+ return callback();
+ }
+ batches.push({
+ key: UUID_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UUID_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ stores.bySeqStore.get(DOC_COUNT_KEY, function (err, value) {
+ if (value) {
+ // if no doc count key,
+ // just skip
+ // we can live with this
+ batches.push({
+ key: DOC_COUNT_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: DOC_COUNT_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ stores.bySeqStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (value) {
+ // if no UPDATE_SEQ_KEY
+ // just skip
+ // we've gone to far to stop.
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ var deletedSeqs = {};
+ stores.docStore.createReadStream({
+ startKey: '_',
+ endKey: '_\xFF'
+ }).pipe(obj(function (ch, _, next) {
+ if (!isLocalId(ch.key)) {
+ return next();
+ }
+ batches.push({
+ key: ch.key,
+ prefix: stores.docStore,
+ type: 'del'
+ });
+ var winner = winningRev(ch.value);
+ Object.keys(ch.value.rev_map).forEach(function (key) {
+ if (key !== 'winner') {
+ this.push(formatSeq(ch.value.rev_map[key]));
+ }
+ }, this);
+ var winningSeq = ch.value.rev_map[winner];
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, value) {
+ if (!err) {
+ batches.push({
+ key: ch.key,
+ value: value,
+ prefix: stores.localStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ }
+ next();
+ });
+
+ })).pipe(obj(function (seq, _, next) {
+ /* istanbul ignore if */
+ if (deletedSeqs[seq]) {
+ return next();
+ }
+ deletedSeqs[seq] = true;
+ stores.bySeqStore.get(seq, function (err, resp) {
+ /* istanbul ignore if */
+ if (err || !isLocalId(resp._id)) {
+ return next();
+ }
+ batches.push({
+ key: seq,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ next();
+ });
+ }, function () {
+ db.batch(batches, callback);
+ }));
+ });
+ });
+ });
+
+};
+
+var migrate = {
+ doMigrationOne: doMigrationOne,
+ doMigrationTwo: doMigrationTwo
+};
+
+function LevelDownPouch(opts, callback) {
+
+ // Users can pass in their own leveldown alternative here, in which case
+ // it overrides the default one. (This is in addition to the custom builds.)
+ var leveldown = opts.db;
+
+ /* istanbul ignore else */
+ if (!leveldown) {
+ leveldown = requireLeveldown();
+
+ /* istanbul ignore if */
+ if (leveldown instanceof Error) {
+ return callback(leveldown);
+ }
+ }
+
+ var _opts = Object.assign({
+ db: leveldown,
+ migrate: migrate
+ }, opts);
+
+ LevelPouch$1.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+LevelDownPouch.valid = () => {
+ return true;
+};
+LevelDownPouch.use_prefix = false;
+
+function LevelPouch(PouchDB) {
+ PouchDB.adapter('leveldb', LevelDownPouch, true);
+}
+
+// // 'use strict'; is default when ESM
+
+// import pool from './promise-pool';
+// import {toBase64} from 'pouchdb-crypto';
+// import { fetch, Headers, AbortController } from 'pouchdb-fetch';
+
+// import {
+// createError,
+// BAD_ARG,
+// generateErrorFromResponse
+// } from 'pouchdb-errors';
+
+// import {
+// pick,
+// filterChange,
+// adapterFun as coreAdapterFun,
+// explainError,
+// clone,
+// parseUri,
+// bulkGetShim,
+// flatten,
+// nextTick
+// } from 'pouchdb-utils';
+
+// import {
+// binaryStringToBlobOrBuffer as binStringToBuffer,
+// base64StringToBlobOrBuffer as b64StringToBuffer,
+// blobOrBufferToBase64 as blufferToBase64
+// } from 'pouchdb-binary-utils';
+
+// const CHANGES_BATCH_SIZE = 25;
+// const MAX_SIMULTANEOUS_REVS = 50;
+// const CHANGES_TIMEOUT_BUFFER = 5000;
+// const DEFAULT_HEARTBEAT = 10000;
+
+// const supportsBulkGetMap = {};
+
+// function readAttachmentsAsBlobOrBuffer(row) {
+// const doc = row.doc || row.ok;
+// const atts = doc && doc._attachments;
+// if (!atts) {
+// return;
+// }
+// Object.keys(atts).forEach(function (filename) {
+// const att = atts[filename];
+// att.data = b64StringToBuffer(att.data, att.content_type);
+// });
+// }
+
+// function encodeDocId(id) {
+// if (/^_design/.test(id)) {
+// return '_design/' + encodeURIComponent(id.slice(8));
+// }
+// if (id.startsWith('_local/')) {
+// return '_local/' + encodeURIComponent(id.slice(7));
+// }
+// return encodeURIComponent(id);
+// }
+
+// function preprocessAttachments(doc) {
+// if (!doc._attachments || !Object.keys(doc._attachments)) {
+// return Promise.resolve();
+// }
+
+// return Promise.all(Object.keys(doc._attachments).map(function (key) {
+// const attachment = doc._attachments[key];
+// if (attachment.data && typeof attachment.data !== 'string') {
+// return new Promise(function (resolve) {
+// blufferToBase64(attachment.data, resolve);
+// }).then(function (b64) {
+// attachment.data = b64;
+// });
+// }
+// }));
+// }
+
+// function hasUrlPrefix(opts) {
+// if (!opts.prefix) {
+// return false;
+// }
+// const protocol = parseUri(opts.prefix).protocol;
+// return protocol === 'http' || protocol === 'https';
+// }
+
+// // Get all the information you possibly can about the URI given by name and
+// // return it as a suitable object.
+// function getHost(name, opts) {
+// // encode db name if opts.prefix is a url (#5574)
+// if (hasUrlPrefix(opts)) {
+// const dbName = opts.name.substr(opts.prefix.length);
+// // Ensure prefix has a trailing slash
+// const prefix = opts.prefix.replace(/\/?$/, '/');
+// name = prefix + encodeURIComponent(dbName);
+// }
+
+// const uri = parseUri(name);
+// if (uri.user || uri.password) {
+// uri.auth = {username: uri.user, password: uri.password};
+// }
+
+// // Split the path part of the URI into parts using '/' as the delimiter
+// // after removing any leading '/' and any trailing '/'
+// const parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
+
+// uri.db = parts.pop();
+// // Prevent double encoding of URI component
+// if (uri.db.indexOf('%') === -1) {
+// uri.db = encodeURIComponent(uri.db);
+// }
+
+// uri.path = parts.join('/');
+
+// return uri;
+// }
+
+// // Generate a URL with the host data given by opts and the given path
+// function genDBUrl(opts, path) {
+// return new URL({...opts, pathname: opts.db + '/' + path });
+// }
+
+// function paramsToStr(params) {
+// const paramKeys = Object.keys(params);
+// if (paramKeys.length === 0) {
+// return '';
+// }
+
+// return '?' + paramKeys.map(key => key + '=' + encodeURIComponent(params[key])).join('&');
+// }
+
+// function shouldCacheBust(opts) {
+// const ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?
+// navigator.userAgent.toLowerCase() : '';
+// const isIE = ua.indexOf('msie') !== -1;
+// const isTrident = ua.indexOf('trident') !== -1;
+// const isEdge = ua.indexOf('edge') !== -1;
+// const isGET = !('method' in opts) || opts.method === 'GET';
+// return (isIE || isTrident || isEdge) && isGET;
+// }
+
+// // Implements the PouchDB API for dealing with CouchDB instances over HTTP
+// function HttpPouch(opts, callback) {
+
+// // The functions that will be publicly available for HttpPouch
+// const api = this;
+
+// const host = getHost(opts.name, opts);
+// const dbUrl = genDBUrl(host, '');
+
+// opts = clone(opts);
+
+// const ourFetch = async function (url, options) {
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// options.credentials = 'include';
+
+// if (opts.auth || host.auth) {
+// const nAuth = opts.auth || host.auth;
+// const str = nAuth.username + ':' + nAuth.password;
+
+// const token = await toBase64(str);
+// //btoa(unescape(encodeURIComponent(str)));
+// options.headers.set('Authorization', 'Basic ' + token);
+// }
+
+// const headers = opts.headers || {};
+// Object.keys(headers).forEach(function (key) {
+// options.headers.append(key, headers[key]);
+// });
+
+// /* istanbul ignore if */
+// if (shouldCacheBust(options)) {
+// url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();
+// }
+
+// const fetchFun = opts.fetch || fetch;
+// return await fetchFun(url, options);
+// };
+
+// function adapterFun(name, fun) {
+// return (function (...args) {
+// setup().then(function () {
+// return fun.apply(this, args);
+// }).catch((e)=>args.pop()(e));
+// }).bind(api);
+// }
+
+// async function fetchJSON(url, options) {
+
+// const result = {};
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// if (!options.headers.get('Content-Type')) {
+// options.headers.set('Content-Type', 'application/json');
+// }
+// if (!options.headers.get('Accept')) {
+// options.headers.set('Accept', 'application/json');
+// }
+
+// const response = await ourFetch(url, options);
+// result.ok = response.ok;
+// result.status = response.status;
+// const json = await response.json();
+
+// result.data = json;
+// if (!result.ok) {
+// result.data.status = result.status;
+// const err = generateErrorFromResponse(result.data);
+// throw err;
+// }
+
+// if (Array.isArray(result.data)) {
+// result.data = result.data.map(function (v) {
+// if (v.error || v.missing) {
+// return generateErrorFromResponse(v);
+// } else {
+// return v;
+// }
+// });
+// }
+
+// return result;
+// }
+
+// let setupPromise;
+
+// async function setup() {
+// if (opts.skip_setup) {
+// return Promise.resolve();
+// }
+
+// // If there is a setup in process or previous successful setup
+// // done then we will use that
+// // If previous setups have been rejected we will try again
+// if (setupPromise) {
+// return setupPromise;
+// }
+
+// setupPromise = fetchJSON(dbUrl).catch(function (err) {
+// if (err && err.status && err.status === 404) {
+// // Doesnt exist, create it
+// explainError(404, 'PouchDB is just detecting if the remote exists.');
+// return fetchJSON(dbUrl, {method: 'PUT'});
+// } else {
+// return Promise.reject(err);
+// }
+// }).catch(function (err) {
+// // If we try to create a database that already exists, skipped in
+// // istanbul since its catching a race condition.
+// /* istanbul ignore if */
+// if (err && err.status && err.status === 412) {
+// return true;
+// }
+// return Promise.reject(err);
+// });
+
+// setupPromise.catch(function () {
+// setupPromise = null;
+// });
+
+// return setupPromise;
+// }
+
+// nextTick(function () {
+// callback(null, api);
+// });
+
+// api._remote = true;
+
+// /* istanbul ignore next */
+// api.type = function () {
+// return 'http';
+// };
+
+// api.id = adapterFun('id', async function (callback) {
+// let result;
+// try {
+// const response = await ourFetch(new URL(host));
+// result = await response.json();
+// } catch (err) {
+// result = {};
+// }
+
+// // Bad response or missing `uuid` should not prevent ID generation.
+// const uuid = (result && result.uuid) ? (result.uuid + host.db) : genDBUrl(host, '');
+// callback(null, uuid);
+// });
+
+// // Sends a POST request to the host calling the couchdb _compact function
+// // version: The version of CouchDB it is running
+// api.compact = adapterFun('compact', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// await fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'});
+
+// function ping() {
+// api.info(function (err, res) {
+// // CouchDB may send a "compact_running:true" if it's
+// // already compacting. PouchDB Server doesn't.
+// /* istanbul ignore else */
+// if (res && !res.compact_running) {
+// callback(null, {ok: true});
+// } else {
+// setTimeout(ping, opts.interval || 200);
+// }
+// });
+// }
+// // Ping the http if it's finished compaction
+// ping();
+// });
+
+// api.bulkGet = coreAdapterFun('bulkGet', function (opts, callback) {
+// const self = this;
+
+// async function doBulkGet(cb) {
+// const params = {};
+// if (opts.revs) {
+// params.revs = true;
+// }
+// if (opts.attachments) {
+// /* istanbul ignore next */
+// params.attachments = true;
+// }
+// if (opts.latest) {
+// params.latest = true;
+// }
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {
+// method: 'POST',
+// body: JSON.stringify({ docs: opts.docs})
+// });
+
+// if (opts.attachments && opts.binary) {
+// result.data.results.forEach(function (res) {
+// res.docs.forEach(readAttachmentsAsBlobOrBuffer);
+// });
+// }
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// }
+
+// /* istanbul ignore next */
+// function doBulkGetShim() {
+// // avoid "url too long error" by splitting up into multiple requests
+// const batchSize = MAX_SIMULTANEOUS_REVS;
+// const numBatches = Math.ceil(opts.docs.length / batchSize);
+// let numDone = 0;
+// const results = new Array(numBatches);
+
+// function onResult(batchNum) {
+// return function (err, res) {
+// // err is impossible because shim returns a list of errs in that case
+// results[batchNum] = res.results;
+// if (++numDone === numBatches) {
+// callback(null, {results: flatten(results)});
+// }
+// };
+// }
+
+// for (let i = 0; i < numBatches; i++) {
+// const subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);
+// subOpts.docs = opts.docs.slice(i * batchSize,
+// Math.min(opts.docs.length, (i + 1) * batchSize));
+// bulkGetShim(self, subOpts, onResult(i));
+// }
+// }
+
+// // mark the whole database as either supporting or not supporting _bulk_get
+// const dbUrl = new URL(host);
+// const supportsBulkGet = supportsBulkGetMap[dbUrl];
+
+// /* istanbul ignore next */
+// if (typeof supportsBulkGet !== 'boolean') {
+// // check if this database supports _bulk_get
+// doBulkGet(function (err, res) {
+// if (err) {
+// supportsBulkGetMap[dbUrl] = false;
+// explainError(
+// err.status,
+// 'PouchDB is just detecting if the remote ' +
+// 'supports the _bulk_get API.'
+// );
+// doBulkGetShim();
+// } else {
+// supportsBulkGetMap[dbUrl] = true;
+// callback(null, res);
+// }
+// });
+// } else if (supportsBulkGet) {
+// doBulkGet(callback);
+// } else {
+// doBulkGetShim();
+// }
+// });
+
+// // Calls GET on the host, which gets back a JSON string containing
+// // couchdb: A welcome string
+// // version: The version of CouchDB it is running
+// api._info = async function (callback) {
+// try {
+// await setup();
+// const response = await ourFetch(genDBUrl(host, ''));
+// const info = await response.json();
+// info.host = genDBUrl(host, '');
+// callback(null, info);
+// } catch (err) {
+// callback(err);
+// }
+// };
+
+// api.fetch = async function (path, options) {
+// await setup();
+// const url = path.substring(0, 1) === '/' ?
+// new URL(path.substring(1), new URL(host)) :
+// genDBUrl(host, path);
+// return ourFetch(url, options);
+// };
+
+// // Get the document with the given id from the database given by host.
+// // The id could be solely the _id in the database, or it may be a
+// // _design/ID or _local/ID path
+// api.get = adapterFun('get', async function (id, opts, callback) {
+// // If no options were given, set the callback to the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+
+// if (opts.revs) {
+// params.revs = true;
+// }
+
+// if (opts.revs_info) {
+// params.revs_info = true;
+// }
+
+// if (opts.latest) {
+// params.latest = true;
+// }
+
+// if (opts.open_revs) {
+// if (opts.open_revs !== "all") {
+// opts.open_revs = JSON.stringify(opts.open_revs);
+// }
+// params.open_revs = opts.open_revs;
+// }
+
+// if (opts.rev) {
+// params.rev = opts.rev;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = opts.conflicts;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = opts.update_seq;
+// }
+
+// id = encodeDocId(id);
+
+// function fetchAttachments(doc) {
+// const atts = doc._attachments;
+// const filenames = atts && Object.keys(atts);
+// if (!atts || !filenames.length) {
+// return;
+// }
+// // we fetch these manually in separate XHRs, because
+// // Sync Gateway would normally send it back as multipart/mixed,
+// // which we cannot parse. Also, this is more efficient than
+// // receiving attachments as base64-encoded strings.
+// async function fetchData(filename) {
+// const att = atts[filename];
+// const path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +
+// '?rev=' + doc._rev;
+
+// const response = await ourFetch(genDBUrl(host, path));
+
+// let blob;
+// if ('buffer' in response) {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// let data;
+// if (opts.binary) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = att.content_type;
+// }
+// data = blob;
+// } else {
+// data = await toBase64(blob);
+// // await new Promise(function (resolve) {
+// // blufferToBase64(blob, resolve);
+// // });
+// }
+
+// delete att.stub;
+// delete att.length;
+// att.data = data;
+// }
+
+// const promiseFactories = filenames.map(function (filename) {
+// return function () {
+// return fetchData(filename);
+// };
+// });
+
+// // This limits the number of parallel xhr requests to 5 any time
+// // to avoid issues with maximum browser request limits
+// return pool(promiseFactories, 5);
+// }
+
+// function fetchAllAttachments(docOrDocs) {
+// if (Array.isArray(docOrDocs)) {
+// return Promise.all(docOrDocs.map(function (doc) {
+// if (doc.ok) {
+// return fetchAttachments(doc.ok);
+// }
+// }));
+// }
+// return fetchAttachments(docOrDocs);
+// }
+
+// const url = genDBUrl(host, id + paramsToStr(params));
+// try {
+// const res = await fetchJSON(url);
+// if (opts.attachments) {
+// await fetchAllAttachments(res.data);
+// }
+// callback(null, res.data);
+// } catch (error) {
+// error.docId = id;
+// callback(error);
+// }
+// });
+
+
+// // Delete the document given by doc from the database given by host.
+// api.remove = adapterFun('remove', async function (docOrId, optsOrRev, opts, cb) {
+// let doc;
+// if (typeof optsOrRev === 'string') {
+// // id, rev, opts, callback style
+// doc = {
+// _id: docOrId,
+// _rev: optsOrRev
+// };
+// if (typeof opts === 'function') {
+// cb = opts;
+// opts = {};
+// }
+// } else {
+// // doc, opts, callback style
+// doc = docOrId;
+// if (typeof optsOrRev === 'function') {
+// cb = optsOrRev;
+// opts = {};
+// } else {
+// cb = opts;
+// opts = optsOrRev;
+// }
+// }
+
+// const rev = (doc._rev || opts.rev);
+// const url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// });
+
+// function encodeAttachmentId(attachmentId) {
+// return attachmentId.split("/").map(encodeURIComponent).join("/");
+// }
+
+// // Get the attachment
+// api.getAttachment = adapterFun('getAttachment', async function (docId, attachmentId,
+// opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// const params = opts.rev ? ('?rev=' + opts.rev) : '';
+// const url = genDBUrl(host, encodeDocId(docId)) + '/' +
+// encodeAttachmentId(attachmentId) + params;
+// let contentType;
+// try {
+// const response = await ourFetch(url, {method: 'GET'});
+
+// if (!response.ok) {
+// throw response;
+// }
+
+// contentType = response.headers.get('content-type');
+// let blob;
+// if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// // TODO: also remove
+// if (typeof process !== 'undefined' && !process.browser) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = contentType;
+// }
+// }
+// callback(null, blob);
+// } catch (err) {
+// callback(err);
+// }
+// });
+
+// // Remove the attachment given by the id and rev
+// api.removeAttachment = adapterFun('removeAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// callback,
+// ) {
+// const url = genDBUrl(host, encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Add the attachment given by blob and its contentType property
+// // to the document with the given id, the revision given by rev, and
+// // add it to the database given by host.
+// api.putAttachment = adapterFun('putAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// blob,
+// type,
+// callback,
+// ) {
+// if (typeof type === 'function') {
+// callback = type;
+// type = blob;
+// blob = rev;
+// rev = null;
+// }
+// const id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);
+// let url = genDBUrl(host, id);
+// if (rev) {
+// url += '?rev=' + rev;
+// }
+
+// if (typeof blob === 'string') {
+// // input is assumed to be a base64 string
+// let binary;
+// try {
+// binary = atob(blob);
+// } catch (err) {
+// return callback(createError(BAD_ARG,
+// 'Attachment is not a valid base64 string'));
+// }
+// blob = binary ? binStringToBuffer(binary, type) : '';
+// }
+
+// try {
+// // Add the attachment
+// const result = await fetchJSON(url, {
+// headers: new Headers({'Content-Type': type}),
+// method: 'PUT',
+// body: blob
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Update/create multiple documents given by req in the database
+// // given by host.
+// api._bulkDocs = async function (req, opts, callback) {
+// // If new_edits=false then it prevents the database from creating
+// // new revision numbers for the documents. Instead it just uses
+// // the old ones. This is used in database replication.
+// req.new_edits = opts.new_edits;
+
+// try {
+// await setup();
+// await Promise.all(req.docs.map(preprocessAttachments));
+
+// // Update/create the documents
+// const result = await fetchJSON(genDBUrl(host, '_bulk_docs'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // Update/create document
+// api._put = async function (doc, opts, callback) {
+// try {
+// await setup();
+// await preprocessAttachments(doc);
+
+// const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
+// method: 'PUT',
+// body: JSON.stringify(doc)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// error.docId = doc && doc._id;
+// callback(error);
+// }
+// };
+
+
+// // Get a listing of the documents in the database given
+// // by host and ordered by increasing id.
+// api.allDocs = adapterFun('allDocs', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+// let body;
+// let method = 'GET';
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// if (opts.include_docs) {
+// params.include_docs = true;
+// }
+
+// // added in CouchDB 1.6.0
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.key) {
+// params.key = JSON.stringify(opts.key);
+// }
+
+// if (opts.start_key) {
+// opts.startkey = opts.start_key;
+// }
+
+// if (opts.startkey) {
+// params.startkey = JSON.stringify(opts.startkey);
+// }
+
+// if (opts.end_key) {
+// opts.endkey = opts.end_key;
+// }
+
+// if (opts.endkey) {
+// params.endkey = JSON.stringify(opts.endkey);
+// }
+
+// if (typeof opts.inclusive_end !== 'undefined') {
+// params.inclusive_end = !!opts.inclusive_end;
+// }
+
+// if (typeof opts.limit !== 'undefined') {
+// params.limit = opts.limit;
+// }
+
+// if (typeof opts.skip !== 'undefined') {
+// params.skip = opts.skip;
+// }
+
+// const paramStr = paramsToStr(params);
+
+// if (typeof opts.keys !== 'undefined') {
+// method = 'POST';
+// body = {keys: opts.keys};
+// }
+
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {
+// method: method,
+// body: JSON.stringify(body)
+// });
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
+// }
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Get a list of changes made to documents in the database given by host.
+// // TODO According to the README, there should be two other methods here,
+// // api.changes.addListener and api.changes.removeListener.
+// api._changes = function (opts) {
+
+// // We internally page the results of a changes request, this means
+// // if there is a large set of changes to be returned we can start
+// // processing them quicker instead of waiting on the entire
+// // set of changes to return and attempting to process them at once
+// const batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;
+
+// opts = clone(opts);
+
+// if (opts.continuous && !('heartbeat' in opts)) {
+// opts.heartbeat = DEFAULT_HEARTBEAT;
+// }
+
+// let requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;
+
+// // ensure CHANGES_TIMEOUT_BUFFER applies
+// if ('timeout' in opts && opts.timeout &&
+// (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// /* istanbul ignore if */
+// if ('heartbeat' in opts && opts.heartbeat &&
+// (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// const params = {};
+// if ('timeout' in opts && opts.timeout) {
+// params.timeout = opts.timeout;
+// }
+
+// const limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;
+// let leftToFetch = limit;
+
+// if (opts.style) {
+// params.style = opts.style;
+// }
+
+// if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {
+// params.include_docs = true;
+// }
+
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.continuous) {
+// params.feed = 'longpoll';
+// }
+
+// if (opts.seq_interval) {
+// params.seq_interval = opts.seq_interval;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if ('heartbeat' in opts) {
+// // If the heartbeat value is false, it disables the default heartbeat
+// if (opts.heartbeat) {
+// params.heartbeat = opts.heartbeat;
+// }
+// }
+
+// if (opts.filter && typeof opts.filter === 'string') {
+// params.filter = opts.filter;
+// }
+
+// if (opts.view && typeof opts.view === 'string') {
+// params.filter = '_view';
+// params.view = opts.view;
+// }
+
+// // If opts.query_params exists, pass it through to the changes request.
+// // These parameters may be used by the filter on the source database.
+// if (opts.query_params && typeof opts.query_params === 'object') {
+// for (const param_name in opts.query_params) {
+// /* istanbul ignore else */
+// if (Object.prototype.hasOwnProperty.call(opts.query_params, param_name)) {
+// params[param_name] = opts.query_params[param_name];
+// }
+// }
+// }
+
+// let method = 'GET';
+// let body;
+
+// if (opts.doc_ids) {
+// // set this automagically for the user; it's annoying that couchdb
+// // requires both a "filter" and a "doc_ids" param.
+// params.filter = '_doc_ids';
+// method = 'POST';
+// body = {doc_ids: opts.doc_ids };
+// }
+// /* istanbul ignore next */
+// else if (opts.selector) {
+// // set this automagically for the user, similar to above
+// params.filter = '_selector';
+// method = 'POST';
+// body = {selector: opts.selector };
+// }
+
+// const controller = new AbortController();
+// let lastFetchedSeq;
+
+// // Get all the changes starting wtih the one immediately after the
+// // sequence number given by since.
+// const fetchData = async function (since, callback) {
+// if (opts.aborted) {
+// return;
+// }
+// params.since = since;
+// // "since" can be any kind of json object in Cloudant/CouchDB 2.x
+// /* istanbul ignore next */
+// if (typeof params.since === "object") {
+// params.since = JSON.stringify(params.since);
+// }
+
+// if (opts.descending) {
+// if (limit) {
+// params.limit = leftToFetch;
+// }
+// } else {
+// params.limit = (!limit || leftToFetch > batchSize) ?
+// batchSize : leftToFetch;
+// }
+
+// // Set the options for the ajax call
+// const url = genDBUrl(host, '_changes' + paramsToStr(params));
+// const fetchOpts = {
+// signal: controller.signal,
+// method: method,
+// body: JSON.stringify(body)
+// };
+// lastFetchedSeq = since;
+
+// /* istanbul ignore if */
+// if (opts.aborted) {
+// return;
+// }
+
+// // Get the changes
+// try {
+// await setup();
+// const result = await fetchJSON(url, fetchOpts);
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // If opts.since exists, get all the changes from the sequence
+// // number given by opts.since. Otherwise, get all the changes
+// // from the sequence number 0.
+// const results = {results: []};
+
+// const fetched = function (err, res) {
+// if (opts.aborted) {
+// return;
+// }
+// let raw_results_length = 0;
+// // If the result of the ajax call (res) contains changes (res.results)
+// if (res && res.results) {
+// raw_results_length = res.results.length;
+// results.last_seq = res.last_seq;
+// let pending = null;
+// let lastSeq = null;
+// // Attach 'pending' property if server supports it (CouchDB 2.0+)
+// /* istanbul ignore if */
+// if (typeof res.pending === 'number') {
+// pending = res.pending;
+// }
+// if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {
+// lastSeq = results.last_seq;
+// }
+// // For each change
+// const req = {};
+// req.query = opts.query_params;
+// res.results = res.results.filter(function (c) {
+// leftToFetch--;
+// const ret = filterChange(opts)(c);
+// if (ret) {
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// readAttachmentsAsBlobOrBuffer(c);
+// }
+// if (opts.return_docs) {
+// results.results.push(c);
+// }
+// opts.onChange(c, pending, lastSeq);
+// }
+// return ret;
+// });
+// } else if (err) {
+// // In case of an error, stop listening for changes and call
+// // opts.complete
+// opts.aborted = true;
+// opts.complete(err);
+// return;
+// }
+
+// // The changes feed may have timed out with no results
+// // if so reuse last update sequence
+// if (res && res.last_seq) {
+// lastFetchedSeq = res.last_seq;
+// }
+
+// const finished = (limit && leftToFetch <= 0) ||
+// (res && raw_results_length < batchSize) ||
+// (opts.descending);
+
+// if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {
+// // Queue a call to fetch again with the newest sequence number
+// nextTick(function () { fetchData(lastFetchedSeq, fetched); });
+// } else {
+// // We're done, call the callback
+// opts.complete(null, results);
+// }
+// };
+
+// fetchData(opts.since || 0, fetched);
+
+// // Return a method to cancel this method from processing any more
+// return {
+// cancel: function () {
+// opts.aborted = true;
+// controller.abort();
+// }
+// };
+// };
+
+// // Given a set of document/revision IDs (given by req), tets the subset of
+// // those that do NOT correspond to revisions stored in the database.
+// // See http://wiki.apache.org/couchdb/HttpPostRevsDiff
+// api.revsDiff = adapterFun('revsDiff', async function (req, opts, callback) {
+// // If no options were given, set the callback to be the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+
+// try {
+// // Get the missing document/revision IDs
+// const result = await fetchJSON(genDBUrl(host, '_revs_diff'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// api._close = function (callback) {
+// callback();
+// };
+
+// api._destroy = async function (options, callback) {
+// try {
+// const json = await fetchJSON(genDBUrl(host, ''), {method: 'DELETE'});
+// callback(null, json);
+// } catch (error) {
+// if (error.status === 404) {
+// callback(null, {ok: true});
+// } else {
+// callback(error);
+// }
+// }
+// };
+// }
+
+// // HttpPouch is a valid adapter.
+// HttpPouch.valid = function () {
+// return true;
+// };
+
+// export default function (PouchDB) {
+// PouchDB.adapter('http', HttpPouch, false);
+// PouchDB.adapter('https', HttpPouch, false);
+// }
+var HttpPouch = {};
+
+class QueryParseError extends Error {
+ constructor(message) {
+ super();
+ this.status = 400;
+ this.name = 'query_parse_error';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, QueryParseError);
+ } catch (e) {}
+ }
+}
+
+class NotFoundError extends Error {
+ constructor(message) {
+ super();
+ this.status = 404;
+ this.name = 'not_found';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, NotFoundError);
+ } catch (e) {}
+ }
+}
+
+class BuiltInError extends Error {
+ constructor(message) {
+ super();
+ this.status = 500;
+ this.name = 'invalid_value';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, BuiltInError);
+ } catch (e) {}
+ }
+}
+
+function promisedCallback$1(promise, callback) {
+ if (callback) {
+ promise.then(function (res) {
+ nextTick$9(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick$9(function () {
+ callback(reason);
+ });
+ });
+ }
+ return promise;
+}
+
+function callbackify$1(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ if (typeof cb === 'function') {
+ promisedCallback$1(promise, cb);
+ }
+ return promise;
+ };
+}
+
+// Promise finally util similar to Q.finally
+function fin(promise, finalPromiseFactory) {
+ return promise.then(function (res) {
+ return finalPromiseFactory().then(function () {
+ return res;
+ });
+ }, function (reason) {
+ return finalPromiseFactory().then(function () {
+ throw reason;
+ });
+ });
+}
+
+function sequentialize(queue, promiseFactory) {
+ return function () {
+ var args = arguments;
+ var that = this;
+ return queue.add(function () {
+ return promiseFactory.apply(that, args);
+ });
+ };
+}
+
+// uniq an array of strings, order not guaranteed
+// similar to underscore/lodash _.uniq
+function uniq$1(arr) {
+ var theSet = new Set(arr);
+ var result = new Array(theSet.size);
+ var index = -1;
+ theSet.forEach(function (value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+function mapToKeysArray(map) {
+ var result = new Array(map.size);
+ var index = -1;
+ map.forEach(function (value, key) {
+ result[++index] = key;
+ });
+ return result;
+}
+
+function b64ToBluffer(b64, type) {
+ return typedBuffer(b64, 'base64', type);
+}
+
+const stringMd5 = async (message="") => (await import('./index.esm-9293e8de-9293e8de.js')).md5(message);
+
+/*
+ * Simple task queue to sequentialize actions. Assumes
+ * callbacks will eventually fire (once).
+ */
+
+
+class TaskQueue {
+ constructor() {
+ this.promise = new Promise(function (fulfill) {fulfill(); });
+ }
+
+ add(promiseFactory) {
+ this.promise = this.promise.catch(function () {
+ // just recover
+ }).then(function () {
+ return promiseFactory();
+ });
+ return this.promise;
+ }
+
+ finish() {
+ return this.promise;
+ }
+}
+
+function stringify(input) {
+ if (!input) {
+ return 'undefined'; // backwards compat for empty reduce
+ }
+ // for backwards compat with mapreduce, functions/strings are stringified
+ // as-is. everything else is JSON-stringified.
+ switch (typeof input) {
+ case 'function':
+ // e.g. a mapreduce map
+ return input.toString();
+ case 'string':
+ // e.g. a mapreduce built-in _reduce function
+ return input.toString();
+ default:
+ // e.g. a JSON object in the case of mango queries
+ return JSON.stringify(input);
+ }
+}
+
+/* create a string signature for a view so we can cache it and uniq it */
+function createViewSignature(mapFun, reduceFun) {
+ // the "undefined" part is for backwards compatibility
+ return stringify(mapFun) + stringify(reduceFun) + 'undefined';
+}
+
+async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {
+ const viewSignature = createViewSignature(mapFun, reduceFun);
+
+ let cachedViews;
+ if (!temporary) {
+ // cache this to ensure we don't try to update the same view twice
+ cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};
+ if (cachedViews[viewSignature]) {
+ return cachedViews[viewSignature];
+ }
+ }
+
+ const promiseForView = sourceDB.info().then(async function (info) {
+ const depDbName = info.db_name + '-mrview-' +
+ (temporary ? 'temp' : await stringMd5(viewSignature));
+
+ // save the view name in the source db so it can be cleaned up if necessary
+ // (e.g. when the _design doc is deleted, remove all associated view data)
+ function diffFunction(doc) {
+ doc.views = doc.views || {};
+ let fullViewName = viewName;
+ if (fullViewName.indexOf('/') === -1) {
+ fullViewName = viewName + '/' + viewName;
+ }
+ const depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};
+ /* istanbul ignore if */
+ if (depDbs[depDbName]) {
+ return; // no update necessary
+ }
+ depDbs[depDbName] = true;
+ return doc;
+ }
+ await upsert(sourceDB, '_local/' + localDocName, diffFunction);
+ const res = await sourceDB.registerDependentDatabase(depDbName);
+ const db = res.db;
+ db.auto_compaction = true;
+ const view = {
+ name: depDbName,
+ db: db,
+ sourceDB: sourceDB,
+ adapter: sourceDB.adapter,
+ mapFun: mapFun,
+ reduceFun: reduceFun
+ };
+
+ let lastSeqDoc;
+ try {
+ lastSeqDoc = await view.db.get('_local/lastSeq');
+ } catch (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ }
+
+ view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;
+ if (cachedViews) {
+ view.db.once('destroyed', function () {
+ delete cachedViews[viewSignature];
+ });
+ }
+ return view;
+ });
+
+ if (cachedViews) {
+ cachedViews[viewSignature] = promiseForView;
+ }
+ return promiseForView;
+}
+
+var persistentQueues = {};
+var tempViewQueue = new TaskQueue();
+var CHANGES_BATCH_SIZE = 50;
+
+function parseViewName(name) {
+ // can be either 'ddocname/viewname' or just 'viewname'
+ // (where the ddoc name is the same)
+ return name.indexOf('/') === -1 ? [name, name] : name.split('/');
+}
+
+function isGenOne(changes) {
+ // only return true if the current change is 1-
+ // and there are no other leafs
+ return changes.length === 1 && /^1-/.test(changes[0].rev);
+}
+
+function emitError(db, e, data) {
+ try {
+ db.emit('error', e);
+ } catch (err) {
+ guardedConsole('error',
+ 'The user\'s map/reduce function threw an uncaught error.\n' +
+ 'You can debug this error by doing:\n' +
+ 'myDatabase.on(\'error\', function (err) { debugger; });\n' +
+ 'Please double-check your map/reduce function.');
+ guardedConsole('error', e, data);
+ }
+}
+
+/**
+ * Returns an "abstract" mapreduce object of the form:
+ *
+ * {
+ * query: queryFun,
+ * viewCleanup: viewCleanupFun
+ * }
+ *
+ * Arguments are:
+ *
+ * localDoc: string
+ * This is for the local doc that gets saved in order to track the
+ * "dependent" DBs and clean them up for viewCleanup. It should be
+ * unique, so that indexer plugins don't collide with each other.
+ * mapper: function (mapFunDef, emit)
+ * Returns a map function based on the mapFunDef, which in the case of
+ * normal map/reduce is just the de-stringified function, but may be
+ * something else, such as an object in the case of pouchdb-find.
+ * reducer: function (reduceFunDef)
+ * Ditto, but for reducing. Modules don't have to support reducing
+ * (e.g. pouchdb-find).
+ * ddocValidator: function (ddoc, viewName)
+ * Throws an error if the ddoc or viewName is not valid.
+ * This could be a way to communicate to the user that the configuration for the
+ * indexer is invalid.
+ */
+function createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {
+
+ function tryMap(db, fun, doc) {
+ // emit an event if there was an error thrown by a map function.
+ // putting try/catches in a single function also avoids deoptimizations.
+ try {
+ fun(doc);
+ } catch (e) {
+ emitError(db, e, {fun: fun, doc: doc});
+ }
+ }
+
+ function tryReduce(db, fun, keys, values, rereduce) {
+ // same as above, but returning the result or an error. there are two separate
+ // functions to avoid extra memory allocations since the tryCode() case is used
+ // for custom map functions (common) vs this function, which is only used for
+ // custom reduce functions (rare)
+ try {
+ return {output : fun(keys, values, rereduce)};
+ } catch (e) {
+ emitError(db, e, {fun: fun, keys: keys, values: values, rereduce: rereduce});
+ return {error: e};
+ }
+ }
+
+ function sortByKeyThenValue(x, y) {
+ const keyCompare = collate(x.key, y.key);
+ return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);
+ }
+
+ function sliceResults(results, limit, skip) {
+ skip = skip || 0;
+ if (typeof limit === 'number') {
+ return results.slice(skip, limit + skip);
+ } else if (skip > 0) {
+ return results.slice(skip);
+ }
+ return results;
+ }
+
+ function rowToDocId(row) {
+ const val = row.value;
+ // Users can explicitly specify a joined doc _id, or it
+ // defaults to the doc _id that emitted the key/value.
+ const docId = (val && typeof val === 'object' && val._id) || row.id;
+ return docId;
+ }
+
+ function readAttachmentsAsBlobOrBuffer(res) {
+ res.rows.forEach(function (row) {
+ const atts = row.doc && row.doc._attachments;
+ if (!atts) {
+ return;
+ }
+ Object.keys(atts).forEach(function (filename) {
+ const att = atts[filename];
+ atts[filename].data = b64ToBluffer(att.data, att.content_type);
+ });
+ });
+ }
+
+ function postprocessAttachments(opts) {
+ return function (res) {
+ if (opts.include_docs && opts.attachments && opts.binary) {
+ readAttachmentsAsBlobOrBuffer(res);
+ }
+ return res;
+ };
+ }
+
+ function addHttpParam(paramName, opts, params, asJson) {
+ // add an http param from opts to params, optionally json-encoded
+ let val = opts[paramName];
+ if (typeof val !== 'undefined') {
+ if (asJson) {
+ val = encodeURIComponent(JSON.stringify(val));
+ }
+ params.push(paramName + '=' + val);
+ }
+ }
+
+ function coerceInteger(integerCandidate) {
+ if (typeof integerCandidate !== 'undefined') {
+ const asNumber = Number(integerCandidate);
+ // prevents e.g. '1foo' or '1.1' being coerced to 1
+ if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {
+ return asNumber;
+ } else {
+ return integerCandidate;
+ }
+ }
+ }
+
+ function coerceOptions(opts) {
+ opts.group_level = coerceInteger(opts.group_level);
+ opts.limit = coerceInteger(opts.limit);
+ opts.skip = coerceInteger(opts.skip);
+ return opts;
+ }
+
+ function checkPositiveInteger(number) {
+ if (number) {
+ if (typeof number !== 'number') {
+ return new QueryParseError(`Invalid value for integer: "${number}"`);
+ }
+ if (number < 0) {
+ return new QueryParseError(`Invalid value for positive integer: "${number}"`);
+ }
+ }
+ }
+
+ function checkQueryParseError(options, fun) {
+ const startkeyName = options.descending ? 'endkey' : 'startkey';
+ const endkeyName = options.descending ? 'startkey' : 'endkey';
+
+ if (typeof options[startkeyName] !== 'undefined' &&
+ typeof options[endkeyName] !== 'undefined' &&
+ collate(options[startkeyName], options[endkeyName]) > 0) {
+ throw new QueryParseError('No rows can match your key range, ' +
+ 'reverse your start_key and end_key or set {descending : true}');
+ } else if (fun.reduce && options.reduce !== false) {
+ if (options.include_docs) {
+ throw new QueryParseError('{include_docs:true} is invalid for reduce');
+ } else if (options.keys && options.keys.length > 1 &&
+ !options.group && !options.group_level) {
+ throw new QueryParseError('Multi-key fetches for reduce views must use ' +
+ '{group: true}');
+ }
+ }
+ ['group_level', 'limit', 'skip'].forEach(function (optionName) {
+ const error = checkPositiveInteger(options[optionName]);
+ if (error) {
+ throw error;
+ }
+ });
+ }
+
+ async function httpQuery(db, fun, opts) {
+ // List of parameters to add to the PUT request
+ let params = [];
+ let body;
+ let method = 'GET';
+ let ok;
+
+ // If opts.reduce exists and is defined, then add it to the list
+ // of parameters.
+ // If reduce=false then the results are that of only the map function
+ // not the final result of map and reduce.
+ addHttpParam('reduce', opts, params);
+ addHttpParam('include_docs', opts, params);
+ addHttpParam('attachments', opts, params);
+ addHttpParam('limit', opts, params);
+ addHttpParam('descending', opts, params);
+ addHttpParam('group', opts, params);
+ addHttpParam('group_level', opts, params);
+ addHttpParam('skip', opts, params);
+ addHttpParam('stale', opts, params);
+ addHttpParam('conflicts', opts, params);
+ addHttpParam('startkey', opts, params, true);
+ addHttpParam('start_key', opts, params, true);
+ addHttpParam('endkey', opts, params, true);
+ addHttpParam('end_key', opts, params, true);
+ addHttpParam('inclusive_end', opts, params);
+ addHttpParam('key', opts, params, true);
+ addHttpParam('update_seq', opts, params);
+
+ // Format the list of parameters into a valid URI query string
+ params = params.join('&');
+ params = params === '' ? '' : '?' + params;
+
+ // If keys are supplied, issue a POST to circumvent GET query string limits
+ // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
+ if (typeof opts.keys !== 'undefined') {
+ const MAX_URL_LENGTH = 2000;
+ // according to http://stackoverflow.com/a/417184/680742,
+ // the de facto URL length limit is 2000 characters
+
+ const keysAsString = `keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;
+ if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {
+ // If the keys are short enough, do a GET. we do this to work around
+ // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)
+ params += (params[0] === '?' ? '&' : '?') + keysAsString;
+ } else {
+ method = 'POST';
+ if (typeof fun === 'string') {
+ body = {keys: opts.keys};
+ } else { // fun is {map : mapfun}, so append to this
+ fun.keys = opts.keys;
+ }
+ }
+ }
+
+ // We are referencing a query defined in the design doc
+ if (typeof fun === 'string') {
+ const parts = parseViewName(fun);
+
+ const response = await db.fetch('_design/' + parts[0] + '/_view/' + parts[1] + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: method,
+ body: JSON.stringify(body)
+ });
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ // fail the entire request if the result contains an error
+ result.rows.forEach(function (row) {
+ /* istanbul ignore if */
+ if (row.value && row.value.error && row.value.error === "builtin_reduce_error") {
+ throw new Error(row.reason);
+ }
+ });
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // We are using a temporary view, terrible for performance, good for testing
+ body = body || {};
+ Object.keys(fun).forEach(function (key) {
+ if (Array.isArray(fun[key])) {
+ body[key] = fun[key];
+ } else {
+ body[key] = fun[key].toString();
+ }
+ });
+
+ const response = await db.fetch('_temp_view' + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST',
+ body: JSON.stringify(body)
+ });
+
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // custom adapters can define their own api._query
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customQuery(db, fun, opts) {
+ return new Promise(function (resolve, reject) {
+ db._query(fun, opts, function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ // custom adapters can define their own api._viewCleanup
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customViewCleanup(db) {
+ return new Promise(function (resolve, reject) {
+ db._viewCleanup(function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ function defaultsTo(value) {
+ return function (reason) {
+ /* istanbul ignore else */
+ if (reason.status === 404) {
+ return value;
+ } else {
+ throw reason;
+ }
+ };
+ }
+
+ // returns a promise for a list of docs to update, based on the input docId.
+ // the order doesn't matter, because post-3.2.0, bulkDocs
+ // is an atomic operation in all three adapters.
+ async function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {
+ const metaDocId = '_local/doc_' + docId;
+ const defaultMetaDoc = {_id: metaDocId, keys: []};
+ const docData = docIdsToChangesAndEmits.get(docId);
+ const indexableKeysToKeyValues = docData[0];
+ const changes = docData[1];
+
+ function getMetaDoc() {
+ if (isGenOne(changes)) {
+ // generation 1, so we can safely assume initial state
+ // for performance reasons (avoids unnecessary GETs)
+ return Promise.resolve(defaultMetaDoc);
+ }
+ return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));
+ }
+
+ function getKeyValueDocs(metaDoc) {
+ if (!metaDoc.keys.length) {
+ // no keys, no need for a lookup
+ return Promise.resolve({rows: []});
+ }
+ return view.db.allDocs({
+ keys: metaDoc.keys,
+ include_docs: true
+ });
+ }
+
+ function processKeyValueDocs(metaDoc, kvDocsRes) {
+ const kvDocs = [];
+ const oldKeys = new Set();
+
+ for (let i = 0, len = kvDocsRes.rows.length; i < len; i++) {
+ const row = kvDocsRes.rows[i];
+ const doc = row.doc;
+ if (!doc) { // deleted
+ continue;
+ }
+ kvDocs.push(doc);
+ oldKeys.add(doc._id);
+ doc._deleted = !indexableKeysToKeyValues.has(doc._id);
+ if (!doc._deleted) {
+ const keyValue = indexableKeysToKeyValues.get(doc._id);
+ if ('value' in keyValue) {
+ doc.value = keyValue.value;
+ }
+ }
+ }
+ const newKeys = mapToKeysArray(indexableKeysToKeyValues);
+ newKeys.forEach(function (key) {
+ if (!oldKeys.has(key)) {
+ // new doc
+ const kvDoc = {
+ _id: key
+ };
+ const keyValue = indexableKeysToKeyValues.get(key);
+ if ('value' in keyValue) {
+ kvDoc.value = keyValue.value;
+ }
+ kvDocs.push(kvDoc);
+ }
+ });
+ metaDoc.keys = uniq$1(newKeys.concat(metaDoc.keys));
+ kvDocs.push(metaDoc);
+
+ return kvDocs;
+ }
+
+ const metaDoc = await getMetaDoc();
+ const keyValueDocs = await getKeyValueDocs(metaDoc);
+ return processKeyValueDocs(metaDoc, keyValueDocs);
+ }
+
+ function updatePurgeSeq(view) {
+ // with this approach, we just assume to have processed all missing purges and write the latest
+ // purgeSeq into the _local/purgeSeq doc.
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const purgeSeq = res.purgeSeq;
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res._rev;
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return undefined;
+ }).then(function (rev) {
+ return view.db.put({
+ _id: '_local/purgeSeq',
+ _rev: rev,
+ purgeSeq,
+ });
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ });
+ }
+
+ // updates all emitted key/value docs and metaDocs in the mrview database
+ // for the given batch of documents from the source database
+ function saveKeyValues(view, docIdsToChangesAndEmits, seq) {
+ var seqDocId = '_local/lastSeq';
+ return view.db.get(seqDocId)
+ .catch(defaultsTo({_id: seqDocId, seq: 0}))
+ .then(function (lastSeqDoc) {
+ var docIds = mapToKeysArray(docIdsToChangesAndEmits);
+ return Promise.all(docIds.map(function (docId) {
+ return getDocsToPersist(docId, view, docIdsToChangesAndEmits);
+ })).then(function (listOfDocsToPersist) {
+ var docsToPersist = flatten$1(listOfDocsToPersist);
+ lastSeqDoc.seq = seq;
+ docsToPersist.push(lastSeqDoc);
+ // write all docs in a single operation, update the seq once
+ return view.db.bulkDocs({docs : docsToPersist});
+ })
+ // TODO: this should be placed somewhere else, probably? we're querying both docs twice
+ // (first time when getting the actual purges).
+ .then(() => updatePurgeSeq(view));
+ });
+ }
+
+ function getQueue(view) {
+ const viewName = typeof view === 'string' ? view : view.name;
+ let queue = persistentQueues[viewName];
+ if (!queue) {
+ queue = persistentQueues[viewName] = new TaskQueue();
+ }
+ return queue;
+ }
+
+ async function updateView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return updateViewInQueue(view, opts);
+ })();
+ }
+
+ async function updateViewInQueue(view, opts) {
+ // bind the emit function once
+ let mapResults;
+ let doc;
+ let taskId;
+
+ function emit(key, value) {
+ const output = {id: doc._id, key: normalizeKey(key)};
+ // Don't explicitly store the value unless it's defined and non-null.
+ // This saves on storage space, because often people don't use it.
+ if (typeof value !== 'undefined' && value !== null) {
+ output.value = normalizeKey(value);
+ }
+ mapResults.push(output);
+ }
+
+ const mapFun = mapper(view.mapFun, emit);
+
+ let currentSeq = view.seq || 0;
+
+ function createTask() {
+ return view.sourceDB.info().then(function (info) {
+ taskId = view.sourceDB.activeTasks.add({
+ name: 'view_indexing',
+ total_items: info.update_seq - currentSeq,
+ });
+ });
+ }
+
+ function processChange(docIdsToChangesAndEmits, seq) {
+ return function () {
+ return saveKeyValues(view, docIdsToChangesAndEmits, seq);
+ };
+ }
+
+ let indexed_docs = 0;
+ const progress = {
+ view: view.name,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+
+ const queue = new TaskQueue();
+
+ async function processNextBatch() {
+ const response = await view.sourceDB.changes({
+ return_docs: true,
+ conflicts: true,
+ include_docs: true,
+ style: 'all_docs',
+ since: currentSeq,
+ limit: opts.changes_batch_size
+ });
+ const purges = await getRecentPurges();
+ return processBatch(response, purges);
+ }
+
+ function getRecentPurges() {
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res.purgeSeq;
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return -1;
+ }).then(function (purgeSeq) {
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const recentPurges = res.purges.filter(function (purge, index) {
+ return index > purgeSeq;
+ }).map((purge) => purge.docId);
+
+ const uniquePurges = recentPurges.filter(function (docId, index) {
+ return recentPurges.indexOf(docId) === index;
+ });
+
+ return Promise.all(uniquePurges.map(function (docId) {
+ return view.sourceDB.get(docId).then(function (doc) {
+ return { docId, doc };
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return { docId };
+ });
+ }));
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return [];
+ });
+ });
+ }
+
+ function processBatch(response, purges) {
+ var results = response.results;
+ if (!results.length && !purges.length) {
+ return;
+ }
+
+ for (let purge of purges) {
+ const index = results.findIndex(function (change) {
+ return change.id === purge.docId;
+ });
+ if (index < 0) {
+ // mimic a db.remove() on the changes feed
+ const entry = {
+ _id: purge.docId,
+ doc: {
+ _id: purge.docId,
+ _deleted: 1,
+ },
+ changes: [],
+ };
+
+ if (purge.doc) {
+ // update with new winning rev after purge
+ entry.doc = purge.doc;
+ entry.changes.push({ rev: purge.doc._rev });
+ }
+
+ results.push(entry);
+ }
+ }
+
+ var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);
+
+ queue.add(processChange(docIdsToChangesAndEmits, currentSeq));
+
+ indexed_docs = indexed_docs + results.length;
+ const progress = {
+ view: view.name,
+ last_seq: response.last_seq,
+ results_count: results.length,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+ view.sourceDB.activeTasks.update(taskId, {completed_items: indexed_docs});
+
+ if (results.length < opts.changes_batch_size) {
+ return;
+ }
+ return processNextBatch();
+ }
+
+ function createDocIdsToChangesAndEmits(results) {
+ const docIdsToChangesAndEmits = new Map();
+ for (let i = 0, len = results.length; i < len; i++) {
+ const change = results[i];
+ if (change.doc._id[0] !== '_') {
+ mapResults = [];
+ doc = change.doc;
+
+ if (!doc._deleted) {
+ tryMap(view.sourceDB, mapFun, doc);
+ }
+ mapResults.sort(sortByKeyThenValue);
+
+ const indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);
+ docIdsToChangesAndEmits.set(change.doc._id, [
+ indexableKeysToKeyValues,
+ change.changes
+ ]);
+ }
+ currentSeq = change.seq;
+ }
+ return docIdsToChangesAndEmits;
+ }
+
+ function createIndexableKeysToKeyValues(mapResults) {
+ const indexableKeysToKeyValues = new Map();
+ let lastKey;
+ for (let i = 0, len = mapResults.length; i < len; i++) {
+ const emittedKeyValue = mapResults[i];
+ const complexKey = [emittedKeyValue.key, emittedKeyValue.id];
+ if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {
+ complexKey.push(i); // dup key+id, so make it unique
+ }
+ indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);
+ lastKey = emittedKeyValue.key;
+ }
+ return indexableKeysToKeyValues;
+ }
+
+ try {
+ await createTask();
+ await processNextBatch();
+ await queue.finish();
+ view.seq = currentSeq;
+ view.sourceDB.activeTasks.remove(taskId);
+ } catch (error) {
+ view.sourceDB.activeTasks.remove(taskId, error);
+ }
+ }
+
+ function reduceView(view, results, options) {
+ if (options.group_level === 0) {
+ delete options.group_level;
+ }
+
+ const shouldGroup = options.group || options.group_level;
+
+ const reduceFun = reducer(view.reduceFun);
+
+ const groups = [];
+ const lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :
+ options.group_level;
+ results.forEach(function (e) {
+ const last = groups[groups.length - 1];
+ let groupKey = shouldGroup ? e.key : null;
+
+ // only set group_level for array keys
+ if (shouldGroup && Array.isArray(groupKey)) {
+ groupKey = groupKey.slice(0, lvl);
+ }
+
+ if (last && collate(last.groupKey, groupKey) === 0) {
+ last.keys.push([e.key, e.id]);
+ last.values.push(e.value);
+ return;
+ }
+ groups.push({
+ keys: [[e.key, e.id]],
+ values: [e.value],
+ groupKey: groupKey
+ });
+ });
+ results = [];
+ for (let i = 0, len = groups.length; i < len; i++) {
+ const e = groups[i];
+ const reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);
+ if (reduceTry.error && reduceTry.error instanceof BuiltInError) {
+ // CouchDB returns an error if a built-in errors out
+ throw reduceTry.error;
+ }
+ results.push({
+ // CouchDB just sets the value to null if a non-built-in errors out
+ value: reduceTry.error ? null : reduceTry.output,
+ key: e.groupKey
+ });
+ }
+ // no total_rows/offset when reducing
+ return {rows: sliceResults(results, options.limit, options.skip)};
+ }
+
+ function queryView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return queryViewInQueue(view, opts);
+ })();
+ }
+
+ async function queryViewInQueue(view, opts) {
+ let totalRows;
+ const shouldReduce = view.reduceFun && opts.reduce !== false;
+ const skip = opts.skip || 0;
+ if (typeof opts.keys !== 'undefined' && !opts.keys.length) {
+ // equivalent query
+ opts.limit = 0;
+ delete opts.keys;
+ }
+
+ async function fetchFromView(viewOpts) {
+ viewOpts.include_docs = true;
+ const res = await view.db.allDocs(viewOpts);
+ totalRows = res.total_rows;
+
+ return res.rows.map(function (result) {
+ // implicit migration - in older versions of PouchDB,
+ // we explicitly stored the doc as {id: ..., key: ..., value: ...}
+ // this is tested in a migration test
+ /* istanbul ignore next */
+ if ('value' in result.doc && typeof result.doc.value === 'object' &&
+ result.doc.value !== null) {
+ const keys = Object.keys(result.doc.value).sort();
+ // this detection method is not perfect, but it's unlikely the user
+ // emitted a value which was an object with these 3 exact keys
+ const expectedKeys = ['id', 'key', 'value'];
+ if (!(keys < expectedKeys || keys > expectedKeys)) {
+ return result.doc.value;
+ }
+ }
+
+ const parsedKeyAndDocId = parseIndexableString(result.doc._id);
+ return {
+ key: parsedKeyAndDocId[0],
+ id: parsedKeyAndDocId[1],
+ value: ('value' in result.doc ? result.doc.value : null)
+ };
+ });
+ }
+
+ async function onMapResultsReady(rows) {
+ let finalResults;
+ if (shouldReduce) {
+ finalResults = reduceView(view, rows, opts);
+ } else if (typeof opts.keys === 'undefined') {
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: rows
+ };
+ } else {
+ // support limit, skip for keys query
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: sliceResults(rows,opts.limit,opts.skip)
+ };
+ }
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ finalResults.update_seq = view.seq;
+ }
+ if (opts.include_docs) {
+ const docIds = uniq$1(rows.map(rowToDocId));
+
+ const allDocsRes = await view.sourceDB.allDocs({
+ keys: docIds,
+ include_docs: true,
+ conflicts: opts.conflicts,
+ attachments: opts.attachments,
+ binary: opts.binary
+ });
+ var docIdsToDocs = new Map();
+ allDocsRes.rows.forEach(function (row) {
+ docIdsToDocs.set(row.id, row.doc);
+ });
+ rows.forEach(function (row) {
+ var docId = rowToDocId(row);
+ var doc = docIdsToDocs.get(docId);
+ if (doc) {
+ row.doc = doc;
+ }
+ });
+ return finalResults;
+ } else {
+ return finalResults;
+ }
+ }
+
+ if (typeof opts.keys !== 'undefined') {
+ const keys = opts.keys;
+ const fetchPromises = keys.map(function (key) {
+ const viewOpts = {
+ startkey : toIndexableString([key]),
+ endkey : toIndexableString([key, {}])
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ return fetchFromView(viewOpts);
+ });
+ const result = await Promise.all(fetchPromises);
+ const flattenedResult = flatten$1(result);
+ return onMapResultsReady(flattenedResult);
+ } else { // normal query, no 'keys'
+ const viewOpts = {
+ descending : opts.descending
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ let startkey;
+ let endkey;
+ if ('start_key' in opts) {
+ startkey = opts.start_key;
+ }
+ if ('startkey' in opts) {
+ startkey = opts.startkey;
+ }
+ if ('end_key' in opts) {
+ endkey = opts.end_key;
+ }
+ if ('endkey' in opts) {
+ endkey = opts.endkey;
+ }
+ if (typeof startkey !== 'undefined') {
+ viewOpts.startkey = opts.descending ?
+ toIndexableString([startkey, {}]) :
+ toIndexableString([startkey]);
+ }
+ if (typeof endkey !== 'undefined') {
+ let inclusiveEnd = opts.inclusive_end !== false;
+ if (opts.descending) {
+ inclusiveEnd = !inclusiveEnd;
+ }
+
+ viewOpts.endkey = toIndexableString(
+ inclusiveEnd ? [endkey, {}] : [endkey]);
+ }
+ if (typeof opts.key !== 'undefined') {
+ const keyStart = toIndexableString([opts.key]);
+ const keyEnd = toIndexableString([opts.key, {}]);
+ if (viewOpts.descending) {
+ viewOpts.endkey = keyStart;
+ viewOpts.startkey = keyEnd;
+ } else {
+ viewOpts.startkey = keyStart;
+ viewOpts.endkey = keyEnd;
+ }
+ }
+ if (!shouldReduce) {
+ if (typeof opts.limit === 'number') {
+ viewOpts.limit = opts.limit;
+ }
+ viewOpts.skip = skip;
+ }
+
+ const result = await fetchFromView(viewOpts);
+ return onMapResultsReady(result);
+ }
+ }
+
+ async function httpViewCleanup(db) {
+ const response = await db.fetch('_view_cleanup', {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST'
+ });
+ return response.json();
+ }
+
+ async function localViewCleanup(db) {
+ try {
+ const metaDoc = await db.get('_local/' + localDocName);
+ const docsToViews = new Map();
+
+ Object.keys(metaDoc.views).forEach(function (fullViewName) {
+ const parts = parseViewName(fullViewName);
+ const designDocName = '_design/' + parts[0];
+ const viewName = parts[1];
+ let views = docsToViews.get(designDocName);
+ if (!views) {
+ views = new Set();
+ docsToViews.set(designDocName, views);
+ }
+ views.add(viewName);
+ });
+ const opts = {
+ keys : mapToKeysArray(docsToViews),
+ include_docs : true
+ };
+
+ const res = await db.allDocs(opts);
+ const viewsToStatus = {};
+ res.rows.forEach(function (row) {
+ const ddocName = row.key.substring(8); // cuts off '_design/'
+ docsToViews.get(row.key).forEach(function (viewName) {
+ let fullViewName = ddocName + '/' + viewName;
+ /* istanbul ignore if */
+ if (!metaDoc.views[fullViewName]) {
+ // new format, without slashes, to support PouchDB 2.2.0
+ // migration test in pouchdb's browser.migration.js verifies this
+ fullViewName = viewName;
+ }
+ const viewDBNames = Object.keys(metaDoc.views[fullViewName]);
+ // design doc deleted, or view function nonexistent
+ const statusIsGood = row.doc && row.doc.views &&
+ row.doc.views[viewName];
+ viewDBNames.forEach(function (viewDBName) {
+ viewsToStatus[viewDBName] =
+ viewsToStatus[viewDBName] || statusIsGood;
+ });
+ });
+ });
+
+ const dbsToDelete = Object.keys(viewsToStatus)
+ .filter(function (viewDBName) { return !viewsToStatus[viewDBName]; });
+
+ const destroyPromises = dbsToDelete.map(function (viewDBName) {
+ return sequentialize(getQueue(viewDBName), function () {
+ return new db.constructor(viewDBName, db.__opts).destroy();
+ })();
+ });
+
+ return Promise.all(destroyPromises).then(function () {
+ return {ok: true};
+ });
+ } catch (err) {
+ if (err.status === 404) {
+ return {ok: true};
+ } else {
+ throw err;
+ }
+ }
+ }
+
+ async function queryPromised(db, fun, opts) {
+ /* istanbul ignore next */
+ if (typeof db._query === 'function') {
+ return customQuery(db, fun, opts);
+ }
+ if (isRemote(db)) {
+ return httpQuery(db, fun, opts);
+ }
+
+ const updateViewOpts = {
+ changes_batch_size: db.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE
+ };
+
+ if (typeof fun !== 'string') {
+ // temp_view
+ checkQueryParseError(opts, fun);
+
+ tempViewQueue.add(async function () {
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ 'temp_view/temp_view',
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ true,
+ /* localDocName */ localDocName);
+
+ return fin(updateView(view, updateViewOpts).then(
+ function () { return queryView(view, opts); }),
+ function () { return view.db.destroy(); }
+ );
+ });
+ return tempViewQueue.finish();
+ } else {
+ // persistent view
+ const fullViewName = fun;
+ const parts = parseViewName(fullViewName);
+ const designDocName = parts[0];
+ const viewName = parts[1];
+
+ const doc = await db.get('_design/' + designDocName);
+ fun = doc.views && doc.views[viewName];
+
+ if (!fun) {
+ // basic validator; it's assumed that every subclass would want this
+ throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);
+ }
+
+ ddocValidator(doc, viewName);
+ checkQueryParseError(opts, fun);
+
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ fullViewName,
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ false,
+ /* localDocName */ localDocName);
+
+ if (opts.stale === 'ok' || opts.stale === 'update_after') {
+ if (opts.stale === 'update_after') {
+ nextTick$9(function () {
+ updateView(view, updateViewOpts);
+ });
+ }
+ return queryView(view, opts);
+ } else { // stale not ok
+ await updateView(view, updateViewOpts);
+ return queryView(view, opts);
+ }
+ }
+ }
+
+ function abstractQuery(fun, opts, callback) {
+ const db = this;
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts = opts ? coerceOptions(opts) : {};
+
+ if (typeof fun === 'function') {
+ fun = {map : fun};
+ }
+
+ const promise = Promise.resolve().then(function () {
+ return queryPromised(db, fun, opts);
+ });
+ promisedCallback$1(promise, callback);
+ return promise;
+ }
+
+ const abstractViewCleanup = callbackify$1(function () {
+ const db = this;
+ /* istanbul ignore next */
+ if (typeof db._viewCleanup === 'function') {
+ return customViewCleanup(db);
+ }
+ if (isRemote(db)) {
+ return httpViewCleanup(db);
+ }
+ return localViewCleanup(db);
+ });
+
+ return {
+ query: abstractQuery,
+ viewCleanup: abstractViewCleanup
+ };
+}
+
+function createBuiltInError(name) {
+ var message = 'builtin ' + name +
+ ' function requires map values to be numbers' +
+ ' or number arrays';
+ return new BuiltInError(message);
+}
+
+function sum(values) {
+ var result = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ if (typeof num !== 'number') {
+ if (Array.isArray(num)) {
+ // lists of numbers are also allowed, sum them separately
+ result = typeof result === 'number' ? [result] : result;
+ for (var j = 0, jLen = num.length; j < jLen; j++) {
+ var jNum = num[j];
+ if (typeof jNum !== 'number') {
+ throw createBuiltInError('_sum');
+ } else if (typeof result[j] === 'undefined') {
+ result.push(jNum);
+ } else {
+ result[j] += jNum;
+ }
+ }
+ } else { // not array/number
+ throw createBuiltInError('_sum');
+ }
+ } else if (typeof result === 'number') {
+ result += num;
+ } else { // add number to array
+ result[0] += num;
+ }
+ }
+ return result;
+}
+
+// Inside of 'vm' for Node, we need a way to translate a pseudo-error
+// back into a real error once it's out of the VM.
+function createBuiltInErrorInVm(name) {
+ return {
+ builtInError: true,
+ name: name
+ };
+}
+
+function convertToTrueError(err) {
+ return createBuiltInError(err.name);
+}
+
+function isBuiltInError(obj) {
+ return obj && obj.builtInError;
+}
+
+// All of this vm hullaballoo is to be able to run arbitrary code in a sandbox
+// for security reasons.
+function evalFunctionInVm(func, emit) {
+ return function (arg1, arg2, arg3) {
+ var code = '(function() {"use strict";' +
+ 'var createBuiltInError = ' + createBuiltInErrorInVm.toString() + ';' +
+ 'var sum = ' + sum.toString() + ';' +
+ 'var log = function () {};' +
+ 'var isArray = Array.isArray;' +
+ 'var toJSON = JSON.parse;' +
+ 'var __emitteds__ = [];' +
+ 'var emit = function (key, value) {__emitteds__.push([key, value]);};' +
+ 'var __result__ = (' +
+ func.replace(/;\s*$/, '') + ')' + '(' +
+ JSON.stringify(arg1) + ',' +
+ JSON.stringify(arg2) + ',' +
+ JSON.stringify(arg3) + ');' +
+ 'return {result: __result__, emitteds: __emitteds__};' +
+ '})()';
+
+ var output = vm.runInNewContext(code);
+
+ output.emitteds.forEach(function (emitted) {
+ emit(emitted[0], emitted[1]);
+ });
+ if (isBuiltInError(output.result)) {
+ output.result = convertToTrueError(output.result);
+ }
+ return output.result;
+ };
+}
+
+var log = guardedConsole.bind(null, 'log');
+var isArray = Array.isArray;
+var toJSON = JSON.parse;
+
+function evalFunctionWithEval(func, emit) {
+ return scopeEval(
+ "return (" + func.replace(/;\s*$/, "") + ");",
+ {
+ emit: emit,
+ sum: sum,
+ log: log,
+ isArray: isArray,
+ toJSON: toJSON
+ }
+ );
+}
+
+// The "stringify, then execute in a VM" strategy totally breaks Istanbul due
+// to missing __coverage global objects. As a solution, export different
+// code during coverage testing and during regular execution.
+// Note that this doesn't get shipped to consumers because Rollup replaces it
+// with rollup-plugin-replace, so process.env.COVERAGE is replaced with `false`
+var evalFunc;
+/* istanbul ignore else */
+if (process.env.COVERAGE) {
+ evalFunc = evalFunctionWithEval;
+} else {
+ evalFunc = evalFunctionInVm;
+}
+
+var evalFunction = evalFunc;
+
+var builtInReduce = {
+ _sum: function (keys, values) {
+ return sum(values);
+ },
+
+ _count: function (keys, values) {
+ return values.length;
+ },
+
+ _stats: function (keys, values) {
+ // no need to implement rereduce=true, because Pouch
+ // will never call it
+ function sumsqr(values) {
+ var _sumsqr = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ _sumsqr += (num * num);
+ }
+ return _sumsqr;
+ }
+ return {
+ sum : sum(values),
+ min : Math.min.apply(null, values),
+ max : Math.max.apply(null, values),
+ count : values.length,
+ sumsqr : sumsqr(values)
+ };
+ }
+};
+
+function getBuiltIn(reduceFunString) {
+ if (/^_sum/.test(reduceFunString)) {
+ return builtInReduce._sum;
+ } else if (/^_count/.test(reduceFunString)) {
+ return builtInReduce._count;
+ } else if (/^_stats/.test(reduceFunString)) {
+ return builtInReduce._stats;
+ } else if (/^_/.test(reduceFunString)) {
+ throw new Error(reduceFunString + ' is not a supported reduce function.');
+ }
+}
+
+function mapper$1(mapFun, emit) {
+ // for temp_views one can use emit(doc, emit), see #38
+ if (typeof mapFun === "function" && mapFun.length === 2) {
+ var origMap = mapFun;
+ return function (doc) {
+ return origMap(doc, emit);
+ };
+ } else {
+ return evalFunction(mapFun.toString(), emit);
+ }
+}
+
+function reducer$1(reduceFun) {
+ var reduceFunString = reduceFun.toString();
+ var builtIn = getBuiltIn(reduceFunString);
+ if (builtIn) {
+ return builtIn;
+ } else {
+ return evalFunction(reduceFunString);
+ }
+}
+
+function ddocValidator$1(ddoc, viewName) {
+ var fun = ddoc.views && ddoc.views[viewName];
+ if (typeof fun.map !== 'string') {
+ throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +
+ viewName + ', instead found object of type: ' + typeof fun.map);
+ }
+}
+
+var localDocName = 'mrviews';
+var abstract = createAbstractMapReduce(localDocName, mapper$1, reducer$1, ddocValidator$1);
+
+function query(fun, opts, callback) {
+ return abstract.query.call(this, fun, opts, callback);
+}
+
+function viewCleanup(callback) {
+ return abstract.viewCleanup.call(this, callback);
+}
+
+var mapreduce = {
+ query: query,
+ viewCleanup: viewCleanup
+};
+
+var CHECKPOINT_VERSION = 1;
+var REPLICATOR = "pouchdb";
+// This is an arbitrary number to limit the
+// amount of replication history we save in the checkpoint.
+// If we save too much, the checkpoing docs will become very big,
+// if we save fewer, we'll run a greater risk of having to
+// read all the changes from 0 when checkpoint PUTs fail
+// CouchDB 2.0 has a more involved history pruning,
+// but let's go for the simple version for now.
+var CHECKPOINT_HISTORY_SIZE = 5;
+var LOWEST_SEQ = 0;
+
+function updateCheckpoint(db, id, checkpoint, session, returnValue) {
+ return db.get(id).catch(function (err) {
+ if (err.status === 404) {
+ if (db.adapter === 'http' || db.adapter === 'https') ;
+ return {
+ session_id: session,
+ _id: id,
+ history: [],
+ replicator: REPLICATOR,
+ version: CHECKPOINT_VERSION
+ };
+ }
+ throw err;
+ }).then(function (doc) {
+ if (returnValue.cancelled) {
+ return;
+ }
+
+ // if the checkpoint has not changed, do not update
+ if (doc.last_seq === checkpoint) {
+ return;
+ }
+
+ // Filter out current entry for this replication
+ doc.history = (doc.history || []).filter(function (item) {
+ return item.session_id !== session;
+ });
+
+ // Add the latest checkpoint to history
+ doc.history.unshift({
+ last_seq: checkpoint,
+ session_id: session
+ });
+
+ // Just take the last pieces in history, to
+ // avoid really big checkpoint docs.
+ // see comment on history size above
+ doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);
+
+ doc.version = CHECKPOINT_VERSION;
+ doc.replicator = REPLICATOR;
+
+ doc.session_id = session;
+ doc.last_seq = checkpoint;
+
+ return db.put(doc).catch(function (err) {
+ if (err.status === 409) {
+ // retry; someone is trying to write a checkpoint simultaneously
+ return updateCheckpoint(db, id, checkpoint, session, returnValue);
+ }
+ throw err;
+ });
+ });
+}
+
+class CheckpointerInternal {
+ constructor(src, target, id, returnValue, opts) {
+ this.src = src;
+ this.target = target;
+ this.id = id;
+ this.returnValue = returnValue;
+ this.opts = opts || {};
+ }
+
+ writeCheckpoint(checkpoint, session) {
+ var self = this;
+ return this.updateTarget(checkpoint, session).then(function () {
+ return self.updateSource(checkpoint, session);
+ });
+ }
+
+ updateTarget(checkpoint, session) {
+ if (this.opts.writeTargetCheckpoint) {
+ return updateCheckpoint(this.target, this.id, checkpoint,
+ session, this.returnValue);
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ updateSource(checkpoint, session) {
+ if (this.opts.writeSourceCheckpoint) {
+ var self = this;
+ return updateCheckpoint(this.src, this.id, checkpoint,
+ session, this.returnValue)
+ .catch(function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return true;
+ }
+ throw err;
+ });
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ getCheckpoint() {
+ var self = this;
+
+ if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {
+ return self.src.get(self.id).then(function (sourceDoc) {
+ return sourceDoc.last_seq || LOWEST_SEQ;
+ }).catch(function (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+
+ return self.target.get(self.id).then(function (targetDoc) {
+ if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {
+ return targetDoc.last_seq || LOWEST_SEQ;
+ }
+
+ return self.src.get(self.id).then(function (sourceDoc) {
+ // Since we can't migrate an old version doc to a new one
+ // (no session id), we just go with the lowest seq in this case
+ /* istanbul ignore if */
+ if (targetDoc.version !== sourceDoc.version) {
+ return LOWEST_SEQ;
+ }
+
+ var version;
+ if (targetDoc.version) {
+ version = targetDoc.version.toString();
+ } else {
+ version = "undefined";
+ }
+
+ if (version in comparisons) {
+ return comparisons[version](targetDoc, sourceDoc);
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (err.status === 404 && targetDoc.last_seq) {
+ return self.src.put({
+ _id: self.id,
+ last_seq: LOWEST_SEQ
+ }).then(function () {
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return targetDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ });
+ }
+ throw err;
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+}
+
+var comparisons = {
+ "undefined": function (targetDoc, sourceDoc) {
+ // This is the previous comparison function
+ if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {
+ return sourceDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return 0;
+ },
+ "1": function (targetDoc, sourceDoc) {
+ // This is the comparison function ported from CouchDB
+ return compareReplicationLogs(sourceDoc, targetDoc).last_seq;
+ }
+};
+
+// This checkpoint comparison is ported from CouchDBs source
+// they come from here:
+// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906
+
+function compareReplicationLogs(srcDoc, tgtDoc) {
+ if (srcDoc.session_id === tgtDoc.session_id) {
+ return {
+ last_seq: srcDoc.last_seq,
+ history: srcDoc.history
+ };
+ }
+
+ return compareReplicationHistory(srcDoc.history, tgtDoc.history);
+}
+
+function compareReplicationHistory(sourceHistory, targetHistory) {
+ // the erlang loop via function arguments is not so easy to repeat in JS
+ // therefore, doing this as recursion
+ var S = sourceHistory[0];
+ var sourceRest = sourceHistory.slice(1);
+ var T = targetHistory[0];
+ var targetRest = targetHistory.slice(1);
+
+ if (!S || targetHistory.length === 0) {
+ return {
+ last_seq: LOWEST_SEQ,
+ history: []
+ };
+ }
+
+ var sourceId = S.session_id;
+ /* istanbul ignore if */
+ if (hasSessionId(sourceId, targetHistory)) {
+ return {
+ last_seq: S.last_seq,
+ history: sourceHistory
+ };
+ }
+
+ var targetId = T.session_id;
+ if (hasSessionId(targetId, sourceRest)) {
+ return {
+ last_seq: T.last_seq,
+ history: targetRest
+ };
+ }
+
+ return compareReplicationHistory(sourceRest, targetRest);
+}
+
+function hasSessionId(sessionId, history) {
+ var props = history[0];
+ var rest = history.slice(1);
+
+ if (!sessionId || history.length === 0) {
+ return false;
+ }
+
+ if (sessionId === props.session_id) {
+ return true;
+ }
+
+ return hasSessionId(sessionId, rest);
+}
+
+function isForbiddenError(err) {
+ return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;
+}
+
+function Checkpointer(src, target, id, returnValue, opts) {
+ if (!(this instanceof CheckpointerInternal)) {
+ return new CheckpointerInternal(src, target, id, returnValue, opts);
+ }
+ return Checkpointer;
+}
+
+function sortObjectPropertiesByKey(queryParams) {
+ return Object.keys(queryParams).sort(collate).reduce(function (result, key) {
+ result[key] = queryParams[key];
+ return result;
+ }, {});
+}
+
+// Generate a unique id particular to this replication.
+// Not guaranteed to align perfectly with CouchDB's rep ids.
+function generateReplicationId(src, target, opts) {
+ var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';
+ var filterFun = opts.filter ? opts.filter.toString() : '';
+ var queryParams = '';
+ var filterViewName = '';
+ var selector = '';
+
+ // possibility for checkpoints to be lost here as behaviour of
+ // JSON.stringify is not stable (see #6226)
+ /* istanbul ignore if */
+ if (opts.selector) {
+ selector = JSON.stringify(opts.selector);
+ }
+
+ if (opts.filter && opts.query_params) {
+ queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));
+ }
+
+ if (opts.filter && opts.filter === '_view') {
+ filterViewName = opts.view.toString();
+ }
+
+ return Promise.all([src.id(), target.id()]).then(function (res) {
+ var queryData = res[0] + res[1] + filterFun + filterViewName +
+ queryParams + docIds + selector;
+ return new Promise(function (resolve) {
+ binaryMd5(queryData, resolve);
+ });
+ }).then(function (md5sum) {
+ // can't use straight-up md5 alphabet, because
+ // the char '/' is interpreted as being for attachments,
+ // and + is also not url-safe
+ md5sum = md5sum.replace(/\//g, '.').replace(/\+/g, '_');
+ return '_local/' + md5sum;
+ });
+}
+
+function fileHasChanged(localDoc, remoteDoc, filename) {
+ return !localDoc._attachments ||
+ !localDoc._attachments[filename] ||
+ localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;
+}
+
+function getDocAttachments(db, doc) {
+ var filenames = Object.keys(doc._attachments);
+ return Promise.all(filenames.map(function (filename) {
+ return db.getAttachment(doc._id, filename, {rev: doc._rev});
+ }));
+}
+
+function getDocAttachmentsFromTargetOrSource(target, src, doc) {
+ var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);
+ var filenames = Object.keys(doc._attachments);
+
+ if (!doCheckForLocalAttachments) {
+ return getDocAttachments(src, doc);
+ }
+
+ return target.get(doc._id).then(function (localDoc) {
+ return Promise.all(filenames.map(function (filename) {
+ if (fileHasChanged(localDoc, doc, filename)) {
+ return src.getAttachment(doc._id, filename);
+ }
+
+ return target.getAttachment(localDoc._id, filename);
+ }));
+ }).catch(function (error) {
+ /* istanbul ignore if */
+ if (error.status !== 404) {
+ throw error;
+ }
+
+ return getDocAttachments(src, doc);
+ });
+}
+
+function createBulkGetOpts(diffs) {
+ var requests = [];
+ Object.keys(diffs).forEach(function (id) {
+ var missingRevs = diffs[id].missing;
+ missingRevs.forEach(function (missingRev) {
+ requests.push({
+ id: id,
+ rev: missingRev
+ });
+ });
+ });
+
+ return {
+ docs: requests,
+ revs: true,
+ latest: true
+ };
+}
+
+//
+// Fetch all the documents from the src as described in the "diffs",
+// which is a mapping of docs IDs to revisions. If the state ever
+// changes to "cancelled", then the returned promise will be rejected.
+// Else it will be resolved with a list of fetched documents.
+//
+function getDocs(src, target, diffs, state) {
+ diffs = clone$1(diffs); // we do not need to modify this
+
+ var resultDocs = [],
+ ok = true;
+
+ function getAllDocs() {
+
+ var bulkGetOpts = createBulkGetOpts(diffs);
+
+ if (!bulkGetOpts.docs.length) { // optimization: skip empty requests
+ return;
+ }
+
+ return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {
+ /* istanbul ignore if */
+ if (state.cancelled) {
+ throw new Error('cancelled');
+ }
+ return Promise.all(bulkGetResponse.results.map(function (bulkGetInfo) {
+ return Promise.all(bulkGetInfo.docs.map(function (doc) {
+ var remoteDoc = doc.ok;
+
+ if (doc.error) {
+ // when AUTO_COMPACTION is set, docs can be returned which look
+ // like this: {"missing":"1-7c3ac256b693c462af8442f992b83696"}
+ ok = false;
+ }
+
+ if (!remoteDoc || !remoteDoc._attachments) {
+ return remoteDoc;
+ }
+
+ return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)
+ .then(function (attachments) {
+ var filenames = Object.keys(remoteDoc._attachments);
+ attachments
+ .forEach(function (attachment, i) {
+ var att = remoteDoc._attachments[filenames[i]];
+ delete att.stub;
+ delete att.length;
+ att.data = attachment;
+ });
+
+ return remoteDoc;
+ });
+ }));
+ }))
+
+ .then(function (results) {
+ resultDocs = resultDocs.concat(flatten$1(results).filter(Boolean));
+ });
+ });
+ }
+
+ function returnResult() {
+ return { ok:ok, docs:resultDocs };
+ }
+
+ return Promise.resolve()
+ .then(getAllDocs)
+ .then(returnResult);
+}
+
+var STARTING_BACK_OFF = 0;
+
+function backOff(opts, returnValue, error, callback) {
+ if (opts.retry === false) {
+ returnValue.emit('error', error);
+ returnValue.removeAllListeners();
+ return;
+ }
+ /* istanbul ignore if */
+ if (typeof opts.back_off_function !== 'function') {
+ opts.back_off_function = defaultBackOff;
+ }
+ returnValue.emit('requestError', error);
+ if (returnValue.state === 'active' || returnValue.state === 'pending') {
+ returnValue.emit('paused', error);
+ returnValue.state = 'stopped';
+ var backOffSet = function backoffTimeSet() {
+ opts.current_back_off = STARTING_BACK_OFF;
+ };
+ var removeBackOffSetter = function removeBackOffTimeSet() {
+ returnValue.removeListener('active', backOffSet);
+ };
+ returnValue.once('paused', removeBackOffSetter);
+ returnValue.once('active', backOffSet);
+ }
+
+ opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;
+ opts.current_back_off = opts.back_off_function(opts.current_back_off);
+ setTimeout(callback, opts.current_back_off);
+}
+
+function replicate(src, target, opts, returnValue, result) {
+ var batches = []; // list of batches to be processed
+ var currentBatch; // the batch currently being processed
+ var pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ }; // next batch, not yet ready to be processed
+ var writingCheckpoint = false; // true while checkpoint is being written
+ var changesCompleted = false; // true when all changes received
+ var replicationCompleted = false; // true when replication has completed
+ // initial_last_seq is the state of the source db before
+ // replication started, and it is _not_ updated during
+ // replication or used anywhere else, as opposed to last_seq
+ var initial_last_seq = 0;
+ var last_seq = 0;
+ var continuous = opts.continuous || opts.live || false;
+ var batch_size = opts.batch_size || 100;
+ var batches_limit = opts.batches_limit || 10;
+ var style = opts.style || 'all_docs';
+ var changesPending = false; // true while src.changes is running
+ var doc_ids = opts.doc_ids;
+ var selector = opts.selector;
+ var repId;
+ var checkpointer;
+ var changedDocs = [];
+ // Like couchdb, every replication gets a unique session id
+ var session = uuid();
+ var taskId;
+
+ result = result || {
+ ok: true,
+ start_time: new Date().toISOString(),
+ docs_read: 0,
+ docs_written: 0,
+ doc_write_failures: 0,
+ errors: []
+ };
+
+ var changesOpts = {};
+ returnValue.ready(src, target);
+
+ function initCheckpointer() {
+ if (checkpointer) {
+ return Promise.resolve();
+ }
+ return generateReplicationId(src, target, opts).then(function (res) {
+ repId = res;
+
+ var checkpointOpts = {};
+ if (opts.checkpoint === false) {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'source') {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'target') {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };
+ } else {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };
+ }
+
+ checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);
+ });
+ }
+
+ function writeDocs() {
+ changedDocs = [];
+
+ if (currentBatch.docs.length === 0) {
+ return;
+ }
+ var docs = currentBatch.docs;
+ var bulkOpts = {timeout: opts.timeout};
+ return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+
+ // `res` doesn't include full documents (which live in `docs`), so we create a map of
+ // (id -> error), and check for errors while iterating over `docs`
+ var errorsById = Object.create(null);
+ res.forEach(function (res) {
+ if (res.error) {
+ errorsById[res.id] = res;
+ }
+ });
+
+ var errorsNo = Object.keys(errorsById).length;
+ result.doc_write_failures += errorsNo;
+ result.docs_written += docs.length - errorsNo;
+
+ docs.forEach(function (doc) {
+ var error = errorsById[doc._id];
+ if (error) {
+ result.errors.push(error);
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (error.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('denied', clone$1(error));
+ } else {
+ throw error;
+ }
+ } else {
+ changedDocs.push(doc);
+ }
+ });
+
+ }, function (err) {
+ result.doc_write_failures += docs.length;
+ throw err;
+ });
+ }
+
+ function finishBatch() {
+ if (currentBatch.error) {
+ throw new Error('There was a problem getting docs.');
+ }
+ result.last_seq = last_seq = currentBatch.seq;
+ var outResult = clone$1(result);
+ if (changedDocs.length) {
+ outResult.docs = changedDocs;
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof currentBatch.pending === 'number') {
+ outResult.pending = currentBatch.pending;
+ delete currentBatch.pending;
+ }
+ returnValue.emit('change', outResult);
+ }
+ writingCheckpoint = true;
+
+ src.info().then(function (info) {
+ var task = src.activeTasks.get(taskId);
+ if (!currentBatch || !task) {
+ return;
+ }
+
+ var completed = task.completed_items || 0;
+ var total_items = parseInt(info.update_seq, 10) - parseInt(initial_last_seq, 10);
+ src.activeTasks.update(taskId, {
+ completed_items: completed + currentBatch.changes.length,
+ total_items
+ });
+ });
+
+ return checkpointer.writeCheckpoint(currentBatch.seq,
+ session).then(function () {
+ returnValue.emit('checkpoint', { 'checkpoint': currentBatch.seq });
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ currentBatch = undefined;
+ getChanges();
+ }).catch(function (err) {
+ onCheckpointError(err);
+ throw err;
+ });
+ }
+
+ function getDiffs() {
+ var diff = {};
+ currentBatch.changes.forEach(function (change) {
+ returnValue.emit('checkpoint', { 'revs_diff': change });
+ // Couchbase Sync Gateway emits these, but we can ignore them
+ /* istanbul ignore if */
+ if (change.id === "_user/") {
+ return;
+ }
+ diff[change.id] = change.changes.map(function (x) {
+ return x.rev;
+ });
+ });
+ return target.revsDiff(diff).then(function (diffs) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ // currentBatch.diffs elements are deleted as the documents are written
+ currentBatch.diffs = diffs;
+ });
+ }
+
+ function getBatchDocs() {
+ return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {
+ currentBatch.error = !got.ok;
+ got.docs.forEach(function (doc) {
+ delete currentBatch.diffs[doc._id];
+ result.docs_read++;
+ currentBatch.docs.push(doc);
+ });
+ });
+ }
+
+ function startNextBatch() {
+ if (returnValue.cancelled || currentBatch) {
+ return;
+ }
+ if (batches.length === 0) {
+ processPendingBatch(true);
+ return;
+ }
+ currentBatch = batches.shift();
+ returnValue.emit('checkpoint', { 'start_next_batch': currentBatch.seq });
+ getDiffs()
+ .then(getBatchDocs)
+ .then(writeDocs)
+ .then(finishBatch)
+ .then(startNextBatch)
+ .catch(function (err) {
+ abortReplication('batch processing terminated with error', err);
+ });
+ }
+
+
+ function processPendingBatch(immediate) {
+ if (pendingBatch.changes.length === 0) {
+ if (batches.length === 0 && !currentBatch) {
+ if ((continuous && changesOpts.live) || changesCompleted) {
+ returnValue.state = 'pending';
+ returnValue.emit('paused');
+ }
+ if (changesCompleted) {
+ completeReplication();
+ }
+ }
+ return;
+ }
+ if (
+ immediate ||
+ changesCompleted ||
+ pendingBatch.changes.length >= batch_size
+ ) {
+ batches.push(pendingBatch);
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ if (returnValue.state === 'pending' || returnValue.state === 'stopped') {
+ returnValue.state = 'active';
+ returnValue.emit('active');
+ }
+ startNextBatch();
+ }
+ }
+
+
+ function abortReplication(reason, err) {
+ if (replicationCompleted) {
+ return;
+ }
+ if (!err.message) {
+ err.message = reason;
+ }
+ result.ok = false;
+ result.status = 'aborting';
+ batches = [];
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ completeReplication(err);
+ }
+
+
+ function completeReplication(fatalError) {
+ if (replicationCompleted) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ result.status = 'cancelled';
+ if (writingCheckpoint) {
+ return;
+ }
+ }
+ result.status = result.status || 'complete';
+ result.end_time = new Date().toISOString();
+ result.last_seq = last_seq;
+ replicationCompleted = true;
+
+ src.activeTasks.remove(taskId, fatalError);
+
+ if (fatalError) {
+ // need to extend the error because Firefox considers ".result" read-only
+ fatalError = createError$2(fatalError);
+ fatalError.result = result;
+
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (fatalError.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('error', fatalError);
+ returnValue.removeAllListeners();
+ } else {
+ backOff(opts, returnValue, fatalError, function () {
+ replicate(src, target, opts, returnValue);
+ });
+ }
+ } else {
+ returnValue.emit('complete', result);
+ returnValue.removeAllListeners();
+ }
+ }
+
+ function onChange(change, pending, lastSeq) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof pending === 'number') {
+ pendingBatch.pending = pending;
+ }
+
+ var filter = filterChange(opts)(change);
+ if (!filter) {
+ // update processed items count by 1
+ var task = src.activeTasks.get(taskId);
+ if (task) {
+ // we can assume that task exists here? shouldn't be deleted by here.
+ var completed = task.completed_items || 0;
+ src.activeTasks.update(taskId, {completed_items: ++completed});
+ }
+ return;
+ }
+ pendingBatch.seq = change.seq || lastSeq;
+ pendingBatch.changes.push(change);
+ returnValue.emit('checkpoint', { 'pending_batch': pendingBatch.seq });
+ nextTick$9(function () {
+ processPendingBatch(batches.length === 0 && changesOpts.live);
+ });
+ }
+
+
+ function onChangesComplete(changes) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+
+ // if no results were returned then we're done,
+ // else fetch more
+ if (changes.results.length > 0) {
+ changesOpts.since = changes.results[changes.results.length - 1].seq;
+ getChanges();
+ processPendingBatch(true);
+ } else {
+
+ var complete = function () {
+ if (continuous) {
+ changesOpts.live = true;
+ getChanges();
+ } else {
+ changesCompleted = true;
+ }
+ processPendingBatch(true);
+ };
+
+ // update the checkpoint so we start from the right seq next time
+ if (!currentBatch && changes.results.length === 0) {
+ writingCheckpoint = true;
+ checkpointer.writeCheckpoint(changes.last_seq,
+ session).then(function () {
+ writingCheckpoint = false;
+ result.last_seq = last_seq = changes.last_seq;
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ } else {
+ complete();
+ }
+ })
+ .catch(onCheckpointError);
+ } else {
+ complete();
+ }
+ }
+ }
+
+
+ function onChangesError(err) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ abortReplication('changes rejected', err);
+ }
+
+
+ function getChanges() {
+ if (!(
+ !changesPending &&
+ !changesCompleted &&
+ batches.length < batches_limit
+ )) {
+ return;
+ }
+ changesPending = true;
+ function abortChanges() {
+ changes.cancel();
+ }
+ function removeListener() {
+ returnValue.removeListener('cancel', abortChanges);
+ }
+
+ if (returnValue._changes) { // remove old changes() and listeners
+ returnValue.removeListener('cancel', returnValue._abortChanges);
+ returnValue._changes.cancel();
+ }
+ returnValue.once('cancel', abortChanges);
+
+ var changes = src.changes(changesOpts)
+ .on('change', onChange);
+ changes.then(removeListener, removeListener);
+ changes.then(onChangesComplete)
+ .catch(onChangesError);
+
+ if (opts.retry) {
+ // save for later so we can cancel if necessary
+ returnValue._changes = changes;
+ returnValue._abortChanges = abortChanges;
+ }
+ }
+
+ function createTask(checkpoint) {
+ return src.info().then(function (info) {
+ var total_items = typeof opts.since === 'undefined' ?
+ parseInt(info.update_seq, 10) - parseInt(checkpoint, 10) :
+ parseInt(info.update_seq, 10);
+
+ taskId = src.activeTasks.add({
+ name: `${continuous ? 'continuous ' : ''}replication from ${info.db_name}` ,
+ total_items,
+ });
+
+ return checkpoint;
+ });
+ }
+
+ function startChanges() {
+ initCheckpointer().then(function () {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ return checkpointer.getCheckpoint().then(createTask).then(function (checkpoint) {
+ last_seq = checkpoint;
+ initial_last_seq = checkpoint;
+ changesOpts = {
+ since: last_seq,
+ limit: batch_size,
+ batch_size: batch_size,
+ style: style,
+ doc_ids: doc_ids,
+ selector: selector,
+ return_docs: true // required so we know when we're done
+ };
+ if (opts.filter) {
+ if (typeof opts.filter !== 'string') {
+ // required for the client-side filter in onChange
+ changesOpts.include_docs = true;
+ } else { // ddoc filter
+ changesOpts.filter = opts.filter;
+ }
+ }
+ if ('heartbeat' in opts) {
+ changesOpts.heartbeat = opts.heartbeat;
+ }
+ if ('timeout' in opts) {
+ changesOpts.timeout = opts.timeout;
+ }
+ if (opts.query_params) {
+ changesOpts.query_params = opts.query_params;
+ }
+ if (opts.view) {
+ changesOpts.view = opts.view;
+ }
+ getChanges();
+ });
+ }).catch(function (err) {
+ abortReplication('getCheckpoint rejected with ', err);
+ });
+ }
+
+ /* istanbul ignore next */
+ function onCheckpointError(err) {
+ writingCheckpoint = false;
+ abortReplication('writeCheckpoint completed with error', err);
+ }
+
+ /* istanbul ignore if */
+ if (returnValue.cancelled) { // cancelled immediately
+ completeReplication();
+ return;
+ }
+
+ if (!returnValue._addedListeners) {
+ returnValue.once('cancel', completeReplication);
+
+ if (typeof opts.complete === 'function') {
+ returnValue.once('error', opts.complete);
+ returnValue.once('complete', function (result) {
+ opts.complete(null, result);
+ });
+ }
+ returnValue._addedListeners = true;
+ }
+
+ if (typeof opts.since === 'undefined') {
+ startChanges();
+ } else {
+ initCheckpointer().then(function () {
+ writingCheckpoint = true;
+ return checkpointer.writeCheckpoint(opts.since, session);
+ }).then(function () {
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ last_seq = opts.since;
+ startChanges();
+ }).catch(onCheckpointError);
+ }
+}
+
+// We create a basic promise so the caller can cancel the replication possibly
+// before we have actually started listening to changes etc
+class Replication extends EE {
+ constructor() {
+ super();
+ this.cancelled = false;
+ this.state = 'pending';
+ const promise = new Promise((fulfill, reject) => {
+ this.once('complete', fulfill);
+ this.once('error', reject);
+ });
+ this.then = function (resolve, reject) {
+ return promise.then(resolve, reject);
+ };
+ this.catch = function (reject) {
+ return promise.catch(reject);
+ };
+ // As we allow error handling via "error" event as well,
+ // put a stub in here so that rejecting never throws UnhandledError.
+ this.catch(function () {});
+ }
+
+ cancel() {
+ this.cancelled = true;
+ this.state = 'cancelled';
+ this.emit('cancel');
+ }
+
+ ready(src, target) {
+ if (this._readyCalled) {
+ return;
+ }
+ this._readyCalled = true;
+
+ const onDestroy = () => {
+ this.cancel();
+ };
+ src.once('destroyed', onDestroy);
+ target.once('destroyed', onDestroy);
+ function cleanup() {
+ src.removeListener('destroyed', onDestroy);
+ target.removeListener('destroyed', onDestroy);
+ }
+ this.once('complete', cleanup);
+ this.once('error', cleanup);
+ }
+}
+
+function toPouch(db, opts) {
+ var PouchConstructor = opts.PouchConstructor;
+ if (typeof db === 'string') {
+ return new PouchConstructor(db, opts);
+ } else {
+ return db;
+ }
+}
+
+function replicateWrapper(src, target, opts, callback) {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+
+ if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {
+ throw createError$2(BAD_REQUEST,
+ "`doc_ids` filter parameter is not a list.");
+ }
+
+ opts.complete = callback;
+ opts = clone$1(opts);
+ opts.continuous = opts.continuous || opts.live;
+ opts.retry = ('retry' in opts) ? opts.retry : false;
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ var replicateRet = new Replication(opts);
+ var srcPouch = toPouch(src, opts);
+ var targetPouch = toPouch(target, opts);
+ replicate(srcPouch, targetPouch, opts, replicateRet);
+ return replicateRet;
+}
+
+function sync(src, target, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+ opts = clone$1(opts);
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ src = toPouch(src, opts);
+ target = toPouch(target, opts);
+ return new Sync(src, target, opts, callback);
+}
+
+class Sync extends EE {
+ constructor(src, target, opts, callback) {
+ super();
+ this.canceled = false;
+
+ const optsPush = opts.push ? Object.assign({}, opts, opts.push) : opts;
+ const optsPull = opts.pull ? Object.assign({}, opts, opts.pull) : opts;
+
+ this.push = replicateWrapper(src, target, optsPush);
+ this.pull = replicateWrapper(target, src, optsPull);
+
+ this.pushPaused = true;
+ this.pullPaused = true;
+
+ const pullChange = (change) => {
+ this.emit('change', {
+ direction: 'pull',
+ change: change
+ });
+ };
+ const pushChange = (change) => {
+ this.emit('change', {
+ direction: 'push',
+ change: change
+ });
+ };
+ const pushDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'push',
+ doc: doc
+ });
+ };
+ const pullDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'pull',
+ doc: doc
+ });
+ };
+ const pushPaused = () => {
+ this.pushPaused = true;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('paused');
+ }
+ };
+ const pullPaused = () => {
+ this.pullPaused = true;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('paused');
+ }
+ };
+ const pushActive = () => {
+ this.pushPaused = false;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('active', {
+ direction: 'push'
+ });
+ }
+ };
+ const pullActive = () => {
+ this.pullPaused = false;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('active', {
+ direction: 'pull'
+ });
+ }
+ };
+
+ let removed = {};
+
+ const removeAll = (type) => { // type is 'push' or 'pull'
+ return (event, func) => {
+ const isChange = event === 'change' &&
+ (func === pullChange || func === pushChange);
+ const isDenied = event === 'denied' &&
+ (func === pullDenied || func === pushDenied);
+ const isPaused = event === 'paused' &&
+ (func === pullPaused || func === pushPaused);
+ const isActive = event === 'active' &&
+ (func === pullActive || func === pushActive);
+
+ if (isChange || isDenied || isPaused || isActive) {
+ if (!(event in removed)) {
+ removed[event] = {};
+ }
+ removed[event][type] = true;
+ if (Object.keys(removed[event]).length === 2) {
+ // both push and pull have asked to be removed
+ this.removeAllListeners(event);
+ }
+ }
+ };
+ };
+
+ if (opts.live) {
+ this.push.on('complete', this.pull.cancel.bind(this.pull));
+ this.pull.on('complete', this.push.cancel.bind(this.push));
+ }
+
+ function addOneListener(ee, event, listener) {
+ if (ee.listeners(event).indexOf(listener) == -1) {
+ ee.on(event, listener);
+ }
+ }
+
+ this.on('newListener', function (event) {
+ if (event === 'change') {
+ addOneListener(this.pull, 'change', pullChange);
+ addOneListener(this.push, 'change', pushChange);
+ } else if (event === 'denied') {
+ addOneListener(this.pull, 'denied', pullDenied);
+ addOneListener(this.push, 'denied', pushDenied);
+ } else if (event === 'active') {
+ addOneListener(this.pull, 'active', pullActive);
+ addOneListener(this.push, 'active', pushActive);
+ } else if (event === 'paused') {
+ addOneListener(this.pull, 'paused', pullPaused);
+ addOneListener(this.push, 'paused', pushPaused);
+ }
+ });
+
+ this.on('removeListener', function (event) {
+ if (event === 'change') {
+ this.pull.removeListener('change', pullChange);
+ this.push.removeListener('change', pushChange);
+ } else if (event === 'denied') {
+ this.pull.removeListener('denied', pullDenied);
+ this.push.removeListener('denied', pushDenied);
+ } else if (event === 'active') {
+ this.pull.removeListener('active', pullActive);
+ this.push.removeListener('active', pushActive);
+ } else if (event === 'paused') {
+ this.pull.removeListener('paused', pullPaused);
+ this.push.removeListener('paused', pushPaused);
+ }
+ });
+
+ this.pull.on('removeListener', removeAll('pull'));
+ this.push.on('removeListener', removeAll('push'));
+
+ const promise = Promise.all([
+ this.push,
+ this.pull
+ ]).then((resp) => {
+ const out = {
+ push: resp[0],
+ pull: resp[1]
+ };
+ this.emit('complete', out);
+ if (callback) {
+ callback(null, out);
+ }
+ this.removeAllListeners();
+ return out;
+ }, (err) => {
+ this.cancel();
+ if (callback) {
+ // if there's a callback, then the callback can receive
+ // the error event
+ callback(err);
+ } else {
+ // if there's no callback, then we're safe to emit an error
+ // event, which would otherwise throw an unhandled error
+ // due to 'error' being a special event in EventEmitters
+ this.emit('error', err);
+ }
+ this.removeAllListeners();
+ if (callback) {
+ // no sense throwing if we're already emitting an 'error' event
+ throw err;
+ }
+ });
+
+ this.then = function (success, err) {
+ return promise.then(success, err);
+ };
+
+ this.catch = function (err) {
+ return promise.catch(err);
+ };
+ }
+
+ cancel() {
+ if (!this.canceled) {
+ this.canceled = true;
+ this.push.cancel();
+ this.pull.cancel();
+ }
+ }
+}
+
+function replication(PouchDB) {
+ PouchDB.replicate = replicateWrapper;
+ PouchDB.sync = sync;
+
+ Object.defineProperty(PouchDB.prototype, 'replicate', {
+ get: function () {
+ var self = this;
+ if (typeof this.replicateMethods === 'undefined') {
+ this.replicateMethods = {
+ from: function (other, opts, callback) {
+ return self.constructor.replicate(other, self, opts, callback);
+ },
+ to: function (other, opts, callback) {
+ return self.constructor.replicate(self, other, opts, callback);
+ }
+ };
+ }
+ return this.replicateMethods;
+ }
+ });
+
+ PouchDB.prototype.sync = function (dbName, opts, callback) {
+ return this.constructor.sync(this, dbName, opts, callback);
+ };
+}
+
+PouchDB$1.plugin(LevelPouch)
+ .plugin(HttpPouch)
+ .plugin(mapreduce)
+ .plugin(replication);
+
+//
+
+var utils = {
+ parseUri: parseUri,
+ uuid: uuid$1,
+ rev: rev$1,
+ Promise: Promise,
+ binaryStringToBlobOrBuffer: binStringToBluffer$1,
+ clone: clone$4,
+ createError: createError$3,
+ generateErrorFromResponse: generateErrorFromResponse$1,
+ generateReplicationId: generateReplicationId$1,
+ parseDdocFunctionName: parseDesignDocFunctionName$1,
+ normalizeDdocFunctionName: normalizeDesignDocFunctionName$1,
+ once: once$1,
+ merge: merge$1,
+ winningRev: winningRev$1,
+ upsert: upsert$1,
+ toPromise: toPromise$1,
+ checkpointer: Checkpointer$1,
+ defaultBackOff: defaultBackOff$1,
+ assign: Object.assign,
+ mapReduceUtils: {
+ uniq: uniq$2,
+ sequentialize: sequentialize$1,
+ fin: fin$1,
+ callbackify: callbackify$2,
+ promisedCallback: promisedCallback$2
+ }
+};
+
+var errors = {
+ UNAUTHORIZED: UNAUTHORIZED,
+ MISSING_BULK_DOCS: MISSING_BULK_DOCS$1,
+ MISSING_DOC: MISSING_DOC$1,
+ REV_CONFLICT: REV_CONFLICT$1,
+ INVALID_ID: INVALID_ID$1,
+ MISSING_ID: MISSING_ID$1,
+ RESERVED_ID: RESERVED_ID$1,
+ NOT_OPEN: NOT_OPEN$1,
+ UNKNOWN_ERROR: UNKNOWN_ERROR$1,
+ BAD_ARG: BAD_ARG$1,
+ INVALID_REQUEST: INVALID_REQUEST,
+ QUERY_PARSE_ERROR: QUERY_PARSE_ERROR$1,
+ DOC_VALIDATION: DOC_VALIDATION$1,
+ BAD_REQUEST: BAD_REQUEST$1,
+ NOT_AN_OBJECT: NOT_AN_OBJECT$1,
+ DB_MISSING: DB_MISSING,
+ WSQ_ERROR: WSQ_ERROR,
+ LDB_ERROR: LDB_ERROR,
+ FORBIDDEN: FORBIDDEN,
+ INVALID_REV: INVALID_REV$1,
+ FILE_EXISTS: FILE_EXISTS,
+ MISSING_STUB: MISSING_STUB$1,
+ IDB_ERROR: IDB_ERROR,
+ INVALID_URL: INVALID_URL
+};
+
+// we restucture the supplied JSON considerably, because the official
+// Mango API is very particular about a lot of this stuff, but we like
+// to be liberal with what we accept in order to prevent mental
+// breakdowns in our users
+function massageCreateIndexRequest(requestDef) {
+ requestDef = clone$1(requestDef);
+
+ if (!requestDef.index) {
+ requestDef.index = {};
+ }
+
+ ['type', 'name', 'ddoc'].forEach(function (key) {
+ if (requestDef.index[key]) {
+ requestDef[key] = requestDef.index[key];
+ delete requestDef.index[key];
+ }
+ });
+
+ if (requestDef.fields) {
+ requestDef.index.fields = requestDef.fields;
+ delete requestDef.fields;
+ }
+
+ if (!requestDef.type) {
+ requestDef.type = 'json';
+ }
+ return requestDef;
+}
+
+// throws if the user is using the wrong query field value type
+function checkFieldValueType(name, value, isHttp) {
+ var message = '';
+ var received = value;
+ var addReceived = true;
+ if ([ '$in', '$nin', '$or', '$and', '$mod', '$nor', '$all' ].indexOf(name) !== -1) {
+ if (!Array.isArray(value)) {
+ message = 'Query operator ' + name + ' must be an array.';
+
+ }
+ }
+
+ if ([ '$not', '$elemMatch', '$allMatch' ].indexOf(name) !== -1) {
+ if (!(!Array.isArray(value) && typeof value === 'object' && value !== null)) {
+ message = 'Query operator ' + name + ' must be an object.';
+ }
+ }
+
+ if (name === '$mod' && Array.isArray(value)) {
+ if (value.length !== 2) {
+ message = 'Query operator $mod must be in the format [divisor, remainder], ' +
+ 'where divisor and remainder are both integers.';
+ } else {
+ var divisor = value[0];
+ var mod = value[1];
+ if (divisor === 0) {
+ message = 'Query operator $mod\'s divisor cannot be 0, cannot divide by zero.';
+ addReceived = false;
+ }
+ if (typeof divisor !== 'number' || parseInt(divisor, 10) !== divisor) {
+ message = 'Query operator $mod\'s divisor is not an integer.';
+ received = divisor;
+ }
+ if (parseInt(mod, 10) !== mod) {
+ message = 'Query operator $mod\'s remainder is not an integer.';
+ received = mod;
+ }
+ }
+ }
+ if (name === '$exists') {
+ if (typeof value !== 'boolean') {
+ message = 'Query operator $exists must be a boolean.';
+ }
+ }
+
+ if (name === '$type') {
+ var allowed = [ 'null', 'boolean', 'number', 'string', 'array', 'object' ];
+ var allowedStr = '"' + allowed.slice(0, allowed.length - 1).join('", "') + '", or "' + allowed[allowed.length - 1] + '"';
+ if (typeof value !== 'string') {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ } else if (allowed.indexOf(value) == -1) {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ }
+ }
+
+ if (name === '$size') {
+ if (parseInt(value, 10) !== value) {
+ message = 'Query operator $size must be a integer.';
+ }
+ }
+
+ if (name === '$regex') {
+ if (typeof value !== 'string') {
+ if (isHttp) {
+ message = 'Query operator $regex must be a string.';
+ } else if (!(value instanceof RegExp)) {
+ message = 'Query operator $regex must be a string or an instance ' +
+ 'of a javascript regular expression.';
+ }
+ }
+ }
+
+ if (message) {
+ if (addReceived) {
+
+ var type = received === null
+ ? ' '
+ : Array.isArray(received)
+ ? ' array'
+ : ' ' + typeof received;
+ var receivedStr = typeof received === 'object' && received !== null
+ ? JSON.stringify(received, null, '\t')
+ : received;
+
+ message += ' Received' + type + ': ' + receivedStr;
+ }
+ throw new Error(message);
+ }
+}
+
+
+var requireValidation = [ '$all', '$allMatch', '$and', '$elemMatch', '$exists', '$in', '$mod', '$nin', '$nor', '$not', '$or', '$regex', '$size', '$type' ];
+
+var arrayTypeComparisonOperators = [ '$in', '$nin', '$mod', '$all'];
+
+var equalityOperators = [ '$eq', '$gt', '$gte', '$lt', '$lte' ];
+
+// recursively walks down the a query selector validating any operators
+function validateSelector(input, isHttp) {
+ if (Array.isArray(input)) {
+ for (var entry of input) {
+ if (typeof entry === 'object' && value !== null) {
+ validateSelector(entry, isHttp);
+ }
+ }
+ } else {
+ var fields = Object.keys(input);
+
+ for (var i = 0; i < fields.length; i++) {
+ var key = fields[i];
+ var value = input[key];
+
+ if (requireValidation.indexOf(key) !== -1) {
+ checkFieldValueType(key, value, isHttp);
+ }
+ if (equalityOperators.indexOf(key) !== -1) {
+ // skip, explicit comparison operators can be anything
+ continue;
+ }
+ if (arrayTypeComparisonOperators.indexOf(key) !== -1) {
+ // skip, their values are already valid
+ continue;
+ }
+ if (typeof value === 'object' && value !== null) {
+ validateSelector(value, isHttp);
+ }
+ }
+ }
+}
+
+function dbFetch(db, path, opts, callback) {
+ var status, ok;
+ opts.headers = new Headers({'Content-type': 'application/json'});
+ db.fetch(path, opts).then(function (response) {
+ status = response.status;
+ ok = response.ok;
+ return response.json();
+ }).then(function (json) {
+ if (!ok) {
+ json.status = status;
+ var err = generateErrorFromResponse(json);
+ callback(err);
+ } else {
+ callback(null, json);
+ }
+ }).catch(callback);
+}
+
+function createIndex$1(db, requestDef, callback) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ dbFetch(db, '_index', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function find$1(db, requestDef, callback) {
+ validateSelector(requestDef.selector, true);
+ dbFetch(db, '_find', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function explain$1(db, requestDef, callback) {
+ dbFetch(db, '_explain', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function getIndexes$1(db, callback) {
+ dbFetch(db, '_index', {
+ method: 'GET'
+ }, callback);
+}
+
+function deleteIndex$1(db, indexDef, callback) {
+
+
+ var ddoc = indexDef.ddoc;
+ var type = indexDef.type || 'json';
+ var name = indexDef.name;
+
+ if (!ddoc) {
+ return callback(new Error('you must provide an index\'s ddoc'));
+ }
+
+ if (!name) {
+ return callback(new Error('you must provide an index\'s name'));
+ }
+
+ var url = '_index/' + [ddoc, type, name].map(encodeURIComponent).join('/');
+
+ dbFetch(db, url, {method: 'DELETE'}, callback);
+}
+
+function callbackify(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ promisedCallback(promise, cb);
+ return promise;
+ };
+}
+
+function promisedCallback(promise, callback) {
+ promise.then(function (res) {
+ nextTick$9(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick$9(function () {
+ callback(reason);
+ });
+ });
+ return promise;
+}
+
+var flatten = function (...args) {
+ var res = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ var subArr = args[i];
+ if (Array.isArray(subArr)) {
+ res = res.concat(flatten.apply(null, subArr));
+ } else {
+ res.push(subArr);
+ }
+ }
+ return res;
+};
+
+function mergeObjects(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res = Object.assign(res, arr[i]);
+ }
+ return res;
+}
+
+// Selects a list of fields defined in dot notation from one doc
+// and copies them to a new doc. Like underscore _.pick but supports nesting.
+function pick(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var parsedField = parseField(arr[i]);
+ var value = getFieldFromDoc(obj, parsedField);
+ if (typeof value !== 'undefined') {
+ setFieldInDoc(res, parsedField, value);
+ }
+ }
+ return res;
+}
+
+// e.g. ['a'], ['a', 'b'] is true, but ['b'], ['a', 'b'] is false
+function oneArrayIsSubArrayOfOther(left, right) {
+
+ for (var i = 0, len = Math.min(left.length, right.length); i < len; i++) {
+ if (left[i] !== right[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// e.g.['a', 'b', 'c'], ['a', 'b'] is false
+function oneArrayIsStrictSubArrayOfOther(left, right) {
+
+ if (left.length > right.length) {
+ return false;
+ }
+
+ return oneArrayIsSubArrayOfOther(left, right);
+}
+
+// same as above, but treat the left array as an unordered set
+// e.g. ['b', 'a'], ['a', 'b', 'c'] is true, but ['c'], ['a', 'b', 'c'] is false
+function oneSetIsSubArrayOfOther(left, right) {
+ left = left.slice();
+ for (var i = 0, len = right.length; i < len; i++) {
+ var field = right[i];
+ if (!left.length) {
+ break;
+ }
+ var leftIdx = left.indexOf(field);
+ if (leftIdx === -1) {
+ return false;
+ } else {
+ left.splice(leftIdx, 1);
+ }
+ }
+ return true;
+}
+
+function arrayToObject(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res[arr[i]] = true;
+ }
+ return res;
+}
+
+function max(arr, fun) {
+ var max = null;
+ var maxScore = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var element = arr[i];
+ var score = fun(element);
+ if (score > maxScore) {
+ maxScore = score;
+ max = element;
+ }
+ }
+ return max;
+}
+
+function arrayEquals(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+ for (var i = 0, len = arr1.length; i < len; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function uniq(arr) {
+ var obj = {};
+ for (var i = 0; i < arr.length; i++) {
+ obj['$' + arr[i]] = true;
+ }
+ return Object.keys(obj).map(function (key) {
+ return key.substring(1);
+ });
+}
+
+//
+// One thing about these mappers:
+//
+// Per the advice of John-David Dalton (http://youtu.be/NthmeLEhDDM),
+// what you want to do in this case is optimize for the smallest possible
+// function, since that's the thing that gets run over and over again.
+//
+// This code would be a lot simpler if all the if/elses were inside
+// the function, but it would also be a lot less performant.
+//
+
+
+function createDeepMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, iLen = fields.length; i < iLen; i++) {
+ var parsedField = parseField(fields[i]);
+ var value = doc;
+ for (var j = 0, jLen = parsedField.length; j < jLen; j++) {
+ var key = parsedField[j];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // don't emit
+ }
+ }
+ toEmit.push(value);
+ }
+ emit(toEmit);
+ };
+}
+
+function createDeepSingleMapper(field, emit, selector) {
+ var parsedField = parseField(field);
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // do nothing
+ }
+ }
+ emit(value);
+ };
+}
+
+function createShallowSingleMapper(field, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ emit(doc[field]);
+ };
+}
+
+function createShallowMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, len = fields.length; i < len; i++) {
+ toEmit.push(doc[fields[i]]);
+ }
+ emit(toEmit);
+ };
+}
+
+function checkShallow(fields) {
+ for (var i = 0, len = fields.length; i < len; i++) {
+ var field = fields[i];
+ if (field.indexOf('.') !== -1) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function createMapper(fields, emit, selector) {
+ var isShallow = checkShallow(fields);
+ var isSingle = fields.length === 1;
+
+ // notice we try to optimize for the most common case,
+ // i.e. single shallow indexes
+ if (isShallow) {
+ if (isSingle) {
+ return createShallowSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createShallowMultiMapper(fields, emit, selector);
+ }
+ } else { // deep
+ if (isSingle) {
+ return createDeepSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createDeepMultiMapper(fields, emit, selector);
+ }
+ }
+}
+
+function mapper(mapFunDef, emit) {
+ // mapFunDef is a list of fields
+
+ const fields = Object.keys(mapFunDef.fields);
+ const partialSelector = mapFunDef.partial_filter_selector;
+
+ return createMapper(fields, emit, partialSelector);
+}
+
+/* istanbul ignore next */
+function reducer(/*reduceFunDef*/) {
+ throw new Error('reduce not supported');
+}
+
+function ddocValidator(ddoc, viewName) {
+ var view = ddoc.views[viewName];
+ // This doesn't actually need to be here apparently, but
+ // I feel safer keeping it.
+ /* istanbul ignore if */
+ if (!view.map || !view.map.fields) {
+ throw new Error('ddoc ' + ddoc._id +' with view ' + viewName +
+ ' doesn\'t have map.fields defined. ' +
+ 'maybe it wasn\'t created by this plugin?');
+ }
+}
+
+var abstractMapper = createAbstractMapReduce(
+ /* localDocName */ 'indexes',
+ mapper,
+ reducer,
+ ddocValidator
+);
+
+function abstractMapper$1 (db) {
+ if (db._customFindAbstractMapper) {
+ return {
+ // Calls the _customFindAbstractMapper, but with a third argument:
+ // the standard findAbstractMapper query/viewCleanup.
+ // This allows the indexeddb adapter to support partial_filter_selector.
+ query: function addQueryFallback(signature, opts) {
+ var fallback = abstractMapper.query.bind(this);
+ return db._customFindAbstractMapper.query.call(this, signature, opts, fallback);
+ },
+ viewCleanup: function addViewCleanupFallback() {
+ var fallback = abstractMapper.viewCleanup.bind(this);
+ return db._customFindAbstractMapper.viewCleanup.call(this, fallback);
+ }
+ };
+ }
+ return abstractMapper;
+}
+
+// normalize the "sort" value
+function massageSort(sort) {
+ if (!Array.isArray(sort)) {
+ throw new Error('invalid sort json - should be an array');
+ }
+ return sort.map(function (sorting) {
+ if (typeof sorting === 'string') {
+ var obj = {};
+ obj[sorting] = 'asc';
+ return obj;
+ } else {
+ return sorting;
+ }
+ });
+}
+
+function massageUseIndex(useIndex) {
+ var cleanedUseIndex = [];
+ if (typeof useIndex === 'string') {
+ cleanedUseIndex.push(useIndex);
+ } else {
+ cleanedUseIndex = useIndex;
+ }
+
+ return cleanedUseIndex.map(function (name) {
+ return name.replace('_design/', '');
+ });
+}
+
+function massageIndexDef(indexDef) {
+ indexDef.fields = indexDef.fields.map(function (field) {
+ if (typeof field === 'string') {
+ var obj = {};
+ obj[field] = 'asc';
+ return obj;
+ }
+ return field;
+ });
+ if (indexDef.partial_filter_selector) {
+ indexDef.partial_filter_selector = massageSelector(
+ indexDef.partial_filter_selector
+ );
+ }
+ return indexDef;
+}
+
+function getKeyFromDoc(doc, index) {
+ var res = [];
+ for (var i = 0; i < index.def.fields.length; i++) {
+ var field = getKey(index.def.fields[i]);
+ res.push(getFieldFromDoc(doc, parseField(field)));
+ }
+ return res;
+}
+
+// have to do this manually because REASONS. I don't know why
+// CouchDB didn't implement inclusive_start
+function filterInclusiveStart(rows, targetValue, index) {
+ var indexFields = index.def.fields;
+ for (var i = 0, len = rows.length; i < len; i++) {
+ var row = rows[i];
+
+ // shave off any docs at the beginning that are <= the
+ // target value
+
+ var docKey = getKeyFromDoc(row.doc, index);
+ if (indexFields.length === 1) {
+ docKey = docKey[0]; // only one field, not multi-field
+ } else { // more than one field in index
+ // in the case where e.g. the user is searching {$gt: {a: 1}}
+ // but the index is [a, b], then we need to shorten the doc key
+ while (docKey.length > targetValue.length) {
+ docKey.pop();
+ }
+ }
+ //ABS as we just looking for values that don't match
+ if (Math.abs(collate(docKey, targetValue)) > 0) {
+ // no need to filter any further; we're past the key
+ break;
+ }
+ }
+ return i > 0 ? rows.slice(i) : rows;
+}
+
+function reverseOptions(opts) {
+ var newOpts = clone$1(opts);
+ delete newOpts.startkey;
+ delete newOpts.endkey;
+ delete newOpts.inclusive_start;
+ delete newOpts.inclusive_end;
+
+ if ('endkey' in opts) {
+ newOpts.startkey = opts.endkey;
+ }
+ if ('startkey' in opts) {
+ newOpts.endkey = opts.startkey;
+ }
+ if ('inclusive_start' in opts) {
+ newOpts.inclusive_end = opts.inclusive_start;
+ }
+ if ('inclusive_end' in opts) {
+ newOpts.inclusive_start = opts.inclusive_end;
+ }
+ return newOpts;
+}
+
+function validateIndex(index) {
+ var ascFields = index.fields.filter(function (field) {
+ return getValue(field) === 'asc';
+ });
+ if (ascFields.length !== 0 && ascFields.length !== index.fields.length) {
+ throw new Error('unsupported mixed sorting');
+ }
+}
+
+function validateSort(requestDef, index) {
+ if (index.defaultUsed && requestDef.sort) {
+ var noneIdSorts = requestDef.sort.filter(function (sortItem) {
+ return Object.keys(sortItem)[0] !== '_id';
+ }).map(function (sortItem) {
+ return Object.keys(sortItem)[0];
+ });
+
+ if (noneIdSorts.length > 0) {
+ throw new Error('Cannot sort on field(s) "' + noneIdSorts.join(',') +
+ '" when using the default index');
+ }
+ }
+
+ if (index.defaultUsed) {
+ return;
+ }
+}
+
+function validateFindRequest(requestDef) {
+ if (typeof requestDef.selector !== 'object') {
+ throw new Error('you must provide a selector when you find()');
+ }
+
+ /*var selectors = requestDef.selector['$and'] || [requestDef.selector];
+ for (var i = 0; i < selectors.length; i++) {
+ var selector = selectors[i];
+ var keys = Object.keys(selector);
+ if (keys.length === 0) {
+ throw new Error('invalid empty selector');
+ }
+ //var selection = selector[keys[0]];
+ /*if (Object.keys(selection).length !== 1) {
+ throw new Error('invalid selector: ' + JSON.stringify(selection) +
+ ' - it must have exactly one key/value');
+ }
+ }*/
+}
+
+// determine the maximum number of fields
+// we're going to need to query, e.g. if the user
+// has selection ['a'] and sorting ['a', 'b'], then we
+// need to use the longer of the two: ['a', 'b']
+function getUserFields(selector, sort) {
+ var selectorFields = Object.keys(selector);
+ var sortFields = sort? sort.map(getKey) : [];
+ var userFields;
+ if (selectorFields.length >= sortFields.length) {
+ userFields = selectorFields;
+ } else {
+ userFields = sortFields;
+ }
+
+ if (sortFields.length === 0) {
+ return {
+ fields: userFields
+ };
+ }
+
+ // sort according to the user's preferred sorting
+ userFields = userFields.sort(function (left, right) {
+ var leftIdx = sortFields.indexOf(left);
+ if (leftIdx === -1) {
+ leftIdx = Number.MAX_VALUE;
+ }
+ var rightIdx = sortFields.indexOf(right);
+ if (rightIdx === -1) {
+ rightIdx = Number.MAX_VALUE;
+ }
+ return leftIdx < rightIdx ? -1 : leftIdx > rightIdx ? 1 : 0;
+ });
+
+ return {
+ fields: userFields,
+ sortOrder: sort.map(getKey)
+ };
+}
+
+async function createIndex(db, requestDef) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ var originalIndexDef = clone$1(requestDef.index);
+ requestDef.index = massageIndexDef(requestDef.index);
+
+ validateIndex(requestDef.index);
+
+ // calculating md5 is expensive - memoize and only
+ // run if required
+ var md5 = await stringMd5(JSON.stringify(requestDef));
+
+ var viewName = requestDef.name || ('idx-' + md5);
+
+ var ddocName = requestDef.ddoc || ('idx-' + md5);
+ var ddocId = '_design/' + ddocName;
+
+ var hasInvalidLanguage = false;
+ var viewExists = false;
+
+ function updateDdoc(doc) {
+ if (doc._rev && doc.language !== 'query') {
+ hasInvalidLanguage = true;
+ }
+ doc.language = 'query';
+ doc.views = doc.views || {};
+
+ viewExists = !!doc.views[viewName];
+
+ if (viewExists) {
+ return false;
+ }
+
+ doc.views[viewName] = {
+ map: {
+ fields: mergeObjects(requestDef.index.fields),
+ partial_filter_selector: requestDef.index.partial_filter_selector
+ },
+ reduce: '_count',
+ options: {
+ def: originalIndexDef
+ }
+ };
+
+ return doc;
+ }
+
+ db.constructor.emit('debug', ['find', 'creating index', ddocId]);
+
+ return upsert(db, ddocId, updateDdoc).then(function () {
+ if (hasInvalidLanguage) {
+ throw new Error('invalid language for ddoc with id "' +
+ ddocId +
+ '" (should be "query")');
+ }
+ }).then(function () {
+ // kick off a build
+ // TODO: abstract-pouchdb-mapreduce should support auto-updating
+ // TODO: should also use update_after, but pouchdb/pouchdb#3415 blocks me
+ var signature = ddocName + '/' + viewName;
+ return abstractMapper$1(db).query.call(db, signature, {
+ limit: 0,
+ reduce: false
+ }).then(function () {
+ return {
+ id: ddocId,
+ name: viewName,
+ result: viewExists ? 'exists' : 'created'
+ };
+ });
+ });
+}
+
+function getIndexes(db) {
+ // just search through all the design docs and filter in-memory.
+ // hopefully there aren't that many ddocs.
+ return db.allDocs({
+ startkey: '_design/',
+ endkey: '_design/\uffff',
+ include_docs: true
+ }).then(function (allDocsRes) {
+ var res = {
+ indexes: [{
+ ddoc: null,
+ name: '_all_docs',
+ type: 'special',
+ def: {
+ fields: [{_id: 'asc'}]
+ }
+ }]
+ };
+
+ res.indexes = flatten(res.indexes, allDocsRes.rows.filter(function (row) {
+ return row.doc.language === 'query';
+ }).map(function (row) {
+ var viewNames = row.doc.views !== undefined ? Object.keys(row.doc.views) : [];
+
+ return viewNames.map(function (viewName) {
+ var view = row.doc.views[viewName];
+ return {
+ ddoc: row.id,
+ name: viewName,
+ type: 'json',
+ def: massageIndexDef(view.options.def)
+ };
+ });
+ }));
+
+ // these are sorted by view name for some reason
+ res.indexes.sort(function (left, right) {
+ return compare$1(left.name, right.name);
+ });
+ res.total_rows = res.indexes.length;
+ return res;
+ });
+}
+
+// couchdb lowest collation value
+var COLLATE_LO = null;
+
+// couchdb highest collation value (TODO: well not really, but close enough amirite)
+var COLLATE_HI = {"\uffff": {}};
+
+const SHORT_CIRCUIT_QUERY = {
+ queryOpts: { limit: 0, startkey: COLLATE_HI, endkey: COLLATE_LO },
+ inMemoryFields: [],
+};
+
+// couchdb second-lowest collation value
+
+function checkFieldInIndex(index, field) {
+ var indexFields = index.def.fields.map(getKey);
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (field === indexField) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// so when you do e.g. $eq/$eq, we can do it entirely in the database.
+// but when you do e.g. $gt/$eq, the first part can be done
+// in the database, but the second part has to be done in-memory,
+// because $gt has forced us to lose precision.
+// so that's what this determines
+function userOperatorLosesPrecision(selector, field) {
+ var matcher = selector[field];
+ var userOperator = getKey(matcher);
+
+ return userOperator !== '$eq';
+}
+
+// sort the user fields by their position in the index,
+// if they're in the index
+function sortFieldsByIndex(userFields, index) {
+ var indexFields = index.def.fields.map(getKey);
+
+ return userFields.slice().sort(function (a, b) {
+ var aIdx = indexFields.indexOf(a);
+ var bIdx = indexFields.indexOf(b);
+ if (aIdx === -1) {
+ aIdx = Number.MAX_VALUE;
+ }
+ if (bIdx === -1) {
+ bIdx = Number.MAX_VALUE;
+ }
+ return compare$1(aIdx, bIdx);
+ });
+}
+
+// first pass to try to find fields that will need to be sorted in-memory
+function getBasicInMemoryFields(index, selector, userFields) {
+
+ userFields = sortFieldsByIndex(userFields, index);
+
+ // check if any of the user selectors lose precision
+ var needToFilterInMemory = false;
+ for (var i = 0, len = userFields.length; i < len; i++) {
+ var field = userFields[i];
+ if (needToFilterInMemory || !checkFieldInIndex(index, field)) {
+ return userFields.slice(i);
+ }
+ if (i < len - 1 && userOperatorLosesPrecision(selector, field)) {
+ needToFilterInMemory = true;
+ }
+ }
+ return [];
+}
+
+function getInMemoryFieldsFromNe(selector) {
+ var fields = [];
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ Object.keys(matcher).forEach(function (operator) {
+ if (operator === '$ne') {
+ fields.push(field);
+ }
+ });
+ });
+ return fields;
+}
+
+function getInMemoryFields(coreInMemoryFields, index, selector, userFields) {
+ var result = flatten(
+ // in-memory fields reported as necessary by the query planner
+ coreInMemoryFields,
+ // combine with another pass that checks for any we may have missed
+ getBasicInMemoryFields(index, selector, userFields),
+ // combine with another pass that checks for $ne's
+ getInMemoryFieldsFromNe(selector)
+ );
+
+ return sortFieldsByIndex(uniq(result), index);
+}
+
+// check that at least one field in the user's query is represented
+// in the index. order matters in the case of sorts
+function checkIndexFieldsMatch(indexFields, sortOrder, fields) {
+ if (sortOrder) {
+ // array has to be a strict subarray of index array. furthermore,
+ // the sortOrder fields need to all be represented in the index
+ var sortMatches = oneArrayIsStrictSubArrayOfOther(sortOrder, indexFields);
+ var selectorMatches = oneArrayIsSubArrayOfOther(fields, indexFields);
+
+ return sortMatches && selectorMatches;
+ }
+
+ // all of the user's specified fields still need to be
+ // on the left side of the index array, although the order
+ // doesn't matter
+ return oneSetIsSubArrayOfOther(fields, indexFields);
+}
+
+var logicalMatchers = ['$eq', '$gt', '$gte', '$lt', '$lte'];
+function isNonLogicalMatcher(matcher) {
+ return logicalMatchers.indexOf(matcher) === -1;
+}
+
+// check all the index fields for usages of '$ne'
+// e.g. if the user queries {foo: {$ne: 'foo'}, bar: {$eq: 'bar'}},
+// then we can neither use an index on ['foo'] nor an index on
+// ['foo', 'bar'], but we can use an index on ['bar'] or ['bar', 'foo']
+function checkFieldsLogicallySound(indexFields, selector) {
+ var firstField = indexFields[0];
+ var matcher = selector[firstField];
+
+ if (typeof matcher === 'undefined') {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ var isInvalidNe = Object.keys(matcher).length === 1 &&
+ getKey(matcher) === '$ne';
+
+ return !isInvalidNe;
+}
+
+function checkIndexMatches(index, sortOrder, fields, selector) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var fieldsMatch = checkIndexFieldsMatch(indexFields, sortOrder, fields);
+
+ if (!fieldsMatch) {
+ return false;
+ }
+
+ return checkFieldsLogicallySound(indexFields, selector);
+}
+
+//
+// the algorithm is very simple:
+// take all the fields the user supplies, and if those fields
+// are a strict subset of the fields in some index,
+// then use that index
+//
+//
+function findMatchingIndexes(selector, userFields, sortOrder, indexes) {
+ return indexes.filter(function (index) {
+ return checkIndexMatches(index, sortOrder, userFields, selector);
+ });
+}
+
+// find the best index, i.e. the one that matches the most fields
+// in the user's query
+function findBestMatchingIndex(selector, userFields, sortOrder, indexes, useIndex) {
+
+ var matchingIndexes = findMatchingIndexes(selector, userFields, sortOrder, indexes);
+
+ if (matchingIndexes.length === 0) {
+ if (useIndex) {
+ throw {
+ error: "no_usable_index",
+ message: "There is no index available for this selector."
+ };
+ }
+ //return `all_docs` as a default index;
+ //I'm assuming that _all_docs is always first
+ var defaultIndex = indexes[0];
+ defaultIndex.defaultUsed = true;
+ return defaultIndex;
+ }
+ if (matchingIndexes.length === 1 && !useIndex) {
+ return matchingIndexes[0];
+ }
+
+ var userFieldsMap = arrayToObject(userFields);
+
+ function scoreIndex(index) {
+ var indexFields = index.def.fields.map(getKey);
+ var score = 0;
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (userFieldsMap[indexField]) {
+ score++;
+ }
+ }
+ return score;
+ }
+
+ if (useIndex) {
+ var useIndexDdoc = '_design/' + useIndex[0];
+ var useIndexName = useIndex.length === 2 ? useIndex[1] : false;
+ var index = matchingIndexes.find(function (index) {
+ if (useIndexName && index.ddoc === useIndexDdoc && useIndexName === index.name) {
+ return true;
+ }
+
+ if (index.ddoc === useIndexDdoc) {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ return false;
+ });
+
+ if (!index) {
+ throw {
+ error: "unknown_error",
+ message: "Could not find that index or could not use that index for the query"
+ };
+ }
+ return index;
+ }
+
+ return max(matchingIndexes, scoreIndex);
+}
+
+function getSingleFieldQueryOptsFor(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {key: userValue};
+ case '$lte':
+ return {endkey: userValue};
+ case '$gte':
+ return {startkey: userValue};
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+
+ return {
+ startkey: COLLATE_LO
+ };
+}
+
+function getSingleFieldCoreQueryPlan(selector, index) {
+ var field = getKey(index.def.fields[0]);
+ //ignoring this because the test to exercise the branch is skipped at the moment
+ /* istanbul ignore next */
+ var matcher = selector[field] || {};
+ var inMemoryFields = [];
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts;
+
+ userOperators.forEach(function (userOperator) {
+
+ if (isNonLogicalMatcher(userOperator)) {
+ inMemoryFields.push(field);
+ }
+
+ var userValue = matcher[userOperator];
+
+ var newQueryOpts = getSingleFieldQueryOptsFor(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newQueryOpts]);
+ } else {
+ combinedOpts = newQueryOpts;
+ }
+ });
+
+ return {
+ queryOpts: combinedOpts,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function getMultiFieldCoreQueryPlan(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {
+ startkey: userValue,
+ endkey: userValue
+ };
+ case '$lte':
+ return {
+ endkey: userValue
+ };
+ case '$gte':
+ return {
+ startkey: userValue
+ };
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+}
+
+function getMultiFieldQueryOpts(selector, index) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var inMemoryFields = [];
+ var startkey = [];
+ var endkey = [];
+ var inclusiveStart;
+ var inclusiveEnd;
+
+
+ function finish(i) {
+
+ if (inclusiveStart !== false) {
+ startkey.push(COLLATE_LO);
+ }
+ if (inclusiveEnd !== false) {
+ endkey.push(COLLATE_HI);
+ }
+ // keep track of the fields where we lost specificity,
+ // and therefore need to filter in-memory
+ inMemoryFields = indexFields.slice(i);
+ }
+
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+
+ var matcher = selector[indexField];
+
+ if (!matcher || !Object.keys(matcher).length) { // fewer fields in user query than in index
+ finish(i);
+ break;
+ } else if (Object.keys(matcher).some(isNonLogicalMatcher)) { // non-logical are ignored
+ finish(i);
+ break;
+ } else if (i > 0) {
+ var usingGtlt = (
+ '$gt' in matcher || '$gte' in matcher ||
+ '$lt' in matcher || '$lte' in matcher);
+ var previousKeys = Object.keys(selector[indexFields[i - 1]]);
+ var previousWasEq = arrayEquals(previousKeys, ['$eq']);
+ var previousWasSame = arrayEquals(previousKeys, Object.keys(matcher));
+ var gtltLostSpecificity = usingGtlt && !previousWasEq && !previousWasSame;
+ if (gtltLostSpecificity) {
+ finish(i);
+ break;
+ }
+ }
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts = null;
+
+ for (var j = 0; j < userOperators.length; j++) {
+ var userOperator = userOperators[j];
+ var userValue = matcher[userOperator];
+
+ var newOpts = getMultiFieldCoreQueryPlan(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newOpts]);
+ } else {
+ combinedOpts = newOpts;
+ }
+ }
+
+ startkey.push('startkey' in combinedOpts ? combinedOpts.startkey : COLLATE_LO);
+ endkey.push('endkey' in combinedOpts ? combinedOpts.endkey : COLLATE_HI);
+ if ('inclusive_start' in combinedOpts) {
+ inclusiveStart = combinedOpts.inclusive_start;
+ }
+ if ('inclusive_end' in combinedOpts) {
+ inclusiveEnd = combinedOpts.inclusive_end;
+ }
+ }
+
+ var res = {
+ startkey: startkey,
+ endkey: endkey
+ };
+
+ if (typeof inclusiveStart !== 'undefined') {
+ res.inclusive_start = inclusiveStart;
+ }
+ if (typeof inclusiveEnd !== 'undefined') {
+ res.inclusive_end = inclusiveEnd;
+ }
+
+ return {
+ queryOpts: res,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function shouldShortCircuit(selector) {
+ // We have a field to select from, but not a valid value
+ // this should result in a short circuited query
+ // just like the http adapter (couchdb) and mongodb
+ // see tests for issue #7810
+
+ // @todo Use 'Object.values' when Node.js v6 support is dropped.
+ const values = Object.keys(selector).map(function (key) {
+ return selector[key];
+ });
+ return values.some(function (val) {
+ return typeof val === 'object' && Object.keys(val).length === 0;
+});
+}
+
+function getDefaultQueryPlan(selector) {
+ //using default index, so all fields need to be done in memory
+ return {
+ queryOpts: {startkey: null},
+ inMemoryFields: [Object.keys(selector)]
+ };
+}
+
+function getCoreQueryPlan(selector, index) {
+ if (index.defaultUsed) {
+ return getDefaultQueryPlan(selector);
+ }
+
+ if (index.def.fields.length === 1) {
+ // one field in index, so the value was indexed as a singleton
+ return getSingleFieldCoreQueryPlan(selector, index);
+ }
+ // else index has multiple fields, so the value was indexed as an array
+ return getMultiFieldQueryOpts(selector, index);
+}
+
+function planQuery(request, indexes) {
+
+ var selector = request.selector;
+ var sort = request.sort;
+
+ if (shouldShortCircuit(selector)) {
+ return Object.assign({}, SHORT_CIRCUIT_QUERY, { index: indexes[0] });
+ }
+
+ var userFieldsRes = getUserFields(selector, sort);
+
+ var userFields = userFieldsRes.fields;
+ var sortOrder = userFieldsRes.sortOrder;
+ var index = findBestMatchingIndex(selector, userFields, sortOrder, indexes, request.use_index);
+
+ var coreQueryPlan = getCoreQueryPlan(selector, index);
+ var queryOpts = coreQueryPlan.queryOpts;
+ var coreInMemoryFields = coreQueryPlan.inMemoryFields;
+
+ var inMemoryFields = getInMemoryFields(coreInMemoryFields, index, selector, userFields);
+
+ var res = {
+ queryOpts: queryOpts,
+ index: index,
+ inMemoryFields: inMemoryFields
+ };
+ return res;
+}
+
+function indexToSignature(index) {
+ // remove '_design/'
+ return index.ddoc.substring(8) + '/' + index.name;
+}
+
+function doAllDocs(db, originalOpts) {
+ var opts = clone$1(originalOpts);
+
+ // CouchDB responds in weird ways when you provide a non-string to _id;
+ // we mimic the behavior for consistency. See issue66 tests for details.
+ if (opts.descending) {
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.endkey = '';
+ }
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.limit = 0;
+ }
+ } else {
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.startkey = '';
+ }
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.limit = 0;
+ }
+ }
+ if ('key' in opts && typeof opts.key !== 'string') {
+ opts.limit = 0;
+ }
+
+ if (opts.limit > 0 && opts.indexes_count) {
+ // brute force and quite naive impl.
+ // amp up the limit with the amount of (indexes) design docs
+ // or is this too naive? How about skip?
+ opts.original_limit = opts.limit;
+ opts.limit += opts.indexes_count;
+ }
+
+ return db.allDocs(opts)
+ .then(function (res) {
+ // filter out any design docs that _all_docs might return
+ res.rows = res.rows.filter(function (row) {
+ return !/^_design\//.test(row.id);
+ });
+ // put back original limit
+ if (opts.original_limit) {
+ opts.limit = opts.original_limit;
+ }
+ // enforce the rows to respect the given limit
+ res.rows = res.rows.slice(0, opts.limit);
+ return res;
+ });
+}
+
+function find(db, requestDef, explain) {
+ if (requestDef.selector) {
+ // must be validated before massaging
+ validateSelector(requestDef.selector, false);
+ requestDef.selector = massageSelector(requestDef.selector);
+ }
+
+ if (requestDef.sort) {
+ requestDef.sort = massageSort(requestDef.sort);
+ }
+
+ if (requestDef.use_index) {
+ requestDef.use_index = massageUseIndex(requestDef.use_index);
+ }
+
+ validateFindRequest(requestDef);
+
+ return getIndexes(db).then(function (getIndexesRes) {
+
+ db.constructor.emit('debug', ['find', 'planning query', requestDef]);
+ var queryPlan = planQuery(requestDef, getIndexesRes.indexes);
+ db.constructor.emit('debug', ['find', 'query plan', queryPlan]);
+
+ var indexToUse = queryPlan.index;
+
+ validateSort(requestDef, indexToUse);
+
+ var opts = Object.assign({
+ include_docs: true,
+ reduce: false,
+ // Add amount of index for doAllDocs to use (related to issue #7810)
+ indexes_count: getIndexesRes.total_rows,
+ }, queryPlan.queryOpts);
+
+ if ('startkey' in opts && 'endkey' in opts &&
+ collate(opts.startkey, opts.endkey) > 0) {
+ // can't possibly return any results, startkey > endkey
+ /* istanbul ignore next */
+ return {docs: []};
+ }
+
+ var isDescending = requestDef.sort &&
+ typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc';
+
+ if (isDescending) {
+ // either all descending or all ascending
+ opts.descending = true;
+ opts = reverseOptions(opts);
+ }
+
+ if (!queryPlan.inMemoryFields.length) {
+ // no in-memory filtering necessary, so we can let the
+ // database do the limit/skip for us
+ if ('limit' in requestDef) {
+ opts.limit = requestDef.limit;
+ }
+ if ('skip' in requestDef) {
+ opts.skip = requestDef.skip;
+ }
+ }
+
+ if (explain) {
+ return Promise.resolve(queryPlan, opts);
+ }
+
+ return Promise.resolve().then(function () {
+ if (indexToUse.name === '_all_docs') {
+ return doAllDocs(db, opts);
+ } else {
+ var signature = indexToSignature(indexToUse);
+ return abstractMapper$1(db).query.call(db, signature, opts);
+ }
+ }).then(function (res) {
+ if (opts.inclusive_start === false) {
+ // may have to manually filter the first one,
+ // since couchdb has no true inclusive_start option
+ res.rows = filterInclusiveStart(res.rows, opts.startkey, indexToUse);
+ }
+
+ if (queryPlan.inMemoryFields.length) {
+ // need to filter some stuff in-memory
+ res.rows = filterInMemoryFields(res.rows, requestDef, queryPlan.inMemoryFields);
+ }
+
+ var resp = {
+ docs: res.rows.map(function (row) {
+ var doc = row.doc;
+ if (requestDef.fields) {
+ return pick(doc, requestDef.fields);
+ }
+ return doc;
+ })
+ };
+
+ if (indexToUse.defaultUsed) {
+ resp.warning = 'No matching index found, create an index to optimize query time.';
+ }
+
+ return resp;
+ });
+ });
+}
+
+function explain(db, requestDef) {
+ return find(db, requestDef, true)
+ .then(function (queryPlan) {
+ return {
+ dbname: db.name,
+ index: queryPlan.index,
+ selector: requestDef.selector,
+ range: {
+ start_key: queryPlan.queryOpts.startkey,
+ end_key: queryPlan.queryOpts.endkey,
+ },
+ opts: {
+ use_index: requestDef.use_index || [],
+ bookmark: "nil", //hardcoded to match CouchDB since its not supported,
+ limit: requestDef.limit,
+ skip: requestDef.skip,
+ sort: requestDef.sort || {},
+ fields: requestDef.fields,
+ conflicts: false, //hardcoded to match CouchDB since its not supported,
+ r: [49], // hardcoded to match CouchDB since its not support
+ },
+ limit: requestDef.limit,
+ skip: requestDef.skip || 0,
+ fields: requestDef.fields,
+ };
+ });
+}
+
+function deleteIndex(db, index) {
+
+ if (!index.ddoc) {
+ throw new Error('you must supply an index.ddoc when deleting');
+ }
+
+ if (!index.name) {
+ throw new Error('you must supply an index.name when deleting');
+ }
+
+ var docId = index.ddoc;
+ var viewName = index.name;
+
+ function deltaFun(doc) {
+ if (Object.keys(doc.views).length === 1 && doc.views[viewName]) {
+ // only one view in this ddoc, delete the whole ddoc
+ return {_id: docId, _deleted: true};
+ }
+ // more than one view here, just remove the view
+ delete doc.views[viewName];
+ return doc;
+ }
+
+ return upsert(db, docId, deltaFun).then(function () {
+ return abstractMapper$1(db).viewCleanup.apply(db);
+ }).then(function () {
+ return {ok: true};
+ });
+}
+
+var createIndexAsCallback = callbackify(createIndex);
+var findAsCallback = callbackify(find);
+var explainAsCallback = callbackify(explain);
+var getIndexesAsCallback = callbackify(getIndexes);
+var deleteIndexAsCallback = callbackify(deleteIndex);
+
+var plugin = {};
+plugin.createIndex = toPromise(function (requestDef, callback) {
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide an index to create'));
+ }
+
+ var createIndex = isRemote(this) ?
+ createIndex$1 : createIndexAsCallback;
+ createIndex(this, requestDef, callback);
+});
+
+plugin.find = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to find()'));
+ }
+
+ var find = isRemote(this) ? find$1 : findAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.explain = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to explain()'));
+ }
+
+ var find = isRemote(this) ? explain$1 : explainAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.getIndexes = toPromise(function (callback) {
+
+ var getIndexes = isRemote(this) ? getIndexes$1 : getIndexesAsCallback;
+ getIndexes(this, callback);
+});
+
+plugin.deleteIndex = toPromise(function (indexDef, callback) {
+
+ if (typeof indexDef !== 'object') {
+ return callback(new Error('you must provide an index to delete'));
+ }
+
+ var deleteIndex = isRemote(this) ?
+ deleteIndex$1 : deleteIndexAsCallback;
+ deleteIndex(this, indexDef, callback);
+});
+
+PouchDB$1.utils = utils;
+PouchDB$1.Errors = errors;
+PouchDB$1.collate = collate$1;
+PouchDB$1.plugin(plugin);
+
+export { PouchDB$1 as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-generate-replication-id.js b/packages/pouchdb-lib/lib/pouchdb-generate-replication-id.js
new file mode 100644
index 0000000000..9809860d97
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-generate-replication-id.js
@@ -0,0 +1,51 @@
+import { b as binaryMd5 } from './binaryMd5-601b2421.js';
+import 'crypto';
+import { collate } from './pouchdb-collate.js';
+
+function sortObjectPropertiesByKey(queryParams) {
+ return Object.keys(queryParams).sort(collate).reduce(function (result, key) {
+ result[key] = queryParams[key];
+ return result;
+ }, {});
+}
+
+// Generate a unique id particular to this replication.
+// Not guaranteed to align perfectly with CouchDB's rep ids.
+function generateReplicationId(src, target, opts) {
+ var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';
+ var filterFun = opts.filter ? opts.filter.toString() : '';
+ var queryParams = '';
+ var filterViewName = '';
+ var selector = '';
+
+ // possibility for checkpoints to be lost here as behaviour of
+ // JSON.stringify is not stable (see #6226)
+ /* istanbul ignore if */
+ if (opts.selector) {
+ selector = JSON.stringify(opts.selector);
+ }
+
+ if (opts.filter && opts.query_params) {
+ queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));
+ }
+
+ if (opts.filter && opts.filter === '_view') {
+ filterViewName = opts.view.toString();
+ }
+
+ return Promise.all([src.id(), target.id()]).then(function (res) {
+ var queryData = res[0] + res[1] + filterFun + filterViewName +
+ queryParams + docIds + selector;
+ return new Promise(function (resolve) {
+ binaryMd5(queryData, resolve);
+ });
+ }).then(function (md5sum) {
+ // can't use straight-up md5 alphabet, because
+ // the char '/' is interpreted as being for attachments,
+ // and + is also not url-safe
+ md5sum = md5sum.replace(/\//g, '.').replace(/\+/g, '_');
+ return '_local/' + md5sum;
+ });
+}
+
+export { generateReplicationId as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-json.js b/packages/pouchdb-lib/lib/pouchdb-json.js
new file mode 100644
index 0000000000..ef2de2e8bc
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-json.js
@@ -0,0 +1 @@
+export { a as safeJsonParse, s as safeJsonStringify } from './safeJsonStringify-6520e306.js';
diff --git a/packages/pouchdb-lib/lib/pouchdb-lib.js b/packages/pouchdb-lib/lib/pouchdb-lib.js
new file mode 100644
index 0000000000..7d3c3d40a7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-lib.js
@@ -0,0 +1,41 @@
+export * as pouchdb from 'pouchdb';
+export * as pouchdb_abstract_mapreduce from 'pouchdb-abstract-mapreduce';
+export * as pouchdb_adapter_http from 'pouchdb-adapter-http';
+export * as pouchdb_adapter_idb from 'pouchdb-adapter-idb';
+export * as pouchdb_adapter_indexeddb from 'pouchdb-adapter-indexeddb';
+export * as pouchdb_adapter_leveldb from 'pouchdb-adapter-leveldb';
+export * as pouchdb_adapter_leveldb_core from 'pouchdb-adapter-leveldb-core';
+export * as pouchdb_adapter_localstorage from 'pouchdb-adapter-localstorage';
+export * as pouchdb_adapter_memory from 'pouchdb-adapter-memory';
+export * as pouchdb_adapter_utils from 'pouchdb-adapter-utils';
+export * as pouchdb_binary_utils from 'pouchdb-binary-utils';
+export * as pouchdb_browser from 'pouchdb-browser';
+export * as pouchdb_changes_filter from 'pouchdb-changes-filter';
+export * as pouchdb_checkpointer from 'pouchdb-checkpointer';
+export * as pouchdb_collate from 'pouchdb-collate';
+export * as pouchdb_collections from 'pouchdb-collections';
+export * as pouchdb_core from 'pouchdb-core';
+export * as pouchdb_crypto from 'pouchdb-crypto';
+export * as pouchdb_errors from 'pouchdb-errors';
+export * as pouchdb_fetch from 'pouchdb-fetch';
+export * as pouchdb_find from 'pouchdb-find';
+export * as pouchdb_for_coverage from 'pouchdb-for-coverage';
+export * as pouchdb_generate_replication_id from 'pouchdb-generate-replication-id';
+export * as pouchdb_json from 'pouchdb-json';
+export * as pouchdb_mapreduce from 'pouchdb-mapreduce';
+export * as pouchdb_mapreduce_utils from 'pouchdb-mapreduce-utils';
+export * as pouchdb_md5 from 'pouchdb-md5';
+export * as pouchdb_merge from 'pouchdb-merge';
+export * as pouchdb_node from 'pouchdb-node';
+export * as pouchdb_platform from 'pouchdb-platform';
+export * as pouchdb_replication from 'pouchdb-replication';
+export * as pouchdb_selector_core from 'pouchdb-selector-core';
+export * as pouchdb_server_packages from 'pouchdb-server-packages';
+export * as pouchdb_sublevel from 'pouchdb-sublevel';
+export * as pouchdb_utils from 'pouchdb-utils';
+export * as pouchdb_plugin_find from 'pouchdb-plugin-find';
+export * as pouchdb_plugin_fruitdown from 'pouchdb-plugin-fruitdown';
+export * as pouchdb_plugin_indexeddb from 'pouchdb-plugin-indexeddb';
+export * as pouchdb_plugin_localstorage from 'pouchdb-plugin-localstorage';
+export * as pouchdb_plugin_memory from 'pouchdb-plugin-memory';
+export * as pouchdb_plugin_websql from 'pouchdb-plugin-websql';
\ No newline at end of file
diff --git a/packages/pouchdb-lib/lib/pouchdb-mapreduce-utils.js b/packages/pouchdb-lib/lib/pouchdb-mapreduce-utils.js
new file mode 100644
index 0000000000..52aeb2ce44
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-mapreduce-utils.js
@@ -0,0 +1,118 @@
+import 'node:events';
+import { n as nextTick } from './nextTick-ea093886.js';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+
+class QueryParseError extends Error {
+ constructor(message) {
+ super();
+ this.status = 400;
+ this.name = 'query_parse_error';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, QueryParseError);
+ } catch (e) {}
+ }
+}
+
+class NotFoundError extends Error {
+ constructor(message) {
+ super();
+ this.status = 404;
+ this.name = 'not_found';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, NotFoundError);
+ } catch (e) {}
+ }
+}
+
+class BuiltInError extends Error {
+ constructor(message) {
+ super();
+ this.status = 500;
+ this.name = 'invalid_value';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, BuiltInError);
+ } catch (e) {}
+ }
+}
+
+function promisedCallback(promise, callback) {
+ if (callback) {
+ promise.then(function (res) {
+ nextTick(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick(function () {
+ callback(reason);
+ });
+ });
+ }
+ return promise;
+}
+
+function callbackify(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ if (typeof cb === 'function') {
+ promisedCallback(promise, cb);
+ }
+ return promise;
+ };
+}
+
+// Promise finally util similar to Q.finally
+function fin(promise, finalPromiseFactory) {
+ return promise.then(function (res) {
+ return finalPromiseFactory().then(function () {
+ return res;
+ });
+ }, function (reason) {
+ return finalPromiseFactory().then(function () {
+ throw reason;
+ });
+ });
+}
+
+function sequentialize(queue, promiseFactory) {
+ return function () {
+ var args = arguments;
+ var that = this;
+ return queue.add(function () {
+ return promiseFactory.apply(that, args);
+ });
+ };
+}
+
+// uniq an array of strings, order not guaranteed
+// similar to underscore/lodash _.uniq
+function uniq(arr) {
+ var theSet = new Set(arr);
+ var result = new Array(theSet.size);
+ var index = -1;
+ theSet.forEach(function (value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+function mapToKeysArray(map) {
+ var result = new Array(map.size);
+ var index = -1;
+ map.forEach(function (value, key) {
+ result[++index] = key;
+ });
+ return result;
+}
+
+export { BuiltInError, NotFoundError, QueryParseError, callbackify, fin, mapToKeysArray, promisedCallback, sequentialize, uniq };
diff --git a/packages/pouchdb-lib/lib/pouchdb-mapreduce.js b/packages/pouchdb-lib/lib/pouchdb-mapreduce.js
new file mode 100644
index 0000000000..7ad2c80d4f
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-mapreduce.js
@@ -0,0 +1,235 @@
+import vm from 'vm';
+import 'node:events';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import { BuiltInError, NotFoundError } from './pouchdb-mapreduce-utils.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import { s as scopeEval } from './scopeEval-ff3a416d.js';
+import createAbstractMapReduce from './pouchdb-abstract-mapreduce.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './nextTick-ea093886.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './typedBuffer-a8220a49.js';
+import './pouchdb-collate.js';
+import './fetch-f2310cb2.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import 'util';
+import './upsert-331b6913.js';
+import './pouchdb-crypto.js';
+
+function createBuiltInError(name) {
+ var message = 'builtin ' + name +
+ ' function requires map values to be numbers' +
+ ' or number arrays';
+ return new BuiltInError(message);
+}
+
+function sum(values) {
+ var result = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ if (typeof num !== 'number') {
+ if (Array.isArray(num)) {
+ // lists of numbers are also allowed, sum them separately
+ result = typeof result === 'number' ? [result] : result;
+ for (var j = 0, jLen = num.length; j < jLen; j++) {
+ var jNum = num[j];
+ if (typeof jNum !== 'number') {
+ throw createBuiltInError('_sum');
+ } else if (typeof result[j] === 'undefined') {
+ result.push(jNum);
+ } else {
+ result[j] += jNum;
+ }
+ }
+ } else { // not array/number
+ throw createBuiltInError('_sum');
+ }
+ } else if (typeof result === 'number') {
+ result += num;
+ } else { // add number to array
+ result[0] += num;
+ }
+ }
+ return result;
+}
+
+// Inside of 'vm' for Node, we need a way to translate a pseudo-error
+// back into a real error once it's out of the VM.
+function createBuiltInErrorInVm(name) {
+ return {
+ builtInError: true,
+ name: name
+ };
+}
+
+function convertToTrueError(err) {
+ return createBuiltInError(err.name);
+}
+
+function isBuiltInError(obj) {
+ return obj && obj.builtInError;
+}
+
+// All of this vm hullaballoo is to be able to run arbitrary code in a sandbox
+// for security reasons.
+function evalFunctionInVm(func, emit) {
+ return function (arg1, arg2, arg3) {
+ var code = '(function() {"use strict";' +
+ 'var createBuiltInError = ' + createBuiltInErrorInVm.toString() + ';' +
+ 'var sum = ' + sum.toString() + ';' +
+ 'var log = function () {};' +
+ 'var isArray = Array.isArray;' +
+ 'var toJSON = JSON.parse;' +
+ 'var __emitteds__ = [];' +
+ 'var emit = function (key, value) {__emitteds__.push([key, value]);};' +
+ 'var __result__ = (' +
+ func.replace(/;\s*$/, '') + ')' + '(' +
+ JSON.stringify(arg1) + ',' +
+ JSON.stringify(arg2) + ',' +
+ JSON.stringify(arg3) + ');' +
+ 'return {result: __result__, emitteds: __emitteds__};' +
+ '})()';
+
+ var output = vm.runInNewContext(code);
+
+ output.emitteds.forEach(function (emitted) {
+ emit(emitted[0], emitted[1]);
+ });
+ if (isBuiltInError(output.result)) {
+ output.result = convertToTrueError(output.result);
+ }
+ return output.result;
+ };
+}
+
+var log = guardedConsole.bind(null, 'log');
+var isArray = Array.isArray;
+var toJSON = JSON.parse;
+
+function evalFunctionWithEval(func, emit) {
+ return scopeEval(
+ "return (" + func.replace(/;\s*$/, "") + ");",
+ {
+ emit: emit,
+ sum: sum,
+ log: log,
+ isArray: isArray,
+ toJSON: toJSON
+ }
+ );
+}
+
+// The "stringify, then execute in a VM" strategy totally breaks Istanbul due
+// to missing __coverage global objects. As a solution, export different
+// code during coverage testing and during regular execution.
+// Note that this doesn't get shipped to consumers because Rollup replaces it
+// with rollup-plugin-replace, so process.env.COVERAGE is replaced with `false`
+var evalFunc;
+/* istanbul ignore else */
+if (process.env.COVERAGE) {
+ evalFunc = evalFunctionWithEval;
+} else {
+ evalFunc = evalFunctionInVm;
+}
+
+var evalFunction = evalFunc;
+
+var builtInReduce = {
+ _sum: function (keys, values) {
+ return sum(values);
+ },
+
+ _count: function (keys, values) {
+ return values.length;
+ },
+
+ _stats: function (keys, values) {
+ // no need to implement rereduce=true, because Pouch
+ // will never call it
+ function sumsqr(values) {
+ var _sumsqr = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ _sumsqr += (num * num);
+ }
+ return _sumsqr;
+ }
+ return {
+ sum : sum(values),
+ min : Math.min.apply(null, values),
+ max : Math.max.apply(null, values),
+ count : values.length,
+ sumsqr : sumsqr(values)
+ };
+ }
+};
+
+function getBuiltIn(reduceFunString) {
+ if (/^_sum/.test(reduceFunString)) {
+ return builtInReduce._sum;
+ } else if (/^_count/.test(reduceFunString)) {
+ return builtInReduce._count;
+ } else if (/^_stats/.test(reduceFunString)) {
+ return builtInReduce._stats;
+ } else if (/^_/.test(reduceFunString)) {
+ throw new Error(reduceFunString + ' is not a supported reduce function.');
+ }
+}
+
+function mapper(mapFun, emit) {
+ // for temp_views one can use emit(doc, emit), see #38
+ if (typeof mapFun === "function" && mapFun.length === 2) {
+ var origMap = mapFun;
+ return function (doc) {
+ return origMap(doc, emit);
+ };
+ } else {
+ return evalFunction(mapFun.toString(), emit);
+ }
+}
+
+function reducer(reduceFun) {
+ var reduceFunString = reduceFun.toString();
+ var builtIn = getBuiltIn(reduceFunString);
+ if (builtIn) {
+ return builtIn;
+ } else {
+ return evalFunction(reduceFunString);
+ }
+}
+
+function ddocValidator(ddoc, viewName) {
+ var fun = ddoc.views && ddoc.views[viewName];
+ if (typeof fun.map !== 'string') {
+ throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +
+ viewName + ', instead found object of type: ' + typeof fun.map);
+ }
+}
+
+var localDocName = 'mrviews';
+var abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);
+
+function query(fun, opts, callback) {
+ return abstract.query.call(this, fun, opts, callback);
+}
+
+function viewCleanup(callback) {
+ return abstract.viewCleanup.call(this, callback);
+}
+
+var mapreduce = {
+ query: query,
+ viewCleanup: viewCleanup
+};
+
+export { mapreduce as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-md5.js b/packages/pouchdb-lib/lib/pouchdb-md5.js
new file mode 100644
index 0000000000..6555dc10e9
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-md5.js
@@ -0,0 +1,3 @@
+export { b as binaryMd5 } from './binaryMd5-601b2421.js';
+export { s as stringMd5 } from './stringMd5-15f53eba.js';
+import 'crypto';
diff --git a/packages/pouchdb-lib/lib/pouchdb-merge.js b/packages/pouchdb-lib/lib/pouchdb-merge.js
new file mode 100644
index 0000000000..20a139fef7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-merge.js
@@ -0,0 +1,15 @@
+export { a as collectConflicts, c as collectLeaves } from './collectConflicts-ad0b7c70.js';
+export { c as compactTree, l as latest } from './latest-0521537f.js';
+export { f as findPathToLeaf } from './findPathToLeaf-7e69c93c.js';
+export { m as merge } from './merge-1e46cced.js';
+export { r as removeLeafFromTree } from './removeLeafFromTree-8dc5c1bf.js';
+export { r as revExists } from './revExists-12209d1c.js';
+export { r as rootToLeaf, t as traverseRevTree, w as winningRev } from './rootToLeaf-f8d0e78a.js';
+export { i as isDeleted, a as isLocalId } from './isLocalId-d067de54.js';
+import 'node:events';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './pouchdb-errors.js';
+import 'crypto';
diff --git a/packages/pouchdb-lib/lib/pouchdb-node.js b/packages/pouchdb-lib/lib/pouchdb-node.js
new file mode 100644
index 0000000000..d690118319
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-node.js
@@ -0,0 +1,84 @@
+import PouchDB from './pouchdb-core.js';
+export { default } from './pouchdb-core.js';
+import LevelPouch from './pouchdb-adapter-leveldb.js';
+import HttpPouch from './pouchdb-adapter-http.js';
+import mapreduce from './pouchdb-mapreduce.js';
+import replication from './pouchdb-replication.js';
+import 'node:events';
+import './fetch-f2310cb2.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './_commonjsHelpers-24198af3.js';
+import 'util';
+import './rev-48662a2a.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import 'buffer';
+import './guardedConsole-f54e5a40.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './index-3d81fcba.js';
+import 'events';
+import './readable-bcb7bff2.js';
+import 'assert';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+import 'fs';
+import 'path';
+import 'os';
+import './pouchdb-mapreduce-utils.js';
+import './pouchdb-abstract-mapreduce.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './pouchdb-crypto.js';
+import './pouchdb-checkpointer.js';
+import './pouchdb-generate-replication-id.js';
+
+PouchDB.plugin(LevelPouch)
+ .plugin(HttpPouch)
+ .plugin(mapreduce)
+ .plugin(replication);
diff --git a/packages/pouchdb-lib/lib/pouchdb-platform.js b/packages/pouchdb-lib/lib/pouchdb-platform.js
new file mode 100644
index 0000000000..b719b5c732
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-platform.js
@@ -0,0 +1,17 @@
+export { default as assert } from 'node:assert';
+export { default as fs } from 'node:fs';
+export { default as buffer } from 'node:buffer';
+export { default as events } from 'node:events';
+export { default as crypto } from 'node:crypto';
+export { default as stream } from 'node:stream';
+export { default as http } from 'node:http';
+export { default as url } from 'node:url';
+export { default as https } from 'node:https';
+export { default as zlib } from 'node:zlib';
+export { default as util } from 'node:util';
+export { default as vm } from 'node:vm';
+export { default as path } from 'node:path';
+export { default as os } from 'node:os';
+
+// Creates
+import('./environment-4ed993c7.js');
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-find.js b/packages/pouchdb-lib/lib/pouchdb-plugin-find.js
new file mode 100644
index 0000000000..f651433952
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-find.js
@@ -0,0 +1,40 @@
+import plugin from './pouchdb-find.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './isRemote-2533b7cb.js';
+import './toPromise-f6e385ee.js';
+import './clone-7eeb6295.js';
+import './once-de8350b9.js';
+import './fetch-f2310cb2.js';
+import 'stream';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './_commonjsHelpers-24198af3.js';
+import 'util';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import './nextTick-ea093886.js';
+import './pouchdb-abstract-mapreduce.js';
+import './flatten-994f45c6.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './typedBuffer-a8220a49.js';
+import './upsert-331b6913.js';
+import './pouchdb-crypto.js';
+import './pouchdb-mapreduce-utils.js';
+import 'buffer';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'pouchdb-find plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(plugin);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-fruitdown.js b/packages/pouchdb-lib/lib/pouchdb-plugin-fruitdown.js
new file mode 100644
index 0000000000..c2beaa4d73
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-fruitdown.js
@@ -0,0 +1,18 @@
+import FruitdownPouchPlugin from 'pouchdb-adapter-fruitdown';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'fruitdown adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(FruitdownPouchPlugin);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-indexeddb.js b/packages/pouchdb-lib/lib/pouchdb-plugin-indexeddb.js
new file mode 100644
index 0000000000..b630c56892
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-indexeddb.js
@@ -0,0 +1,40 @@
+import IndexeddbPouchPlugin from './pouchdb-adapter-indexeddb.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './pouchdb-utils.js';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './upsert-331b6913.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './readAsBinaryString-06e911ba.js';
+import './latest-0521537f.js';
+import './rootToLeaf-f8d0e78a.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './parseDoc-71681539.js';
+import './binaryMd5-601b2421.js';
+import './merge-1e46cced.js';
+import './collectConflicts-ad0b7c70.js';
+import './removeLeafFromTree-8dc5c1bf.js';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'indexeddb adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(IndexeddbPouchPlugin);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-localstorage.js b/packages/pouchdb-lib/lib/pouchdb-plugin-localstorage.js
new file mode 100644
index 0000000000..61e60d41cb
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-localstorage.js
@@ -0,0 +1,76 @@
+import localstorageAdapter from './pouchdb-adapter-localstorage.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './index-3d81fcba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'events';
+import 'util';
+import 'buffer';
+import './readable-bcb7bff2.js';
+import 'stream';
+import 'assert';
+import './pouchdb-core.js';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'localstorage adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(localstorageAdapter);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-memory.js b/packages/pouchdb-lib/lib/pouchdb-plugin-memory.js
new file mode 100644
index 0000000000..0a4bb70656
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-memory.js
@@ -0,0 +1,76 @@
+import index from './pouchdb-adapter-memory.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './index-3d81fcba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'events';
+import 'util';
+import 'buffer';
+import './readable-bcb7bff2.js';
+import 'stream';
+import 'assert';
+import './pouchdb-core.js';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './isRemote-2533b7cb.js';
+import './upsert-331b6913.js';
+import './once-de8350b9.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './isLocalId-d067de54.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './matches-selector-87ab4d5f.js';
+import './pouchdb-collate.js';
+import 'vm';
+import './pouchdb-utils.js';
+import './flatten-994f45c6.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './latest-0521537f.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'memory adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(index);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-plugin-websql.js b/packages/pouchdb-lib/lib/pouchdb-plugin-websql.js
new file mode 100644
index 0000000000..e2ffe4caed
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-plugin-websql.js
@@ -0,0 +1,18 @@
+import WebsqlPouchPlugin from 'pouchdb-adapter-websql';
+import 'node:events';
+import './functionName-706c6c65.js';
+import { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+import './pouchdb-errors.js';
+import 'crypto';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'websql adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(WebsqlPouchPlugin);
+}
diff --git a/packages/pouchdb-lib/lib/pouchdb-replication.js b/packages/pouchdb-lib/lib/pouchdb-replication.js
new file mode 100644
index 0000000000..45f673a79e
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-replication.js
@@ -0,0 +1,1042 @@
+import { defaultBackOff, uuid, filterChange } from './pouchdb-utils.js';
+import EE from 'node:events';
+import { c as clone } from './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import { createError, BAD_REQUEST } from './pouchdb-errors.js';
+import { f as flatten } from './flatten-994f45c6.js';
+import { i as isRemote } from './isRemote-2533b7cb.js';
+import 'crypto';
+import Checkpointer from './pouchdb-checkpointer.js';
+import generateReplicationId from './pouchdb-generate-replication-id.js';
+import { n as nextTick } from './nextTick-ea093886.js';
+import './rev-48662a2a.js';
+import './stringMd5-15f53eba.js';
+import './guardedConsole-f54e5a40.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './upsert-331b6913.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './pouchdb-collate.js';
+import './binaryMd5-601b2421.js';
+
+function fileHasChanged(localDoc, remoteDoc, filename) {
+ return !localDoc._attachments ||
+ !localDoc._attachments[filename] ||
+ localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;
+}
+
+function getDocAttachments(db, doc) {
+ var filenames = Object.keys(doc._attachments);
+ return Promise.all(filenames.map(function (filename) {
+ return db.getAttachment(doc._id, filename, {rev: doc._rev});
+ }));
+}
+
+function getDocAttachmentsFromTargetOrSource(target, src, doc) {
+ var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);
+ var filenames = Object.keys(doc._attachments);
+
+ if (!doCheckForLocalAttachments) {
+ return getDocAttachments(src, doc);
+ }
+
+ return target.get(doc._id).then(function (localDoc) {
+ return Promise.all(filenames.map(function (filename) {
+ if (fileHasChanged(localDoc, doc, filename)) {
+ return src.getAttachment(doc._id, filename);
+ }
+
+ return target.getAttachment(localDoc._id, filename);
+ }));
+ }).catch(function (error) {
+ /* istanbul ignore if */
+ if (error.status !== 404) {
+ throw error;
+ }
+
+ return getDocAttachments(src, doc);
+ });
+}
+
+function createBulkGetOpts(diffs) {
+ var requests = [];
+ Object.keys(diffs).forEach(function (id) {
+ var missingRevs = diffs[id].missing;
+ missingRevs.forEach(function (missingRev) {
+ requests.push({
+ id: id,
+ rev: missingRev
+ });
+ });
+ });
+
+ return {
+ docs: requests,
+ revs: true,
+ latest: true
+ };
+}
+
+//
+// Fetch all the documents from the src as described in the "diffs",
+// which is a mapping of docs IDs to revisions. If the state ever
+// changes to "cancelled", then the returned promise will be rejected.
+// Else it will be resolved with a list of fetched documents.
+//
+function getDocs(src, target, diffs, state) {
+ diffs = clone(diffs); // we do not need to modify this
+
+ var resultDocs = [],
+ ok = true;
+
+ function getAllDocs() {
+
+ var bulkGetOpts = createBulkGetOpts(diffs);
+
+ if (!bulkGetOpts.docs.length) { // optimization: skip empty requests
+ return;
+ }
+
+ return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {
+ /* istanbul ignore if */
+ if (state.cancelled) {
+ throw new Error('cancelled');
+ }
+ return Promise.all(bulkGetResponse.results.map(function (bulkGetInfo) {
+ return Promise.all(bulkGetInfo.docs.map(function (doc) {
+ var remoteDoc = doc.ok;
+
+ if (doc.error) {
+ // when AUTO_COMPACTION is set, docs can be returned which look
+ // like this: {"missing":"1-7c3ac256b693c462af8442f992b83696"}
+ ok = false;
+ }
+
+ if (!remoteDoc || !remoteDoc._attachments) {
+ return remoteDoc;
+ }
+
+ return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)
+ .then(function (attachments) {
+ var filenames = Object.keys(remoteDoc._attachments);
+ attachments
+ .forEach(function (attachment, i) {
+ var att = remoteDoc._attachments[filenames[i]];
+ delete att.stub;
+ delete att.length;
+ att.data = attachment;
+ });
+
+ return remoteDoc;
+ });
+ }));
+ }))
+
+ .then(function (results) {
+ resultDocs = resultDocs.concat(flatten(results).filter(Boolean));
+ });
+ });
+ }
+
+ function returnResult() {
+ return { ok:ok, docs:resultDocs };
+ }
+
+ return Promise.resolve()
+ .then(getAllDocs)
+ .then(returnResult);
+}
+
+var STARTING_BACK_OFF = 0;
+
+function backOff(opts, returnValue, error, callback) {
+ if (opts.retry === false) {
+ returnValue.emit('error', error);
+ returnValue.removeAllListeners();
+ return;
+ }
+ /* istanbul ignore if */
+ if (typeof opts.back_off_function !== 'function') {
+ opts.back_off_function = defaultBackOff;
+ }
+ returnValue.emit('requestError', error);
+ if (returnValue.state === 'active' || returnValue.state === 'pending') {
+ returnValue.emit('paused', error);
+ returnValue.state = 'stopped';
+ var backOffSet = function backoffTimeSet() {
+ opts.current_back_off = STARTING_BACK_OFF;
+ };
+ var removeBackOffSetter = function removeBackOffTimeSet() {
+ returnValue.removeListener('active', backOffSet);
+ };
+ returnValue.once('paused', removeBackOffSetter);
+ returnValue.once('active', backOffSet);
+ }
+
+ opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;
+ opts.current_back_off = opts.back_off_function(opts.current_back_off);
+ setTimeout(callback, opts.current_back_off);
+}
+
+function replicate(src, target, opts, returnValue, result) {
+ var batches = []; // list of batches to be processed
+ var currentBatch; // the batch currently being processed
+ var pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ }; // next batch, not yet ready to be processed
+ var writingCheckpoint = false; // true while checkpoint is being written
+ var changesCompleted = false; // true when all changes received
+ var replicationCompleted = false; // true when replication has completed
+ // initial_last_seq is the state of the source db before
+ // replication started, and it is _not_ updated during
+ // replication or used anywhere else, as opposed to last_seq
+ var initial_last_seq = 0;
+ var last_seq = 0;
+ var continuous = opts.continuous || opts.live || false;
+ var batch_size = opts.batch_size || 100;
+ var batches_limit = opts.batches_limit || 10;
+ var style = opts.style || 'all_docs';
+ var changesPending = false; // true while src.changes is running
+ var doc_ids = opts.doc_ids;
+ var selector = opts.selector;
+ var repId;
+ var checkpointer;
+ var changedDocs = [];
+ // Like couchdb, every replication gets a unique session id
+ var session = uuid();
+ var taskId;
+
+ result = result || {
+ ok: true,
+ start_time: new Date().toISOString(),
+ docs_read: 0,
+ docs_written: 0,
+ doc_write_failures: 0,
+ errors: []
+ };
+
+ var changesOpts = {};
+ returnValue.ready(src, target);
+
+ function initCheckpointer() {
+ if (checkpointer) {
+ return Promise.resolve();
+ }
+ return generateReplicationId(src, target, opts).then(function (res) {
+ repId = res;
+
+ var checkpointOpts = {};
+ if (opts.checkpoint === false) {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'source') {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'target') {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };
+ } else {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };
+ }
+
+ checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);
+ });
+ }
+
+ function writeDocs() {
+ changedDocs = [];
+
+ if (currentBatch.docs.length === 0) {
+ return;
+ }
+ var docs = currentBatch.docs;
+ var bulkOpts = {timeout: opts.timeout};
+ return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+
+ // `res` doesn't include full documents (which live in `docs`), so we create a map of
+ // (id -> error), and check for errors while iterating over `docs`
+ var errorsById = Object.create(null);
+ res.forEach(function (res) {
+ if (res.error) {
+ errorsById[res.id] = res;
+ }
+ });
+
+ var errorsNo = Object.keys(errorsById).length;
+ result.doc_write_failures += errorsNo;
+ result.docs_written += docs.length - errorsNo;
+
+ docs.forEach(function (doc) {
+ var error = errorsById[doc._id];
+ if (error) {
+ result.errors.push(error);
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (error.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('denied', clone(error));
+ } else {
+ throw error;
+ }
+ } else {
+ changedDocs.push(doc);
+ }
+ });
+
+ }, function (err) {
+ result.doc_write_failures += docs.length;
+ throw err;
+ });
+ }
+
+ function finishBatch() {
+ if (currentBatch.error) {
+ throw new Error('There was a problem getting docs.');
+ }
+ result.last_seq = last_seq = currentBatch.seq;
+ var outResult = clone(result);
+ if (changedDocs.length) {
+ outResult.docs = changedDocs;
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof currentBatch.pending === 'number') {
+ outResult.pending = currentBatch.pending;
+ delete currentBatch.pending;
+ }
+ returnValue.emit('change', outResult);
+ }
+ writingCheckpoint = true;
+
+ src.info().then(function (info) {
+ var task = src.activeTasks.get(taskId);
+ if (!currentBatch || !task) {
+ return;
+ }
+
+ var completed = task.completed_items || 0;
+ var total_items = parseInt(info.update_seq, 10) - parseInt(initial_last_seq, 10);
+ src.activeTasks.update(taskId, {
+ completed_items: completed + currentBatch.changes.length,
+ total_items
+ });
+ });
+
+ return checkpointer.writeCheckpoint(currentBatch.seq,
+ session).then(function () {
+ returnValue.emit('checkpoint', { 'checkpoint': currentBatch.seq });
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ currentBatch = undefined;
+ getChanges();
+ }).catch(function (err) {
+ onCheckpointError(err);
+ throw err;
+ });
+ }
+
+ function getDiffs() {
+ var diff = {};
+ currentBatch.changes.forEach(function (change) {
+ returnValue.emit('checkpoint', { 'revs_diff': change });
+ // Couchbase Sync Gateway emits these, but we can ignore them
+ /* istanbul ignore if */
+ if (change.id === "_user/") {
+ return;
+ }
+ diff[change.id] = change.changes.map(function (x) {
+ return x.rev;
+ });
+ });
+ return target.revsDiff(diff).then(function (diffs) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ // currentBatch.diffs elements are deleted as the documents are written
+ currentBatch.diffs = diffs;
+ });
+ }
+
+ function getBatchDocs() {
+ return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {
+ currentBatch.error = !got.ok;
+ got.docs.forEach(function (doc) {
+ delete currentBatch.diffs[doc._id];
+ result.docs_read++;
+ currentBatch.docs.push(doc);
+ });
+ });
+ }
+
+ function startNextBatch() {
+ if (returnValue.cancelled || currentBatch) {
+ return;
+ }
+ if (batches.length === 0) {
+ processPendingBatch(true);
+ return;
+ }
+ currentBatch = batches.shift();
+ returnValue.emit('checkpoint', { 'start_next_batch': currentBatch.seq });
+ getDiffs()
+ .then(getBatchDocs)
+ .then(writeDocs)
+ .then(finishBatch)
+ .then(startNextBatch)
+ .catch(function (err) {
+ abortReplication('batch processing terminated with error', err);
+ });
+ }
+
+
+ function processPendingBatch(immediate) {
+ if (pendingBatch.changes.length === 0) {
+ if (batches.length === 0 && !currentBatch) {
+ if ((continuous && changesOpts.live) || changesCompleted) {
+ returnValue.state = 'pending';
+ returnValue.emit('paused');
+ }
+ if (changesCompleted) {
+ completeReplication();
+ }
+ }
+ return;
+ }
+ if (
+ immediate ||
+ changesCompleted ||
+ pendingBatch.changes.length >= batch_size
+ ) {
+ batches.push(pendingBatch);
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ if (returnValue.state === 'pending' || returnValue.state === 'stopped') {
+ returnValue.state = 'active';
+ returnValue.emit('active');
+ }
+ startNextBatch();
+ }
+ }
+
+
+ function abortReplication(reason, err) {
+ if (replicationCompleted) {
+ return;
+ }
+ if (!err.message) {
+ err.message = reason;
+ }
+ result.ok = false;
+ result.status = 'aborting';
+ batches = [];
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ completeReplication(err);
+ }
+
+
+ function completeReplication(fatalError) {
+ if (replicationCompleted) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ result.status = 'cancelled';
+ if (writingCheckpoint) {
+ return;
+ }
+ }
+ result.status = result.status || 'complete';
+ result.end_time = new Date().toISOString();
+ result.last_seq = last_seq;
+ replicationCompleted = true;
+
+ src.activeTasks.remove(taskId, fatalError);
+
+ if (fatalError) {
+ // need to extend the error because Firefox considers ".result" read-only
+ fatalError = createError(fatalError);
+ fatalError.result = result;
+
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (fatalError.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('error', fatalError);
+ returnValue.removeAllListeners();
+ } else {
+ backOff(opts, returnValue, fatalError, function () {
+ replicate(src, target, opts, returnValue);
+ });
+ }
+ } else {
+ returnValue.emit('complete', result);
+ returnValue.removeAllListeners();
+ }
+ }
+
+ function onChange(change, pending, lastSeq) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof pending === 'number') {
+ pendingBatch.pending = pending;
+ }
+
+ var filter = filterChange(opts)(change);
+ if (!filter) {
+ // update processed items count by 1
+ var task = src.activeTasks.get(taskId);
+ if (task) {
+ // we can assume that task exists here? shouldn't be deleted by here.
+ var completed = task.completed_items || 0;
+ src.activeTasks.update(taskId, {completed_items: ++completed});
+ }
+ return;
+ }
+ pendingBatch.seq = change.seq || lastSeq;
+ pendingBatch.changes.push(change);
+ returnValue.emit('checkpoint', { 'pending_batch': pendingBatch.seq });
+ nextTick(function () {
+ processPendingBatch(batches.length === 0 && changesOpts.live);
+ });
+ }
+
+
+ function onChangesComplete(changes) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+
+ // if no results were returned then we're done,
+ // else fetch more
+ if (changes.results.length > 0) {
+ changesOpts.since = changes.results[changes.results.length - 1].seq;
+ getChanges();
+ processPendingBatch(true);
+ } else {
+
+ var complete = function () {
+ if (continuous) {
+ changesOpts.live = true;
+ getChanges();
+ } else {
+ changesCompleted = true;
+ }
+ processPendingBatch(true);
+ };
+
+ // update the checkpoint so we start from the right seq next time
+ if (!currentBatch && changes.results.length === 0) {
+ writingCheckpoint = true;
+ checkpointer.writeCheckpoint(changes.last_seq,
+ session).then(function () {
+ writingCheckpoint = false;
+ result.last_seq = last_seq = changes.last_seq;
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ } else {
+ complete();
+ }
+ })
+ .catch(onCheckpointError);
+ } else {
+ complete();
+ }
+ }
+ }
+
+
+ function onChangesError(err) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ abortReplication('changes rejected', err);
+ }
+
+
+ function getChanges() {
+ if (!(
+ !changesPending &&
+ !changesCompleted &&
+ batches.length < batches_limit
+ )) {
+ return;
+ }
+ changesPending = true;
+ function abortChanges() {
+ changes.cancel();
+ }
+ function removeListener() {
+ returnValue.removeListener('cancel', abortChanges);
+ }
+
+ if (returnValue._changes) { // remove old changes() and listeners
+ returnValue.removeListener('cancel', returnValue._abortChanges);
+ returnValue._changes.cancel();
+ }
+ returnValue.once('cancel', abortChanges);
+
+ var changes = src.changes(changesOpts)
+ .on('change', onChange);
+ changes.then(removeListener, removeListener);
+ changes.then(onChangesComplete)
+ .catch(onChangesError);
+
+ if (opts.retry) {
+ // save for later so we can cancel if necessary
+ returnValue._changes = changes;
+ returnValue._abortChanges = abortChanges;
+ }
+ }
+
+ function createTask(checkpoint) {
+ return src.info().then(function (info) {
+ var total_items = typeof opts.since === 'undefined' ?
+ parseInt(info.update_seq, 10) - parseInt(checkpoint, 10) :
+ parseInt(info.update_seq, 10);
+
+ taskId = src.activeTasks.add({
+ name: `${continuous ? 'continuous ' : ''}replication from ${info.db_name}` ,
+ total_items,
+ });
+
+ return checkpoint;
+ });
+ }
+
+ function startChanges() {
+ initCheckpointer().then(function () {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ return checkpointer.getCheckpoint().then(createTask).then(function (checkpoint) {
+ last_seq = checkpoint;
+ initial_last_seq = checkpoint;
+ changesOpts = {
+ since: last_seq,
+ limit: batch_size,
+ batch_size: batch_size,
+ style: style,
+ doc_ids: doc_ids,
+ selector: selector,
+ return_docs: true // required so we know when we're done
+ };
+ if (opts.filter) {
+ if (typeof opts.filter !== 'string') {
+ // required for the client-side filter in onChange
+ changesOpts.include_docs = true;
+ } else { // ddoc filter
+ changesOpts.filter = opts.filter;
+ }
+ }
+ if ('heartbeat' in opts) {
+ changesOpts.heartbeat = opts.heartbeat;
+ }
+ if ('timeout' in opts) {
+ changesOpts.timeout = opts.timeout;
+ }
+ if (opts.query_params) {
+ changesOpts.query_params = opts.query_params;
+ }
+ if (opts.view) {
+ changesOpts.view = opts.view;
+ }
+ getChanges();
+ });
+ }).catch(function (err) {
+ abortReplication('getCheckpoint rejected with ', err);
+ });
+ }
+
+ /* istanbul ignore next */
+ function onCheckpointError(err) {
+ writingCheckpoint = false;
+ abortReplication('writeCheckpoint completed with error', err);
+ }
+
+ /* istanbul ignore if */
+ if (returnValue.cancelled) { // cancelled immediately
+ completeReplication();
+ return;
+ }
+
+ if (!returnValue._addedListeners) {
+ returnValue.once('cancel', completeReplication);
+
+ if (typeof opts.complete === 'function') {
+ returnValue.once('error', opts.complete);
+ returnValue.once('complete', function (result) {
+ opts.complete(null, result);
+ });
+ }
+ returnValue._addedListeners = true;
+ }
+
+ if (typeof opts.since === 'undefined') {
+ startChanges();
+ } else {
+ initCheckpointer().then(function () {
+ writingCheckpoint = true;
+ return checkpointer.writeCheckpoint(opts.since, session);
+ }).then(function () {
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ last_seq = opts.since;
+ startChanges();
+ }).catch(onCheckpointError);
+ }
+}
+
+// We create a basic promise so the caller can cancel the replication possibly
+// before we have actually started listening to changes etc
+class Replication extends EE {
+ constructor() {
+ super();
+ this.cancelled = false;
+ this.state = 'pending';
+ const promise = new Promise((fulfill, reject) => {
+ this.once('complete', fulfill);
+ this.once('error', reject);
+ });
+ this.then = function (resolve, reject) {
+ return promise.then(resolve, reject);
+ };
+ this.catch = function (reject) {
+ return promise.catch(reject);
+ };
+ // As we allow error handling via "error" event as well,
+ // put a stub in here so that rejecting never throws UnhandledError.
+ this.catch(function () {});
+ }
+
+ cancel() {
+ this.cancelled = true;
+ this.state = 'cancelled';
+ this.emit('cancel');
+ }
+
+ ready(src, target) {
+ if (this._readyCalled) {
+ return;
+ }
+ this._readyCalled = true;
+
+ const onDestroy = () => {
+ this.cancel();
+ };
+ src.once('destroyed', onDestroy);
+ target.once('destroyed', onDestroy);
+ function cleanup() {
+ src.removeListener('destroyed', onDestroy);
+ target.removeListener('destroyed', onDestroy);
+ }
+ this.once('complete', cleanup);
+ this.once('error', cleanup);
+ }
+}
+
+function toPouch(db, opts) {
+ var PouchConstructor = opts.PouchConstructor;
+ if (typeof db === 'string') {
+ return new PouchConstructor(db, opts);
+ } else {
+ return db;
+ }
+}
+
+function replicateWrapper(src, target, opts, callback) {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+
+ if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {
+ throw createError(BAD_REQUEST,
+ "`doc_ids` filter parameter is not a list.");
+ }
+
+ opts.complete = callback;
+ opts = clone(opts);
+ opts.continuous = opts.continuous || opts.live;
+ opts.retry = ('retry' in opts) ? opts.retry : false;
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ var replicateRet = new Replication(opts);
+ var srcPouch = toPouch(src, opts);
+ var targetPouch = toPouch(target, opts);
+ replicate(srcPouch, targetPouch, opts, replicateRet);
+ return replicateRet;
+}
+
+function sync(src, target, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+ opts = clone(opts);
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ src = toPouch(src, opts);
+ target = toPouch(target, opts);
+ return new Sync(src, target, opts, callback);
+}
+
+class Sync extends EE {
+ constructor(src, target, opts, callback) {
+ super();
+ this.canceled = false;
+
+ const optsPush = opts.push ? Object.assign({}, opts, opts.push) : opts;
+ const optsPull = opts.pull ? Object.assign({}, opts, opts.pull) : opts;
+
+ this.push = replicateWrapper(src, target, optsPush);
+ this.pull = replicateWrapper(target, src, optsPull);
+
+ this.pushPaused = true;
+ this.pullPaused = true;
+
+ const pullChange = (change) => {
+ this.emit('change', {
+ direction: 'pull',
+ change: change
+ });
+ };
+ const pushChange = (change) => {
+ this.emit('change', {
+ direction: 'push',
+ change: change
+ });
+ };
+ const pushDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'push',
+ doc: doc
+ });
+ };
+ const pullDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'pull',
+ doc: doc
+ });
+ };
+ const pushPaused = () => {
+ this.pushPaused = true;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('paused');
+ }
+ };
+ const pullPaused = () => {
+ this.pullPaused = true;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('paused');
+ }
+ };
+ const pushActive = () => {
+ this.pushPaused = false;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('active', {
+ direction: 'push'
+ });
+ }
+ };
+ const pullActive = () => {
+ this.pullPaused = false;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('active', {
+ direction: 'pull'
+ });
+ }
+ };
+
+ let removed = {};
+
+ const removeAll = (type) => { // type is 'push' or 'pull'
+ return (event, func) => {
+ const isChange = event === 'change' &&
+ (func === pullChange || func === pushChange);
+ const isDenied = event === 'denied' &&
+ (func === pullDenied || func === pushDenied);
+ const isPaused = event === 'paused' &&
+ (func === pullPaused || func === pushPaused);
+ const isActive = event === 'active' &&
+ (func === pullActive || func === pushActive);
+
+ if (isChange || isDenied || isPaused || isActive) {
+ if (!(event in removed)) {
+ removed[event] = {};
+ }
+ removed[event][type] = true;
+ if (Object.keys(removed[event]).length === 2) {
+ // both push and pull have asked to be removed
+ this.removeAllListeners(event);
+ }
+ }
+ };
+ };
+
+ if (opts.live) {
+ this.push.on('complete', this.pull.cancel.bind(this.pull));
+ this.pull.on('complete', this.push.cancel.bind(this.push));
+ }
+
+ function addOneListener(ee, event, listener) {
+ if (ee.listeners(event).indexOf(listener) == -1) {
+ ee.on(event, listener);
+ }
+ }
+
+ this.on('newListener', function (event) {
+ if (event === 'change') {
+ addOneListener(this.pull, 'change', pullChange);
+ addOneListener(this.push, 'change', pushChange);
+ } else if (event === 'denied') {
+ addOneListener(this.pull, 'denied', pullDenied);
+ addOneListener(this.push, 'denied', pushDenied);
+ } else if (event === 'active') {
+ addOneListener(this.pull, 'active', pullActive);
+ addOneListener(this.push, 'active', pushActive);
+ } else if (event === 'paused') {
+ addOneListener(this.pull, 'paused', pullPaused);
+ addOneListener(this.push, 'paused', pushPaused);
+ }
+ });
+
+ this.on('removeListener', function (event) {
+ if (event === 'change') {
+ this.pull.removeListener('change', pullChange);
+ this.push.removeListener('change', pushChange);
+ } else if (event === 'denied') {
+ this.pull.removeListener('denied', pullDenied);
+ this.push.removeListener('denied', pushDenied);
+ } else if (event === 'active') {
+ this.pull.removeListener('active', pullActive);
+ this.push.removeListener('active', pushActive);
+ } else if (event === 'paused') {
+ this.pull.removeListener('paused', pullPaused);
+ this.push.removeListener('paused', pushPaused);
+ }
+ });
+
+ this.pull.on('removeListener', removeAll('pull'));
+ this.push.on('removeListener', removeAll('push'));
+
+ const promise = Promise.all([
+ this.push,
+ this.pull
+ ]).then((resp) => {
+ const out = {
+ push: resp[0],
+ pull: resp[1]
+ };
+ this.emit('complete', out);
+ if (callback) {
+ callback(null, out);
+ }
+ this.removeAllListeners();
+ return out;
+ }, (err) => {
+ this.cancel();
+ if (callback) {
+ // if there's a callback, then the callback can receive
+ // the error event
+ callback(err);
+ } else {
+ // if there's no callback, then we're safe to emit an error
+ // event, which would otherwise throw an unhandled error
+ // due to 'error' being a special event in EventEmitters
+ this.emit('error', err);
+ }
+ this.removeAllListeners();
+ if (callback) {
+ // no sense throwing if we're already emitting an 'error' event
+ throw err;
+ }
+ });
+
+ this.then = function (success, err) {
+ return promise.then(success, err);
+ };
+
+ this.catch = function (err) {
+ return promise.catch(err);
+ };
+ }
+
+ cancel() {
+ if (!this.canceled) {
+ this.canceled = true;
+ this.push.cancel();
+ this.pull.cancel();
+ }
+ }
+}
+
+function replication(PouchDB) {
+ PouchDB.replicate = replicateWrapper;
+ PouchDB.sync = sync;
+
+ Object.defineProperty(PouchDB.prototype, 'replicate', {
+ get: function () {
+ var self = this;
+ if (typeof this.replicateMethods === 'undefined') {
+ this.replicateMethods = {
+ from: function (other, opts, callback) {
+ return self.constructor.replicate(other, self, opts, callback);
+ },
+ to: function (other, opts, callback) {
+ return self.constructor.replicate(self, other, opts, callback);
+ }
+ };
+ }
+ return this.replicateMethods;
+ }
+ });
+
+ PouchDB.prototype.sync = function (dbName, opts, callback) {
+ return this.constructor.sync(this, dbName, opts, callback);
+ };
+}
+
+export { replication as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-selector-core.js b/packages/pouchdb-lib/lib/pouchdb-selector-core.js
new file mode 100644
index 0000000000..bd7e60d951
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-selector-core.js
@@ -0,0 +1,9 @@
+export { d as compare, e as createFieldSorter, f as filterInMemoryFields, g as getFieldFromDoc, c as getKey, b as getValue, i as isCombinationalField, a as massageSelector, m as matchesSelector, p as parseField, r as rowFilter, s as setFieldInDoc } from './matches-selector-87ab4d5f.js';
+import 'node:events';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import './pouchdb-errors.js';
+import 'crypto';
+import './pouchdb-collate.js';
diff --git a/packages/pouchdb-lib/lib/pouchdb-server-packages.js b/packages/pouchdb-lib/lib/pouchdb-server-packages.js
new file mode 100644
index 0000000000..f30dc327c2
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-server-packages.js
@@ -0,0 +1,3 @@
+const server = {};
+
+export { server };
diff --git a/packages/pouchdb-lib/lib/pouchdb-sublevel.js b/packages/pouchdb-lib/lib/pouchdb-sublevel.js
new file mode 100644
index 0000000000..a9e6a39330
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-sublevel.js
@@ -0,0 +1,416 @@
+import { c as ltgt, R as ReadableStreamCore, C as Codec } from './readable-bcb7bff2.js';
+import './pouchdb-platform.js';
+import EE from 'node:events';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+import 'events';
+import 'stream';
+import 'util';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+
+function isFunction(f) {
+ return 'function' === typeof f;
+}
+
+function getPrefix(db) {
+ if (isFunction(db.prefix)) {
+ return db.prefix();
+ }
+ return db;
+}
+
+function clone(_obj) {
+ var obj = {};
+ for (var k in _obj) {
+ obj[k] = _obj[k];
+ }
+ return obj;
+}
+
+function nut(db, precodec, codec) {
+ function encodePrefix(prefix, key, opts1, opts2) {
+ return precodec.encode([ prefix, codec.encodeKey(key, opts1, opts2 ) ]);
+ }
+
+ function addEncodings(op, prefix) {
+ if (prefix && prefix.options) {
+ op.keyEncoding =
+ op.keyEncoding || prefix.options.keyEncoding;
+ op.valueEncoding =
+ op.valueEncoding || prefix.options.valueEncoding;
+ }
+ return op;
+ }
+
+ db.open(function () { /* no-op */});
+
+ return {
+ apply: function (ops, opts, cb) {
+ opts = opts || {};
+
+ var batch = [];
+ var i = -1;
+ var len = ops.length;
+
+ while (++i < len) {
+ var op = ops[i];
+ addEncodings(op, op.prefix);
+ op.prefix = getPrefix(op.prefix);
+ batch.push({
+ key: encodePrefix(op.prefix, op.key, opts, op),
+ value: op.type !== 'del' && codec.encodeValue(op.value, opts, op),
+ type: op.type
+ });
+ }
+ db.db.batch(batch, opts, cb);
+ },
+ get: function (key, prefix, opts, cb) {
+ opts.asBuffer = codec.valueAsBuffer(opts);
+ return db.db.get(
+ encodePrefix(prefix, key, opts),
+ opts,
+ function (err, value) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, codec.decodeValue(value, opts));
+ }
+ }
+ );
+ },
+ createDecoder: function (opts) {
+ return function (key, value) {
+ return {
+ key: codec.decodeKey(precodec.decode(key)[1], opts),
+ value: codec.decodeValue(value, opts)
+ };
+ };
+ },
+ isClosed: function isClosed() {
+ return db.isClosed();
+ },
+ close: function close(cb) {
+ return db.close(cb);
+ },
+ iterator: function (_opts) {
+ var opts = clone(_opts || {});
+ var prefix = _opts.prefix || [];
+
+ function encodeKey(key) {
+ return encodePrefix(prefix, key, opts, {});
+ }
+
+ ltgt.toLtgt(_opts, opts, encodeKey, precodec.lowerBound, precodec.upperBound);
+
+ // if these legacy values are in the options, remove them
+
+ opts.prefix = null;
+
+ //************************************************
+ //hard coded defaults, for now...
+ //TODO: pull defaults and encoding out of levelup.
+ opts.keyAsBuffer = opts.valueAsBuffer = false;
+ //************************************************
+
+
+ //this is vital, otherwise limit: undefined will
+ //create an empty stream.
+ /* istanbul ignore next */
+ if ('number' !== typeof opts.limit) {
+ opts.limit = -1;
+ }
+
+ opts.keyAsBuffer = precodec.buffer;
+ opts.valueAsBuffer = codec.valueAsBuffer(opts);
+
+ function wrapIterator(iterator) {
+ return {
+ next: function (cb) {
+ return iterator.next(cb);
+ },
+ end: function (cb) {
+ iterator.end(cb);
+ }
+ };
+ }
+
+ return wrapIterator(db.db.iterator(opts));
+ }
+ };
+}
+
+class NotFoundError extends Error {
+ constructor() {
+ super();
+ this.name = 'NotFoundError';
+ }
+}
+
+var EventEmitter = EE.EventEmitter;
+var version = "6.5.4";
+
+var NOT_FOUND_ERROR = new NotFoundError();
+
+var sublevel = function (nut, prefix, createStream, options) {
+ var emitter = new EventEmitter();
+ emitter.sublevels = {};
+ emitter.options = options;
+
+ emitter.version = version;
+
+ emitter.methods = {};
+ prefix = prefix || [];
+
+ function mergeOpts(opts) {
+ var o = {};
+ var k;
+ if (options) {
+ for (k in options) {
+ if (typeof options[k] !== 'undefined') {
+ o[k] = options[k];
+ }
+ }
+ }
+ if (opts) {
+ for (k in opts) {
+ if (typeof opts[k] !== 'undefined') {
+ o[k] = opts[k];
+ }
+ }
+ }
+ return o;
+ }
+
+ emitter.put = function (key, value, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ nut.apply([{
+ key: key, value: value,
+ prefix: prefix.slice(), type: 'put'
+ }], mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('put', key, value);
+ cb(null);
+ });
+ };
+
+ emitter.prefix = function () {
+ return prefix.slice();
+ };
+
+ emitter.batch = function (ops, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ ops = ops.map(function (op) {
+ return {
+ key: op.key,
+ value: op.value,
+ prefix: op.prefix || prefix,
+ keyEncoding: op.keyEncoding, // *
+ valueEncoding: op.valueEncoding, // * (TODO: encodings on sublevel)
+ type: op.type
+ };
+ });
+
+ nut.apply(ops, mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('batch', ops);
+ cb(null);
+ });
+ };
+
+ emitter.get = function (key, opts, cb) {
+ /* istanbul ignore else */
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+ nut.get(key, prefix, mergeOpts(opts), function (err, value) {
+ if (err) {
+ cb(NOT_FOUND_ERROR);
+ } else {
+ cb(null, value);
+ }
+ });
+ };
+
+ emitter.sublevel = function (name, opts) {
+ return emitter.sublevels[name] =
+ emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts));
+ };
+
+ emitter.readStream = emitter.createReadStream = function (opts) {
+ opts = mergeOpts(opts);
+ opts.prefix = prefix;
+ var stream;
+ var it = nut.iterator(opts);
+
+ stream = createStream(opts, nut.createDecoder(opts));
+ stream.setIterator(it);
+
+ return stream;
+ };
+
+ emitter.close = function (cb) {
+ nut.close(cb);
+ };
+
+ emitter.isOpen = nut.isOpen;
+ emitter.isClosed = nut.isClosed;
+
+ return emitter;
+};
+
+/* Copyright (c) 2012-2014 LevelUP contributors
+ * See list at
+ * MIT License
+ */
+
+var Readable = ReadableStreamCore.Readable;
+
+function createClass(parent, init) {
+ let klass = function (...args) {
+ if (!(this instanceof klass)) {
+ return new klass(...args);
+ }
+ init.apply(this, args);
+ };
+ klass.prototype = Object.create(parent.prototype, {
+ constructor: { value: klass }
+ });
+ return klass;
+}
+
+class ReadStreamInternal extends Readable {
+ constructor(options, makeData) {
+ super({ objectMode: true, highWaterMark: options.highWaterMark });
+ this._setup(options, makeData);
+ }
+
+ _setup(options, makeData) {
+ super.constructor({ objectMode: true, highWaterMark: options.highWaterMark });
+
+ // purely to keep `db` around until we're done so it's not GCed if the user doesn't keep a ref
+ this._waiting = false;
+ this._options = options;
+ this._makeData = makeData;
+ }
+
+ setIterator(it) {
+ this._iterator = it;
+ /* istanbul ignore if */
+ if (this._destroyed) {
+ return it.end(function () {});
+ }
+ /* istanbul ignore if */
+ if (this._waiting) {
+ this._waiting = false;
+ return this._read();
+ }
+ return this;
+ }
+
+ _cleanup(err) {
+ if (this._destroyed) {
+ return;
+ }
+
+ this._destroyed = true;
+
+ var self = this;
+ /* istanbul ignore if */
+ if (err && err.message !== 'iterator has ended') {
+ self.emit('error', err);
+ }
+
+ /* istanbul ignore else */
+ if (self._iterator) {
+ self._iterator.end(function () {
+ self._iterator = null;
+ self.emit('close');
+ });
+ } else {
+ self.emit('close');
+ }
+ }
+
+ destroy() {
+ this._cleanup();
+ }
+
+ _read() {
+ var self = this;
+ /* istanbul ignore if */
+ if (self._destroyed) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (!self._iterator) {
+ return this._waiting = true;
+ }
+
+ self._iterator.next(function (err, key, value) {
+ if (err || (key === undefined && value === undefined)) {
+ if (!err && !self._destroyed) {
+ self.push(null);
+ }
+ return self._cleanup(err);
+ }
+
+
+ value = self._makeData(key, value);
+ if (!self._destroyed) {
+ self.push(value);
+ }
+ });
+ }
+}
+
+const ReadStream = createClass(ReadStreamInternal, function (options, makeData) {
+ ReadStreamInternal.prototype._setup.call(this, options, makeData);
+});
+
+var precodec = {
+ encode: function (decodedKey) {
+ return '\xff' + decodedKey[0] + '\xff' + decodedKey[1];
+ },
+ decode: function (encodedKeyAsBuffer) {
+ var str = encodedKeyAsBuffer.toString();
+ var idx = str.indexOf('\xff', 1);
+ return [str.substring(1, idx), str.substring(idx + 1)];
+ },
+ lowerBound: '\x00',
+ upperBound: '\xff'
+};
+
+var codec = new Codec();
+
+function sublevelPouch(db) {
+ return sublevel(nut(db, precodec, codec), [], ReadStream, db.options);
+}
+
+export { sublevelPouch as default };
diff --git a/packages/pouchdb-lib/lib/pouchdb-utils.js b/packages/pouchdb-lib/lib/pouchdb-utils.js
new file mode 100644
index 0000000000..4113d43ac5
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb-utils.js
@@ -0,0 +1,198 @@
+import { p as pick, v as v4 } from './rev-48662a2a.js';
+export { b as bulkGetShim, h as hasLocalStorage, i as invalidIdError, l as listenerCount, p as pick, r as rev } from './rev-48662a2a.js';
+import EE from 'node:events';
+import { n as nextTick } from './nextTick-ea093886.js';
+export { n as nextTick } from './nextTick-ea093886.js';
+export { c as clone } from './clone-7eeb6295.js';
+export { g as guardedConsole } from './guardedConsole-f54e5a40.js';
+export { a as assign, f as functionName } from './functionName-706c6c65.js';
+import { createError, BAD_REQUEST } from './pouchdb-errors.js';
+export { f as flatten } from './flatten-994f45c6.js';
+export { i as isRemote } from './isRemote-2533b7cb.js';
+export { n as normalizeDdocFunctionName, p as parseDdocFunctionName } from './normalizeDdocFunctionName-ea3481cf.js';
+export { o as once } from './once-de8350b9.js';
+export { s as scopeEval } from './scopeEval-ff3a416d.js';
+export { t as toPromise } from './toPromise-f6e385ee.js';
+export { u as upsert } from './upsert-331b6913.js';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'buffer';
+
+class Changes extends EE {
+ constructor() {
+ super();
+
+ this._listeners = {};
+ }
+
+ addListener(dbName, id, db, opts) {
+ if (this._listeners[id]) {
+ return;
+ }
+ var inprogress = false;
+ var self = this;
+ function eventFunction() {
+ if (!self._listeners[id]) {
+ return;
+ }
+ if (inprogress) {
+ inprogress = 'waiting';
+ return;
+ }
+ inprogress = true;
+ var changesOpts = pick(opts, [
+ 'style', 'include_docs', 'attachments', 'conflicts', 'filter',
+ 'doc_ids', 'view', 'since', 'query_params', 'binary', 'return_docs'
+ ]);
+
+ function onError() {
+ inprogress = false;
+ }
+
+ db.changes(changesOpts).on('change', function (c) {
+ if (c.seq > opts.since && !opts.cancelled) {
+ opts.since = c.seq;
+ opts.onChange(c);
+ }
+ }).on('complete', function () {
+ if (inprogress === 'waiting') {
+ nextTick(eventFunction);
+ }
+ inprogress = false;
+ }).on('error', onError);
+ }
+ this._listeners[id] = eventFunction;
+ this.on(dbName, eventFunction);
+ }
+
+ removeListener(dbName, id) {
+ if (!(id in this._listeners)) {
+ return;
+ }
+ super.removeListener(dbName, this._listeners[id]);
+ delete this._listeners[id];
+ }
+
+ notifyLocalWindows(dbName) {
+ }
+
+ notify(dbName) {
+ this.emit(dbName);
+ this.notifyLocalWindows(dbName);
+ }
+}
+
+function randomNumber(min, max) {
+ var maxTimeout = 600000; // Hard-coded default of 10 minutes
+ min = parseInt(min, 10) || 0;
+ max = parseInt(max, 10);
+ if (max !== max || max <= min) {
+ max = (min || 1) << 1; //doubling
+ } else {
+ max = max + 1;
+ }
+ // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout
+ if (max > maxTimeout) {
+ min = maxTimeout >> 1; // divide by two
+ max = maxTimeout;
+ }
+ var ratio = Math.random();
+ var range = max - min;
+
+ return ~~(range * ratio + min); // ~~ coerces to an int, but fast.
+}
+
+function defaultBackOff(min) {
+ var max = 0;
+ if (!min) {
+ max = 2000;
+ }
+ return randomNumber(min, max);
+}
+
+// We assume Node users don't need to see this warning
+var res = function () {};
+
+function tryFilter(filter, doc, req) {
+ try {
+ return !filter(doc, req);
+ } catch (err) {
+ var msg = 'Filter function threw: ' + err.toString();
+ return createError(BAD_REQUEST, msg);
+ }
+}
+
+function filterChange(opts) {
+ var req = {};
+ var hasFilter = opts.filter && typeof opts.filter === 'function';
+ req.query = opts.query_params;
+
+ return function filter(change) {
+ if (!change.doc) {
+ // CSG sends events on the changes feed that don't have documents,
+ // this hack makes a whole lot of existing code robust.
+ change.doc = {};
+ }
+
+ var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);
+
+ if (typeof filterReturn === 'object') {
+ return filterReturn;
+ }
+
+ if (filterReturn) {
+ return false;
+ }
+
+ if (!opts.include_docs) {
+ delete change.doc;
+ } else if (!opts.attachments) {
+ for (var att in change.doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(change.doc._attachments, att)) {
+ change.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ return true;
+ };
+}
+
+// originally parseUri 1.2.2, now patched by us
+// (c) Steven Levithan
+// MIT License
+var keys = ["source", "protocol", "authority", "userInfo", "user", "password",
+ "host", "port", "relative", "path", "directory", "file", "query", "anchor"];
+var qName ="queryKey";
+var qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;
+
+// use the "loose" parser
+/* eslint no-useless-escape: 0 */
+var parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
+
+function parseUri(str) {
+ var m = parser.exec(str);
+ var uri = {};
+ var i = 14;
+
+ while (i--) {
+ var key = keys[i];
+ var value = m[i] || "";
+ var encoded = ['user', 'password'].indexOf(key) !== -1;
+ uri[key] = encoded ? decodeURIComponent(value) : value;
+ }
+
+ uri[qName] = {};
+ uri[keys[12]].replace(qParser, function ($0, $1, $2) {
+ if ($1) {
+ uri[qName][$1] = $2;
+ }
+ });
+
+ return uri;
+}
+
+var uuid = v4; // mimic old import, only v4 is ever used elsewhere
+
+export { Changes as changesHandler, defaultBackOff, res as explainError, filterChange, parseUri, uuid };
diff --git a/packages/pouchdb-lib/lib/pouchdb.js b/packages/pouchdb-lib/lib/pouchdb.js
new file mode 100644
index 0000000000..c86754ce43
--- /dev/null
+++ b/packages/pouchdb-lib/lib/pouchdb.js
@@ -0,0 +1,80 @@
+import './pouchdb-node.js';
+import PouchDB from './pouchdb-core.js';
+export { default } from './pouchdb-core.js';
+import './pouchdb-adapter-leveldb.js';
+import './index-3d81fcba.js';
+import './_commonjsHelpers-24198af3.js';
+import 'events';
+import 'util';
+import 'buffer';
+import './readable-bcb7bff2.js';
+import 'stream';
+import 'assert';
+import './pouchdb-utils.js';
+import './rev-48662a2a.js';
+import './pouchdb-errors.js';
+import 'node:events';
+import 'crypto';
+import './stringMd5-15f53eba.js';
+import './nextTick-ea093886.js';
+import './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './guardedConsole-f54e5a40.js';
+import './flatten-994f45c6.js';
+import './isRemote-2533b7cb.js';
+import './normalizeDdocFunctionName-ea3481cf.js';
+import './once-de8350b9.js';
+import './scopeEval-ff3a416d.js';
+import './toPromise-f6e385ee.js';
+import './upsert-331b6913.js';
+import './allDocsKeysQuery-7f4fbcb9.js';
+import './parseDoc-71681539.js';
+import './collectConflicts-ad0b7c70.js';
+import './rootToLeaf-f8d0e78a.js';
+import './latest-0521537f.js';
+import './isLocalId-d067de54.js';
+import './binaryStringToBlobOrBuffer-39ece35b.js';
+import './typedBuffer-a8220a49.js';
+import './binaryMd5-601b2421.js';
+import './processDocs-7c802567.js';
+import './merge-1e46cced.js';
+import './revExists-12209d1c.js';
+import './safeJsonStringify-6520e306.js';
+import './pouchdb-platform.js';
+import 'node:assert';
+import 'node:fs';
+import 'node:buffer';
+import 'node:crypto';
+import 'node:stream';
+import 'node:http';
+import 'node:url';
+import 'node:https';
+import 'node:zlib';
+import 'node:util';
+import 'node:vm';
+import 'node:path';
+import 'node:os';
+import 'fs';
+import 'path';
+import 'os';
+import './pouchdb-adapter-http.js';
+import './pouchdb-mapreduce.js';
+import 'vm';
+import './pouchdb-mapreduce-utils.js';
+import './pouchdb-abstract-mapreduce.js';
+import './base64StringToBlobOrBuffer-3fd03be6.js';
+import './pouchdb-collate.js';
+import './fetch-f2310cb2.js';
+import 'http';
+import 'url';
+import 'punycode';
+import 'https';
+import 'zlib';
+import './pouchdb-crypto.js';
+import './pouchdb-replication.js';
+import './pouchdb-checkpointer.js';
+import './pouchdb-generate-replication-id.js';
+import './findPathToLeaf-7e69c93c.js';
+import 'pouchdb-utils.js';
+import './pouchdb-changes-filter.js';
+import './matches-selector-87ab4d5f.js';
diff --git a/packages/pouchdb-lib/lib/preprocessAttachments-0457f2a2.js b/packages/pouchdb-lib/lib/preprocessAttachments-0457f2a2.js
new file mode 100644
index 0000000000..bff05a5aa4
--- /dev/null
+++ b/packages/pouchdb-lib/lib/preprocessAttachments-0457f2a2.js
@@ -0,0 +1,115 @@
+import { b as binStringToBluffer } from './binaryStringToBlobOrBuffer-39ece35b.js';
+import { b as blobToBase64, a as blobToBase64$1 } from './blobOrBufferToBinaryString-56930128.js';
+import { createError, BAD_ARG } from './pouchdb-errors.js';
+import { b as binaryMd5 } from './binaryMd5-601b2421.js';
+import 'crypto';
+
+function parseBase64(data) {
+ try {
+ return atob(data);
+ } catch (e) {
+ var err = createError(BAD_ARG,
+ 'Attachment is not a valid base64 string');
+ return {error: err};
+ }
+}
+
+function preprocessString(att, blobType, callback) {
+ var asBinary = parseBase64(att.data);
+ if (asBinary.error) {
+ return callback(asBinary.error);
+ }
+
+ att.length = asBinary.length;
+ if (blobType === 'blob') {
+ att.data = binStringToBluffer(asBinary, att.content_type);
+ } else if (blobType === 'base64') {
+ att.data = btoa(asBinary);
+ } else { // binary
+ att.data = asBinary;
+ }
+ binaryMd5(asBinary, function (result) {
+ att.digest = 'md5-' + result;
+ callback();
+ });
+}
+
+function preprocessBlob(att, blobType, callback) {
+ binaryMd5(att.data, function (md5) {
+ att.digest = 'md5-' + md5;
+ // size is for blobs (browser), length is for buffers (node)
+ att.length = att.data.size || att.data.length || 0;
+ if (blobType === 'binary') {
+ blobToBase64(att.data, function (binString) {
+ att.data = binString;
+ callback();
+ });
+ } else if (blobType === 'base64') {
+ blobToBase64$1(att.data, function (b64) {
+ att.data = b64;
+ callback();
+ });
+ } else {
+ callback();
+ }
+ });
+}
+
+function preprocessAttachment(att, blobType, callback) {
+ if (att.stub) {
+ return callback();
+ }
+ if (typeof att.data === 'string') { // input is a base64 string
+ preprocessString(att, blobType, callback);
+ } else { // input is a blob
+ preprocessBlob(att, blobType, callback);
+ }
+}
+
+function preprocessAttachments(docInfos, blobType, callback) {
+
+ if (!docInfos.length) {
+ return callback();
+ }
+
+ var docv = 0;
+ var overallErr;
+
+ docInfos.forEach(function (docInfo) {
+ var attachments = docInfo.data && docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) : [];
+ var recv = 0;
+
+ if (!attachments.length) {
+ return done();
+ }
+
+ function processedAttachment(err) {
+ overallErr = err;
+ recv++;
+ if (recv === attachments.length) {
+ done();
+ }
+ }
+
+ for (var key in docInfo.data._attachments) {
+ if (Object.prototype.hasOwnProperty.call(docInfo.data._attachments, key)) {
+ preprocessAttachment(docInfo.data._attachments[key],
+ blobType, processedAttachment);
+ }
+ }
+ });
+
+ function done() {
+ docv++;
+ if (docInfos.length === docv) {
+ if (overallErr) {
+ callback(overallErr);
+ } else {
+ callback();
+ }
+ }
+ }
+}
+
+export { preprocessAttachments as p };
diff --git a/packages/pouchdb-lib/lib/processDocs-7c802567.js b/packages/pouchdb-lib/lib/processDocs-7c802567.js
new file mode 100644
index 0000000000..9ac690aacd
--- /dev/null
+++ b/packages/pouchdb-lib/lib/processDocs-7c802567.js
@@ -0,0 +1,175 @@
+import { createError, REV_CONFLICT, MISSING_DOC } from './pouchdb-errors.js';
+import { p as parseDoc } from './parseDoc-71681539.js';
+import { w as winningRev } from './rootToLeaf-f8d0e78a.js';
+import { m as merge } from './merge-1e46cced.js';
+import 'node:events';
+import './functionName-706c6c65.js';
+import 'crypto';
+import { r as revExists } from './revExists-12209d1c.js';
+import { i as isDeleted, a as isLocalId } from './isLocalId-d067de54.js';
+
+function updateDoc(revLimit, prev, docInfo, results,
+ i, cb, writeDoc, newEdits) {
+
+ if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
+ results[i] = docInfo;
+ return cb();
+ }
+
+ // sometimes this is pre-calculated. historically not always
+ var previousWinningRev = prev.winningRev || winningRev(prev);
+ var previouslyDeleted = 'deleted' in prev ? prev.deleted :
+ isDeleted(prev, previousWinningRev);
+ var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
+ isDeleted(docInfo.metadata);
+ var isRoot = /^1-/.test(docInfo.metadata.rev);
+
+ if (previouslyDeleted && !deleted && newEdits && isRoot) {
+ var newDoc = docInfo.data;
+ newDoc._rev = previousWinningRev;
+ newDoc._id = docInfo.metadata.id;
+ docInfo = parseDoc(newDoc, newEdits);
+ }
+
+ var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
+
+ var inConflict = newEdits && ((
+ (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
+ (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
+ (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
+
+ if (inConflict) {
+ var err = createError(REV_CONFLICT);
+ results[i] = err;
+ return cb();
+ }
+
+ var newRev = docInfo.metadata.rev;
+ docInfo.metadata.rev_tree = merged.tree;
+ docInfo.stemmedRevs = merged.stemmedRevs || [];
+ /* istanbul ignore else */
+ if (prev.rev_map) {
+ docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
+ }
+
+ // recalculate
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$1);
+
+ // calculate the total number of documents that were added/removed,
+ // from the perspective of total_rows/doc_count
+ var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
+ previouslyDeleted < winningRevIsDeleted ? -1 : 1;
+
+ var newRevIsDeleted;
+ if (newRev === winningRev$1) {
+ // if the new rev is the same as the winning rev, we can reuse that value
+ newRevIsDeleted = winningRevIsDeleted;
+ } else {
+ // if they're not the same, then we need to recalculate
+ newRevIsDeleted = isDeleted(docInfo.metadata, newRev);
+ }
+
+ writeDoc(docInfo, winningRev$1, winningRevIsDeleted, newRevIsDeleted,
+ true, delta, i, cb);
+}
+
+function rootIsMissing(docInfo) {
+ return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';
+}
+
+function processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,
+ writeDoc, opts, overallCallback) {
+
+ // Default to 1000 locally
+ revLimit = revLimit || 1000;
+
+ function insertDoc(docInfo, resultsIdx, callback) {
+ // Cant insert new deleted documents
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var deleted = isDeleted(docInfo.metadata, winningRev$1);
+ if ('was_delete' in opts && deleted) {
+ results[resultsIdx] = createError(MISSING_DOC, 'deleted');
+ return callback();
+ }
+
+ // 4712 - detect whether a new document was inserted with a _rev
+ var inConflict = newEdits && rootIsMissing(docInfo);
+
+ if (inConflict) {
+ var err = createError(REV_CONFLICT);
+ results[resultsIdx] = err;
+ return callback();
+ }
+
+ var delta = deleted ? 0 : 1;
+
+ writeDoc(docInfo, winningRev$1, deleted, deleted, false,
+ delta, resultsIdx, callback);
+ }
+
+ var newEdits = opts.new_edits;
+ var idsToDocs = new Map();
+
+ var docsDone = 0;
+ var docsToDo = docInfos.length;
+
+ function checkAllDocsDone() {
+ if (++docsDone === docsToDo && overallCallback) {
+ overallCallback();
+ }
+ }
+
+ docInfos.forEach(function (currentDoc, resultsIdx) {
+
+ if (currentDoc._id && isLocalId(currentDoc._id)) {
+ var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';
+ api[fun](currentDoc, {ctx: tx}, function (err, res) {
+ results[resultsIdx] = err || res;
+ checkAllDocsDone();
+ });
+ return;
+ }
+
+ var id = currentDoc.metadata.id;
+ if (idsToDocs.has(id)) {
+ docsToDo--; // duplicate
+ idsToDocs.get(id).push([currentDoc, resultsIdx]);
+ } else {
+ idsToDocs.set(id, [[currentDoc, resultsIdx]]);
+ }
+ });
+
+ // in the case of new_edits, the user can provide multiple docs
+ // with the same id. these need to be processed sequentially
+ idsToDocs.forEach(function (docs, id) {
+ var numDone = 0;
+
+ function docWritten() {
+ if (++numDone < docs.length) {
+ nextDoc();
+ } else {
+ checkAllDocsDone();
+ }
+ }
+ function nextDoc() {
+ var value = docs[numDone];
+ var currentDoc = value[0];
+ var resultsIdx = value[1];
+
+ if (fetchedDocs.has(id)) {
+ updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,
+ resultsIdx, docWritten, writeDoc, newEdits);
+ } else {
+ // Ensure stemming applies to new writes as well
+ var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);
+ currentDoc.metadata.rev_tree = merged.tree;
+ currentDoc.stemmedRevs = merged.stemmedRevs || [];
+ insertDoc(currentDoc, resultsIdx, docWritten);
+ }
+ }
+ nextDoc();
+ });
+}
+
+export { processDocs as p, updateDoc as u };
diff --git a/packages/pouchdb-lib/lib/readAsBinaryString-06e911ba.js b/packages/pouchdb-lib/lib/readAsBinaryString-06e911ba.js
new file mode 100644
index 0000000000..c9ec13a8d7
--- /dev/null
+++ b/packages/pouchdb-lib/lib/readAsBinaryString-06e911ba.js
@@ -0,0 +1,32 @@
+//Can't find original post, but this is close
+//http://stackoverflow.com/questions/6965107/ (continues on next line)
+//converting-between-strings-and-arraybuffers
+function arrayBufferToBinaryString(buffer) {
+ var binary = '';
+ var bytes = new Uint8Array(buffer);
+ var length = bytes.byteLength;
+ for (var i = 0; i < length; i++) {
+ binary += String.fromCharCode(bytes[i]);
+ }
+ return binary;
+}
+
+// shim for browsers that don't support it
+function readAsBinaryString(blob, callback) {
+ var reader = new FileReader();
+ var hasBinaryString = typeof reader.readAsBinaryString === 'function';
+ reader.onloadend = function (e) {
+ var result = e.target.result || '';
+ if (hasBinaryString) {
+ return callback(result);
+ }
+ callback(arrayBufferToBinaryString(result));
+ };
+ if (hasBinaryString) {
+ reader.readAsBinaryString(blob);
+ } else {
+ reader.readAsArrayBuffer(blob);
+ }
+}
+
+export { readAsBinaryString as r };
diff --git a/packages/pouchdb-lib/lib/readable-bcb7bff2.js b/packages/pouchdb-lib/lib/readable-bcb7bff2.js
new file mode 100644
index 0000000000..933a487ca4
--- /dev/null
+++ b/packages/pouchdb-lib/lib/readable-bcb7bff2.js
@@ -0,0 +1,2575 @@
+import { g as getDefaultExportFromCjs } from './_commonjsHelpers-24198af3.js';
+import require$$0 from 'buffer';
+import require$$0$2 from 'events';
+import Stream from 'stream';
+import require$$0$1 from 'util';
+
+var inherits$1 = {exports: {}};
+
+var inherits_browser = {exports: {}};
+
+var hasRequiredInherits_browser;
+
+function requireInherits_browser () {
+ if (hasRequiredInherits_browser) return inherits_browser.exports;
+ hasRequiredInherits_browser = 1;
+ if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ }
+ };
+ } else {
+ // old school shim for old browsers
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ var TempCtor = function () {};
+ TempCtor.prototype = superCtor.prototype;
+ ctor.prototype = new TempCtor();
+ ctor.prototype.constructor = ctor;
+ }
+ };
+ }
+ return inherits_browser.exports;
+}
+
+try {
+ var util$3 = require('util');
+ /* istanbul ignore next */
+ if (typeof util$3.inherits !== 'function') throw '';
+ inherits$1.exports = util$3.inherits;
+} catch (e) {
+ /* istanbul ignore next */
+ inherits$1.exports = requireInherits_browser();
+}
+
+var inheritsExports = inherits$1.exports;
+var inherits = /*@__PURE__*/getDefaultExportFromCjs(inheritsExports);
+
+var ltgt$1 = {};
+
+(function (exports) {
+ exports.compare = function (a, b) {
+
+ if(Buffer.isBuffer(a)) {
+ var l = Math.min(a.length, b.length);
+ for(var i = 0; i < l; i++) {
+ var cmp = a[i] - b[i];
+ if(cmp) return cmp
+ }
+ return a.length - b.length
+ }
+
+ return a < b ? -1 : a > b ? 1 : 0
+ };
+
+ // to be compatible with the current abstract-leveldown tests
+ // nullish or empty strings.
+ // I could use !!val but I want to permit numbers and booleans,
+ // if possible.
+
+ function isDef (val) {
+ return val !== undefined && val !== ''
+ }
+
+ function has (range, name) {
+ return Object.hasOwnProperty.call(range, name)
+ }
+
+ function hasKey(range, name) {
+ return Object.hasOwnProperty.call(range, name) && name
+ }
+
+ var lowerBoundKey = exports.lowerBoundKey = function (range) {
+ return (
+ hasKey(range, 'gt')
+ || hasKey(range, 'gte')
+ || hasKey(range, 'min')
+ || (range.reverse ? hasKey(range, 'end') : hasKey(range, 'start'))
+ || undefined
+ )
+ };
+
+ var lowerBound = exports.lowerBound = function (range, def) {
+ var k = lowerBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ var lowerBoundInclusive = exports.lowerBoundInclusive = function (range) {
+ return has(range, 'gt') ? false : true
+ };
+
+ var upperBoundInclusive = exports.upperBoundInclusive =
+ function (range) {
+ return (has(range, 'lt') /*&& !range.maxEx*/) ? false : true
+ };
+
+ var lowerBoundExclusive = exports.lowerBoundExclusive =
+ function (range) {
+ return !lowerBoundInclusive(range)
+ };
+
+ var upperBoundExclusive = exports.upperBoundExclusive =
+ function (range) {
+ return !upperBoundInclusive(range)
+ };
+
+ var upperBoundKey = exports.upperBoundKey = function (range) {
+ return (
+ hasKey(range, 'lt')
+ || hasKey(range, 'lte')
+ || hasKey(range, 'max')
+ || (range.reverse ? hasKey(range, 'start') : hasKey(range, 'end'))
+ || undefined
+ )
+ };
+
+ var upperBound = exports.upperBound = function (range, def) {
+ var k = upperBoundKey(range);
+ return k ? range[k] : def
+ };
+
+ exports.start = function (range, def) {
+ return range.reverse ? upperBound(range, def) : lowerBound(range, def)
+ };
+ exports.end = function (range, def) {
+ return range.reverse ? lowerBound(range, def) : upperBound(range, def)
+ };
+ exports.startInclusive = function (range) {
+ return (
+ range.reverse
+ ? upperBoundInclusive(range)
+ : lowerBoundInclusive(range)
+ )
+ };
+ exports.endInclusive = function (range) {
+ return (
+ range.reverse
+ ? lowerBoundInclusive(range)
+ : upperBoundInclusive(range)
+ )
+ };
+
+ function id (e) { return e }
+
+ exports.toLtgt = function (range, _range, map, lower, upper) {
+ _range = _range || {};
+ map = map || id;
+ var defaults = arguments.length > 3;
+ var lb = exports.lowerBoundKey(range);
+ var ub = exports.upperBoundKey(range);
+ if(lb) {
+ if(lb === 'gt') _range.gt = map(range.gt, false);
+ else _range.gte = map(range[lb], false);
+ }
+ else if(defaults)
+ _range.gte = map(lower, false);
+
+ if(ub) {
+ if(ub === 'lt') _range.lt = map(range.lt, true);
+ else _range.lte = map(range[ub], true);
+ }
+ else if(defaults)
+ _range.lte = map(upper, true);
+
+ if(range.reverse != null)
+ _range.reverse = !!range.reverse;
+
+ //if range was used mutably
+ //(in level-sublevel it's part of an options object
+ //that has more properties on it.)
+ if(has(_range, 'max')) delete _range.max;
+ if(has(_range, 'min')) delete _range.min;
+ if(has(_range, 'start')) delete _range.start;
+ if(has(_range, 'end')) delete _range.end;
+
+ return _range
+ };
+
+ exports.contains = function (range, key, compare) {
+ compare = compare || exports.compare;
+
+ var lb = lowerBound(range);
+ if(isDef(lb)) {
+ var cmp = compare(key, lb);
+ if(cmp < 0 || (cmp === 0 && lowerBoundExclusive(range)))
+ return false
+ }
+
+ var ub = upperBound(range);
+ if(isDef(ub)) {
+ var cmp = compare(key, ub);
+ if(cmp > 0 || (cmp === 0) && upperBoundExclusive(range))
+ return false
+ }
+
+ return true
+ };
+
+ exports.filter = function (range, compare) {
+ return function (key) {
+ return exports.contains(range, key, compare)
+ }
+ };
+} (ltgt$1));
+
+var ltgt = /*@__PURE__*/getDefaultExportFromCjs(ltgt$1);
+
+var encodings$1 = {};
+
+(function (exports) {
+ var Buffer = require$$0.Buffer;
+
+ exports.utf8 = exports['utf-8'] = {
+ encode: function (data) {
+ return isBinary(data) ? data : String(data)
+ },
+ decode: identity,
+ buffer: false,
+ type: 'utf8'
+ };
+
+ exports.json = {
+ encode: JSON.stringify,
+ decode: JSON.parse,
+ buffer: false,
+ type: 'json'
+ };
+
+ exports.binary = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data)
+ },
+ decode: identity,
+ buffer: true,
+ type: 'binary'
+ };
+
+ exports.none = {
+ encode: identity,
+ decode: identity,
+ buffer: false,
+ type: 'id'
+ };
+
+ exports.id = exports.none;
+
+ var bufferEncodings = [
+ 'hex',
+ 'ascii',
+ 'base64',
+ 'ucs2',
+ 'ucs-2',
+ 'utf16le',
+ 'utf-16le'
+ ];
+
+ bufferEncodings.forEach(function (type) {
+ exports[type] = {
+ encode: function (data) {
+ return isBinary(data) ? data : Buffer.from(data, type)
+ },
+ decode: function (buffer) {
+ return buffer.toString(type)
+ },
+ buffer: true,
+ type: type
+ };
+ });
+
+ function identity (value) {
+ return value
+ }
+
+ function isBinary (data) {
+ return data === undefined || data === null || Buffer.isBuffer(data)
+ }
+} (encodings$1));
+
+var encodings = encodings$1;
+
+var levelCodec = Codec;
+
+function Codec (opts) {
+ if (!(this instanceof Codec)) {
+ return new Codec(opts)
+ }
+ this.opts = opts || {};
+ this.encodings = encodings;
+}
+
+Codec.prototype._encoding = function (encoding) {
+ if (typeof encoding === 'string') encoding = encodings[encoding];
+ if (!encoding) encoding = encodings.id;
+ return encoding
+};
+
+Codec.prototype._keyEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && batchOpts.keyEncoding) ||
+ (opts && opts.keyEncoding) ||
+ this.opts.keyEncoding)
+};
+
+Codec.prototype._valueEncoding = function (opts, batchOpts) {
+ return this._encoding((batchOpts && (batchOpts.valueEncoding || batchOpts.encoding)) ||
+ (opts && (opts.valueEncoding || opts.encoding)) ||
+ (this.opts.valueEncoding || this.opts.encoding))
+};
+
+Codec.prototype.encodeKey = function (key, opts, batchOpts) {
+ return this._keyEncoding(opts, batchOpts).encode(key)
+};
+
+Codec.prototype.encodeValue = function (value, opts, batchOpts) {
+ return this._valueEncoding(opts, batchOpts).encode(value)
+};
+
+Codec.prototype.decodeKey = function (key, opts) {
+ return this._keyEncoding(opts).decode(key)
+};
+
+Codec.prototype.decodeValue = function (value, opts) {
+ return this._valueEncoding(opts).decode(value)
+};
+
+Codec.prototype.encodeBatch = function (ops, opts) {
+ var self = this;
+
+ return ops.map(function (_op) {
+ var op = {
+ type: _op.type,
+ key: self.encodeKey(_op.key, opts, _op)
+ };
+ if (self.keyAsBuffer(opts, _op)) op.keyEncoding = 'binary';
+ if (_op.prefix) op.prefix = _op.prefix;
+ if ('value' in _op) {
+ op.value = self.encodeValue(_op.value, opts, _op);
+ if (self.valueAsBuffer(opts, _op)) op.valueEncoding = 'binary';
+ }
+ return op
+ })
+};
+
+var ltgtKeys = ['lt', 'gt', 'lte', 'gte', 'start', 'end'];
+
+Codec.prototype.encodeLtgt = function (ltgt) {
+ var self = this;
+ var ret = {};
+ Object.keys(ltgt).forEach(function (key) {
+ ret[key] = ltgtKeys.indexOf(key) > -1
+ ? self.encodeKey(ltgt[key], ltgt)
+ : ltgt[key];
+ });
+ return ret
+};
+
+Codec.prototype.createStreamDecoder = function (opts) {
+ var self = this;
+
+ if (opts.keys && opts.values) {
+ return function (key, value) {
+ return {
+ key: self.decodeKey(key, opts),
+ value: self.decodeValue(value, opts)
+ }
+ }
+ } else if (opts.keys) {
+ return function (key) {
+ return self.decodeKey(key, opts)
+ }
+ } else if (opts.values) {
+ return function (_, value) {
+ return self.decodeValue(value, opts)
+ }
+ } else {
+ return function () {}
+ }
+};
+
+Codec.prototype.keyAsBuffer = function (opts) {
+ return this._keyEncoding(opts).buffer
+};
+
+Codec.prototype.valueAsBuffer = function (opts) {
+ return this._valueEncoding(opts).buffer
+};
+
+var Codec$1 = /*@__PURE__*/getDefaultExportFromCjs(levelCodec);
+
+var readable = {exports: {}};
+
+var isarray = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+var util$2 = {};
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+util$2.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+util$2.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+util$2.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+util$2.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+util$2.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+util$2.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+util$2.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+util$2.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+}
+util$2.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+util$2.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+util$2.isDate = isDate;
+
+function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+util$2.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+util$2.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+util$2.isPrimitive = isPrimitive;
+
+util$2.isBuffer = require$$0.Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+var _stream_writable;
+var hasRequired_stream_writable;
+
+function require_stream_writable () {
+ if (hasRequired_stream_writable) return _stream_writable;
+ hasRequired_stream_writable = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // A bit simpler than readable streams.
+ // Implement an async ._write(chunk, cb), and it'll handle all
+ // the drain event emission and buffering.
+
+ _stream_writable = Writable;
+
+ /**/
+ var Buffer = require$$0.Buffer;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Stream$1 = Stream;
+
+ util.inherits(Writable, Stream$1);
+
+ function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+ }
+
+ function WritableState(options, stream) {
+ var Duplex = require_stream_duplex();
+
+ options = options || {};
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function(er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.buffer = [];
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+ }
+
+ function Writable(options) {
+ var Duplex = require_stream_duplex();
+
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof Duplex))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function() {
+ this.emit('error', new Error('Cannot pipe. Not readable.'));
+ };
+
+
+ function writeAfterEnd(stream, state, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ }
+
+ // If we get something that is not a buffer, string, null, or undefined,
+ // and we're not in objectMode, then that's an error.
+ // Otherwise stream chunks are all considered to be of length=1, and the
+ // watermarks determine how many objects to keep in the buffer, rather than
+ // how many bytes or characters.
+ function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ var er = new TypeError('Invalid non-string/buffer chunk');
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ valid = false;
+ }
+ return valid;
+ }
+
+ Writable.prototype.write = function(chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+
+ if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (!util.isFunction(cb))
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
+
+ return ret;
+ };
+
+ Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+ };
+
+ Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+ };
+
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ util.isString(chunk)) {
+ chunk = new Buffer(chunk, encoding);
+ }
+ return chunk;
+ }
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, chunk, encoding, cb) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret)
+ state.needDrain = true;
+
+ if (state.writing || state.corked)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ return ret;
+ }
+
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+
+ function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ state.pendingcb--;
+ cb(er);
+ });
+ else {
+ state.pendingcb--;
+ cb(er);
+ }
+
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ }
+
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er)
+ onwriteError(stream, state, sync, er, cb);
+ else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(stream, state);
+
+ if (!finished &&
+ !state.corked &&
+ !state.bufferProcessing &&
+ state.buffer.length) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ process.nextTick(function() {
+ afterWrite(stream, state, finished, cb);
+ });
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished)
+ onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
+ }
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+ }
+
+ state.bufferProcessing = false;
+ }
+
+ Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+
+ };
+
+ Writable.prototype._writev = null;
+
+ Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (util.isFunction(chunk)) {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (!util.isNullOrUndefined(chunk))
+ this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished)
+ endWritable(this, state, cb);
+ };
+
+
+ function needFinish(stream, state) {
+ return (state.ending &&
+ state.length === 0 &&
+ !state.finished &&
+ !state.writing);
+ }
+
+ function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+
+ function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
+ }
+ return need;
+ }
+
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished)
+ process.nextTick(cb);
+ else
+ stream.once('finish', cb);
+ }
+ state.ended = true;
+ }
+ return _stream_writable;
+}
+
+var _stream_duplex;
+var hasRequired_stream_duplex;
+
+function require_stream_duplex () {
+ if (hasRequired_stream_duplex) return _stream_duplex;
+ hasRequired_stream_duplex = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // a duplex stream is just a stream that is both readable and writable.
+ // Since JS doesn't have multiple prototypal inheritance, this class
+ // prototypally inherits from Readable, and then parasitically from
+ // Writable.
+
+ _stream_duplex = Duplex;
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+ };
+ /**/
+
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var Readable = require_stream_readable();
+ var Writable = require_stream_writable();
+
+ util.inherits(Duplex, Readable);
+
+ forEach(objectKeys(Writable.prototype), function(method) {
+ if (!Duplex.prototype[method])
+ Duplex.prototype[method] = Writable.prototype[method];
+ });
+
+ function Duplex(options) {
+ if (!(this instanceof Duplex))
+ return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false)
+ this.readable = false;
+
+ if (options && options.writable === false)
+ this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false)
+ this.allowHalfOpen = false;
+
+ this.once('end', onend);
+ }
+
+ // the no-half-open enforcer
+ function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended)
+ return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(this.end.bind(this));
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+ return _stream_duplex;
+}
+
+var string_decoder = {};
+
+var hasRequiredString_decoder;
+
+function requireString_decoder () {
+ if (hasRequiredString_decoder) return string_decoder;
+ hasRequiredString_decoder = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var Buffer = require$$0.Buffer;
+
+ var isBufferEncoding = Buffer.isEncoding
+ || function(encoding) {
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+ default: return false;
+ }
+ };
+
+
+ function assertEncoding(encoding) {
+ if (encoding && !isBufferEncoding(encoding)) {
+ throw new Error('Unknown encoding: ' + encoding);
+ }
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters. CESU-8 is handled as part of the UTF-8 encoding.
+ //
+ // @TODO Handling all encodings inside a single object makes it very difficult
+ // to reason about this code, so it should be split up in the future.
+ // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+ // points as used by CESU-8.
+ var StringDecoder = string_decoder.StringDecoder = function(encoding) {
+ this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+ assertEncoding(encoding);
+ switch (this.encoding) {
+ case 'utf8':
+ // CESU-8 represents each of Surrogate Pair by 3-bytes
+ this.surrogateSize = 3;
+ break;
+ case 'ucs2':
+ case 'utf16le':
+ // UTF-16 represents each of Surrogate Pair by 2-bytes
+ this.surrogateSize = 2;
+ this.detectIncompleteChar = utf16DetectIncompleteChar;
+ break;
+ case 'base64':
+ // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+ this.surrogateSize = 3;
+ this.detectIncompleteChar = base64DetectIncompleteChar;
+ break;
+ default:
+ this.write = passThroughWrite;
+ return;
+ }
+
+ // Enough space to store all bytes of a single character. UTF-8 needs 4
+ // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+ this.charBuffer = new Buffer(6);
+ // Number of bytes received for the current incomplete multi-byte character.
+ this.charReceived = 0;
+ // Number of bytes expected for the current incomplete multi-byte character.
+ this.charLength = 0;
+ };
+
+
+ // write decodes the given buffer and returns it as JS string that is
+ // guaranteed to not contain any partial multi-byte characters. Any partial
+ // character found at the end of the buffer is buffered up, and will be
+ // returned when calling write again with the remaining bytes.
+ //
+ // Note: Converting a Buffer containing an orphan surrogate to a String
+ // currently works, but converting a String to a Buffer (via `new Buffer`, or
+ // Buffer#write) will replace incomplete surrogates with the unicode
+ // replacement character. See https://codereview.chromium.org/121173009/ .
+ StringDecoder.prototype.write = function(buffer) {
+ var charStr = '';
+ // if our last write ended with an incomplete multibyte character
+ while (this.charLength) {
+ // determine how many remaining bytes this buffer has to offer for this char
+ var available = (buffer.length >= this.charLength - this.charReceived) ?
+ this.charLength - this.charReceived :
+ buffer.length;
+
+ // add the new bytes to the char buffer
+ buffer.copy(this.charBuffer, this.charReceived, 0, available);
+ this.charReceived += available;
+
+ if (this.charReceived < this.charLength) {
+ // still not enough chars in this buffer? wait for more ...
+ return '';
+ }
+
+ // remove bytes belonging to the current character from the buffer
+ buffer = buffer.slice(available, buffer.length);
+
+ // get the character that was split
+ charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ var charCode = charStr.charCodeAt(charStr.length - 1);
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ this.charLength += this.surrogateSize;
+ charStr = '';
+ continue;
+ }
+ this.charReceived = this.charLength = 0;
+
+ // if there are no more bytes in this buffer, just emit our char
+ if (buffer.length === 0) {
+ return charStr;
+ }
+ break;
+ }
+
+ // determine and set charLength / charReceived
+ this.detectIncompleteChar(buffer);
+
+ var end = buffer.length;
+ if (this.charLength) {
+ // buffer the incomplete character bytes we got
+ buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+ end -= this.charReceived;
+ }
+
+ charStr += buffer.toString(this.encoding, 0, end);
+
+ var end = charStr.length - 1;
+ var charCode = charStr.charCodeAt(end);
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ var size = this.surrogateSize;
+ this.charLength += size;
+ this.charReceived += size;
+ this.charBuffer.copy(this.charBuffer, size, 0, size);
+ buffer.copy(this.charBuffer, 0, 0, size);
+ return charStr.substring(0, end);
+ }
+
+ // or just emit the charStr
+ return charStr;
+ };
+
+ // detectIncompleteChar determines if there is an incomplete UTF-8 character at
+ // the end of the given buffer. If so, it sets this.charLength to the byte
+ // length that character, and sets this.charReceived to the number of bytes
+ // that are available for this character.
+ StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+ // determine how many bytes we have to check at the end of this buffer
+ var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+ // Figure out if one of the last i bytes of our buffer announces an
+ // incomplete char.
+ for (; i > 0; i--) {
+ var c = buffer[buffer.length - i];
+
+ // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+ // 110XXXXX
+ if (i == 1 && c >> 5 == 0x06) {
+ this.charLength = 2;
+ break;
+ }
+
+ // 1110XXXX
+ if (i <= 2 && c >> 4 == 0x0E) {
+ this.charLength = 3;
+ break;
+ }
+
+ // 11110XXX
+ if (i <= 3 && c >> 3 == 0x1E) {
+ this.charLength = 4;
+ break;
+ }
+ }
+ this.charReceived = i;
+ };
+
+ StringDecoder.prototype.end = function(buffer) {
+ var res = '';
+ if (buffer && buffer.length)
+ res = this.write(buffer);
+
+ if (this.charReceived) {
+ var cr = this.charReceived;
+ var buf = this.charBuffer;
+ var enc = this.encoding;
+ res += buf.slice(0, cr).toString(enc);
+ }
+
+ return res;
+ };
+
+ function passThroughWrite(buffer) {
+ return buffer.toString(this.encoding);
+ }
+
+ function utf16DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 2;
+ this.charLength = this.charReceived ? 2 : 0;
+ }
+
+ function base64DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 3;
+ this.charLength = this.charReceived ? 3 : 0;
+ }
+ return string_decoder;
+}
+
+var _stream_readable;
+var hasRequired_stream_readable;
+
+function require_stream_readable () {
+ if (hasRequired_stream_readable) return _stream_readable;
+ hasRequired_stream_readable = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ _stream_readable = Readable;
+
+ /**/
+ var isArray = isarray;
+ /**/
+
+
+ /**/
+ var Buffer = require$$0.Buffer;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ var EE = require$$0$2.EventEmitter;
+
+ /**/
+ if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ var Stream$1 = Stream;
+
+ /**/
+ var util = util$2;
+ util.inherits = inheritsExports;
+ /**/
+
+ var StringDecoder;
+
+
+ /**/
+ var debug = require$$0$1;
+ if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+ } else {
+ debug = function () {};
+ }
+ /**/
+
+
+ util.inherits(Readable, Stream$1);
+
+ function ReadableState(options, stream) {
+ var Duplex = require_stream_duplex();
+
+ options = options || {};
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+
+ function Readable(options) {
+ require_stream_duplex();
+
+ if (!(this instanceof Readable))
+ return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ Stream$1.call(this);
+ }
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function(chunk, encoding) {
+ var state = this._readableState;
+
+ if (util.isString(chunk) && !state.objectMode) {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = new Buffer(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function(chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+ };
+
+ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (util.isNullOrUndefined(chunk)) {
+ state.reading = false;
+ if (!state.ended)
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var e = new Error('stream.unshift() after end event');
+ stream.emit('error', e);
+ } else {
+ if (state.decoder && !addToFront && !encoding)
+ chunk = state.decoder.write(chunk);
+
+ if (!addToFront)
+ state.reading = false;
+
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ state.buffer.push(chunk);
+
+ if (state.needReadable)
+ emitReadable(stream);
+ }
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+ }
+
+
+
+ // if it's past the high water mark, we can push in some more.
+ // Also, if we have no data yet, we can stand some
+ // more bytes. This is to work around cases where hwm=0,
+ // such as the repl. Also, if the push() triggered a
+ // readable event, and the user called read(largeNumber) such that
+ // needReadable was set, then we ought to push more, so that another
+ // 'readable' event will be triggered.
+ function needMoreData(state) {
+ return !state.ended &&
+ (state.needReadable ||
+ state.length < state.highWaterMark ||
+ state.length === 0);
+ }
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function(enc) {
+ if (!StringDecoder)
+ StringDecoder = requireString_decoder().StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+ };
+
+ // Don't raise the hwm > 128MB
+ var MAX_HWM = 0x800000;
+ function roundUpToNextPowerOf2(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2
+ n--;
+ for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+ n++;
+ }
+ return n;
+ }
+
+ function howMuchToRead(n, state) {
+ if (state.length === 0 && state.ended)
+ return 0;
+
+ if (state.objectMode)
+ return n === 0 ? 0 : 1;
+
+ if (isNaN(n) || util.isNull(n)) {
+ // only flow one buffer at a time
+ if (state.flowing && state.buffer.length)
+ return state.buffer[0].length;
+ else
+ return state.length;
+ }
+
+ if (n <= 0)
+ return 0;
+
+ // If we're asking for more than the target buffer level,
+ // then raise the water mark. Bump up to the next highest
+ // power of 2, to prevent increasing it excessively in tiny
+ // amounts.
+ if (n > state.highWaterMark)
+ state.highWaterMark = roundUpToNextPowerOf2(n);
+
+ // don't have that much. return null, unless we've ended.
+ if (n > state.length) {
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ } else
+ return state.length;
+ }
+
+ return n;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function(n) {
+ debug('read', n);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (!util.isNumber(n) || n > 0)
+ state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 &&
+ state.needReadable &&
+ (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0)
+ endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ }
+
+ if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ }
+
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (doRead && !state.reading)
+ n = howMuchToRead(nOrig, state);
+
+ var ret;
+ if (n > 0)
+ ret = fromList(n, state);
+ else
+ ret = null;
+
+ if (util.isNull(ret)) {
+ state.needReadable = true;
+ n = 0;
+ }
+
+ state.length -= n;
+
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
+ endReadable(this);
+
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
+ return ret;
+ };
+
+ function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+ }
+
+
+ function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+ }
+ }
+
+ function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+ }
+
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(function() {
+ maybeReadMore_(stream, state);
+ });
+ }
+ }
+
+ function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended &&
+ state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ else
+ len = state.length;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function(n) {
+ this.emit('error', new Error('not implemented'));
+ };
+
+ Readable.prototype.pipe = function(dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+ dest !== process.stdout &&
+ dest !== process.stderr;
+
+ var endFn = doEnd ? onend : cleanup;
+ if (state.endEmitted)
+ process.nextTick(endFn);
+ else
+ src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', cleanup);
+ src.removeListener('data', ondata);
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
+ ondrain();
+ }
+
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EE.listenerCount(dest, 'error') === 0)
+ dest.emit('error', er);
+ }
+ // This is a brutally ugly hack to make sure that our error handler
+ // is attached before any userland ones. NEVER DO THIS.
+ if (!dest._events || !dest._events.error)
+ dest.on('error', onerror);
+ else if (isArray(dest._events.error))
+ dest._events.error.unshift(onerror);
+ else
+ dest._events.error = [onerror, dest._events.error];
+
+
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+ };
+
+ function pipeOnDrain(src) {
+ return function() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+
+
+ Readable.prototype.unpipe = function(dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0)
+ return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes)
+ return this;
+
+ if (!dest)
+ dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest)
+ dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++)
+ dests[i].emit('unpipe', this);
+ return this;
+ }
+
+ // try to find the right one.
+ var i = indexOf(state.pipes, dest);
+ if (i === -1)
+ return this;
+
+ state.pipes.splice(i, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1)
+ state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function(ev, fn) {
+ var res = Stream$1.prototype.on.call(this, ev, fn);
+
+ // If listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.read(0);
+ });
+ } else if (state.length) {
+ emitReadable(this);
+ }
+ }
+ }
+
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function() {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
+ };
+
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+ }
+
+ function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+ }
+
+ Readable.prototype.pause = function() {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+ };
+
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ if (state.flowing) {
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
+ }
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function(stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function() {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length)
+ self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function(chunk) {
+ debug('wrapped data');
+ if (state.decoder)
+ chunk = state.decoder.write(chunk);
+ if (!chunk || !state.objectMode && !chunk.length)
+ return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ forEach(events, function(ev) {
+ stream.on(ev, self.emit.bind(self, ev));
+ });
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function(n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+ };
+
+
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ function fromList(n, state) {
+ var list = state.buffer;
+ var length = state.length;
+ var stringMode = !!state.decoder;
+ var objectMode = !!state.objectMode;
+ var ret;
+
+ // nothing in the list, definitely empty.
+ if (list.length === 0)
+ return null;
+
+ if (length === 0)
+ ret = null;
+ else if (objectMode)
+ ret = list.shift();
+ else if (!n || n >= length) {
+ // read it all, truncate the array.
+ if (stringMode)
+ ret = list.join('');
+ else
+ ret = Buffer.concat(list, length);
+ list.length = 0;
+ } else {
+ // read just some of it.
+ if (n < list[0].length) {
+ // just take a part of the first list item.
+ // slice is the same for buffers and strings.
+ var buf = list[0];
+ ret = buf.slice(0, n);
+ list[0] = buf.slice(n);
+ } else if (n === list[0].length) {
+ // first list is a perfect match
+ ret = list.shift();
+ } else {
+ // complex case.
+ // we have enough to cover it, but it spans past the first buffer.
+ if (stringMode)
+ ret = '';
+ else
+ ret = new Buffer(n);
+
+ var c = 0;
+ for (var i = 0, l = list.length; i < l && c < n; i++) {
+ var buf = list[0];
+ var cpy = Math.min(n - c, buf.length);
+
+ if (stringMode)
+ ret += buf.slice(0, cpy);
+ else
+ buf.copy(ret, c, 0, cpy);
+
+ if (cpy < buf.length)
+ list[0] = buf.slice(cpy);
+ else
+ list.shift();
+
+ c += cpy;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0)
+ throw new Error('endReadable called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(function() {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ });
+ }
+ }
+
+ function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+ }
+
+ function indexOf (xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable;
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+var _stream_transform = Transform$1;
+
+var Duplex = require_stream_duplex();
+
+/**/
+var util$1 = util$2;
+util$1.inherits = inheritsExports;
+/**/
+
+util$1.inherits(Transform$1, Duplex);
+
+
+function TransformState(options, stream) {
+ this.afterTransform = function(er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb)
+ return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (!util$1.isNullOrUndefined(data))
+ stream.push(data);
+
+ if (cb)
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+
+function Transform$1(options) {
+ if (!(this instanceof Transform$1))
+ return new Transform$1(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = new TransformState(options, this);
+
+ // when the writable side finishes, then flush out anything remaining.
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ this.once('prefinish', function() {
+ if (util$1.isFunction(this._flush))
+ this._flush(function(er) {
+ done(stream, er);
+ });
+ else
+ done(stream);
+ });
+}
+
+Transform$1.prototype.push = function(chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform$1.prototype._transform = function(chunk, encoding, cb) {
+ throw new Error('not implemented');
+};
+
+Transform$1.prototype._write = function(chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform ||
+ rs.needReadable ||
+ rs.length < rs.highWaterMark)
+ this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform$1.prototype._read = function(n) {
+ var ts = this._transformState;
+
+ if (!util$1.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+
+function done(stream, er) {
+ if (er)
+ return stream.emit('error', er);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var ts = stream._transformState;
+
+ if (ws.length)
+ throw new Error('calling transform done when ws.length != 0');
+
+ if (ts.transforming)
+ throw new Error('calling transform done when still transforming');
+
+ return stream.push(null);
+}
+
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+var _stream_passthrough = PassThrough;
+
+var Transform = _stream_transform;
+
+/**/
+var util = util$2;
+util.inherits = inheritsExports;
+/**/
+
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough))
+ return new PassThrough(options);
+
+ Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function(chunk, encoding, cb) {
+ cb(null, chunk);
+};
+
+readable.exports;
+
+(function (module, exports) {
+ exports = module.exports = require_stream_readable();
+ exports.Stream = Stream;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable();
+ exports.Duplex = require_stream_duplex();
+ exports.Transform = _stream_transform;
+ exports.PassThrough = _stream_passthrough;
+ if (!process.browser && process.env.READABLE_STREAM === 'disable') {
+ module.exports = Stream;
+ }
+} (readable, readable.exports));
+
+var readableExports = readable.exports;
+var ReadableStreamCore = /*@__PURE__*/getDefaultExportFromCjs(readableExports);
+
+export { Codec$1 as C, ReadableStreamCore as R, inherits as a, ltgt as b, ltgt$1 as c, inheritsExports as i, levelCodec as l };
diff --git a/packages/pouchdb-lib/lib/removeLeafFromTree-8dc5c1bf.js b/packages/pouchdb-lib/lib/removeLeafFromTree-8dc5c1bf.js
new file mode 100644
index 0000000000..c530ac74ef
--- /dev/null
+++ b/packages/pouchdb-lib/lib/removeLeafFromTree-8dc5c1bf.js
@@ -0,0 +1,46 @@
+import 'node:events';
+import { c as clone } from './clone-7eeb6295.js';
+import './functionName-706c6c65.js';
+import './pouchdb-errors.js';
+import 'crypto';
+
+// this method removes a leaf from a rev tree, independent of its status.
+// e.g., by removing an available leaf, it could leave its predecessor as
+// a missing leaf and corrupting the tree.
+function removeLeafFromRevTree(tree, leafRev) {
+ return tree.flatMap((path) => {
+ path = removeLeafFromPath(path, leafRev);
+ return path ? [path] : [];
+ });
+}
+
+function removeLeafFromPath(path, leafRev) {
+ const tree = clone(path);
+ const toVisit = [tree];
+ let node;
+
+ while ((node = toVisit.pop())) {
+ const { pos, ids: [id, , branches], parent } = node;
+ const isLeaf = branches.length === 0;
+ const hash = `${pos}-${id}`;
+
+ if (isLeaf && hash === leafRev) {
+ if (!parent) {
+ // FIXME: we're facing the root, and probably shouldn't just return an empty array (object? null?).
+ return null;
+ }
+
+ parent.ids[2] = parent.ids[2].filter(function (branchNode) {
+ return branchNode[0] !== id;
+ });
+ return tree;
+ }
+
+ for (let i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({ pos: pos + 1, ids: branches[i], parent: node });
+ }
+ }
+ return tree;
+}
+
+export { removeLeafFromRevTree as r };
diff --git a/packages/pouchdb-lib/lib/rev-48662a2a.js b/packages/pouchdb-lib/lib/rev-48662a2a.js
new file mode 100644
index 0000000000..29faa04284
--- /dev/null
+++ b/packages/pouchdb-lib/lib/rev-48662a2a.js
@@ -0,0 +1,266 @@
+import { createError, MISSING_ID, INVALID_ID, RESERVED_ID } from './pouchdb-errors.js';
+import EE from 'node:events';
+import 'crypto';
+import { s as stringMd5 } from './stringMd5-15f53eba.js';
+
+// Unique ID creation requires a high quality random # generator. In the browser we therefore
+// require the crypto API and do not support built-in fallback to lower quality random number
+// generators (like Math.random()).
+var getRandomValues;
+var rnds8 = new Uint8Array(16);
+function rng() {
+ // lazy load so that environments that need to polyfill have a chance to do so
+ if (!getRandomValues) {
+ // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
+ // find the complete implementation of crypto (msCrypto) on IE11.
+ getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
+
+ if (!getRandomValues) {
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
+ }
+ }
+
+ return getRandomValues(rnds8);
+}
+
+var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
+
+function validate(uuid) {
+ return typeof uuid === 'string' && REGEX.test(uuid);
+}
+
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+
+var byteToHex = [];
+
+for (var i = 0; i < 256; ++i) {
+ byteToHex.push((i + 0x100).toString(16).substr(1));
+}
+
+function stringify(arr) {
+ var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+ // Note: Be careful editing this code! It's been tuned for performance
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
+ var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
+ // of the following:
+ // - One or more input array values don't map to a hex octet (leading to
+ // "undefined" in the uuid)
+ // - Invalid input values for the RFC `version` or `variant` fields
+
+ if (!validate(uuid)) {
+ throw TypeError('Stringified UUID is invalid');
+ }
+
+ return uuid;
+}
+
+function v4(options, buf, offset) {
+ options = options || {};
+ var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+
+ rnds[6] = rnds[6] & 0x0f | 0x40;
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+
+ if (buf) {
+ offset = offset || 0;
+
+ for (var i = 0; i < 16; ++i) {
+ buf[offset + i] = rnds[i];
+ }
+
+ return buf;
+ }
+
+ return stringify(rnds);
+}
+
+// like underscore/lodash _.pick()
+function pick(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var prop = arr[i];
+ if (prop in obj) {
+ res[prop] = obj[prop];
+ }
+ }
+ return res;
+}
+
+// Most browsers throttle concurrent requests at 6, so it's silly
+// to shim _bulk_get by trying to launch potentially hundreds of requests
+// and then letting the majority time out. We can handle this ourselves.
+var MAX_NUM_CONCURRENT_REQUESTS = 6;
+
+function identityFunction(x) {
+ return x;
+}
+
+function formatResultForOpenRevsGet(result) {
+ return [{
+ ok: result
+ }];
+}
+
+// shim for P/CouchDB adapters that don't directly implement _bulk_get
+function bulkGet(db, opts, callback) {
+ var requests = opts.docs;
+
+ // consolidate into one request per doc if possible
+ var requestsById = new Map();
+ requests.forEach(function (request) {
+ if (requestsById.has(request.id)) {
+ requestsById.get(request.id).push(request);
+ } else {
+ requestsById.set(request.id, [request]);
+ }
+ });
+
+ var numDocs = requestsById.size;
+ var numDone = 0;
+ var perDocResults = new Array(numDocs);
+
+ function collapseResultsAndFinish() {
+ var results = [];
+ perDocResults.forEach(function (res) {
+ res.docs.forEach(function (info) {
+ results.push({
+ id: res.id,
+ docs: [info]
+ });
+ });
+ });
+ callback(null, {results: results});
+ }
+
+ function checkDone() {
+ if (++numDone === numDocs) {
+ collapseResultsAndFinish();
+ }
+ }
+
+ function gotResult(docIndex, id, docs) {
+ perDocResults[docIndex] = {id: id, docs: docs};
+ checkDone();
+ }
+
+ var allRequests = [];
+ requestsById.forEach(function (value, key) {
+ allRequests.push(key);
+ });
+
+ var i = 0;
+
+ function nextBatch() {
+
+ if (i >= allRequests.length) {
+ return;
+ }
+
+ var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);
+ var batch = allRequests.slice(i, upTo);
+ processBatch(batch, i);
+ i += batch.length;
+ }
+
+ function processBatch(batch, offset) {
+ batch.forEach(function (docId, j) {
+ var docIdx = offset + j;
+ var docRequests = requestsById.get(docId);
+
+ // just use the first request as the "template"
+ // TODO: The _bulk_get API allows for more subtle use cases than this,
+ // but for now it is unlikely that there will be a mix of different
+ // "atts_since" or "attachments" in the same request, since it's just
+ // replicate.js that is using this for the moment.
+ // Also, atts_since is aspirational, since we don't support it yet.
+ var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);
+ docOpts.open_revs = docRequests.map(function (request) {
+ // rev is optional, open_revs disallowed
+ return request.rev;
+ });
+
+ // remove falsey / undefined revisions
+ docOpts.open_revs = docOpts.open_revs.filter(identityFunction);
+
+ var formatResult = identityFunction;
+
+ if (docOpts.open_revs.length === 0) {
+ delete docOpts.open_revs;
+
+ // when fetching only the "winning" leaf,
+ // transform the result so it looks like an open_revs
+ // request
+ formatResult = formatResultForOpenRevsGet;
+ }
+
+ // globally-supplied options
+ ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {
+ if (param in opts) {
+ docOpts[param] = opts[param];
+ }
+ });
+ db.get(docId, docOpts, function (err, res) {
+ var result;
+ /* istanbul ignore if */
+ if (err) {
+ result = [{error: err}];
+ } else {
+ result = formatResult(res);
+ }
+ gotResult(docIdx, docId, result);
+ nextBatch();
+ });
+ });
+ }
+
+ nextBatch();
+
+}
+
+// in Node of course this is false
+function hasLocalStorage() {
+ return false;
+}
+
+// Determine id an ID is valid
+// - invalid IDs begin with an underescore that does not begin '_design' or
+// '_local'
+// - any other string value is a valid id
+// Returns the specific error object for each case
+function invalidIdError(id) {
+ var err;
+ if (!id) {
+ err = createError(MISSING_ID);
+ } else if (typeof id !== 'string') {
+ err = createError(INVALID_ID);
+ } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {
+ err = createError(RESERVED_ID);
+ }
+ if (err) {
+ throw err;
+ }
+}
+
+function listenerCount(ee, type) {
+ return 'listenerCount' in ee ? ee.listenerCount(type) :
+ EE.listenerCount(ee, type);
+}
+
+/**
+ * Creates a new revision string that does NOT include the revision height
+ * For example '56649f1b0506c6ca9fda0746eb0cacdf'
+ */
+function rev(doc, deterministic_revs) {
+ if (!deterministic_revs) {
+ return v4().replace(/-/g, '').toLowerCase();
+ }
+
+ var mutateableDoc = Object.assign({}, doc);
+ delete mutateableDoc._rev_tree;
+ return stringMd5(JSON.stringify(mutateableDoc));
+}
+
+export { bulkGet as b, hasLocalStorage as h, invalidIdError as i, listenerCount as l, pick as p, rev as r, v4 as v };
diff --git a/packages/pouchdb-lib/lib/revExists-12209d1c.js b/packages/pouchdb-lib/lib/revExists-12209d1c.js
new file mode 100644
index 0000000000..901a2ebb5d
--- /dev/null
+++ b/packages/pouchdb-lib/lib/revExists-12209d1c.js
@@ -0,0 +1,21 @@
+// return true if a rev exists in the rev tree, false otherwise
+function revExists(revs, rev) {
+ var toVisit = revs.slice();
+ var splitRev = rev.split('-');
+ var targetPos = parseInt(splitRev[0], 10);
+ var targetId = splitRev[1];
+
+ var node;
+ while ((node = toVisit.pop())) {
+ if (node.pos === targetPos && node.ids[0] === targetId) {
+ return true;
+ }
+ var branches = node.ids[2];
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: node.pos + 1, ids: branches[i]});
+ }
+ }
+ return false;
+}
+
+export { revExists as r };
diff --git a/packages/pouchdb-lib/lib/rootToLeaf-f8d0e78a.js b/packages/pouchdb-lib/lib/rootToLeaf-f8d0e78a.js
new file mode 100644
index 0000000000..80e4ee6412
--- /dev/null
+++ b/packages/pouchdb-lib/lib/rootToLeaf-f8d0e78a.js
@@ -0,0 +1,81 @@
+// We fetch all leafs of the revision tree, and sort them based on tree length
+// and whether they were deleted, undeleted documents with the longest revision
+// tree (most edits) win
+// The final sort algorithm is slightly documented in a sidebar here:
+// http://guide.couchdb.org/draft/conflicts.html
+function winningRev(metadata) {
+ var winningId;
+ var winningPos;
+ var winningDeleted;
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var tree = node.ids;
+ var branches = tree[2];
+ var pos = node.pos;
+ if (branches.length) { // non-leaf
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i]});
+ }
+ continue;
+ }
+ var deleted = !!tree[1].deleted;
+ var id = tree[0];
+ // sort by deleted, then pos, then id
+ if (!winningId || (winningDeleted !== deleted ? winningDeleted :
+ winningPos !== pos ? winningPos < pos : winningId < id)) {
+ winningId = id;
+ winningPos = pos;
+ winningDeleted = deleted;
+ }
+ }
+
+ return winningPos + '-' + winningId;
+}
+
+// Pretty much all below can be combined into a higher order function to
+// traverse revisions
+// The return value from the callback will be passed as context to all
+// children of that node
+function traverseRevTree(revs, callback) {
+ var toVisit = revs.slice();
+
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var branches = tree[2];
+ var newCtx =
+ callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});
+ }
+ }
+}
+
+// build up a list of all the paths to the leafs in this revision tree
+function rootToLeaf(revs) {
+ var paths = [];
+ var toVisit = revs.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, opts: opts});
+ if (isLeaf) {
+ paths.push({pos: (pos + 1 - history.length), ids: history});
+ }
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], history: history});
+ }
+ }
+ return paths.reverse();
+}
+
+export { rootToLeaf as r, traverseRevTree as t, winningRev as w };
diff --git a/packages/pouchdb-lib/lib/safeJsonStringify-6520e306.js b/packages/pouchdb-lib/lib/safeJsonStringify-6520e306.js
new file mode 100644
index 0000000000..17a1dd3038
--- /dev/null
+++ b/packages/pouchdb-lib/lib/safeJsonStringify-6520e306.js
@@ -0,0 +1,194 @@
+/**
+ * Stringify/parse functions that don't operate
+ * recursively, so they avoid call stack exceeded
+ * errors.
+ */
+var stringify = function stringify(input) {
+ var queue = [];
+ queue.push({obj: input});
+
+ var res = '';
+ var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;
+ while ((next = queue.pop())) {
+ obj = next.obj;
+ prefix = next.prefix || '';
+ val = next.val || '';
+ res += prefix;
+ if (val) {
+ res += val;
+ } else if (typeof obj !== 'object') {
+ res += typeof obj === 'undefined' ? null : JSON.stringify(obj);
+ } else if (obj === null) {
+ res += 'null';
+ } else if (Array.isArray(obj)) {
+ queue.push({val: ']'});
+ for (i = obj.length - 1; i >= 0; i--) {
+ arrayPrefix = i === 0 ? '' : ',';
+ queue.push({obj: obj[i], prefix: arrayPrefix});
+ }
+ queue.push({val: '['});
+ } else { // object
+ keys = [];
+ for (k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ queue.push({val: '}'});
+ for (i = keys.length - 1; i >= 0; i--) {
+ key = keys[i];
+ value = obj[key];
+ objPrefix = (i > 0 ? ',' : '');
+ objPrefix += JSON.stringify(key) + ':';
+ queue.push({obj: value, prefix: objPrefix});
+ }
+ queue.push({val: '{'});
+ }
+ }
+ return res;
+};
+
+// Convenience function for the parse function.
+// This pop function is basically copied from
+// pouchCollate.parseIndexableString
+function pop(obj, stack, metaStack) {
+ var lastMetaElement = metaStack[metaStack.length - 1];
+ if (obj === lastMetaElement.element) {
+ // popping a meta-element, e.g. an object whose value is another object
+ metaStack.pop();
+ lastMetaElement = metaStack[metaStack.length - 1];
+ }
+ var element = lastMetaElement.element;
+ var lastElementIndex = lastMetaElement.index;
+ if (Array.isArray(element)) {
+ element.push(obj);
+ } else if (lastElementIndex === stack.length - 2) { // obj with key+value
+ var key = stack.pop();
+ element[key] = obj;
+ } else {
+ stack.push(obj); // obj with key only
+ }
+}
+
+var parse = function (str) {
+ var stack = [];
+ var metaStack = []; // stack for arrays and objects
+ var i = 0;
+ var collationIndex,parsedNum,numChar;
+ var parsedString,lastCh,numConsecutiveSlashes,ch;
+ var arrayElement, objElement;
+ while (true) {
+ collationIndex = str[i++];
+ if (collationIndex === '}' ||
+ collationIndex === ']' ||
+ typeof collationIndex === 'undefined') {
+ if (stack.length === 1) {
+ return stack.pop();
+ } else {
+ pop(stack.pop(), stack, metaStack);
+ continue;
+ }
+ }
+ switch (collationIndex) {
+ case ' ':
+ case '\t':
+ case '\n':
+ case ':':
+ case ',':
+ break;
+ case 'n':
+ i += 3; // 'ull'
+ pop(null, stack, metaStack);
+ break;
+ case 't':
+ i += 3; // 'rue'
+ pop(true, stack, metaStack);
+ break;
+ case 'f':
+ i += 4; // 'alse'
+ pop(false, stack, metaStack);
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '-':
+ parsedNum = '';
+ i--;
+ while (true) {
+ numChar = str[i++];
+ if (/[\d\.\-e\+]/.test(numChar)) {
+ parsedNum += numChar;
+ } else {
+ i--;
+ break;
+ }
+ }
+ pop(parseFloat(parsedNum), stack, metaStack);
+ break;
+ case '"':
+ parsedString = '';
+ lastCh = void 0;
+ numConsecutiveSlashes = 0;
+ while (true) {
+ ch = str[i++];
+ if (ch !== '"' || (lastCh === '\\' &&
+ numConsecutiveSlashes % 2 === 1)) {
+ parsedString += ch;
+ lastCh = ch;
+ if (lastCh === '\\') {
+ numConsecutiveSlashes++;
+ } else {
+ numConsecutiveSlashes = 0;
+ }
+ } else {
+ break;
+ }
+ }
+ pop(JSON.parse('"' + parsedString + '"'), stack, metaStack);
+ break;
+ case '[':
+ arrayElement = { element: [], index: stack.length };
+ stack.push(arrayElement.element);
+ metaStack.push(arrayElement);
+ break;
+ case '{':
+ objElement = { element: {}, index: stack.length };
+ stack.push(objElement.element);
+ metaStack.push(objElement);
+ break;
+ default:
+ throw new Error(
+ 'unexpectedly reached end of input: ' + collationIndex);
+ }
+ }
+};
+
+function safeJsonParse(str) {
+ // This try/catch guards against stack overflow errors.
+ // JSON.parse() is faster than vuvuzela.parse() but vuvuzela
+ // cannot overflow.
+ try {
+ return JSON.parse(str);
+ } catch (e) {
+ /* istanbul ignore next */
+ return parse(str);
+ }
+}
+
+function safeJsonStringify(json) {
+ try {
+ return JSON.stringify(json);
+ } catch (e) {
+ /* istanbul ignore next */
+ return stringify(json);
+ }
+}
+
+export { safeJsonParse as a, safeJsonStringify as s };
diff --git a/packages/pouchdb-lib/lib/scopeEval-ff3a416d.js b/packages/pouchdb-lib/lib/scopeEval-ff3a416d.js
new file mode 100644
index 0000000000..d7c25091df
--- /dev/null
+++ b/packages/pouchdb-lib/lib/scopeEval-ff3a416d.js
@@ -0,0 +1,18 @@
+// Based on https://github.com/alexdavid/scope-eval v0.0.3
+// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)
+// This is basically just a wrapper around new Function()
+
+function scopeEval(source, scope) {
+ var keys = [];
+ var values = [];
+ for (var key in scope) {
+ if (Object.prototype.hasOwnProperty.call(scope, key)) {
+ keys.push(key);
+ values.push(scope[key]);
+ }
+ }
+ keys.push(source);
+ return Function.apply(null, keys).apply(null, values);
+}
+
+export { scopeEval as s };
diff --git a/packages/pouchdb-lib/lib/stringMd5-15f53eba.js b/packages/pouchdb-lib/lib/stringMd5-15f53eba.js
new file mode 100644
index 0000000000..c3052c9f5a
--- /dev/null
+++ b/packages/pouchdb-lib/lib/stringMd5-15f53eba.js
@@ -0,0 +1,7 @@
+import crypto from 'crypto';
+
+function stringMd5(string) {
+ return crypto.createHash('md5').update(string, 'binary').digest('hex');
+}
+
+export { stringMd5 as s };
diff --git a/packages/pouchdb-lib/lib/toPromise-f6e385ee.js b/packages/pouchdb-lib/lib/toPromise-f6e385ee.js
new file mode 100644
index 0000000000..7aa31a5f40
--- /dev/null
+++ b/packages/pouchdb-lib/lib/toPromise-f6e385ee.js
@@ -0,0 +1,43 @@
+import { c as clone } from './clone-7eeb6295.js';
+import { o as once } from './once-de8350b9.js';
+
+function toPromise(func) {
+ //create the function we will be returning
+ return function (...args) {
+ // Clone arguments
+ args = clone(args);
+ var self = this;
+ // if the last argument is a function, assume its a callback
+ var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;
+ var promise = new Promise(function (fulfill, reject) {
+ var resp;
+ try {
+ var callback = once(function (err, mesg) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(mesg);
+ }
+ });
+ // create a callback for this invocation
+ // apply the function in the orig context
+ args.push(callback);
+ resp = func.apply(self, args);
+ if (resp && typeof resp.then === 'function') {
+ fulfill(resp);
+ }
+ } catch (e) {
+ reject(e);
+ }
+ });
+ // if there is a callback, call it back
+ if (usedCB) {
+ promise.then(function (result) {
+ usedCB(null, result);
+ }, usedCB);
+ }
+ return promise;
+ };
+}
+
+export { toPromise as t };
diff --git a/packages/pouchdb-lib/lib/typedBuffer-a8220a49.js b/packages/pouchdb-lib/lib/typedBuffer-a8220a49.js
new file mode 100644
index 0000000000..5527bf7b87
--- /dev/null
+++ b/packages/pouchdb-lib/lib/typedBuffer-a8220a49.js
@@ -0,0 +1,8 @@
+function typedBuffer(binString, buffType, type) {
+ // buffType is either 'binary' or 'base64'
+ const buff = Buffer.from(binString, buffType);
+ buff.type = type; // non-standard, but used for consistency with the browser
+ return buff;
+}
+
+export { typedBuffer as t };
diff --git a/packages/pouchdb-lib/lib/upsert-331b6913.js b/packages/pouchdb-lib/lib/upsert-331b6913.js
new file mode 100644
index 0000000000..05f08749b0
--- /dev/null
+++ b/packages/pouchdb-lib/lib/upsert-331b6913.js
@@ -0,0 +1,47 @@
+// this is essentially the "update sugar" function from daleharvey/pouchdb#1388
+// the diffFun tells us what delta to apply to the doc. it either returns
+// the doc, or false if it doesn't need to do an update after all
+function upsert(db, docId, diffFun) {
+ return db.get(docId)
+ .catch(function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {};
+ })
+ .then(function (doc) {
+ // the user might change the _rev, so save it for posterity
+ var docRev = doc._rev;
+ var newDoc = diffFun(doc);
+
+ if (!newDoc) {
+ // if the diffFun returns falsy, we short-circuit as
+ // an optimization
+ return {updated: false, rev: docRev};
+ }
+
+ // users aren't allowed to modify these values,
+ // so reset them here
+ newDoc._id = docId;
+ newDoc._rev = docRev;
+ return tryAndPut(db, newDoc, diffFun);
+ });
+}
+
+function tryAndPut(db, doc, diffFun) {
+ return db.put(doc).then(function (res) {
+ return {
+ updated: true,
+ rev: res.rev
+ };
+ }, function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 409) {
+ throw err;
+ }
+ return upsert(db, doc._id, diffFun);
+ });
+}
+
+export { upsert as u };
diff --git a/packages/pouchdb-lib/package.json b/packages/pouchdb-lib/package.json
new file mode 100644
index 0000000000..25d15bf0a3
--- /dev/null
+++ b/packages/pouchdb-lib/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "pouchdb-lib",
+ "main": "src/index.js",
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+}
\ No newline at end of file
diff --git a/packages/pouchdb-lib/rollup.config.js b/packages/pouchdb-lib/rollup.config.js
new file mode 100644
index 0000000000..224d16a762
--- /dev/null
+++ b/packages/pouchdb-lib/rollup.config.js
@@ -0,0 +1,93 @@
+// const rollup = require('rollup');
+const fs = require('node:fs');
+const nodeResolve = require('@rollup/plugin-node-resolve');
+const commonjs = require('@rollup/plugin-commonjs');
+const json = require('@rollup/plugin-json');
+const alias = require('@rollup/plugin-alias');
+const replace = require('@rollup/plugin-replace');
+const eslint = require('@rollup/plugin-eslint')({
+ include: ["*.js","*.mjs"],
+ exclude: [],
+ fix:true,
+});
+
+//const { resolve } = require('node:path/posix');
+//const pathResolve = (prefix)=>(name) => resolve(prefix,name);
+const customResolver = nodeResolve({
+ // Order matters Injection happens via local /node_modules
+ modulePaths: ['../','node_modules','../../node_modules'],
+ extensions: ['.mjs', '.js', '.jsx', '.json', '.sass', '.scss'],
+});
+
+const entries = [
+ { find: 'zlib', replacement: 'node:zlib'// path.resolve(projectRootDir, 'src')
+ // OR place `customResolver` here. See explanation below.
+ },
+ { find: 'vm', replacement: 'node:vm' },
+ { find: 'buffer', replacement: 'node:buffer' },
+];
+
+// Promise.resolve().then(async () =>
+// [(await rollup.rollup())].map(b=>[b.write({ dir: 'lib' })]));
+
+// .then(async ()=>(await rollup.rollup({
+// input: Object.fromEntries(fs.readdirSync('packages').map(pkg=>[pkg+'.browser',pkg])),
+// plugins: [
+// eslint,
+// alias({
+// customResolver, entries,
+// }),
+// nodeResolve({preferBuiltins: false, browser: true}), json(), commonjs()
+// ],
+// })).write({ dir: 'lib', }));
+
+const input = Object.fromEntries(fs.readdirSync('../../packages').map(pkg=>[pkg,pkg]).concat(
+ fs.readdirSync('../../packages/pouchdb/src/plugins').map(plg=>[`pouchdb-plugin-${plg.slice(0,-3)}`,'../../packages/pouchdb/src/plugins/'+plg])
+).concat([
+ ['hash-wasm','hash-wasm']
+]).filter( // here we filter out the node_modules folder package.json
+ (entrie)=>entrie[0].startsWith('pouchdb') && !entrie[0].includes('pouchdb-lib')
+ ));
+
+module.exports = [{
+ input,
+ //external: (name="") => console.log(name,name.includes('pouchdb-lib')) || name.includes('pouchdb-lib'),
+ plugins: [
+ eslint,
+ {
+ name: 'emit-module-package-file',
+ generateBundle() {
+ this.emitFile({ fileName: 'package.json', source: `{"type":"module"}`, type: 'asset' });
+ this.emitFile({ fileName: 'pouchdb-lib.js', // index.js exports lib/pouchdb-*.js
+ source: `${Object.keys(input).map((key) =>
+ `export * as ${key.replaceAll('-','_')} from '${key}';`).join('\n')}`,
+ type: 'asset'
+ });
+ },
+ },
+ alias({
+ customResolver, entries,
+ }),
+ nodeResolve({preferBuiltins: true,
+ modulePaths: ['../','node_modules','../../node_modules'],
+ }), json(), commonjs()
+ ],
+ output: [{ dir: 'lib' }]
+},{
+ input: { "pouchdb-modules": "lib/pouchdb-lib.js" },
+ plugins: [
+ replace({
+ '("vm")': `('node:vm')`,
+ [`from 'buffer'`]: `from 'node:buffer'`,
+ [`from 'vm'`]: `from 'node:vm'`,
+ __buildVersion: 15
+ }),
+ alias({
+ customResolver, entries,
+ }),
+ nodeResolve({preferBuiltins: true,
+ //modulePaths: ['../','node_modules','../../node_modules','./'],
+ }), json(), commonjs()
+ ],
+ output: [{ dir: 'dist' }]
+}];
\ No newline at end of file
diff --git a/packages/pouchdb-lib/src/channel.js b/packages/pouchdb-lib/src/channel.js
new file mode 100644
index 0000000000..6cc44d1049
--- /dev/null
+++ b/packages/pouchdb-lib/src/channel.js
@@ -0,0 +1 @@
+// a channel is a new BroadcastChannel
\ No newline at end of file
diff --git a/packages/pouchdb-lib/src/index.js b/packages/pouchdb-lib/src/index.js
new file mode 100644
index 0000000000..bee7c4bd94
--- /dev/null
+++ b/packages/pouchdb-lib/src/index.js
@@ -0,0 +1,41 @@
+export * as pouchdb from 'pouchdb';
+export * as pouchdb_abstract_mapreduce from 'pouchdb-abstract-mapreduce';
+export * as pouchdb_adapter_http from 'pouchdb-adapter-http';
+export * as pouchdb_adapter_idb from 'pouchdb-adapter-idb';
+export * as pouchdb_adapter_indexeddb from 'pouchdb-adapter-indexeddb';
+export * as pouchdb_adapter_leveldb from 'pouchdb-adapter-leveldb';
+export * as pouchdb_adapter_leveldb_core from 'pouchdb-adapter-leveldb-core';
+export * as pouchdb_adapter_localstorage from 'pouchdb-adapter-localstorage';
+export * as pouchdb_adapter_memory from 'pouchdb-adapter-memory';
+export * as pouchdb_adapter_utils from 'pouchdb-adapter-utils';
+export * as pouchdb_binary_utils from 'pouchdb-binary-utils';
+export * as pouchdb_browser from 'pouchdb-browser';
+export * as pouchdb_changes_filter from 'pouchdb-changes-filter';
+export * as pouchdb_checkpointer from 'pouchdb-checkpointer';
+export * as pouchdb_collate from 'pouchdb-collate';
+export * as pouchdb_collections from 'pouchdb-collections';
+export * as pouchdb_core from 'pouchdb-core';
+export * as pouchdb_crypto from 'pouchdb-crypto';
+export * as pouchdb_errors from 'pouchdb-errors';
+export * as pouchdb_fetch from 'pouchdb-fetch';
+export * as pouchdb_find from 'pouchdb-find';
+export * as pouchdb_for_coverage from 'pouchdb-for-coverage';
+export * as pouchdb_generate_replication_id from 'pouchdb-generate-replication-id';
+export * as pouchdb_json from 'pouchdb-json';
+export * as pouchdb_mapreduce from 'pouchdb-mapreduce';
+export * as pouchdb_mapreduce_utils from 'pouchdb-mapreduce-utils';
+export * as pouchdb_md5 from 'pouchdb-md5';
+export * as pouchdb_merge from 'pouchdb-merge';
+export * as pouchdb_node from 'pouchdb-node';
+export * as pouchdb_platform from 'pouchdb-platform';
+export * as pouchdb_replication from 'pouchdb-replication';
+export * as pouchdb_selector_core from 'pouchdb-selector-core';
+export * as pouchdb_server_packages from 'pouchdb-server-packages';
+export * as pouchdb_sublevel from 'pouchdb-sublevel';
+export * as pouchdb_utils from 'pouchdb-utils';
+// export * as pouchdb_plugin_find from 'pouchdb-plugin-find';
+// export * as pouchdb_plugin_fruitdown from 'pouchdb-plugin-fruitdown';
+// export * as pouchdb_plugin_indexeddb from 'pouchdb-plugin-indexeddb';
+// export * as pouchdb_plugin_localstorage from 'pouchdb-plugin-localstorage';
+// export * as pouchdb_plugin_memory from 'pouchdb-plugin-memory';
+// export * as pouchdb_plugin_websql from 'pouchdb-plugin-websql';
\ No newline at end of file
diff --git a/packages/pouchdb-lib/src/lib-http.js b/packages/pouchdb-lib/src/lib-http.js
new file mode 100644
index 0000000000..ff4998b30e
--- /dev/null
+++ b/packages/pouchdb-lib/src/lib-http.js
@@ -0,0 +1,108 @@
+// /**
+// * Creates a new sharedWorker for WInterOP Environments
+// *
+// */
+
+// /**
+// * Creates a new sharedWorker for nodejs
+// * runs a main netSocket Component
+// * and a workerThread per request.
+// * @param {*} socketFilePath
+// */
+// const sharedWorker = (socketFilePath) => {
+
+// }
+// { // NodeJS 10 Request Workers Max.
+// import('node:worker_threads').then(({
+// isMainThread,
+// BroadcastChannel,
+// Worker,
+// }) => {
+// const bc = new BroadcastChannel('hello');
+
+// if (isMainThread) {
+// let c = 0;
+// bc.onmessage = (event) => {
+// console.log(event.data);
+// if (++c === 10) bc.close();
+// };
+// for (let n = 0; n < 10; n++)
+// new Worker(__filename);
+// } else {
+// bc.postMessage('hello from every worker');
+// bc.close();
+// }
+// });
+
+
+// }
+
+
+
+// port.onmessage = data => {
+// const [requestHeader, ...bodyContent] = data.toString().split('\r\n\r\n');
+
+// const [firstLine, ...otherLines] = requestHeader.split('\n');
+// const [method, path, httpVersion] = firstLine.trim().split(' ');
+// const headers = Object.fromEntries(otherLines.filter(_=>_)
+// .map(line=>line.split(':').map(part=>part.trim()))
+// .map(([name, ...rest]) => [name, rest.join(' ')]));
+
+// var body;
+// try {
+// body = JSON.parse(bodyContent);
+// } catch (err) {/* ignore */}
+
+
+// const request = {
+// method,
+// path,
+// httpVersion,
+// headers,
+// body
+// };
+// console.log(request);
+// port.postMessage(`HTTP/1.1 200 OK\n\nhallo ${request.body.name}`);
+// };
+
+
+// // node onconnect
+// new ReadableStream({
+// start(c) {
+
+// require('net').createServer(c.enqueue);
+// },
+// }).pipeThrough(new TramsformStream({transform(port,handler) {
+// const channel = new MessageChannel();
+// channel.port1.onmessage = (res) => port.write(res) ? socket.end((err)=>{console.log(err);}) : socket.end((err)=>{console.log(err);});
+// port.on('data', (httpRequest) => handler.enqueue([httpRequest,channel.port2]));
+// }})).pipeTo(onRequest);;
+
+// const sharedWorkerOnConnectStream = new ReadableStream({
+// start(c) { globalThis.onconnect = ({ports:[port]}) => c.enqueue(port); },
+// });
+// // Accepts httpRequest as string and a port of type MessageChannel.
+// const onRequest = new WriteableStream({write([data,port]) {
+// console.log(data.toString());
+// const [firstLine, ...otherLines] = data.toString().split('\n');
+// const [method, path, httpVersion] = firstLine.trim().split(' ');
+// const headers = Object.fromEntries(otherLines.filter(_=>_)
+// .map(line=>line.split(':').map(part=>part.trim()))
+// .map(([name, ...rest]) => [name, rest.join(' ')]));
+
+
+// const request = {
+// method, path, httpVersion, headers
+// };
+// console.log(request);
+// const name = request.path.split('/')[1];
+// port.postMessage(`HTTP/1.1 200 OK\n\nhallo ${name}`);
+// }});
+
+
+
+// // port is == MessageChannel
+// const sharedWorkerRequestStream = new TramsformStream({transform(port,handler) {
+// port.on('message', (httpRequest) => handler.enqueue([httpRequest, port]));
+// }});
+// sharedWorkerOnConnectStream.pipeThrough(sharedWorkerRequestStream).pipeTo(onRequest);
diff --git a/packages/pouchdb-lib/src/package.json b/packages/pouchdb-lib/src/package.json
new file mode 100644
index 0000000000..1632c2c4df
--- /dev/null
+++ b/packages/pouchdb-lib/src/package.json
@@ -0,0 +1 @@
+{"type": "module"}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/LICENSE b/packages/pouchdb-mapreduce-utils/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce-utils/LICENSE
rename to packages/pouchdb-mapreduce-utils/LICENSE
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/README.md b/packages/pouchdb-mapreduce-utils/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce-utils/README.md
rename to packages/pouchdb-mapreduce-utils/README.md
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/package.json b/packages/pouchdb-mapreduce-utils/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-mapreduce-utils/package.json
rename to packages/pouchdb-mapreduce-utils/package.json
index 34440467e3..0993468c81 100644
--- a/packages/node_modules/pouchdb-mapreduce-utils/package.json
+++ b/packages/pouchdb-mapreduce-utils/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB utilities used by pouchdb-mapreduce.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/src/errors.js b/packages/pouchdb-mapreduce-utils/src/errors.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce-utils/src/errors.js
rename to packages/pouchdb-mapreduce-utils/src/errors.js
diff --git a/packages/node_modules/pouchdb-mapreduce-utils/src/index.js b/packages/pouchdb-mapreduce-utils/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce-utils/src/index.js
rename to packages/pouchdb-mapreduce-utils/src/index.js
diff --git a/packages/node_modules/pouchdb-mapreduce/LICENSE b/packages/pouchdb-mapreduce/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/LICENSE
rename to packages/pouchdb-mapreduce/LICENSE
diff --git a/packages/node_modules/pouchdb-mapreduce/README.md b/packages/pouchdb-mapreduce/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/README.md
rename to packages/pouchdb-mapreduce/README.md
diff --git a/packages/node_modules/pouchdb-mapreduce/package.json b/packages/pouchdb-mapreduce/package.json
similarity index 82%
rename from packages/node_modules/pouchdb-mapreduce/package.json
rename to packages/pouchdb-mapreduce/package.json
index 87b9aaf155..0f71c2a6be 100644
--- a/packages/node_modules/pouchdb-mapreduce/package.json
+++ b/packages/pouchdb-mapreduce/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's map/reduce query API as a plugin.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-mapreduce/src/createBuiltInError.js b/packages/pouchdb-mapreduce/src/createBuiltInError.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/createBuiltInError.js
rename to packages/pouchdb-mapreduce/src/createBuiltInError.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/evalFunction-browser.js b/packages/pouchdb-mapreduce/src/evalFunction-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/evalFunction-browser.js
rename to packages/pouchdb-mapreduce/src/evalFunction-browser.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/evalFunction.js b/packages/pouchdb-mapreduce/src/evalFunction.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/evalFunction.js
rename to packages/pouchdb-mapreduce/src/evalFunction.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/evalFunctionInVm.js b/packages/pouchdb-mapreduce/src/evalFunctionInVm.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/evalFunctionInVm.js
rename to packages/pouchdb-mapreduce/src/evalFunctionInVm.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/evalFunctionWithEval.js b/packages/pouchdb-mapreduce/src/evalFunctionWithEval.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/evalFunctionWithEval.js
rename to packages/pouchdb-mapreduce/src/evalFunctionWithEval.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/index.js b/packages/pouchdb-mapreduce/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/index.js
rename to packages/pouchdb-mapreduce/src/index.js
diff --git a/packages/node_modules/pouchdb-mapreduce/src/sum.js b/packages/pouchdb-mapreduce/src/sum.js
similarity index 100%
rename from packages/node_modules/pouchdb-mapreduce/src/sum.js
rename to packages/pouchdb-mapreduce/src/sum.js
diff --git a/packages/node_modules/pouchdb-md5/LICENSE b/packages/pouchdb-md5/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-md5/LICENSE
rename to packages/pouchdb-md5/LICENSE
diff --git a/packages/node_modules/pouchdb-md5/README.md b/packages/pouchdb-md5/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-md5/README.md
rename to packages/pouchdb-md5/README.md
diff --git a/packages/node_modules/pouchdb-md5/package.json b/packages/pouchdb-md5/package.json
similarity index 83%
rename from packages/node_modules/pouchdb-md5/package.json
rename to packages/pouchdb-md5/package.json
index b426006d47..74735f3868 100644
--- a/packages/node_modules/pouchdb-md5/package.json
+++ b/packages/pouchdb-md5/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB utilities for calculating MD5 checksums.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-md5/src/binaryMd5-browser.js b/packages/pouchdb-md5/src/binaryMd5-browser.js
similarity index 96%
rename from packages/node_modules/pouchdb-md5/src/binaryMd5-browser.js
rename to packages/pouchdb-md5/src/binaryMd5-browser.js
index f77593a5f0..bee674fbc8 100644
--- a/packages/node_modules/pouchdb-md5/src/binaryMd5-browser.js
+++ b/packages/pouchdb-md5/src/binaryMd5-browser.js
@@ -1,4 +1,4 @@
-import { btoa, readAsArrayBuffer } from 'pouchdb-binary-utils';
+import { readAsArrayBuffer } from 'pouchdb-binary-utils';
import Md5 from 'spark-md5';
var setImmediateShim = self.setImmediate || self.setTimeout;
var MD5_CHUNK_SIZE = 32768;
diff --git a/packages/node_modules/pouchdb-md5/src/binaryMd5.js b/packages/pouchdb-md5/src/binaryMd5.js
similarity index 83%
rename from packages/node_modules/pouchdb-md5/src/binaryMd5.js
rename to packages/pouchdb-md5/src/binaryMd5.js
index 149b027d02..5772ebb18e 100644
--- a/packages/node_modules/pouchdb-md5/src/binaryMd5.js
+++ b/packages/pouchdb-md5/src/binaryMd5.js
@@ -1,4 +1,4 @@
-import crypto from 'crypto';
+import crypto from 'node:crypto';
function binaryMd5(data, callback) {
var base64 = crypto.createHash('md5').update(data, 'binary').digest('base64');
diff --git a/packages/pouchdb-md5/src/index.js b/packages/pouchdb-md5/src/index.js
new file mode 100644
index 0000000000..8e20e94084
--- /dev/null
+++ b/packages/pouchdb-md5/src/index.js
@@ -0,0 +1,7 @@
+import binaryMd5 from './binaryMd5.js';
+import stringMd5 from './stringMd5.js';
+
+export {
+ binaryMd5,
+ stringMd5
+};
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-md5/src/stringMd5-browser.js b/packages/pouchdb-md5/src/stringMd5-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-md5/src/stringMd5-browser.js
rename to packages/pouchdb-md5/src/stringMd5-browser.js
diff --git a/packages/node_modules/pouchdb-md5/src/stringMd5.js b/packages/pouchdb-md5/src/stringMd5.js
similarity index 100%
rename from packages/node_modules/pouchdb-md5/src/stringMd5.js
rename to packages/pouchdb-md5/src/stringMd5.js
diff --git a/packages/node_modules/pouchdb-merge/LICENSE b/packages/pouchdb-merge/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-merge/LICENSE
rename to packages/pouchdb-merge/LICENSE
diff --git a/packages/node_modules/pouchdb-merge/README.md b/packages/pouchdb-merge/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-merge/README.md
rename to packages/pouchdb-merge/README.md
diff --git a/packages/node_modules/pouchdb-merge/package.json b/packages/pouchdb-merge/package.json
similarity index 78%
rename from packages/node_modules/pouchdb-merge/package.json
rename to packages/pouchdb-merge/package.json
index d5463c5e22..8a33779232 100644
--- a/packages/node_modules/pouchdb-merge/package.json
+++ b/packages/pouchdb-merge/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's document merge algorithm.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-merge/src/collectConflicts.js b/packages/pouchdb-merge/src/collectConflicts.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/collectConflicts.js
rename to packages/pouchdb-merge/src/collectConflicts.js
diff --git a/packages/node_modules/pouchdb-merge/src/collectLeaves.js b/packages/pouchdb-merge/src/collectLeaves.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/collectLeaves.js
rename to packages/pouchdb-merge/src/collectLeaves.js
diff --git a/packages/node_modules/pouchdb-merge/src/compactTree.js b/packages/pouchdb-merge/src/compactTree.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/compactTree.js
rename to packages/pouchdb-merge/src/compactTree.js
diff --git a/packages/node_modules/pouchdb-merge/src/findPathToLeaf.js b/packages/pouchdb-merge/src/findPathToLeaf.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/findPathToLeaf.js
rename to packages/pouchdb-merge/src/findPathToLeaf.js
diff --git a/packages/node_modules/pouchdb-merge/src/index.js b/packages/pouchdb-merge/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/index.js
rename to packages/pouchdb-merge/src/index.js
diff --git a/packages/node_modules/pouchdb-merge/src/isDeleted.js b/packages/pouchdb-merge/src/isDeleted.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/isDeleted.js
rename to packages/pouchdb-merge/src/isDeleted.js
diff --git a/packages/node_modules/pouchdb-merge/src/isLocalId.js b/packages/pouchdb-merge/src/isLocalId.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/isLocalId.js
rename to packages/pouchdb-merge/src/isLocalId.js
diff --git a/packages/node_modules/pouchdb-merge/src/latest.js b/packages/pouchdb-merge/src/latest.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/latest.js
rename to packages/pouchdb-merge/src/latest.js
diff --git a/packages/node_modules/pouchdb-merge/src/merge.js b/packages/pouchdb-merge/src/merge.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/merge.js
rename to packages/pouchdb-merge/src/merge.js
diff --git a/packages/node_modules/pouchdb-merge/src/removeLeafFromTree.js b/packages/pouchdb-merge/src/removeLeafFromTree.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/removeLeafFromTree.js
rename to packages/pouchdb-merge/src/removeLeafFromTree.js
diff --git a/packages/node_modules/pouchdb-merge/src/revExists.js b/packages/pouchdb-merge/src/revExists.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/revExists.js
rename to packages/pouchdb-merge/src/revExists.js
diff --git a/packages/node_modules/pouchdb-merge/src/rootToLeaf.js b/packages/pouchdb-merge/src/rootToLeaf.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/rootToLeaf.js
rename to packages/pouchdb-merge/src/rootToLeaf.js
diff --git a/packages/node_modules/pouchdb-merge/src/traverseRevTree.js b/packages/pouchdb-merge/src/traverseRevTree.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/traverseRevTree.js
rename to packages/pouchdb-merge/src/traverseRevTree.js
diff --git a/packages/node_modules/pouchdb-merge/src/winningRev.js b/packages/pouchdb-merge/src/winningRev.js
similarity index 100%
rename from packages/node_modules/pouchdb-merge/src/winningRev.js
rename to packages/pouchdb-merge/src/winningRev.js
diff --git a/packages/node_modules/pouchdb-node/LICENSE b/packages/pouchdb-node/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-node/LICENSE
rename to packages/pouchdb-node/LICENSE
diff --git a/packages/node_modules/pouchdb-node/README.md b/packages/pouchdb-node/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-node/README.md
rename to packages/pouchdb-node/README.md
diff --git a/packages/node_modules/pouchdb-node/package.json b/packages/pouchdb-node/package.json
similarity index 72%
rename from packages/node_modules/pouchdb-node/package.json
rename to packages/pouchdb-node/package.json
index 83cb8b88a6..d52d348093 100644
--- a/packages/node_modules/pouchdb-node/package.json
+++ b/packages/pouchdb-node/package.json
@@ -4,6 +4,12 @@
"description": "PouchDB, the Node-only edition.",
"main": "./lib/index.js",
"module": "./lib/index.es.js",
+ "workspaces": ["../../","../"],
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"author": "Dale Harvey ",
"license": "Apache-2.0",
"repository": {
diff --git a/packages/node_modules/pouchdb-node/src/index.js b/packages/pouchdb-node/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-node/src/index.js
rename to packages/pouchdb-node/src/index.js
diff --git a/packages/pouchdb-platform/aswesome-os.js b/packages/pouchdb-platform/aswesome-os.js
new file mode 100644
index 0000000000..76a3b92b50
--- /dev/null
+++ b/packages/pouchdb-platform/aswesome-os.js
@@ -0,0 +1,3 @@
+// This aims to offer the AwesomeOS API
+// Eg. opfs in a nodejs compatible way.
+
diff --git a/packages/pouchdb-platform/browser.js b/packages/pouchdb-platform/browser.js
new file mode 100644
index 0000000000..36d7cf0cf3
--- /dev/null
+++ b/packages/pouchdb-platform/browser.js
@@ -0,0 +1,3 @@
+import fs from 'browserify-fs';
+
+export { fs };
\ No newline at end of file
diff --git a/packages/pouchdb-platform/lib/_commonjsHelpers-7d1333e8.js b/packages/pouchdb-platform/lib/_commonjsHelpers-7d1333e8.js
new file mode 100644
index 0000000000..004412e51c
--- /dev/null
+++ b/packages/pouchdb-platform/lib/_commonjsHelpers-7d1333e8.js
@@ -0,0 +1,7 @@
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+}
+
+export { commonjsGlobal as c, getDefaultExportFromCjs as g };
diff --git a/packages/pouchdb-platform/lib/hash-wasm.js b/packages/pouchdb-platform/lib/hash-wasm.js
new file mode 100644
index 0000000000..46e054cac7
--- /dev/null
+++ b/packages/pouchdb-platform/lib/hash-wasm.js
@@ -0,0 +1,2416 @@
+/*!
+ * hash-wasm (https://www.npmjs.com/package/hash-wasm)
+ * (c) Dani Biro
+ * @license MIT
+ */
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+class Mutex {
+ constructor() {
+ this.mutex = Promise.resolve();
+ }
+ lock() {
+ let begin = () => { };
+ this.mutex = this.mutex.then(() => new Promise(begin));
+ return new Promise((res) => {
+ begin = res;
+ });
+ }
+ dispatch(fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield this.lock();
+ try {
+ return yield Promise.resolve(fn());
+ }
+ finally {
+ unlock();
+ }
+ });
+ }
+}
+
+/* eslint-disable import/prefer-default-export */
+/* eslint-disable no-bitwise */
+var _a;
+function getGlobal() {
+ if (typeof globalThis !== 'undefined')
+ return globalThis;
+ // eslint-disable-next-line no-restricted-globals
+ if (typeof self !== 'undefined')
+ return self;
+ if (typeof window !== 'undefined')
+ return window;
+ return global;
+}
+const globalObject = getGlobal();
+const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
+const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
+function intArrayToString(arr, len) {
+ return String.fromCharCode(...arr.subarray(0, len));
+}
+function hexCharCodesToInt(a, b) {
+ return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
+}
+function writeHexToUInt8(buf, str) {
+ const size = str.length >> 1;
+ for (let i = 0; i < size; i++) {
+ const index = i << 1;
+ buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
+ }
+}
+function hexStringEqualsUInt8(str, buf) {
+ if (str.length !== buf.length * 2) {
+ return false;
+ }
+ for (let i = 0; i < buf.length; i++) {
+ const strIndex = i << 1;
+ if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
+ return false;
+ }
+ }
+ return true;
+}
+const alpha = 'a'.charCodeAt(0) - 10;
+const digit = '0'.charCodeAt(0);
+function getDigestHex(tmpBuffer, input, hashLength) {
+ let p = 0;
+ /* eslint-disable no-plusplus */
+ for (let i = 0; i < hashLength; i++) {
+ let nibble = input[i] >>> 4;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ nibble = input[i] & 0xF;
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
+ }
+ /* eslint-enable no-plusplus */
+ return String.fromCharCode.apply(null, tmpBuffer);
+}
+const getUInt8Buffer = nodeBuffer !== null
+ ? (data) => {
+ if (typeof data === 'string') {
+ const buf = nodeBuffer.from(data, 'utf8');
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+ }
+ if (nodeBuffer.isBuffer(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.length);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ }
+ : (data) => {
+ if (typeof data === 'string') {
+ return textEncoder.encode(data);
+ }
+ if (ArrayBuffer.isView(data)) {
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
+ }
+ throw new Error('Invalid data type!');
+ };
+const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+const base64Lookup = new Uint8Array(256);
+for (let i = 0; i < base64Chars.length; i++) {
+ base64Lookup[base64Chars.charCodeAt(i)] = i;
+}
+function encodeBase64(data, pad = true) {
+ const len = data.length;
+ const extraBytes = len % 3;
+ const parts = [];
+ const len2 = len - extraBytes;
+ for (let i = 0; i < len2; i += 3) {
+ const tmp = ((data[i] << 16) & 0xFF0000)
+ + ((data[i + 1] << 8) & 0xFF00)
+ + (data[i + 2] & 0xFF);
+ const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)
+ + base64Chars.charAt((tmp >> 12) & 0x3F)
+ + base64Chars.charAt((tmp >> 6) & 0x3F)
+ + base64Chars.charAt(tmp & 0x3F);
+ parts.push(triplet);
+ }
+ if (extraBytes === 1) {
+ const tmp = data[len - 1];
+ const a = base64Chars.charAt(tmp >> 2);
+ const b = base64Chars.charAt((tmp << 4) & 0x3F);
+ parts.push(`${a}${b}`);
+ if (pad) {
+ parts.push('==');
+ }
+ }
+ else if (extraBytes === 2) {
+ const tmp = (data[len - 2] << 8) + data[len - 1];
+ const a = base64Chars.charAt(tmp >> 10);
+ const b = base64Chars.charAt((tmp >> 4) & 0x3F);
+ const c = base64Chars.charAt((tmp << 2) & 0x3F);
+ parts.push(`${a}${b}${c}`);
+ if (pad) {
+ parts.push('=');
+ }
+ }
+ return parts.join('');
+}
+function getDecodeBase64Length(data) {
+ let bufferLength = Math.floor(data.length * 0.75);
+ const len = data.length;
+ if (data[len - 1] === '=') {
+ bufferLength -= 1;
+ if (data[len - 2] === '=') {
+ bufferLength -= 1;
+ }
+ }
+ return bufferLength;
+}
+function decodeBase64(data) {
+ const bufferLength = getDecodeBase64Length(data);
+ const len = data.length;
+ const bytes = new Uint8Array(bufferLength);
+ let p = 0;
+ for (let i = 0; i < len; i += 4) {
+ const encoded1 = base64Lookup[data.charCodeAt(i)];
+ const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
+ const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
+ const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
+ bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
+ p += 1;
+ bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
+ p += 1;
+ bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
+ p += 1;
+ }
+ return bytes;
+}
+
+const MAX_HEAP = 16 * 1024;
+const WASM_FUNC_HASH_LENGTH = 4;
+const wasmMutex = new Mutex();
+const wasmModuleCache = new Map();
+function WASMInterface(binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let wasmInstance = null;
+ let memoryView = null;
+ let initialized = false;
+ if (typeof WebAssembly === 'undefined') {
+ throw new Error('WebAssembly is not supported in this environment!');
+ }
+ const writeMemory = (data, offset = 0) => {
+ memoryView.set(data, offset);
+ };
+ const getMemory = () => memoryView;
+ const getExports = () => wasmInstance.exports;
+ const setMemorySize = (totalSize) => {
+ wasmInstance.exports.Hash_SetMemorySize(totalSize);
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
+ };
+ const getStateSize = () => {
+ const view = new DataView(wasmInstance.exports.memory.buffer);
+ const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
+ return stateSize;
+ };
+ const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmModuleCache.has(binary.name)) {
+ const asm = decodeBase64(binary.data);
+ const promise = WebAssembly.compile(asm);
+ wasmModuleCache.set(binary.name, promise);
+ }
+ const module = yield wasmModuleCache.get(binary.name);
+ wasmInstance = yield WebAssembly.instantiate(module, {
+ // env: {
+ // emscripten_memcpy_big: (dest, src, num) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // memView.set(memView.subarray(src, src + num), dest);
+ // },
+ // print_memory: (offset, len) => {
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
+ // const memView = new Uint8Array(memoryBuffer, 0);
+ // console.log('print_int32', memView.subarray(offset, offset + len));
+ // },
+ // },
+ });
+ // wasmInstance.exports._start();
+ }));
+ const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
+ if (!wasmInstance) {
+ yield loadWASMPromise;
+ }
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
+ });
+ const init = (bits = null) => {
+ initialized = true;
+ wasmInstance.exports.Hash_Init(bits);
+ };
+ const updateUInt8Array = (data) => {
+ let read = 0;
+ while (read < data.length) {
+ const chunk = data.subarray(read, read + MAX_HEAP);
+ read += chunk.length;
+ memoryView.set(chunk);
+ wasmInstance.exports.Hash_Update(chunk.length);
+ }
+ };
+ const update = (data) => {
+ if (!initialized) {
+ throw new Error('update() called before init()');
+ }
+ const Uint8Buffer = getUInt8Buffer(data);
+ updateUInt8Array(Uint8Buffer);
+ };
+ const digestChars = new Uint8Array(hashLength * 2);
+ const digest = (outputType, padding = null) => {
+ if (!initialized) {
+ throw new Error('digest() called before init()');
+ }
+ initialized = false;
+ wasmInstance.exports.Hash_Final(padding);
+ if (outputType === 'binary') {
+ // the data is copied to allow GC of the original memory object
+ return memoryView.slice(0, hashLength);
+ }
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ const save = () => {
+ if (!initialized) {
+ throw new Error('save() can only be called after init() and before digest()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
+ // prefix is 4 bytes from SHA1 hash of the WASM binary
+ // it is used to detect incompatible internal states between different versions of hash-wasm
+ const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
+ writeHexToUInt8(prefixedState, binary.hash);
+ prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
+ return prefixedState;
+ };
+ const load = (state) => {
+ if (!(state instanceof Uint8Array)) {
+ throw new Error('load() expects an Uint8Array generated by save()');
+ }
+ const stateOffset = wasmInstance.exports.Hash_GetState();
+ const stateLength = getStateSize();
+ const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
+ if (state.length !== overallLength) {
+ throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
+ }
+ if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
+ throw new Error('This state was written by an incompatible hash implementation');
+ }
+ const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
+ new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
+ initialized = true;
+ };
+ const isDataShort = (data) => {
+ if (typeof data === 'string') {
+ // worst case is 4 bytes / char
+ return data.length < MAX_HEAP / 4;
+ }
+ return data.byteLength < MAX_HEAP;
+ };
+ let canSimplify = isDataShort;
+ switch (binary.name) {
+ case 'argon2':
+ case 'scrypt':
+ canSimplify = () => true;
+ break;
+ case 'blake2b':
+ case 'blake2s':
+ // if there is a key at blake2 then cannot simplify
+ canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
+ break;
+ case 'blake3':
+ // if there is a key at blake3 then cannot simplify
+ canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
+ break;
+ case 'xxhash64': // cannot simplify
+ case 'xxhash3':
+ case 'xxhash128':
+ canSimplify = () => false;
+ break;
+ }
+ // shorthand for (init + update + digest) for better performance
+ const calculate = (data, initParam = null, digestParam = null) => {
+ if (!canSimplify(data, initParam)) {
+ init(initParam);
+ update(data);
+ return digest('hex', digestParam);
+ }
+ const buffer = getUInt8Buffer(data);
+ memoryView.set(buffer);
+ wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
+ return getDigestHex(digestChars, memoryView, hashLength);
+ };
+ yield setupInterface();
+ return {
+ getMemory,
+ writeMemory,
+ getExports,
+ setMemorySize,
+ init,
+ update,
+ digest,
+ save,
+ load,
+ calculate,
+ hashLength,
+ };
+ });
+}
+
+var name$k = "adler32";
+var data$k = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgQFAXABAQEFBAEBAgIGDgJ/AUGAiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCoAIBgUAQYAJCwoAQQBBATYChAgL9gYBBn9BACgChAgiAUH//wNxIQIgAUEQdiEDAkACQCAAQQFHDQAgAkEALQCACWoiAUGPgHxqIAEgAUHw/wNLGyIBIANqIgRBEHQiBUGAgDxqIAUgBEHw/wNLGyABciEBDAELAkACQAJAAkACQCAAQRBJDQBBgAkhBiAAQbArSQ0BQYAJIQYDQEEAIQUDQCAGIAVqIgEoAgAiBEH/AXEgAmoiAiADaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEEaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiICaiACIAFBCGooAgAiBEH/AXFqIgJqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiBGogBCABQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBUEQaiIFQbArRw0ACyADQfH/A3AhAyACQfH/A3AhAiAGQbAraiEGIABB0FRqIgBBrytLDQALIABFDQQgAEEPSw0BDAILAkAgAEUNAEEAIQEDQCACIAFBgAlqLQAAaiICIANqIQMgACABQQFqIgFHDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCwNAIAIgBi0AAGoiAiADaiEDIAZBAWohBiAAQX9qIgANAAsLIANB8f8DcCEDIAJB8f8DcCECCyACIANBEHRyIQELQQAgATYChAgLMgEBf0EAQQAoAoQIIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBQBBhAgLPABBAEEBNgKECCAAEAJBAEEAKAKECCIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA";
+var hash$k = "321174b4";
+var wasmJson$k = {
+ name: name$k,
+ data: data$k,
+ hash: hash$k
+};
+
+function lockedCreate(mutex, binary, hashLength) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const unlock = yield mutex.lock();
+ const wasm = yield WASMInterface(binary, hashLength);
+ unlock();
+ return wasm;
+ });
+}
+
+const mutex$l = new Mutex();
+let wasmCache$l = null;
+/**
+ * Calculates Adler-32 hash. The resulting 32-bit hash is stored in
+ * network byte order (big-endian).
+ *
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function adler32(data) {
+ if (wasmCache$l === null) {
+ return lockedCreate(mutex$l, wasmJson$k, 4)
+ .then((wasm) => {
+ wasmCache$l = wasm;
+ return wasmCache$l.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$l.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Adler-32 hash instance
+ */
+function createAdler32() {
+ return WASMInterface(wasmJson$k, 4).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$j = "blake2b";
+var data$j = "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";
+var hash$j = "68afc9cf";
+var wasmJson$j = {
+ name: name$j,
+ data: data$j,
+ hash: hash$j
+};
+
+const mutex$k = new Mutex();
+let wasmCache$k = null;
+function validateBits$4(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 512');
+ }
+ return null;
+}
+function getInitParam$1(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2b hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2b(data, bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {
+ return lockedCreate(mutex$k, wasmJson$j, hashLength)
+ .then((wasm) => {
+ wasmCache$k = wasm;
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ return wasmCache$k.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$k.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$k.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2b hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 512. Defaults to 512.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
+ */
+function createBLAKE2b(bits = 512, key = null) {
+ if (validateBits$4(bits)) {
+ return Promise.reject(validateBits$4(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 64) {
+ return Promise.reject(new Error('Max key length is 64 bytes'));
+ }
+ initParam = getInitParam$1(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$j, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$i = "argon2";
+var data$i = "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQEBQFwAQEBBQYBAQKAgAIGCAF/AUGQqAQLB0EEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEOSGFzaF9DYWxjdWxhdGUABArXMwVbAQF/QQAhAQJAIABBACgCgAhrIgBFDQACQCAAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wEhAQwBC0EAIQFBAEEAKQOACCAAQRB0rXw3A4AICyABQRh0QRh1C2oBAn8CQEEAKAKICCIADQBBAD8AQRB0IgA2AogIQYCAIEEAKAKACGsiAUUNAAJAIAFBEHYgAUGAgHxxIAFJaiIAQABBf0cNAEEADwtBAEEAKQOACCAAQRB0rXw3A4AIQQAoAogIIQALIAALnA8BA34gACAEKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgAiAGKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAyAHKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgASAGKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAiAHKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwALhxoBAX9BACEEQQAgAikDACABKQMAhTcDkAhBACACKQMIIAEpAwiFNwOYCEEAIAIpAxAgASkDEIU3A6AIQQAgAikDGCABKQMYhTcDqAhBACACKQMgIAEpAyCFNwOwCEEAIAIpAyggASkDKIU3A7gIQQAgAikDMCABKQMwhTcDwAhBACACKQM4IAEpAziFNwPICEEAIAIpA0AgASkDQIU3A9AIQQAgAikDSCABKQNIhTcD2AhBACACKQNQIAEpA1CFNwPgCEEAIAIpA1ggASkDWIU3A+gIQQAgAikDYCABKQNghTcD8AhBACACKQNoIAEpA2iFNwP4CEEAIAIpA3AgASkDcIU3A4AJQQAgAikDeCABKQN4hTcDiAlBACACKQOAASABKQOAAYU3A5AJQQAgAikDiAEgASkDiAGFNwOYCUEAIAIpA5ABIAEpA5ABhTcDoAlBACACKQOYASABKQOYAYU3A6gJQQAgAikDoAEgASkDoAGFNwOwCUEAIAIpA6gBIAEpA6gBhTcDuAlBACACKQOwASABKQOwAYU3A8AJQQAgAikDuAEgASkDuAGFNwPICUEAIAIpA8ABIAEpA8ABhTcD0AlBACACKQPIASABKQPIAYU3A9gJQQAgAikD0AEgASkD0AGFNwPgCUEAIAIpA9gBIAEpA9gBhTcD6AlBACACKQPgASABKQPgAYU3A/AJQQAgAikD6AEgASkD6AGFNwP4CUEAIAIpA/ABIAEpA/ABhTcDgApBACACKQP4ASABKQP4AYU3A4gKQQAgAikDgAIgASkDgAKFNwOQCkEAIAIpA4gCIAEpA4gChTcDmApBACACKQOQAiABKQOQAoU3A6AKQQAgAikDmAIgASkDmAKFNwOoCkEAIAIpA6ACIAEpA6AChTcDsApBACACKQOoAiABKQOoAoU3A7gKQQAgAikDsAIgASkDsAKFNwPACkEAIAIpA7gCIAEpA7gChTcDyApBACACKQPAAiABKQPAAoU3A9AKQQAgAikDyAIgASkDyAKFNwPYCkEAIAIpA9ACIAEpA9AChTcD4ApBACACKQPYAiABKQPYAoU3A+gKQQAgAikD4AIgASkD4AKFNwPwCkEAIAIpA+gCIAEpA+gChTcD+ApBACACKQPwAiABKQPwAoU3A4ALQQAgAikD+AIgASkD+AKFNwOIC0EAIAIpA4ADIAEpA4ADhTcDkAtBACACKQOIAyABKQOIA4U3A5gLQQAgAikDkAMgASkDkAOFNwOgC0EAIAIpA5gDIAEpA5gDhTcDqAtBACACKQOgAyABKQOgA4U3A7ALQQAgAikDqAMgASkDqAOFNwO4C0EAIAIpA7ADIAEpA7ADhTcDwAtBACACKQO4AyABKQO4A4U3A8gLQQAgAikDwAMgASkDwAOFNwPQC0EAIAIpA8gDIAEpA8gDhTcD2AtBACACKQPQAyABKQPQA4U3A+ALQQAgAikD2AMgASkD2AOFNwPoC0EAIAIpA+ADIAEpA+ADhTcD8AtBACACKQPoAyABKQPoA4U3A/gLQQAgAikD8AMgASkD8AOFNwOADEEAIAIpA/gDIAEpA/gDhTcDiAxBACACKQOABCABKQOABIU3A5AMQQAgAikDiAQgASkDiASFNwOYDEEAIAIpA5AEIAEpA5AEhTcDoAxBACACKQOYBCABKQOYBIU3A6gMQQAgAikDoAQgASkDoASFNwOwDEEAIAIpA6gEIAEpA6gEhTcDuAxBACACKQOwBCABKQOwBIU3A8AMQQAgAikDuAQgASkDuASFNwPIDEEAIAIpA8AEIAEpA8AEhTcD0AxBACACKQPIBCABKQPIBIU3A9gMQQAgAikD0AQgASkD0ASFNwPgDEEAIAIpA9gEIAEpA9gEhTcD6AxBACACKQPgBCABKQPgBIU3A/AMQQAgAikD6AQgASkD6ASFNwP4DEEAIAIpA/AEIAEpA/AEhTcDgA1BACACKQP4BCABKQP4BIU3A4gNQQAgAikDgAUgASkDgAWFNwOQDUEAIAIpA4gFIAEpA4gFhTcDmA1BACACKQOQBSABKQOQBYU3A6ANQQAgAikDmAUgASkDmAWFNwOoDUEAIAIpA6AFIAEpA6AFhTcDsA1BACACKQOoBSABKQOoBYU3A7gNQQAgAikDsAUgASkDsAWFNwPADUEAIAIpA7gFIAEpA7gFhTcDyA1BACACKQPABSABKQPABYU3A9ANQQAgAikDyAUgASkDyAWFNwPYDUEAIAIpA9AFIAEpA9AFhTcD4A1BACACKQPYBSABKQPYBYU3A+gNQQAgAikD4AUgASkD4AWFNwPwDUEAIAIpA+gFIAEpA+gFhTcD+A1BACACKQPwBSABKQPwBYU3A4AOQQAgAikD+AUgASkD+AWFNwOIDkEAIAIpA4AGIAEpA4AGhTcDkA5BACACKQOIBiABKQOIBoU3A5gOQQAgAikDkAYgASkDkAaFNwOgDkEAIAIpA5gGIAEpA5gGhTcDqA5BACACKQOgBiABKQOgBoU3A7AOQQAgAikDqAYgASkDqAaFNwO4DkEAIAIpA7AGIAEpA7AGhTcDwA5BACACKQO4BiABKQO4BoU3A8gOQQAgAikDwAYgASkDwAaFNwPQDkEAIAIpA8gGIAEpA8gGhTcD2A5BACACKQPQBiABKQPQBoU3A+AOQQAgAikD2AYgASkD2AaFNwPoDkEAIAIpA+AGIAEpA+AGhTcD8A5BACACKQPoBiABKQPoBoU3A/gOQQAgAikD8AYgASkD8AaFNwOAD0EAIAIpA/gGIAEpA/gGhTcDiA9BACACKQOAByABKQOAB4U3A5APQQAgAikDiAcgASkDiAeFNwOYD0EAIAIpA5AHIAEpA5AHhTcDoA9BACACKQOYByABKQOYB4U3A6gPQQAgAikDoAcgASkDoAeFNwOwD0EAIAIpA6gHIAEpA6gHhTcDuA9BACACKQOwByABKQOwB4U3A8APQQAgAikDuAcgASkDuAeFNwPID0EAIAIpA8AHIAEpA8AHhTcD0A9BACACKQPIByABKQPIB4U3A9gPQQAgAikD0AcgASkD0AeFNwPgD0EAIAIpA9gHIAEpA9gHhTcD6A9BACACKQPgByABKQPgB4U3A/APQQAgAikD6AcgASkD6AeFNwP4D0EAIAIpA/AHIAEpA/AHhTcDgBBBACACKQP4ByABKQP4B4U3A4gQQZAIQZgIQaAIQagIQbAIQbgIQcAIQcgIQdAIQdgIQeAIQegIQfAIQfgIQYAJQYgJEAJBkAlBmAlBoAlBqAlBsAlBuAlBwAlByAlB0AlB2AlB4AlB6AlB8AlB+AlBgApBiAoQAkGQCkGYCkGgCkGoCkGwCkG4CkHACkHICkHQCkHYCkHgCkHoCkHwCkH4CkGAC0GICxACQZALQZgLQaALQagLQbALQbgLQcALQcgLQdALQdgLQeALQegLQfALQfgLQYAMQYgMEAJBkAxBmAxBoAxBqAxBsAxBuAxBwAxByAxB0AxB2AxB4AxB6AxB8AxB+AxBgA1BiA0QAkGQDUGYDUGgDUGoDUGwDUG4DUHADUHIDUHQDUHYDUHgDUHoDUHwDUH4DUGADkGIDhACQZAOQZgOQaAOQagOQbAOQbgOQcAOQcgOQdAOQdgOQeAOQegOQfAOQfgOQYAPQYgPEAJBkA9BmA9BoA9BqA9BsA9BuA9BwA9ByA9B0A9B2A9B4A9B6A9B8A9B+A9BgBBBiBAQAkGQCEGYCEGQCUGYCUGQCkGYCkGQC0GYC0GQDEGYDEGQDUGYDUGQDkGYDkGQD0GYDxACQaAIQagIQaAJQagJQaAKQagKQaALQagLQaAMQagMQaANQagNQaAOQagOQaAPQagPEAJBsAhBuAhBsAlBuAlBsApBuApBsAtBuAtBsAxBuAxBsA1BuA1BsA5BuA5BsA9BuA8QAkHACEHICEHACUHICUHACkHICkHAC0HIC0HADEHIDEHADUHIDUHADkHIDkHAD0HIDxACQdAIQdgIQdAJQdgJQdAKQdgKQdALQdgLQdAMQdgMQdANQdgNQdAOQdgOQdAPQdgPEAJB4AhB6AhB4AlB6AlB4ApB6ApB4AtB6AtB4AxB6AxB4A1B6A1B4A5B6A5B4A9B6A8QAkHwCEH4CEHwCUH4CUHwCkH4CkHwC0H4C0HwDEH4DEHwDUH4DUHwDkH4DkHwD0H4DxACQYAJQYgJQYAKQYgKQYALQYgLQYAMQYgMQYANQYgNQYAOQYgOQYAPQYgPQYAQQYgQEAICQAJAIANFDQADQCAAIARqIgMgAiAEaikDACABIARqKQMAhSAEQZAIaikDAIUgAykDAIU3AwAgBEEIaiIEQYAIRw0ADAILC0EAIQQDQCAAIARqIAIgBGopAwAgASAEaikDAIUgBEGQCGopAwCFNwMAIARBCGoiBEGACEcNAAsLC+YICQV/AX4DfwJ+An8BfgN/A34KfwJAQQAoAogIIgIgAUEKdGoiAygCCCABRw0AIAMoAgwhBCADKAIAIQVBACADKAIUIgatNwO4EEEAIAStIgc3A7AQQQAgBSABIAVBAnRuIghsIglBAnStNwOoECAIQQJ0IQMCQCAERQ0AIAhBA2whCiAFrSELIAOtIQwgBkECRiENIAZBf2pBAUshDkIAIQ8DQEEAIA83A5AQIA0gD1AiEHEhESAPpyESQgAhE0EAIQEDQEEAIBM3A6AQAkAgBUUNAEIAIRQgDiAPIBOEIhVCAFJyIRZBfyABQQFqQQNxIAhsQX9qIBAbIRcgASASciEYIAEgCGwhGSARIBNCAlRxIRogFVBBAXQhGwNAQQBCADcDwBBBACAUNwOYECAbIQECQCAWDQBBAEIBNwPAEEGQGEGQEEGQIEEAEANBkBhBkBhBkCBBABADQQIhAQsCQCABIAhPDQAgAyAUpyIcbCAZaiABaiECAkAgBkEBRw0AA0AgAkEAIAMgARtBACATUCIdG2pB////AWohHgJAIAFB/wBxIh8NAEEAQQApA8AQQgF8NwPAEEGQGEGQEEGQIEEAEANBkBhBkBhBkCBBABADC0EAKAKICCIEIAJBCnRqIAQgHkEKdGogBCAfQQN0QZAYaikDACIVQiCIpyAFcCAcIBgbIh4gA2wgASABQQAgFCAerVEiHhsiHyAdGyAZaiAfIApqIBAbIAFFIB5yayIdIBdqrSAVQv////8PgyIVIBV+QiCIIB2tfkIgiH0gDIKnakEKdGpBARADIAJBAWohAiABQQFqIgEgCEcNAAwCCwsDQCACQQAgAyABG0EAIBNQIh0bakF/aiEeAkACQCAaRQ0AAkAgAUH/AHEiBA0AQQBBACkDwBBCAXw3A8AQQZAYQZAQQZAgQQAQA0GQGEGQGEGQIEEAEAMLIB5BCnQhHiAEQQN0QZAYaiEfQQAoAogIIQQMAQtBACgCiAgiBCAeQQp0Ih5qIR8LIAQgAkEKdGogBCAeaiAEIB8pAwAiFUIgiKcgBXAgHCAYGyIeIANsIAEgAUEAIBQgHq1RIh4bIh8gHRsgGWogHyAKaiAQGyABRSAecmsiHSAXaq0gFUL/////D4MiFSAVfkIgiCAdrX5CIIh9IAyCp2pBCnRqQQEQAyACQQFqIQIgAUEBaiIBIAhHDQALCyAUQgF8IhQgC1INAAsLIBNCAXwiE6chASATQgRSDQALIA9CAXwiDyAHUg0AC0EAKAKICCECCyAJQQx0QYB4aiEZAkAgBUF/aiIQRQ0AQQAhBQNAIAUgA2wgA2pBCnRBgHhqIRxBeCEEQQAhAQNAIAIgASAZamoiCCAIKQMAIAIgHCABamopAwCFNwMAIAFBCGohASAEQQhqIgRB+AdJDQALIAVBAWoiBSAQRw0ACwtBACEBA0AgAiABaiACIAEgGWpqKQMANwMAIAFB+AdJIQMgAUEIaiEBIAMNAAsLCw==";
+var hash$i = "59aa4fb4";
+var wasmJson$i = {
+ name: name$i,
+ data: data$i,
+ hash: hash$i
+};
+
+function encodeResult(salt, options, res) {
+ const parameters = [
+ `m=${options.memorySize}`,
+ `t=${options.iterations}`,
+ `p=${options.parallelism}`,
+ ].join(',');
+ return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;
+}
+const uint32View = new DataView(new ArrayBuffer(4));
+function int32LE(x) {
+ uint32View.setInt32(0, x, true);
+ return new Uint8Array(uint32View.buffer);
+}
+function hashFunc(blake512, buf, len) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (len <= 64) {
+ const blake = yield createBLAKE2b(len * 8);
+ blake.update(int32LE(len));
+ blake.update(buf);
+ return blake.digest('binary');
+ }
+ const r = Math.ceil(len / 32) - 2;
+ const ret = new Uint8Array(len);
+ blake512.init();
+ blake512.update(int32LE(len));
+ blake512.update(buf);
+ let vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), 0);
+ for (let i = 1; i < r; i++) {
+ blake512.init();
+ blake512.update(vp);
+ vp = blake512.digest('binary');
+ ret.set(vp.subarray(0, 32), i * 32);
+ }
+ const partialBytesNeeded = len - 32 * r;
+ let blakeSmall;
+ if (partialBytesNeeded === 64) {
+ blakeSmall = blake512;
+ blakeSmall.init();
+ }
+ else {
+ blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);
+ }
+ blakeSmall.update(vp);
+ vp = blakeSmall.digest('binary');
+ ret.set(vp.subarray(0, partialBytesNeeded), r * 32);
+ return ret;
+ });
+}
+function getHashType(type) {
+ switch (type) {
+ case 'd':
+ return 0;
+ case 'i':
+ return 1;
+ default:
+ return 2;
+ }
+}
+function argon2Internal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { parallelism, iterations, hashLength } = options;
+ const password = getUInt8Buffer(options.password);
+ const salt = getUInt8Buffer(options.salt);
+ const version = 0x13;
+ const hashType = getHashType(options.hashType);
+ const { memorySize } = options; // in KB
+ const [argon2Interface, blake512] = yield Promise.all([
+ WASMInterface(wasmJson$i, 1024),
+ createBLAKE2b(512),
+ ]);
+ // last block is for storing the init vector
+ argon2Interface.setMemorySize(memorySize * 1024 + 1024);
+ const initVector = new Uint8Array(24);
+ const initVectorView = new DataView(initVector.buffer);
+ initVectorView.setInt32(0, parallelism, true);
+ initVectorView.setInt32(4, hashLength, true);
+ initVectorView.setInt32(8, memorySize, true);
+ initVectorView.setInt32(12, iterations, true);
+ initVectorView.setInt32(16, version, true);
+ initVectorView.setInt32(20, hashType, true);
+ argon2Interface.writeMemory(initVector, memorySize * 1024);
+ blake512.init();
+ blake512.update(initVector);
+ blake512.update(int32LE(password.length));
+ blake512.update(password);
+ blake512.update(int32LE(salt.length));
+ blake512.update(salt);
+ blake512.update(int32LE(0)); // key length + key
+ blake512.update(int32LE(0)); // associatedData length + associatedData
+ const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane
+ const lanes = segments * 4;
+ const param = new Uint8Array(72);
+ const H0 = blake512.digest('binary');
+ param.set(H0);
+ for (let lane = 0; lane < parallelism; lane++) {
+ param.set(int32LE(0), 64);
+ param.set(int32LE(lane), 68);
+ let position = lane * lanes;
+ let chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ position += 1;
+ param.set(int32LE(1), 64);
+ chunk = yield hashFunc(blake512, param, 1024);
+ argon2Interface.writeMemory(chunk, position * 1024);
+ }
+ const C = new Uint8Array(1024);
+ writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));
+ const res = yield hashFunc(blake512, C, hashLength);
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, res, hashLength);
+ }
+ if (options.outputType === 'encoded') {
+ return encodeResult(salt, options, res);
+ }
+ // return binary format
+ return res;
+ });
+}
+const validateOptions$3 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.password) {
+ throw new Error('Password must be specified');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password must be specified');
+ }
+ if (!options.salt) {
+ throw new Error('Salt must be specified');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length < 8) {
+ throw new Error('Salt should be at least 8 bytes long');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {
+ throw new Error('Hash length should be at least 4 bytes.');
+ }
+ if (!Number.isInteger(options.memorySize)) {
+ throw new Error('Memory size should be specified.');
+ }
+ if (options.memorySize < 8 * options.parallelism) {
+ throw new Error('Memory size should be at least 8 * parallelism.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the argon2i password-hashing function
+ * @returns Computed hash
+ */
+function argon2i(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));
+ });
+}
+/**
+ * Calculates hash using the argon2id password-hashing function
+ * @returns Computed hash
+ */
+function argon2id(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));
+ });
+}
+/**
+ * Calculates hash using the argon2d password-hashing function
+ * @returns Computed hash
+ */
+function argon2d(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$3(options);
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));
+ });
+}
+const getHashParameters = (password, encoded) => {
+ const regex = /^\$argon2(id|i|d)\$v=([0-9]+)\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\$([A-Za-z0-9+/]+)\$([A-Za-z0-9+/]+)$/;
+ const match = encoded.match(regex);
+ if (!match) {
+ throw new Error('Invalid hash');
+ }
+ const [, hashType, version, parameters, salt, hash] = match;
+ if (version !== '19') {
+ throw new Error(`Unsupported version: ${version}`);
+ }
+ const parsedParameters = {};
+ const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };
+ parameters.split(',').forEach((x) => {
+ const [n, v] = x.split('=');
+ parsedParameters[paramMap[n]] = parseInt(v, 10);
+ });
+ return Object.assign(Object.assign({}, parsedParameters), { password, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });
+};
+const validateVerifyOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+};
+/**
+ * Verifies password using the argon2 password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function argon2Verify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions$1(options);
+ const params = getHashParameters(options.password, options.hash);
+ validateOptions$3(params);
+ const hashStart = options.hash.lastIndexOf('$') + 1;
+ const result = yield argon2Internal(params);
+ return result.substring(hashStart) === options.hash.substring(hashStart);
+ });
+}
+
+var name$h = "blake2s";
+var data$h = "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";
+var hash$h = "0f570f49";
+var wasmJson$h = {
+ name: name$h,
+ data: data$h,
+ hash: hash$h
+};
+
+const mutex$j = new Mutex();
+let wasmCache$j = null;
+function validateBits$3(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ..., 256');
+ }
+ return null;
+}
+function getInitParam(outputBits, keyBits) {
+ // eslint-disable-next-line no-bitwise
+ return outputBits | (keyBits << 16);
+}
+/**
+ * Calculates BLAKE2s hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake2s(data, bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {
+ return lockedCreate(mutex$j, wasmJson$h, hashLength)
+ .then((wasm) => {
+ wasmCache$j = wasm;
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ return wasmCache$j.calculate(data, initParam);
+ });
+ }
+ try {
+ if (initParam > 512) {
+ wasmCache$j.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$j.calculate(data, initParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE2s hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8, between 8 and 256. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.
+ */
+function createBLAKE2s(bits = 256, key = null) {
+ if (validateBits$3(bits)) {
+ return Promise.reject(validateBits$3(bits));
+ }
+ let keyBuffer = null;
+ let initParam = bits;
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length > 32) {
+ return Promise.reject(new Error('Max key length is 32 bytes'));
+ }
+ initParam = getInitParam(bits, keyBuffer.length);
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$h, outputSize).then((wasm) => {
+ if (initParam > 512) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam > 512
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$g = "blake3";
+var data$g = "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FWogFCAfc0EZdyIVaiIUIBhqIB0gFHNBEHciFCAlaiIYIBVzQRR3IhVqIhkgFHNBGHciFCAYaiIYaiIdICBzQRR3Ih9qIiA2AgAgACAXICQgHHNBGHciHCAeaiIeIBtzQRl3IhtqIAFqIgEgFmogASAUc0EQdyIBICtqIhQgG3NBFHciFmoiFyABc0EYdyIBNgI4IAAgGCAVc0EZdyIVIC5qIANqIgMgE2ogAyAcc0EQdyIDIAIgImoiAmoiIiAVc0EUdyIVaiITNgIEIAAgASAUaiIBNgIkIAAgAiAFc0EZdyICIBlqICFqIgUgGmogBSAnc0EQdyIFIB5qIhQgAnNBFHciAmoiGjYCCCAAICAgEnNBGHciEiAdaiIhNgIoIAAgEyADc0EYdyIDNgIwIAAgASAWc0EZdzYCECAAIBogBXNBGHciATYCNCAAICEgH3NBGXc2AhQgACABIBRqIgE2AiAgACADICJqIgUgFXNBGXc2AhggACASNgI8IAAgASACc0EZdzYCHCAAIBc2AgwgACAFNgIsC7cDAwR/A34FfyMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NACABQShqIQQDQCABQQApA4CJASIANwMAIAFBACkDiIkBIgU3AwggAUEAKQOQiQEiBjcDECABQQApA5iJASIHNwMYIAEgA0EFdCIDQdGJAWoiCCkDADcDKCABIANB2YkBaiIJKQMANwMwIAEgA0HhiQFqIgopAwA3AzggASADQemJAWoiCykDADcDQEEALQCKigEhDCABQcAAOgBoIAEgDEEEciIMOgBpIAFCADcDICABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCABIANBiYoBaikDADcDYCABIAc3A4gBIAEgBjcDgAEgASAFNwN4IAEgADcDcCABQZABaiABQfAAaiAEQcAAQgAgDBADIAsgASkDyAEgASkDqAGFNwMAIAogASkDwAEgASkDoAGFNwMAIAkgASkDuAEgASkDmAGFNwMAIAggASkDsAEgASkDkAGFNwMAQQBBAC0AkIoBQX9qIgM6AJCKASACIANB/wFxIgNJDQALCyABQdABaiQAC/oLBAR/BH4GfwF+IwBB0AJrIgUkAAJAAkAgAUGACEsNAEEAIQYgASEHQQAhCAJAIAFB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IQwDQCABQbABaiABIAsgCUH/AXEgCCACQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASAGIAEpA+gBIg+FNwOoASABIAUgDoU3A6ABIAEgBCANhTcDmAEgASADIAEpA9ABIg2FNwOQASABIA8gASkDyAGFNwOIASAAQcAAIABBwABJGyIQQX9qIQkgASANIAEpA7ABhSINNwNwIA2nIREgCiEHIAwhAgJAA0AgAiAROgAAIAlFDQEgCUF/aiEJIAJBAWohAiAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQIgDCAQaiEMIAhCAXwhCCABKQMIIQQgASkDACEDIAEpAxghBiABKQMQIQUgAS0AaSECIAEtAGghCQwACwsCQAJAAkBBAC0AiYoBIglBBnRBAEEALQCIigEiDGtGDQAgAUHgAGpBACkDgIoBNwMAIAFB2ABqQQApA/iJATcDACABQdAAakEAKQPwiQE3AwAgAUHIAGpBACkD6IkBNwMAIAFBwABqQQApA+CJATcDACABQThqQQApA9iJATcDACABQTBqQQApA9CJATcDACABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIg03AxggAUEAKQOwiQEiDjcDECABQQApA6iJASIPNwMIIAFBACkDoIkBIgM3AwBBAC0AiooBIQcgAUHuAGogAUG0AWovAQA7AQAgASABKAGwATYBaiABIAw6AGggASAHIAlFckECciIJOgBpDAELIAFB4ABqIAJBfmoiAkEFdCIJQcmKAWopAwA3AwAgAUHYAGogCUHBigFqKQMANwMAIAFB0ABqIAlBuYoBaikDADcDACABQcgAaiAJQbGKAWopAwA3AwBBwAAhDCABQcAAaiAJQamKAWopAwA3AwAgAUE4aiAJQaGKAWopAwA3AwAgAUEwaiAJQZmKAWopAwA3AwBCACEIIAFCADcDICABQQApA5iJASINNwMYIAFBACkDkIkBIg43AxAgAUEAKQOIiQEiDzcDCCABQQApA4CJASIDNwMAIAEgCUGRigFqKQMANwMoQQAtAIqKASEJIAFB7gBqIAFBsAFqQQRqLwEAOwEAIAEgASgBsAE2AWogASAJQQRyIgk6AGkgAUHAADoAaCACRQ0BCyACQX9qIgdBBXQiEUGRigFqKQMAIQQgEUGZigFqKQMAIQUgEUGhigFqKQMAIQYgEUGpigFqKQMAIRIgASANNwOIASABIA43A4ABIAEgDzcDeCABIAM3A3AgAUGwAWogAUHwAGogAUEoaiIQIAwgCCAJQf8BcRADIAFBwAA6AGggASASNwNAIAEgBjcDOCABIAU3AzAgASAENwMoIAFCADcDICABQQApA5iJASIINwMYIAFBACkDkIkBIg03AxAgAUEAKQOIiQEiDjcDCCABQQApA4CJASIPNwMAIAFBAC0AiooBQQRyIgk6AGkgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAUHuAGogAUGwAWpBBGoiDC8BADsBACABIAEoAbABNgFqIAdFDQAgAUHqAGohESACQQV0QemJAWohAgNAIAJBaGopAwAhAyACQXBqKQMAIQQgAkF4aikDACEFIAIpAwAhBiABIAg3A4gBIAEgDTcDgAEgASAONwN4IAEgDzcDcCABQbABaiABQfAAaiAQQcAAQgAgCUH/AXEQAyABQcAAOgBoIAEgBjcDQCABIAU3AzggASAENwMwIAEgAzcDKCABQgA3AyAgAUEAKQOYiQEiCDcDGCABQQApA5CJASINNwMQIAFBACkDiIkBIg43AwggAUEAKQOAiQEiDzcDACABQQAtAIqKAUEEciIJOgBpIAEgASkD6AEgASkDyAGFNwNgIAEgASkD4AEgASkDwAGFNwNYIAEgASkD2AEgASkDuAGFNwNQIAEgASkD0AEgASkDsAGFNwNIIBFBBGogDC8BADsBACARIAEoAbABNgEAIAJBYGohAiAHQX9qIgcNAAsLIAFB8ABqQQFyIQogAUEoaiELQgAhCEGACSEMQcAAIQIDQCABQbABaiABIAsgAkH/AXEgCCAJQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASABKQPoASIPIAEpA8gBhTcDiAEgASABKQMAIAEpA9ABIgOFNwOQASABIA0gASkDCIU3A5gBIAEgDiABKQMQhTcDoAEgASADIAEpA7ABhSINNwNwIAEgDyABKQMYhTcDqAEgAEHAACAAQcAASRsiEEF/aiECIA2nIREgCiEHIAwhCQJAA0AgCSAROgAAIAJFDQEgAkF/aiECIAlBAWohCSAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQEgDCAQaiEMIAhCAXwhCCABLQBpIQkgAS0AaCECDAALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABABCwYAIAAQBgsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAEgAhAGCwsLAQBBgAgLBHgHAAA=";
+var hash$g = "e8655383";
+var wasmJson$g = {
+ name: name$g,
+ data: data$g,
+ hash: hash$g
+};
+
+const mutex$i = new Mutex();
+let wasmCache$i = null;
+function validateBits$2(bits) {
+ if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {
+ return new Error('Invalid variant! Valid values: 8, 16, ...');
+ }
+ return null;
+}
+/**
+ * Calculates BLAKE3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ * @returns Computed hash as a hexadecimal string
+ */
+function blake3(data, bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const hashLength = bits / 8;
+ const digestParam = hashLength;
+ if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {
+ return lockedCreate(mutex$i, wasmJson$g, hashLength)
+ .then((wasm) => {
+ wasmCache$i = wasm;
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ return wasmCache$i.calculate(data, initParam, digestParam);
+ });
+ }
+ try {
+ if (initParam === 32) {
+ wasmCache$i.writeMemory(keyBuffer);
+ }
+ const hash = wasmCache$i.calculate(data, initParam, digestParam);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new BLAKE3 hash instance
+ * @param bits Number of output bits, which has to be a number
+ * divisible by 8. Defaults to 256.
+ * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.
+ */
+function createBLAKE3(bits = 256, key = null) {
+ if (validateBits$2(bits)) {
+ return Promise.reject(validateBits$2(bits));
+ }
+ let keyBuffer = null;
+ let initParam = 0; // key is empty by default
+ if (key !== null) {
+ keyBuffer = getUInt8Buffer(key);
+ if (keyBuffer.length !== 32) {
+ return Promise.reject(new Error('Key length must be exactly 32 bytes'));
+ }
+ initParam = 32;
+ }
+ const outputSize = bits / 8;
+ const digestParam = outputSize;
+ return WASMInterface(wasmJson$g, outputSize).then((wasm) => {
+ if (initParam === 32) {
+ wasm.writeMemory(keyBuffer);
+ }
+ wasm.init(initParam);
+ const obj = {
+ init: initParam === 32
+ ? () => {
+ wasm.writeMemory(keyBuffer);
+ wasm.init(initParam);
+ return obj;
+ }
+ : () => {
+ wasm.init(initParam);
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, digestParam),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$f = "crc32";
+var data$f = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwQFAXABAQEFBAEBAgIGDgJ/AUGQyQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAILSGFzaF9VcGRhdGUAAwpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCq0HBwUAQYAJC8MDAQN/QYCJASEBQQAhAgNAIAFBAEEAQQBBAEEAQQBBAEEAIAJBAXFrIABxIAJBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzNgIAIAFBBGohASACQQFqIgJBgAJHDQALQQAhAANAIABBhJEBaiAAQYSJAWooAgAiAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhJkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEoQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYSpAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhLEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEuQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYTBAWogAkH/AXFBAnRBgIkBaigCACACQQh2czYCACAAQQRqIgBB/AdHDQALCycAAkBBACgCgMkBIABGDQAgABABQQAgADYCgMkBC0EAQQA2AoTJAQuhAgEDf0EAKAKEyQFBf3MhAUGACSECAkAgAEEISQ0AQYAJIQIDQCACQQRqKAIAIgNBDnZB/AdxQYCRAWooAgAgA0EWdkH8B3FBgIkBaigCAHMgA0EGdkH8B3FBgJkBaigCAHMgA0H/AXFBAnRBgKEBaigCAHMgAigCACABcyIBQRZ2QfwHcUGAqQFqKAIAcyABQQ52QfwHcUGAsQFqKAIAcyABQQZ2QfwHcUGAuQFqKAIAcyABQf8BcUECdEGAwQFqKAIAcyEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAANAIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiIADQALC0EAIAFBf3M2AoTJAQszAQF/QQBBACgChMkBIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBgBBhMkBC1oAAkBBACgCgMkBIAFGDQAgARABQQAgATYCgMkBC0EAQQA2AoTJASAAEANBAEEAKAKEyQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKACQsLCwEAQYAICwQEAAAA";
+var hash$f = "749723dc";
+var wasmJson$f = {
+ name: name$f,
+ data: data$f,
+ hash: hash$f
+};
+
+const mutex$h = new Mutex();
+let wasmCache$h = null;
+/**
+ * Calculates CRC-32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32(data) {
+ if (wasmCache$h === null) {
+ return lockedCreate(mutex$h, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$h = wasm;
+ return wasmCache$h.calculate(data, 0xEDB88320);
+ });
+ }
+ try {
+ const hash = wasmCache$h.calculate(data, 0xEDB88320);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32 hash instance
+ */
+function createCRC32() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0xEDB88320);
+ const obj = {
+ init: () => { wasm.init(0xEDB88320); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+const mutex$g = new Mutex();
+let wasmCache$g = null;
+/**
+ * Calculates CRC-32C hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function crc32c(data) {
+ if (wasmCache$g === null) {
+ return lockedCreate(mutex$g, wasmJson$f, 4)
+ .then((wasm) => {
+ wasmCache$g = wasm;
+ return wasmCache$g.calculate(data, 0x82F63B78);
+ });
+ }
+ try {
+ const hash = wasmCache$g.calculate(data, 0x82F63B78);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new CRC-32C hash instance
+ */
+function createCRC32C() {
+ return WASMInterface(wasmJson$f, 4).then((wasm) => {
+ wasm.init(0x82F63B78);
+ const obj = {
+ init: () => { wasm.init(0x82F63B78); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 4,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$e = "md4";
+var data$e = "AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqXEQcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwuYCwEXf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBHGooAgAiBiAAQRRqKAIAIgcgAEEYaigCACIIIABBEGooAgAiCSAAQSxqKAIAIgogAEEoaigCACILIABBJGooAgAiDCAAQSBqKAIAIg0gCyAIIABBCGooAgAiDiADaiAAQQRqKAIAIg8gAmogBCADIAJzcSACcyAFaiAAKAIAIhBqQQN3IhEgBCADc3EgA3NqQQd3IhIgESAEc3EgBHNqQQt3IhNqIBIgB2ogESAJaiAAQQxqKAIAIhQgBGogEyASIBFzcSARc2pBE3ciESATIBJzcSASc2pBA3ciEiARIBNzcSATc2pBB3ciEyASIBFzcSARc2pBC3ciFWogEyAMaiASIA1qIBEgBmogFSATIBJzcSASc2pBE3ciESAVIBNzcSATc2pBA3ciEiARIBVzcSAVc2pBB3ciEyASIBFzcSARc2pBC3ciFSAAQThqKAIAIhZqIBMgAEE0aigCACIXaiASIABBMGooAgAiGGogESAKaiAVIBMgEnNxIBJzakETdyISIBUgE3NxIBNzakEDdyITIBIgFXNxIBVzakEHdyIVIBMgEnNxIBJzakELdyIRaiAJIBVqIBAgE2ogEiAAQTxqKAIAIglqIBEgFSATc3EgE3NqQRN3IhIgESAVcnEgESAVcXJqQZnzidQFakEDdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBBXciESATIBJycSATIBJxcmpBmfOJ1AVqQQl3IhVqIAcgEWogDyATaiAYIBJqIBUgESATcnEgESATcXJqQZnzidQFakENdyISIBUgEXJxIBUgEXFyakGZ84nUBWpBA3ciESASIBVycSASIBVxcmpBmfOJ1AVqQQV3IhMgESAScnEgESAScXJqQZnzidQFakEJdyIVaiAIIBNqIA4gEWogFyASaiAVIBMgEXJxIBMgEXFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogBiATaiAUIBJqIBYgEWogFSATIBJycSATIBJxcmpBmfOJ1AVqQQ13IhEgFSATcnEgFSATcXJqQZnzidQFakEDdyISIBEgFXJxIBEgFXFyakGZ84nUBWpBBXciEyASIBFycSASIBFxcmpBmfOJ1AVqQQl3IhVqIBAgEmogCSARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciBiAVcyISIBNzakGh1+f2BmpBA3ciESAGcyANIBNqIBIgEXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA4gEWogEyAScyAYIAZqIBIgEXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgCyASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAPIBVqIBMgEnMgFiARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAwgEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogFCAVaiATIBJzIBcgEWogEiAVcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyAKIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhMgA2ohAyAJIBFqIBIgFXMgE3NqQaHX5/YGakEPdyAEaiEEIBIgAmohAiAVIAVqIQUgAEHAAGohACABQUBqIgENAAtBACACNgKUiQFBACADNgKQiQFBACAENgKMiQFBACAFNgKIiQEgAAuhAgEDf0EAKAKAiQEiAEE/cSIBQZiJAWpBgAE6AAACQAJAAkAgAUE/cyICQQdLDQACQCACRQ0AIAFBmYkBaiEAA0AgAEEAOgAAIABBAWohACACQX9qIgINAAsLQcAAIQJBmIkBQcAAEAMaQQAhAAwBCyACQQhGDQEgAUEBaiEACyAAQY+JAWohAQNAIAEgAmpBADoAACACQXdqIQAgAkF/aiECIABBAEoNAAtBACgCgIkBIQALQQAgAEEVdjoA04kBQQAgAEENdjoA0okBQQAgAEEFdjoA0YkBQQAgAEEDdCICOgDQiQFBACACNgKAiQFBAEEAKAKEiQE2AtSJAUGYiQFBwAAQAxpBAEEAKQKIiQE3A4AJQQBBACkCkIkBNwOICQsGAEGAiQELMwBBAEL+uevF6Y6VmRA3ApCJAUEAQoHGlLqW8ermbzcCiIkBQQBCADcCgIkBIAAQAhAECwsLAQBBgAgLBJgAAAA=";
+var hash$e = "1bf01052";
+var wasmJson$e = {
+ name: name$e,
+ data: data$e,
+ hash: hash$e
+};
+
+const mutex$f = new Mutex();
+let wasmCache$f = null;
+/**
+ * Calculates MD4 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md4(data) {
+ if (wasmCache$f === null) {
+ return lockedCreate(mutex$f, wasmJson$e, 16)
+ .then((wasm) => {
+ wasmCache$f = wasm;
+ return wasmCache$f.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$f.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD4 hash instance
+ */
+function createMD4() {
+ return WASMInterface(wasmJson$e, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$d = "md5";
+var data$d = "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";
+var hash$d = "9b0fac7d";
+var wasmJson$d = {
+ name: name$d,
+ data: data$d,
+ hash: hash$d
+};
+
+const mutex$e = new Mutex();
+let wasmCache$e = null;
+/**
+ * Calculates MD5 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function md5(data) {
+ if (wasmCache$e === null) {
+ return lockedCreate(mutex$e, wasmJson$d, 16)
+ .then((wasm) => {
+ wasmCache$e = wasm;
+ return wasmCache$e.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$e.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new MD5 hash instance
+ */
+function createMD5() {
+ return WASMInterface(wasmJson$d, 16).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$c = "sha1";
+var data$c = "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";
+var hash$c = "40d92e5d";
+var wasmJson$c = {
+ name: name$c,
+ data: data$c,
+ hash: hash$c
+};
+
+const mutex$d = new Mutex();
+let wasmCache$d = null;
+/**
+ * Calculates SHA-1 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha1(data) {
+ if (wasmCache$d === null) {
+ return lockedCreate(mutex$d, wasmJson$c, 20)
+ .then((wasm) => {
+ wasmCache$d = wasm;
+ return wasmCache$d.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$d.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-1 hash instance
+ */
+function createSHA1() {
+ return WASMInterface(wasmJson$c, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+var name$b = "sha3";
+var data$b = "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";
+var hash$b = "ec266d91";
+var wasmJson$b = {
+ name: name$b,
+ data: data$b,
+ hash: hash$b
+};
+
+const mutex$c = new Mutex();
+let wasmCache$c = null;
+function validateBits$1(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates SHA-3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha3(data, bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {
+ return lockedCreate(mutex$c, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$c = wasm;
+ return wasmCache$c.calculate(data, bits, 0x06);
+ });
+ }
+ try {
+ const hash = wasmCache$c.calculate(data, bits, 0x06);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-3 hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createSHA3(bits = 512) {
+ if (validateBits$1(bits)) {
+ return Promise.reject(validateBits$1(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x06),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+const mutex$b = new Mutex();
+let wasmCache$b = null;
+function validateBits(bits) {
+ if (![224, 256, 384, 512].includes(bits)) {
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
+ }
+ return null;
+}
+/**
+ * Calculates Keccak hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ * @returns Computed hash as a hexadecimal string
+ */
+function keccak(data, bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const hashLength = bits / 8;
+ if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {
+ return lockedCreate(mutex$b, wasmJson$b, hashLength)
+ .then((wasm) => {
+ wasmCache$b = wasm;
+ return wasmCache$b.calculate(data, bits, 0x01);
+ });
+ }
+ try {
+ const hash = wasmCache$b.calculate(data, bits, 0x01);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Keccak hash instance
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
+ */
+function createKeccak(bits = 512) {
+ if (validateBits(bits)) {
+ return Promise.reject(validateBits(bits));
+ }
+ const outputSize = bits / 8;
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
+ wasm.init(bits);
+ const obj = {
+ init: () => { wasm.init(bits); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType, 0x01),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 200 - 2 * outputSize,
+ digestSize: outputSize,
+ };
+ return obj;
+ });
+}
+
+var name$a = "sha256";
+var data$a = "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";
+var hash$a = "817d957e";
+var wasmJson$a = {
+ name: name$a,
+ data: data$a,
+ hash: hash$a
+};
+
+const mutex$a = new Mutex();
+let wasmCache$a = null;
+/**
+ * Calculates SHA-2 (SHA-224) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha224(data) {
+ if (wasmCache$a === null) {
+ return lockedCreate(mutex$a, wasmJson$a, 28)
+ .then((wasm) => {
+ wasmCache$a = wasm;
+ return wasmCache$a.calculate(data, 224);
+ });
+ }
+ try {
+ const hash = wasmCache$a.calculate(data, 224);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-224) hash instance
+ */
+function createSHA224() {
+ return WASMInterface(wasmJson$a, 28).then((wasm) => {
+ wasm.init(224);
+ const obj = {
+ init: () => { wasm.init(224); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 28,
+ };
+ return obj;
+ });
+}
+
+const mutex$9 = new Mutex();
+let wasmCache$9 = null;
+/**
+ * Calculates SHA-2 (SHA-256) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha256(data) {
+ if (wasmCache$9 === null) {
+ return lockedCreate(mutex$9, wasmJson$a, 32)
+ .then((wasm) => {
+ wasmCache$9 = wasm;
+ return wasmCache$9.calculate(data, 256);
+ });
+ }
+ try {
+ const hash = wasmCache$9.calculate(data, 256);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-256) hash instance
+ */
+function createSHA256() {
+ return WASMInterface(wasmJson$a, 32).then((wasm) => {
+ wasm.init(256);
+ const obj = {
+ init: () => { wasm.init(256); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+var name$9 = "sha512";
+var data$9 = "AGFzbQEAAAABEQRgAAF/YAF/AGACf38AYAAAAwgHAAEBAgMAAgQFAXABAQEFBAEBAgIGDgJ/AUHQigULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCvhnBwUAQYAJC5sCAEEAQgA3A4CKAUEAQTBBwAAgAEGAA0YiABs2AsiKAUEAQqSf6ffbg9LaxwBC+cL4m5Gjs/DbACAAGzcDwIoBQQBCp5/mp9bBi4ZbQuv6htq/tfbBHyAAGzcDuIoBQQBCkargwvbQktqOf0Kf2PnZwpHagpt/IAAbNwOwigFBAEKxloD+/8zJmecAQtGFmu/6z5SH0QAgABs3A6iKAUEAQrmyubiPm/uXFULx7fT4paf9p6V/IAAbNwOgigFBAEKXusODo6vArJF/Qqvw0/Sv7ry3PCAAGzcDmIoBQQBCh6rzs6Olis3iAEK7zqqm2NDrs7t/IAAbNwOQigFBAELYvZaI3Kvn3UtCiJLznf/M+YTqACAAGzcDiIoBC4MCAgF+Bn9BAEEAKQOAigEiASAArXw3A4CKAQJAAkACQCABp0H/AHEiAg0AQYAJIQIMAQsCQCAAQYABIAJrIgMgAyAASyIEGyIFRQ0AIAJBgIkBaiEGQQAhAkEAIQcDQCAGIAJqIAJBgAlqLQAAOgAAIAUgB0EBaiIHQf8BcSICSw0ACwsgBA0BQYiKAUGAiQEQAyAAIANrIQAgA0GACWohAgsCQCAAQYABSQ0AA0BBiIoBIAIQAyACQYABaiECIABBgH9qIgBB/wBLDQALCyAARQ0AQQAhB0EAIQUDQCAHQYCJAWogAiAHai0AADoAACAAIAVBAWoiBUH/AXEiB0sNAAsLC9xXAVZ+IAAgASkDCCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIDQjiJIANCB4iFIANCP4mFIAEpAwAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiBHwgASkDSCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIFfCABKQNwIgJCOIYgAkIohkKAgICAgIDA/wCDhCACQhiGQoCAgICA4D+DIAJCCIZCgICAgPAfg4SEIAJCCIhCgICA+A+DIAJCGIhCgID8B4OEIAJCKIhCgP4DgyACQjiIhISEIgZCA4kgBkIGiIUgBkItiYV8IgdCOIkgB0IHiIUgB0I/iYUgASkDeCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIIfCAFQjiJIAVCB4iFIAVCP4mFIAEpA0AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiCXwgASkDECICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIKQjiJIApCB4iFIApCP4mFIAN8IAEpA1AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiC3wgCEIDiSAIQgaIhSAIQi2JhXwiDHwgASkDOCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCINQjiJIA1CB4iFIA1CP4mFIAEpAzAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiDnwgCHwgASkDKCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIPQjiJIA9CB4iFIA9CP4mFIAEpAyAiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiEHwgASkDaCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCIRfCABKQMYIgJCOIYgAkIohkKAgICAgIDA/wCDhCACQhiGQoCAgICA4D+DIAJCCIZCgICAgPAfg4SEIAJCCIhCgICA+A+DIAJCGIhCgID8B4OEIAJCKIhCgP4DgyACQjiIhISEIhJCOIkgEkIHiIUgEkI/iYUgCnwgASkDWCICQjiGIAJCKIZCgICAgICAwP8Ag4QgAkIYhkKAgICAgOA/gyACQgiGQoCAgIDwH4OEhCACQgiIQoCAgPgPgyACQhiIQoCA/AeDhCACQiiIQoD+A4MgAkI4iISEhCITfCAHQgOJIAdCBoiFIAdCLYmFfCIUQgOJIBRCBoiFIBRCLYmFfCIVQgOJIBVCBoiFIBVCLYmFfCIWQgOJIBZCBoiFIBZCLYmFfCIXfCAGQjiJIAZCB4iFIAZCP4mFIBF8IBZ8IAEpA2AiAkI4hiACQiiGQoCAgICAgMD/AIOEIAJCGIZCgICAgIDgP4MgAkIIhkKAgICA8B+DhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQiGEI4iSAYQgeIhSAYQj+JhSATfCAVfCALQjiJIAtCB4iFIAtCP4mFIAV8IBR8IAlCOIkgCUIHiIUgCUI/iYUgDXwgB3wgDkI4iSAOQgeIhSAOQj+JhSAPfCAGfCAQQjiJIBBCB4iFIBBCP4mFIBJ8IBh8IAxCA4kgDEIGiIUgDEItiYV8IhlCA4kgGUIGiIUgGUItiYV8IhpCA4kgGkIGiIUgGkItiYV8IhtCA4kgG0IGiIUgG0ItiYV8IhxCA4kgHEIGiIUgHEItiYV8Ih1CA4kgHUIGiIUgHUItiYV8Ih5CA4kgHkIGiIUgHkItiYV8Ih9COIkgH0IHiIUgH0I/iYUgCEI4iSAIQgeIhSAIQj+JhSAGfCAbfCARQjiJIBFCB4iFIBFCP4mFIBh8IBp8IBNCOIkgE0IHiIUgE0I/iYUgC3wgGXwgF0IDiSAXQgaIhSAXQi2JhXwiIEIDiSAgQgaIhSAgQi2JhXwiIUIDiSAhQgaIhSAhQi2JhXwiInwgF0I4iSAXQgeIhSAXQj+JhSAbfCAMQjiJIAxCB4iFIAxCP4mFIAd8IBx8ICJCA4kgIkIGiIUgIkItiYV8IiN8IBZCOIkgFkIHiIUgFkI/iYUgGnwgInwgFUI4iSAVQgeIhSAVQj+JhSAZfCAhfCAUQjiJIBRCB4iFIBRCP4mFIAx8ICB8IB9CA4kgH0IGiIUgH0ItiYV8IiRCA4kgJEIGiIUgJEItiYV8IiVCA4kgJUIGiIUgJUItiYV8IiZCA4kgJkIGiIUgJkItiYV8Iid8IB5COIkgHkIHiIUgHkI/iYUgIXwgJnwgHUI4iSAdQgeIhSAdQj+JhSAgfCAlfCAcQjiJIBxCB4iFIBxCP4mFIBd8ICR8IBtCOIkgG0IHiIUgG0I/iYUgFnwgH3wgGkI4iSAaQgeIhSAaQj+JhSAVfCAefCAZQjiJIBlCB4iFIBlCP4mFIBR8IB18ICNCA4kgI0IGiIUgI0ItiYV8IihCA4kgKEIGiIUgKEItiYV8IilCA4kgKUIGiIUgKUItiYV8IipCA4kgKkIGiIUgKkItiYV8IitCA4kgK0IGiIUgK0ItiYV8IixCA4kgLEIGiIUgLEItiYV8Ii1CA4kgLUIGiIUgLUItiYV8Ii5COIkgLkIHiIUgLkI/iYUgIkI4iSAiQgeIhSAiQj+JhSAefCAqfCAhQjiJICFCB4iFICFCP4mFIB18ICl8ICBCOIkgIEIHiIUgIEI/iYUgHHwgKHwgJ0IDiSAnQgaIhSAnQi2JhXwiL0IDiSAvQgaIhSAvQi2JhXwiMEIDiSAwQgaIhSAwQi2JhXwiMXwgJ0I4iSAnQgeIhSAnQj+JhSAqfCAjQjiJICNCB4iFICNCP4mFIB98ICt8IDFCA4kgMUIGiIUgMUItiYV8IjJ8ICZCOIkgJkIHiIUgJkI/iYUgKXwgMXwgJUI4iSAlQgeIhSAlQj+JhSAofCAwfCAkQjiJICRCB4iFICRCP4mFICN8IC98IC5CA4kgLkIGiIUgLkItiYV8IjNCA4kgM0IGiIUgM0ItiYV8IjRCA4kgNEIGiIUgNEItiYV8IjVCA4kgNUIGiIUgNUItiYV8IjZ8IC1COIkgLUIHiIUgLUI/iYUgMHwgNXwgLEI4iSAsQgeIhSAsQj+JhSAvfCA0fCArQjiJICtCB4iFICtCP4mFICd8IDN8ICpCOIkgKkIHiIUgKkI/iYUgJnwgLnwgKUI4iSApQgeIhSApQj+JhSAlfCAtfCAoQjiJIChCB4iFIChCP4mFICR8ICx8IDJCA4kgMkIGiIUgMkItiYV8IjdCA4kgN0IGiIUgN0ItiYV8IjhCA4kgOEIGiIUgOEItiYV8IjlCA4kgOUIGiIUgOUItiYV8IjpCA4kgOkIGiIUgOkItiYV8IjtCA4kgO0IGiIUgO0ItiYV8IjxCA4kgPEIGiIUgPEItiYV8Ij1COIkgPUIHiIUgPUI/iYUgMUI4iSAxQgeIhSAxQj+JhSAtfCA5fCAwQjiJIDBCB4iFIDBCP4mFICx8IDh8IC9COIkgL0IHiIUgL0I/iYUgK3wgN3wgNkIDiSA2QgaIhSA2Qi2JhXwiPkIDiSA+QgaIhSA+Qi2JhXwiP0IDiSA/QgaIhSA/Qi2JhXwiQHwgNkI4iSA2QgeIhSA2Qj+JhSA5fCAyQjiJIDJCB4iFIDJCP4mFIC58IDp8IEBCA4kgQEIGiIUgQEItiYV8IkF8IDVCOIkgNUIHiIUgNUI/iYUgOHwgQHwgNEI4iSA0QgeIhSA0Qj+JhSA3fCA/fCAzQjiJIDNCB4iFIDNCP4mFIDJ8ID58ID1CA4kgPUIGiIUgPUItiYV8IkJCA4kgQkIGiIUgQkItiYV8IkNCA4kgQ0IGiIUgQ0ItiYV8IkRCA4kgREIGiIUgREItiYV8IkV8IDxCOIkgPEIHiIUgPEI/iYUgP3wgRHwgO0I4iSA7QgeIhSA7Qj+JhSA+fCBDfCA6QjiJIDpCB4iFIDpCP4mFIDZ8IEJ8IDlCOIkgOUIHiIUgOUI/iYUgNXwgPXwgOEI4iSA4QgeIhSA4Qj+JhSA0fCA8fCA3QjiJIDdCB4iFIDdCP4mFIDN8IDt8IEFCA4kgQUIGiIUgQUItiYV8IkZCA4kgRkIGiIUgRkItiYV8IkdCA4kgR0IGiIUgR0ItiYV8IkhCA4kgSEIGiIUgSEItiYV8IklCA4kgSUIGiIUgSUItiYV8IkpCA4kgSkIGiIUgSkItiYV8IktCA4kgS0IGiIUgS0ItiYV8IkwgSiBCIDwgOiA4IDIgMCAnICUgHyAdIBsgGSAIIBMgDSAAKQMgIk0gEnwgACkDKCJOIAp8IAApAzAiTyADfCAAKQM4IlAgTUIyiSBNQi6JhSBNQheJhXwgTyBOhSBNgyBPhXwgBHxCotyiuY3zi8XCAHwiUSAAKQMYIlJ8IgMgTiBNhYMgToV8IANCMokgA0IuiYUgA0IXiYV8Qs3LvZ+SktGb8QB8IlMgACkDECJUfCIKIAMgTYWDIE2FfCAKQjKJIApCLomFIApCF4mFfEKv9rTi/vm+4LV/fCJVIAApAwgiVnwiEiAKIAOFgyADhXwgEkIyiSASQi6JhSASQheJhXxCvLenjNj09tppfCJXIAApAwAiAnwiBHwgDiASfCAPIAp8IAMgEHwgBCASIAqFgyAKhXwgBEIyiSAEQi6JhSAEQheJhXxCuOqimr/LsKs5fCIQIFQgViAChYMgViACg4UgAkIkiSACQh6JhSACQhmJhXwgUXwiA3wiDSAEIBKFgyAShXwgDUIyiSANQi6JhSANQheJhXxCmaCXsJu+xPjZAHwiUSADQiSJIANCHomFIANCGYmFIAMgAoUgVoMgAyACg4V8IFN8Igp8Ig4gDSAEhYMgBIV8IA5CMokgDkIuiYUgDkIXiYV8Qpuf5fjK1OCfkn98IlMgCkIkiSAKQh6JhSAKQhmJhSAKIAOFIAKDIAogA4OFfCBVfCISfCIEIA4gDYWDIA2FfCAEQjKJIARCLomFIARCF4mFfEKYgrbT3dqXjqt/fCJVIBJCJIkgEkIeiYUgEkIZiYUgEiAKhSADgyASIAqDhXwgV3wiA3wiD3wgCyAEfCAFIA58IAkgDXwgDyAEIA6FgyAOhXwgD0IyiSAPQi6JhSAPQheJhXxCwoSMmIrT6oNYfCIFIANCJIkgA0IeiYUgA0IZiYUgAyAShSAKgyADIBKDhXwgEHwiCnwiDSAPIASFgyAEhXwgDUIyiSANQi6JhSANQheJhXxCvt/Bq5Tg1sESfCILIApCJIkgCkIeiYUgCkIZiYUgCiADhSASgyAKIAODhXwgUXwiEnwiBCANIA+FgyAPhXwgBEIyiSAEQi6JhSAEQheJhXxCjOWS9+S34ZgkfCITIBJCJIkgEkIeiYUgEkIZiYUgEiAKhSADgyASIAqDhXwgU3wiA3wiDiAEIA2FgyANhXwgDkIyiSAOQi6JhSAOQheJhXxC4un+r724n4bVAHwiCSADQiSJIANCHomFIANCGYmFIAMgEoUgCoMgAyASg4V8IFV8Igp8Ig98IAYgDnwgESAEfCAYIA18IA8gDiAEhYMgBIV8IA9CMokgD0IuiYUgD0IXiYV8Qu+S7pPPrpff8gB8IhEgCkIkiSAKQh6JhSAKQhmJhSAKIAOFIBKDIAogA4OFfCAFfCIGfCISIA8gDoWDIA6FfCASQjKJIBJCLomFIBJCF4mFfEKxrdrY47+s74B/fCIOIAZCJIkgBkIeiYUgBkIZiYUgBiAKhSADgyAGIAqDhXwgC3wiCHwiBCASIA+FgyAPhXwgBEIyiSAEQi6JhSAEQheJhXxCtaScrvLUge6bf3wiDyAIQiSJIAhCHomFIAhCGYmFIAggBoUgCoMgCCAGg4V8IBN8IgN8IgogBCAShYMgEoV8IApCMokgCkIuiYUgCkIXiYV8QpTNpPvMrvzNQXwiBSADQiSJIANCHomFIANCGYmFIAMgCIUgBoMgAyAIg4V8IAl8IgZ8Ig18IBQgCnwgDCAEfCANIAogBIWDIASFIBJ8IAd8IA1CMokgDUIuiYUgDUIXiYV8QtKVxfeZuNrNZHwiEiAGQiSJIAZCHomFIAZCGYmFIAYgA4UgCIMgBiADg4V8IBF8Igd8IgwgDSAKhYMgCoV8IAxCMokgDEIuiYUgDEIXiYV8QuPLvMLj8JHfb3wiCiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgA4MgByAGg4V8IA58Igh8IhQgDCANhYMgDYV8IBRCMokgFEIuiYUgFEIXiYV8QrWrs9zouOfgD3wiBCAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IA98IgZ8IhkgFCAMhYMgDIV8IBlCMokgGUIuiYUgGUIXiYV8QuW4sr3HuaiGJHwiDSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IAV8Igd8IgN8IBYgGXwgGiAUfCAMIBV8IAMgGSAUhYMgFIV8IANCMokgA0IuiYUgA0IXiYV8QvWErMn1jcv0LXwiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBJ8Igh8IgwgAyAZhYMgGYV8IAxCMokgDEIuiYUgDEIXiYV8QoPJm/WmlaG6ygB8IhkgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAKfCIGfCIUIAwgA4WDIAOFfCAUQjKJIBRCLomFIBRCF4mFfELU94fqy7uq2NwAfCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgBHwiB3wiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxCtafFmKib4vz2AHwiAyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IA18Igh8IhZ8ICAgFXwgHCAUfCAXIAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qqu/m/OuqpSfmH98IhcgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKQ5NDt0s3xmKh/fCIaIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGXwiB3wiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxCv8Lsx4n5yYGwf3wiGSAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBt8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QuSdvPf7+N+sv398IhsgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCADfCIGfCIWfCAiIBV8IB4gFHwgISAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfELCn6Lts/6C8EZ8IhwgBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAXfCIHfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKlzqqY+ajk01V8IhcgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAafCIIfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELvhI6AnuqY5QZ8IhogCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAZfCIGfCIVIBQgDIWDIAyFfCAVQjKJIBVCLomFIBVCF4mFfELw3LnQ8KzKlBR8IhkgBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAbfCIHfCIWfCAoIBV8ICQgFHwgFiAVIBSFgyAUhSAMfCAjfCAWQjKJIBZCLomFIBZCF4mFfEL838i21NDC2yd8IhsgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAcfCIIfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKmkpvhhafIjS58IhwgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAXfCIGfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELt1ZDWxb+bls0AfCIXIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGnwiB3wiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxC3+fW7Lmig5zTAHwiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBl8Igh8IhZ8ICogFXwgJiAUfCAMICl8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qt7Hvd3I6pyF5QB8IhkgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAbfCIGfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfEKo5d7js9eCtfYAfCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHHwiB3wiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxC5t22v+SlsuGBf3wiHCAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBd8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QrvqiKTRkIu5kn98IhcgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIWfCAsIBV8IC8gFHwgKyAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfELkhsTnlJT636J/fCIaIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgGXwiB3wiDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxCgeCI4rvJmY2of3wiGSAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBt8Igh8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpGv4oeN7uKlQnwiGyAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBx8IgZ8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QrD80rKwtJS2R3wiHCAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBd8Igd8IhZ8IC4gFXwgMSAUfCAtIAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qpikvbedg7rJUXwiFyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBp8Igh8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QpDSlqvFxMHMVnwiGiAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBl8IgZ8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QqrAxLvVsI2HdHwiGSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBt8Igd8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8Qrij75WDjqi1EHwiGyAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBx8Igh8IhZ8IDQgFXwgNyAUfCAWIBUgFIWDIBSFIAx8IDN8IBZCMokgFkIuiYUgFkIXiYV8Qsihy8brorDSGXwiHCAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBd8IgZ8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QtPWhoqFgdubHnwiFyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBp8Igd8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpnXu/zN6Z2kJ3wiGiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IBl8Igh8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QqiR7Yzelq/YNHwiGSAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IBt8IgZ8IhZ8IDYgFXwgOSAUfCAMIDV8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8QuO0pa68loOOOXwiGyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBx8Igd8IgwgFiAVhYMgFYV8IAxCMokgDEIuiYUgDEIXiYV8QsuVhpquyarszgB8IhwgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAXfCIIfCIUIAwgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELzxo+798myztsAfCIXIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgGnwiBnwiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxCo/HKtb3+m5foAHwiGiAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBl8Igd8IhZ8ID8gFXwgOyAUfCA+IAx8IBYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8Qvzlvu/l3eDH9AB8IhkgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAbfCIIfCIMIBYgFYWDIBWFfCAMQjKJIAxCLomFIAxCF4mFfELg3tyY9O3Y0vgAfCIbIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgHHwiBnwiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxC8tbCj8qCnuSEf3wiHCAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBd8Igd8IhUgFCAMhYMgDIV8IBVCMokgFUIuiYUgFUIXiYV8QuzzkNOBwcDjjH98IhcgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAafCIIfCIWfCBBIBV8ID0gFHwgQCAMfCAWIBUgFIWDIBSFfCAWQjKJIBZCLomFIBZCF4mFfEKovIybov+/35B/fCIaIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgGXwiBnwiDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxC6fuK9L2dm6ikf3wiGSAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBt8Igd8IhQgDCAWhYMgFoV8IBRCMokgFEIuiYUgFEIXiYV8QpXymZb7/uj8vn98IhsgB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAcfCIIfCIVIBQgDIWDIAyFfCAVQjKJIBVCLomFIBVCF4mFfEKrpsmbrp7euEZ8IhwgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAXfCIGfCIWIBUgFIWDIBSFIAx8IEZ8IBZCMokgFkIuiYUgFkIXiYV8QpzDmdHu2c+TSnwiFyAGQiSJIAZCHomFIAZCGYmFIAYgCIUgB4MgBiAIg4V8IBp8Igd8IgwgSHwgRCAWfCBHIBV8IEMgFHwgDCAWIBWFgyAVhXwgDEIyiSAMQi6JhSAMQheJhXxCh4SDjvKYrsNRfCIaIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgGXwiCHwiFCAMIBaFgyAWhXwgFEIyiSAUQi6JhSAUQheJhXxCntaD7+y6n+1qfCIdIAhCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgG3wiBnwiFSAUIAyFgyAMhXwgFUIyiSAVQi6JhSAVQheJhXxC+KK78/7v0751fCIbIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHHwiB3wiDCAVIBSFgyAUhXwgDEIyiSAMQi6JhSAMQheJhXxCut/dkKf1mfgGfCIcIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgF3wiCHwiFnwgPkI4iSA+QgeIhSA+Qj+JhSA6fCBGfCBFQgOJIEVCBoiFIEVCLYmFfCIZIAx8IEkgFXwgRSAUfCAWIAwgFYWDIBWFfCAWQjKJIBZCLomFIBZCF4mFfEKmsaKW2rjfsQp8Ih4gCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAafCIGfCIUIBYgDIWDIAyFfCAUQjKJIBRCLomFIBRCF4mFfEKum+T3y4DmnxF8Ih8gBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAdfCIHfCIMIBQgFoWDIBaFfCAMQjKJIAxCLomFIAxCF4mFfEKbjvGY0ebCuBt8Ih0gB0IkiSAHQh6JhSAHQhmJhSAHIAaFIAiDIAcgBoOFfCAbfCIIfCIVIAwgFIWDIBSFfCAVQjKJIBVCLomFIBVCF4mFfEKE+5GY0v7d7Sh8IhsgCEIkiSAIQh6JhSAIQhmJhSAIIAeFIAaDIAggB4OFfCAcfCIGfCIWfCBAQjiJIEBCB4iFIEBCP4mFIDx8IEh8ID9COIkgP0IHiIUgP0I/iYUgO3wgR3wgGUIDiSAZQgaIhSAZQi2JhXwiF0IDiSAXQgaIhSAXQi2JhXwiGiAVfCBLIAx8IBcgFHwgFiAVIAyFgyAMhXwgFkIyiSAWQi6JhSAWQheJhXxCk8mchrTvquUyfCIMIAZCJIkgBkIeiYUgBkIZiYUgBiAIhSAHgyAGIAiDhXwgHnwiB3wiFCAWIBWFgyAVhXwgFEIyiSAUQi6JhSAUQheJhXxCvP2mrqHBr888fCIcIAdCJIkgB0IeiYUgB0IZiYUgByAGhSAIgyAHIAaDhXwgH3wiCHwiFSAUIBaFgyAWhXwgFUIyiSAVQi6JhSAVQheJhXxCzJrA4Mn42Y7DAHwiHiAIQiSJIAhCHomFIAhCGYmFIAggB4UgBoMgCCAHg4V8IB18IgZ8IhYgFSAUhYMgFIV8IBZCMokgFkIuiYUgFkIXiYV8QraF+dnsl/XizAB8Ih0gBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAbfCIHfCIXIFB8NwM4IAAgUiAHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IAx8IghCJIkgCEIeiYUgCEIZiYUgCCAHhSAGgyAIIAeDhXwgHHwiBkIkiSAGQh6JhSAGQhmJhSAGIAiFIAeDIAYgCIOFfCAefCIHQiSJIAdCHomFIAdCGYmFIAcgBoUgCIMgByAGg4V8IB18Igx8NwMYIAAgTyBBQjiJIEFCB4iFIEFCP4mFID18IEl8IBpCA4kgGkIGiIUgGkItiYV8IhogFHwgFyAWIBWFgyAVhXwgF0IyiSAXQi6JhSAXQheJhXxCqvyV48+zyr/ZAHwiGyAIfCIUfDcDMCAAIFQgDEIkiSAMQh6JhSAMQhmJhSAMIAeFIAaDIAwgB4OFfCAbfCIIfDcDECAAIE4gQkI4iSBCQgeIhSBCQj+JhSBBfCAZfCBMQgOJIExCBoiFIExCLYmFfCAVfCAUIBcgFoWDIBaFfCAUQjKJIBRCLomFIBRCF4mFfELs9dvWs/Xb5d8AfCIZIAZ8IhV8NwMoIAAgViAIQiSJIAhCHomFIAhCGYmFIAggDIUgB4MgCCAMg4V8IBl8IgZ8NwMIIAAgTSBGQjiJIEZCB4iFIEZCP4mFIEJ8IEp8IBpCA4kgGkIGiIUgGkItiYV8IBZ8IBUgFCAXhYMgF4V8IBVCMokgFUIuiYUgFUIXiYV8QpewndLEsYai7AB8IhQgB3x8NwMgIAAgAiAGQiSJIAZCHomFIAZCGYmFIAYgCIUgDIMgBiAIg4V8IBR8fDcDAAvFCQIBfgR/QQApA4CKASIAp0EDdkEPcSIBQQN0QYCJAWoiAiACKQMAQn8gAEIDhkI4gyIAhkJ/hYNCgAEgAIaFNwMAIAFBAWohAgJAIAFBDkkNAAJAIAJBD0cNAEEAQgA3A/iJAQtBiIoBQYCJARADQQAhAgsgAkEDdCEBA0AgAUGAiQFqQgA3AwAgAUEIaiIBQfgARw0AC0EAQQApA4CKASIAQjuGIABCK4ZCgICAgICAwP8Ag4QgAEIbhkKAgICAgOA/gyAAQguGQoCAgIDwH4OEhCAAQgWIQoCAgPgPgyAAQhWIQoCA/AeDhCAAQiWIQoD+A4MgAEIDhkI4iISEhDcD+IkBQYiKAUGAiQEQA0EAQQApA8CKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDwIoBQQBBACkDuIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwO4igFBAEEAKQOwigEiAEI4hiAAQiiGQoCAgICAgMD/AIOEIABCGIZCgICAgIDgP4MgAEIIhkKAgICA8B+DhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A7CKAUEAQQApA6iKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDqIoBQQBBACkDoIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOgigFBAEEAKQOYigEiAEI4hiAAQiiGQoCAgICAgMD/AIOEIABCGIZCgICAgIDgP4MgAEIIhkKAgICA8B+DhIQgAEIIiEKAgID4D4MgAEIYiEKAgPwHg4QgAEIoiEKA/gODIABCOIiEhIQ3A5iKAUEAQQApA5CKASIAQjiGIABCKIZCgICAgICAwP8Ag4QgAEIYhkKAgICAgOA/gyAAQgiGQoCAgIDwH4OEhCAAQgiIQoCAgPgPgyAAQhiIQoCA/AeDhCAAQiiIQoD+A4MgAEI4iISEhDcDkIoBQQBBACkDiIoBIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISEIgA3A4iKAQJAQQAoAsiKASIDRQ0AQQAgADwAgAkgA0EBRg0AIABCCIinIQRBASEBQQEhAgNAIAFBgAlqIAQ6AAAgAyACQQFqIgJB/wFxIgFNDQEgAUGIigFqLQAAIQQMAAsLCwYAQYCJAQuhAgBBAEIANwOAigFBAEEwQcAAIAFBgANGIgEbNgLIigFBAEKkn+n324PS2scAQvnC+JuRo7Pw2wAgARs3A8CKAUEAQqef5qfWwYuGW0Lr+obav7X2wR8gARs3A7iKAUEAQpGq4ML20JLajn9Cn9j52cKR2oKbfyABGzcDsIoBQQBCsZaA/v/MyZnnAELRhZrv+s+Uh9EAIAEbNwOoigFBAEK5srm4j5v7lxVC8e30+KWn/aelfyABGzcDoIoBQQBCl7rDg6OrwKyRf0Kr8NP0r+68tzwgARs3A5iKAUEAQoeq87OjpYrN4gBCu86qptjQ67O7fyABGzcDkIoBQQBC2L2WiNyr591LQoiS853/zPmE6gAgARs3A4iKASAAEAIQBAsLCwEAQYAICwTQAAAA";
+var hash$9 = "a5d1ca7c";
+var wasmJson$9 = {
+ name: name$9,
+ data: data$9,
+ hash: hash$9
+};
+
+const mutex$8 = new Mutex();
+let wasmCache$8 = null;
+/**
+ * Calculates SHA-2 (SHA-384) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha384(data) {
+ if (wasmCache$8 === null) {
+ return lockedCreate(mutex$8, wasmJson$9, 48)
+ .then((wasm) => {
+ wasmCache$8 = wasm;
+ return wasmCache$8.calculate(data, 384);
+ });
+ }
+ try {
+ const hash = wasmCache$8.calculate(data, 384);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-384) hash instance
+ */
+function createSHA384() {
+ return WASMInterface(wasmJson$9, 48).then((wasm) => {
+ wasm.init(384);
+ const obj = {
+ init: () => { wasm.init(384); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 48,
+ };
+ return obj;
+ });
+}
+
+const mutex$7 = new Mutex();
+let wasmCache$7 = null;
+/**
+ * Calculates SHA-2 (SHA-512) hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sha512(data) {
+ if (wasmCache$7 === null) {
+ return lockedCreate(mutex$7, wasmJson$9, 64)
+ .then((wasm) => {
+ wasmCache$7 = wasm;
+ return wasmCache$7.calculate(data, 512);
+ });
+ }
+ try {
+ const hash = wasmCache$7.calculate(data, 512);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SHA-2 (SHA-512) hash instance
+ */
+function createSHA512() {
+ return WASMInterface(wasmJson$9, 64).then((wasm) => {
+ wasm.init(512);
+ const obj = {
+ init: () => { wasm.init(512); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 128,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name$8 = "xxhash32";
+var data$8 = "AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwcGAAEBAgADBAUBcAEBAQUEAQECAgYOAn8BQbCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKswkGBQBBgAkLTQBBAEIANwOoiQFBACAANgKIiQFBACAAQc+Moo4GajYCjIkBQQAgAEH3lK+veGo2AoSJAUEAIABBqIiNoQJqNgKAiQFBAEEANgKgiQELswUBBn8CQCAARQ0AQQBBACkDqIkBIACtfDcDqIkBAkBBACgCoIkBIgEgAGpBD0sNAEEAIAFBAWo2AqCJASABQZCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCoIkBIgFBAWo2AqCJASABQZCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB8AhqIQMCQAJAIAENAEEAKAKMiQEhAUEAKAKIiQEhBEEAKAKEiQEhBUEAKAKAiQEhBkGACSECDAELQYAJIQICQCABQQ9LDQBBgAkhAgNAIAItAAAhBEEAIAFBAWo2AqCJASABQZCJAWogBDoAACACQQFqIQJBACgCoIkBIgFBEEkNAAsLQQBBACgCkIkBQfeUr694bEEAKAKAiQFqQQ13QbHz3fF5bCIGNgKAiQFBAEEAKAKUiQFB95Svr3hsQQAoAoSJAWpBDXdBsfPd8XlsIgU2AoSJAUEAQQAoApiJAUH3lK+veGxBACgCiIkBakENd0Gx893xeWwiBDYCiIkBQQBBACgCnIkBQfeUr694bEEAKAKMiQFqQQ13QbHz3fF5bCIBNgKMiQELIABBgAlqIQACQCACIANLDQADQCACKAIAQfeUr694bCAGakENd0Gx893xeWwhBiACQQxqKAIAQfeUr694bCABakENd0Gx893xeWwhASACQQhqKAIAQfeUr694bCAEakENd0Gx893xeWwhBCACQQRqKAIAQfeUr694bCAFakENd0Gx893xeWwhBSACQRBqIgIgA00NAAsLQQAgATYCjIkBQQAgBDYCiIkBQQAgBTYChIkBQQAgBjYCgIkBQQAgACACayIBNgKgiQEgAUUNAEEAIQEDQCABQZCJAWogAiABai0AADoAACABQQFqIgFBACgCoIkBSQ0ACwsLzAICAX4Gf0EAKQOoiQEiAKchAQJAAkAgAEIQVA0AQQAoAoSJAUEHd0EAKAKAiQFBAXdqQQAoAoiJAUEMd2pBACgCjIkBQRJ3aiECDAELQQAoAoiJAUGxz9myAWohAgsgAiABaiECQZCJASEBQQAoAqCJASIDQZCJAWohBAJAIANBBEgNAEGQiQEhBQNAIAUoAgBBvdzKlXxsIAJqQRF3Qa/W074CbCECIAVBCGohBiAFQQRqIgEhBSAGIARNDQALCwJAIAEgBEYNACADQZCJAWohBQNAIAEtAABBsc/ZsgFsIAJqQQt3QbHz3fF5bCECIAUgAUEBaiIBRw0ACwtBACACQQ92IAJzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq03A4AJCwYAQYCJAQtTAEEAQgA3A6iJAUEAIAE2AoiJAUEAIAFBz4yijgZqNgKMiQFBACABQfeUr694ajYChIkBQQAgAUGoiI2hAmo2AoCJAUEAQQA2AqCJASAAEAIQAwsLCwEAQYAICwQwAAAA";
+var hash$8 = "5b6a5062";
+var wasmJson$8 = {
+ name: name$8,
+ data: data$8,
+ hash: hash$8
+};
+
+const mutex$6 = new Mutex();
+let wasmCache$6 = null;
+function validateSeed$3(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be a valid 32-bit long unsigned integer.');
+ }
+ return null;
+}
+/**
+ * Calculates xxHash32 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash32(data, seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ if (wasmCache$6 === null) {
+ return lockedCreate(mutex$6, wasmJson$8, 4)
+ .then((wasm) => {
+ wasmCache$6 = wasm;
+ return wasmCache$6.calculate(data, seed);
+ });
+ }
+ try {
+ const hash = wasmCache$6.calculate(data, seed);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash32 hash instance
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash32(seed = 0) {
+ if (validateSeed$3(seed)) {
+ return Promise.reject(validateSeed$3(seed));
+ }
+ return WASMInterface(wasmJson$8, 4).then((wasm) => {
+ wasm.init(seed);
+ const obj = {
+ init: () => { wasm.init(seed); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 16,
+ digestSize: 4,
+ };
+ return obj;
+ });
+}
+
+var name$7 = "xxhash64";
+var data$7 = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQQFAXABAQEFBAEBAgIGDgJ/AUHQiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCqINBgUAQYAJC2MBAX5BAEIANwPIiQFBAEEAKQOACSIANwOQiQFBACAAQvnq0NDnyaHk4QB8NwOYiQFBACAAQs/W077Sx6vZQnw3A4iJAUEAIABC1uuC7ur9ifXgAHw3A4CJAUEAQQA2AsCJAQv/BQMDfwR+AX8CQCAARQ0AQQBBACkDyIkBIACtfDcDyIkBAkBBACgCwIkBIgEgAGpBH0sNAEEAIAFBAWo2AsCJASABQaCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCwIkBIgFBAWo2AsCJASABQaCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB4AhqIQMCQAJAIAENAEEAKQOYiQEhBEEAKQOQiQEhBUEAKQOIiQEhBkEAKQOAiQEhB0GACSECDAELQYAJIQICQCABQR9LDQBBgAkhAgNAIAItAAAhCEEAIAFBAWo2AsCJASABQaCJAWogCDoAACACQQFqIQJBACgCwIkBIgFBIEkNAAsLQQBBACkDoIkBQs/W077Sx6vZQn5BACkDgIkBfEIfiUKHla+vmLbem55/fiIHNwOAiQFBAEEAKQOoiQFCz9bTvtLHq9lCfkEAKQOIiQF8Qh+JQoeVr6+Ytt6bnn9+IgY3A4iJAUEAQQApA7CJAULP1tO+0ser2UJ+QQApA5CJAXxCH4lCh5Wvr5i23puef34iBTcDkIkBQQBBACkDuIkBQs/W077Sx6vZQn5BACkDmIkBfEIfiUKHla+vmLbem55/fiIENwOYiQELIABBgAlqIQECQCACIANLDQADQCACKQMAQs/W077Sx6vZQn4gB3xCH4lCh5Wvr5i23puef34hByACQRhqKQMAQs/W077Sx6vZQn4gBHxCH4lCh5Wvr5i23puef34hBCACQRBqKQMAQs/W077Sx6vZQn4gBXxCH4lCh5Wvr5i23puef34hBSACQQhqKQMAQs/W077Sx6vZQn4gBnxCH4lCh5Wvr5i23puef34hBiACQSBqIgIgA00NAAsLQQAgBDcDmIkBQQAgBTcDkIkBQQAgBjcDiIkBQQAgBzcDgIkBQQAgASACayIBNgLAiQEgAUUNAEEAIQEDQCABQaCJAWogAiABai0AADoAACABQQFqIgFBACgCwIkBSQ0ACwsLqgYCBX4FfwJAAkBBACkDyIkBIgBCIFQNAEEAKQOIiQEiAUIHiUEAKQOAiQEiAkIBiXxBACkDkIkBIgNCDIl8QQApA5iJASIEQhKJfCACQs/W077Sx6vZQn5CIYggAkKAgICA+LSd9ZN/foRCh5Wvr5i23puef36FQoeVr6+Ytt6bnn9+QuPcypX8zvL1hX98IAFCz9bTvtLHq9lCfkIhiCABQoCAgID4tJ31k39+hEKHla+vmLbem55/foVCh5Wvr5i23puef35C49zKlfzO8vWFf3wgA0LP1tO+0ser2UJ+QiGIIANCgICAgPi0nfWTf36EQoeVr6+Ytt6bnn9+hUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCAEQs/W077Sx6vZQn5CIYggBEKAgICA+LSd9ZN/foRCh5Wvr5i23puef36FQoeVr6+Ytt6bnn9+QuPcypX8zvL1hX98IQEMAQtBACkDkIkBQsXP2bLx5brqJ3whAQsgASAAfCEAQaCJASEFQQAoAsCJASIGQaCJAWohBwJAIAZBCEgNAEGgiQEhCANAIAgpAwAiAULP1tO+0ser2UJ+QiGIIAFCgICAgPi0nfWTf36EQoeVr6+Ytt6bnn9+IACFQhuJQoeVr6+Ytt6bnn9+QuPcypX8zvL1hX98IQAgCEEQaiEJIAhBCGoiBSEIIAkgB00NAAsLAkACQCAFQQRqIgggB00NACAFIQgMAQsgBTUCAEKHla+vmLbem55/fiAAhUIXiULP1tO+0ser2UJ+Qvnz3fGZ9pmrFnwhAAsCQCAIIAdGDQAgBkGgiQFqIQkDQCAIMQAAQsXP2bLx5brqJ34gAIVCC4lCh5Wvr5i23puef34hACAJIAhBAWoiCEcNAAsLQQAgAEIhiCAAhULP1tO+0ser2UJ+IgBCHYggAIVC+fPd8Zn2masWfiIAQiCIIACFIgBCOIYgAEIohkKAgICAgIDA/wCDhCAAQhiGQoCAgICA4D+DIABCCIZCgICAgPAfg4SEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGAiQELAgALCwsBAEGACAsEUAAAAA==";
+var hash$7 = "bc315b2a";
+var wasmJson$7 = {
+ name: name$7,
+ data: data$7,
+ hash: hash$7
+};
+
+const mutex$5 = new Mutex();
+let wasmCache$5 = null;
+const seedBuffer$2 = new ArrayBuffer(8);
+function validateSeed$2(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$2(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash64 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash64(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ if (wasmCache$5 === null) {
+ return lockedCreate(mutex$5, wasmJson$7, 8)
+ .then((wasm) => {
+ wasmCache$5 = wasm;
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ return wasmCache$5.calculate(data);
+ });
+ }
+ try {
+ writeSeed$2(seedBuffer$2, seedLow, seedHigh);
+ wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));
+ const hash = wasmCache$5.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash64 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash64(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$2(seedLow)) {
+ return Promise.reject(validateSeed$2(seedLow));
+ }
+ if (validateSeed$2(seedHigh)) {
+ return Promise.reject(validateSeed$2(seedHigh));
+ }
+ return WASMInterface(wasmJson$7, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$2(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 32,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$6 = "xxhash3";
+var data$6 = "AGFzbQEAAAABJAZgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAAAYAF/AAMMCwABAgMDAwQFBAAEBAUBcAEBAQUEAQECAgYOAn8BQcCOBQt/AEHACQsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQABgtIYXNoX1VwZGF0ZQAHCkhhc2hfRmluYWwACA1IYXNoX0dldFN0YXRlAAkOSGFzaF9DYWxjdWxhdGUACgpTVEFURV9TSVpFAwEK+joLBQBBgAoL7wMBEH4CQCADRQ0AIAFBOGohASACQThqIQIgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAcgAUFoaikDACIMfCACQXBqKQMAIAFBcGopAwAiDYUiB0IgiCAHQv////8Pg358IQcgCSABQVhqKQMAIg58IAJBYGopAwAgAUFgaikDACIPhSIJQiCIIAlC/////w+DfnwhCSALIAFBSGopAwAiEHwgAkFQaikDACABQVBqKQMAIhGFIgtCIIggC0L/////D4N+fCELIAJBeGopAwAgAUF4aikDACIShSITQiCIIBNC/////w+DfiAEfCABKQMAIhN8IQQgAkFoaikDACAMhSIMQiCIIAxC/////w+DfiAGfCANfCEGIAJBWGopAwAgDoUiDEIgiCAMQv////8Pg34gCHwgD3whCCACQUhqKQMAIBCFIgxCIIggDEL/////D4N+IAp8IBF8IQogBSASfCACKQMAIBOFIgVCIIggBUL/////D4N+fCEFIAFBwABqIQEgAkEIaiECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgAiABKAIAIgdrIgIgBEsNACAAIAMgBSAHQQN0aiACEAEgACAAKQMAIgggBSAGaiIHKQMAhSAIQi+IhUKx893xCX43AwAgACAAKQMIIgggBykDCIUgCEIviIVCsfPd8Ql+NwMIIAAgACkDECIIIAcpAxCFIAhCL4iFQrHz3fEJfjcDECAAIAApAxgiCCAHKQMYhSAIQi+IhUKx893xCX43AxggACAAKQMgIgggBykDIIUgCEIviIVCsfPd8Ql+NwMgIAAgACkDKCIIIAcpAyiFIAhCL4iFQrHz3fEJfjcDKCAAIAApAzAiCCAHKQMwhSAIQi+IhUKx893xCX43AzAgACAAKQM4IgggBykDOIUgCEIviIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgAL3QQBBH4CQCAAQQlJDQBBACkDgIwBIAEpAyAgASkDGIUgAnyFIgNCOIYgA0IohkKAgICAgIDA/wCDhCADQhiGQoCAgICA4D+DIANCCIZCgICAgPAfg4SEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACABKQMQIAEpAwiFIAKnIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq1CIIYgAoV9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQhiJIAOFIANCMYmFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4UPCwJAIABFDQAgASgCBCABKAIAc60gAnwiA0EALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQ8LIAEpAzggAoUgASkDQIUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQuICwQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQgAEEQbSEJAkAgAEGQAUgNACAJQQkgCUEJShtBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iLAUEAIABCvNDI2pvysIBLfDcDgIsBQQBC4OvAtJ7QjpPMACAAfTcD+IoBQQAgAEK4kZii9/6Qko5/fDcD8IoBQQBCgrXB7sf5v7khIAB9NwPoigFBACAAQsvzmffEmfDy+AB8NwPgigFBAELygJGl+vbssx8gAH03A9iKAUEAIABC3qm3y76Q5MtbfDcD0IoBQQBC/IKE5PK+yNYcIAB9NwPIigFBACAAQrj9s8uzhOmlvn98NwPAigELQQBCADcDkI4BQQBCADcDiI4BQQBCADcDgI4BQQAgATYCsI4BQQAgADcDoI4BQQBCsfPd8Qk3A7iKAUEAQsXP2bLx5brqJzcDsIoBQQBC95Svrwg3A6iKAUEAQuPcypX8zvL1hX83A6CKAUEAQvnz3fGZ9pmrFjcDmIoBQQBCz9bTvtLHq9lCNwOQigFBAEKHla+vmLbem55/NwOIigFBAEK93MqVDDcDgIoBQQBCkICAgIAQNwOYjgELwAUBBX9BAEEAKQOQjgEgAK18NwOQjgECQAJAQQAoAoCOASIBIABqIgJBgAJLDQAgAUGAjAFqIQNBgAohBAJAAkAgAEEITw0AIAAhAQwBCyAAIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLIAFFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCABQX9qIgENAAtBACgCgI4BIABqIQIMAQtBgAohAyAAQYAKaiECQQAoArCOASIEQcCKASAEGyEAAkAgAUUNACABQYCMAWohA0GACiEEAkACQEGAAiABayIFQQhPDQAgBSEBDAELIAUhAQNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAFBeGoiAUEHSw0ACwsCQCABRQ0AA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAAQQAoApyOARACQQBBADYCgI4BIAVBgApqIQMLAkAgA0GAAmogAk8NACACQYB+aiEEA0BBgIoBQYiOAUEAKAKYjgEgA0EEIABBACgCnI4BEAIgA0GAAmoiAyAESQ0AC0EAIANBQGopAwA3A8CNAUEAIANBSGopAwA3A8iNAUEAIANBUGopAwA3A9CNAUEAIANBWGopAwA3A9iNAUEAIANBYGopAwA3A+CNAUEAIANBaGopAwA3A+iNAUEAIANBcGopAwA3A/CNAUEAIANBeGopAwA3A/iNAQtBgIwBIQQCQAJAIAIgA2siAkEITw0AIAIhAQwBCyACIQEDQCAEIAMpAwA3AwAgBEEIaiEEIANBCGohAyABQXhqIgFBB0sNAAsLIAFFDQADQCAEIAMtAAA6AAAgBEEBaiEEIANBAWohAyABQX9qIgENAAsLQQAgAjYCgI4BC6oQBQR/AX4Cfwp+An8jACIAIQEgAEGAAWtBQHEiAiQAQQAoArCOASIAQcCKASAAGyEDAkACQEEAKQOQjgEiBELxAVQNACACQQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKATcDMCACQQApA7iKATcDOAJAAkBBACgCgI4BIgVBwABJDQAgAkEAKAKIjgE2AkAgAiACQcAAakEAKAKYjgFBgIwBIAVBf2pBBnYgA0EAKAKcjgEQAiACIAIpAwhBACgCgI4BIgBBwIsBaikDACIEfCADQQAoApyOAWoiBkEBaikDACAAQciLAWopAwAiB4UiCEIgiCAIQv////8Pg358Igk3AwggAiACKQMYIABB0IsBaikDACIIfCAGQRFqKQMAIABB2IsBaikDACIKhSILQiCIIAtC/////w+DfnwiDDcDGCACIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiACKQMAfHwiDTcDACACIAogCCAGQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHwiDjcDECAGQRlqKQMAIQQgAikDICEHIAIgAikDKCAAQeCLAWopAwAiCHwgBkEhaikDACAAQeiLAWopAwAiCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IABB8IsBaikDACIEfCAGQTFqKQMAIABB+IsBaikDACIHhSIIQiCIIAhC/////w+Dfnw3AzggByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAIpAzB8fCEEDAELQcAAIAVrIRECQAJAAkAgBUE4TQ0AQYCOASARayEGIAJBwABqIQUgESEADAELQQAhEiARIQADQCACQcAAaiASaiAFIBJqQcCNAWopAwA3AwAgEkEIaiESIABBeGoiAEEHSw0ACyAFIBJqIgZBwABGDQEgBkHAjQFqIQYgAkHAAGogEmohBQsDQCAFIAYtAAA6AAAgBUEBaiEFIAZBAWohBiAAQX9qIgANAAtBACgCgI4BIQULIAJBwABqIBFqIQZBgIwBIQACQCAFQQhJDQBBgIwBIQADQCAGIAApAwA3AwAgBkEIaiEGIABBCGohACAFQXhqIgVBB0sNAAsLAkAgBUUNAANAIAYgAC0AADoAACAGQQFqIQYgAEEBaiEAIAVBf2oiBQ0ACwsgAiACKQMIIAIpA0AiBHwgA0EAKAKcjgFqIgBBAWopAwAgAikDSCIHhSIIQiCIIAhC/////w+DfnwiCTcDCCACIAIpAxggAikDUCIIfCAAQRFqKQMAIAIpA1giCoUiC0IgiCALQv////8Pg358Igw3AxggAiAHIAQgAEF5aikDAIUiBEIgiCAEQv////8Pg34gAikDAHx8Ig03AwAgAiAKIAggAEEJaikDAIUiBEIgiCAEQv////8Pg34gAikDEHx8Ig43AxAgAEEZaikDACEEIAIpAyAhByACIAIpAyggAikDYCIIfCAAQSFqKQMAIAIpA2giCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IAIpA3AiBHwgAEExaikDACACKQN4IgeFIghCIIggCEL/////D4N+fDcDOCAHIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8IQQLIAIgBDcDMCADKQNDIAIpAziFIgdC/////w+DIgggAykDOyAEhSIEQiCIIgp+IgtC/////w+DIAdCIIgiByAEQv////8PgyIEfnwgCCAEfiIEQiCIfCIIQiCGIARC/////w+DhCALQiCIIAcgCn58IAhCIIh8hSADKQMzIA+FIgRC/////w+DIgcgAykDKyAQhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMjIAyFIgRC/////w+DIgcgAykDGyAOhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMTIAmFIgRC/////w+DIgcgAykDCyANhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hUEAKQOQjgFCh5Wvr5i23puef358fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIABBgAggBBADIQQMAgsCQCAAQYABSw0AIABBgAggBBAEIQQMAgsgAEGACCAEEAUhBAwBCwJAIABBEEsNACAAIANCABADIQQMAQsCQCAAQYABSw0AIAAgA0IAEAQhBAwBCyAAIANCABAFIQQLQQAgBEI4hiAEQiiGQoCAgICAgMD/AIOEIARCGIZCgICAgIDgP4MgBEIIhkKAgICA8B+DhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4AKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA";
+var hash$6 = "187bc2c6";
+var wasmJson$6 = {
+ name: name$6,
+ data: data$6,
+ hash: hash$6
+};
+
+const mutex$4 = new Mutex();
+let wasmCache$4 = null;
+const seedBuffer$1 = new ArrayBuffer(8);
+function validateSeed$1(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed$1(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash3(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ if (wasmCache$4 === null) {
+ return lockedCreate(mutex$4, wasmJson$6, 8)
+ .then((wasm) => {
+ wasmCache$4 = wasm;
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ return wasmCache$4.calculate(data);
+ });
+ }
+ try {
+ writeSeed$1(seedBuffer$1, seedLow, seedHigh);
+ wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));
+ const hash = wasmCache$4.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash3 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash3(seedLow = 0, seedHigh = 0) {
+ if (validateSeed$1(seedLow)) {
+ return Promise.reject(validateSeed$1(seedLow));
+ }
+ if (validateSeed$1(seedHigh)) {
+ return Promise.reject(validateSeed$1(seedHigh));
+ }
+ return WASMInterface(wasmJson$6, 8).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed$1(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 8,
+ };
+ return obj;
+ });
+}
+
+var name$5 = "xxhash128";
+var data$5 = "AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUEBQFwAQEBBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAHC0hhc2hfVXBkYXRlAAgKSGFzaF9GaW5hbAAJDUhhc2hfR2V0U3RhdGUACg5IYXNoX0NhbGN1bGF0ZQALClNUQVRFX1NJWkUDAQrKRgwFAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAApAwAiCCAFIAZqIgcpAwCFIAhCL4iFQrHz3fEJfjcDACAAIAApAwgiCCAHKQMIhSAIQi+IhUKx893xCX43AwggACAAKQMQIgggBykDEIUgCEIviIVCsfPd8Ql+NwMQIAAgACkDGCIIIAcpAxiFIAhCL4iFQrHz3fEJfjcDGCAAIAApAyAiCCAHKQMghSAIQi+IhUKx893xCX43AyAgACAAKQMoIgggBykDKIUgCEIviIVCsfPd8Ql+NwMoIAAgACkDMCIIIAcpAzCFIAhCL4iFQrHz3fEJfjcDMCAAIAApAzgiCCAHKQM4hSAIQi+IhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQvCCAEFfgJAIAFBCUkNACAAQQApA4CMASACKQMoIAIpAyCFIAN9hSABQfiLAWopAwAiBIUiBUIgiCIGQoeVr68IfiIHQv////8PgyAFQv////8PgyIFQrHz3fEJfnwgBUKHla+vCH4iBUIgiHwiCEIghiAFQv////8Pg4QgAUF/aq1CNoZ8IAQgAikDOCACKQMwhSADfIUiA0L/////D4NC95Svrwh+IANCgICAgHCDfCAGQrHz3fEJfnwgB0IgiHwgCEIgiHwiA0I4hiADQiiGQoCAgICAgMD/AIOEIANCGIZCgICAgIDgP4MgA0IIhkKAgICA8B+DhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhISFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgdCIIh8IgRCBYhC////P4MgBEIghiAHQv////8Pg4SFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgBEIgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyrUIghiADhXwgAUH8iwFqNQIAQiCGQQA1AoCMAYSFIgNCIIgiBCABQQJ0QYeVr694aq0iBX4iBkIgiCAEQrHz3fEJfnwgBkL/////D4MgA0L/////D4MiA0Kx893xCX58IAMgBX4iA0IgiHwiBEIgiHwgBEIghiADQv////8Pg4QiBEIBhnwiA0IliCADhUL5893xmfKZqxZ+IgVCIIggBYU3AwggACADQgOIIASFIgNCI4ggA4VCpb7j9NGMh9mff34iA0IciCADhTcDAA8LAkAgAUUNACAAIAIoAgQgAigCAHOtIAN8IgRBAC0AgIwBQRB0IAFBCHRyIAFBAXZBgIwBai0AAEEYdHIgAUH/iwFqLQAAciIBrYUgBEIhiIVCz9bTvtLHq9lCfiIEQh2IIASFQvnz3fGZ9pmrFn4iBEIgiCAEhTcDACAAIAIoAgwgAigCCHOtIAN9IgMgAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyQQ13rYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCADhSACKQNYhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAOFIAIpA0iFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAunCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAIpA3ggA30gAUHIiwFqKQMAIgiFIgdC/////w+DIgkgAikDcCADfCABQcCLAWopAwAiCoUiC0IgiCIMfiINQiCIIAdCIIgiByAMfnwgDUL/////D4MgByALQv////8PgyILfnwgCSALfiIHQiCIfCIJQiCIfEEAKQO4jAEiC0EAKQOwjAEiDHyFIAlCIIYgB0L/////D4OEhSEHIAIpA2ggA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAIpA1ggA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAIpA0ggA30gCYUiCUL/////D4MiDCACKQNAIAN8IAqFIgpCIIgiDX4iBkL/////D4MgCUIgiCIJIApC/////w+DIgp+fCAMIAp+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggC3yFIQULIAIpAzggA30gAUHoiwFqKQMAIgiFIglC/////w+DIgogAikDMCADfCABQeCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDmIwBIgdBACkDkIwBIgl8hSEGIAIpAyggA30gB4UiB0L/////D4MiCiACKQMgIAN8IAmFIglCIIgiDH4iDUL/////D4MgB0IgiCIHIAlC/////w+DIgl+fCAKIAl+IglCIIh8IgpCIIYgCUL/////D4OEIA1CIIggByAMfnwgCkIgiHyFIAV8IAggC3yFIQULIAAgAikDGCADfSABQfiLAWopAwAiB4UiCEL/////D4MiCSACKQMQIAN8IAFB8IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfEEAKQOIjAEiCEEAKQOAjAEiCXyFIgsgAikDCCADfSAIhSIIQv////8PgyIMIAIpAwAgA3wgCYUiCUIgiCINfiIGQv////8PgyAIQiCIIgggCUL/////D4MiCX58IAwgCX4iCUIgiHwiDEIghiAJQv////8Pg4QgBkIgiCAIIA1+fCAMQiCIfIUgBXwgByAKfIUiBXwiB0IliCAHhUL5893xmfKZqxZ+IgdCIIggB4U3AwAgAEIAIAVCh5Wvr5i23puef34gBCADfULP1tO+0ser2UJ+fCALQuPcypX8zvL1hX9+fCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhX03AwgLiQ8DAX8UfgJ/QQAhBCACKQN4IAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAIpA1ggA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAikDOCADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACKQMYIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACKQNoIAN9IBSFIhRC/////w+DIhYgAikDYCADfCAVhSIVQiCIIhd+IhhC/////w+DIBRCIIgiFCAVQv////8PgyIVfnwgFiAVfiIVQiCIfCIWQiCGIBVC/////w+DhCAYQiCIIBQgF358IBZCIIh8hSACKQNIIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACKQMoIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACKQMIIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFIAFBIG0hGQJAIAFBoAFIDQAgGUEFIBlBBUobQXxqIRoDQCACIARqIhlBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGUETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBlBC2opAwAgA30gCIUiCEL/////D4MiCyAZQQNqKQMAIAN8IAmFIglCIIgi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QXBqKQMANwPwjQFBACADQXhqKQMANwP4jQELQYCMASEEAkACQCACIANrIgJBCE8NACACIQEMAQsgAiEBA0AgBCADKQMANwMAIARBCGohBCADQQhqIQMgAUF4aiIBQQdLDQALCyABRQ0AA0AgBCADLQAAOgAAIARBAWohBCADQQFqIQMgAUF/aiIBDQALC0EAIAI2AoCOAQvcDgUEfwF+An8EfgJ/IwAiACEBIABBgAFrQUBxIgAkAEEAKAKwjgEiAkHAigEgAhshAwJAAkBBACkDkI4BIgRC8QFUDQAgAEEAKQOAigE3AwAgAEEAKQOIigE3AwggAEEAKQOQigE3AxAgAEEAKQOYigE3AxggAEEAKQOgigE3AyAgAEEAKQOoigE3AyggAEEAKQOwigE3AzAgAEEAKQO4igE3AzgCQAJAQQAoAoCOASIFQcAASQ0AIABBACgCiI4BNgJAIAAgAEHAAGpBACgCmI4BQYCMASAFQX9qQQZ2IANBACgCnI4BEAIgACAAKQMIQQAoAoCOASICQcCLAWopAwAiBHwgA0EAKAKcjgFqIgZBAWopAwAgAkHIiwFqKQMAIgeFIghCIIggCEL/////D4N+fDcDCCAAIAApAxggAkHQiwFqKQMAIgh8IAZBEWopAwAgAkHYiwFqKQMAIgmFIgpCIIggCkL/////D4N+fDcDGCAAIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiAAKQMAfHw3AwAgACAJIAggBkEJaikDAIUiBEIgiCAEQv////8Pg34gACkDEHx8NwMQIAZBGWopAwAhBCAAKQMgIQcgACAAKQMoIAJB4IsBaikDACIIfCAGQSFqKQMAIAJB6IsBaikDACIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCACQfCLAWopAwAiBHwgBkExaikDACACQfiLAWopAwAiB4UiCEIgiCAIQv////8Pg358NwM4IAAgByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAApAzB8fDcDMAwBC0HAACAFayELAkACQAJAIAVBOE0NAEGAjgEgC2shBiAAQcAAaiEFIAshAgwBC0EAIQwgCyECA0AgAEHAAGogDGogBSAMakHAjQFqKQMANwMAIAxBCGohDCACQXhqIgJBB0sNAAsgBSAMaiIGQcAARg0BIAZBwI0BaiEGIABBwABqIAxqIQULA0AgBSAGLQAAOgAAIAVBAWohBSAGQQFqIQYgAkF/aiICDQALQQAoAoCOASEFCyAAQcAAaiALaiEGQYCMASECAkAgBUEISQ0AQYCMASECA0AgBiACKQMANwMAIAZBCGohBiACQQhqIQIgBUF4aiIFQQdLDQALCwJAIAVFDQADQCAGIAItAAA6AAAgBkEBaiEGIAJBAWohAiAFQX9qIgUNAAsLIAAgACkDCCAAKQNAIgR8IANBACgCnI4BaiICQQFqKQMAIAApA0giB4UiCEIgiCAIQv////8Pg358NwMIIAAgACkDGCAAKQNQIgh8IAJBEWopAwAgACkDWCIJhSIKQiCIIApC/////w+Dfnw3AxggACAHIAQgAkF5aikDAIUiBEIgiCAEQv////8Pg34gACkDAHx8NwMAIAAgCSAIIAJBCWopAwCFIgRCIIggBEL/////D4N+IAApAxB8fDcDECACQRlqKQMAIQQgACkDICEHIAAgACkDKCAAKQNgIgh8IAJBIWopAwAgACkDaCIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCAAKQNwIgR8IAJBMWopAwAgACkDeCIHhSIIQiCIIAhC/////w+Dfnw3AzggACAHIAQgAkEpaikDAIUiBEIgiCAEQv////8Pg34gACkDMHx8NwMwCyAAIAAgA0ELakEAKQOQjgEiBEKHla+vmLbem55/fhADNwNAIAAgACADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAgJAQQApA6COASIEUA0AAkAgAkEQSw0AIABBwABqIAJBgAggBBAEDAILAkAgAkGAAUsNACAAQcAAaiACQYAIIAQQBQwCCyAAQcAAaiACQYAIIAQQBgwBCwJAIAJBEEsNACAAQcAAaiACIANCABAEDAELAkAgAkGAAUsNACAAQcAAaiACIANCABAFDAELIABBwABqIAIgA0IAEAYLQQAgAEH4AGopAwA3A8AKQQAgAEHwAGopAwA3A7gKQQAgAEHoAGopAwA3A7AKQQAgAEHgAGopAwA3A6gKQQAgAEHYAGopAwA3A6AKQQAgAEHQAGopAwA3A5gKQQAgACkDSCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgACkDQCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhDcDiAogASQACwYAQYCKAQsCAAsLzAEBAEGACAvEAbj+bDkjpEu+fAGBLPchrRze1G3pg5CX23JApKS3s2cfy3nmTszA5XiCWtB9zP9yIbgIRnT3QySO4DWQ5oE6Jkw8KFK7kcMAy4jQZYsbUy6jcWRIl6IN+U44Ge9Gqd6s2Kj6dj/jnDQ/+dy7x8cLTx2KUeBLzbRZMciffsnZeHNk6sWsgzTT68PFgaD/+hNj6xcN3VG38NpJ0xZVJinUaJ4rFr5YfUeh/I/4uNF60DHORcs6j5UWBCiv1/vKu0tAfkACAAA=";
+var hash$5 = "e8e3fcf8";
+var wasmJson$5 = {
+ name: name$5,
+ data: data$5,
+ hash: hash$5
+};
+
+const mutex$3 = new Mutex();
+let wasmCache$3 = null;
+const seedBuffer = new ArrayBuffer(8);
+function validateSeed(seed) {
+ if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {
+ return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');
+ }
+ return null;
+}
+function writeSeed(arr, low, high) {
+ // write in little-endian format
+ const buffer = new DataView(arr);
+ buffer.setUint32(0, low, true);
+ buffer.setUint32(4, high, true);
+}
+/**
+ * Calculates xxHash128 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @returns Computed hash as a hexadecimal string
+ */
+function xxhash128(data, seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ if (wasmCache$3 === null) {
+ return lockedCreate(mutex$3, wasmJson$5, 16)
+ .then((wasm) => {
+ wasmCache$3 = wasm;
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ return wasmCache$3.calculate(data);
+ });
+ }
+ try {
+ writeSeed(seedBuffer, seedLow, seedHigh);
+ wasmCache$3.writeMemory(new Uint8Array(seedBuffer));
+ const hash = wasmCache$3.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new xxHash128 hash instance
+ * @param seedLow Lower 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ * @param seedHigh Higher 32 bits of the number used to
+ * initialize the internal state of the algorithm (defaults to 0)
+ */
+function createXXHash128(seedLow = 0, seedHigh = 0) {
+ if (validateSeed(seedLow)) {
+ return Promise.reject(validateSeed(seedLow));
+ }
+ if (validateSeed(seedHigh)) {
+ return Promise.reject(validateSeed(seedHigh));
+ }
+ return WASMInterface(wasmJson$5, 16).then((wasm) => {
+ const instanceBuffer = new ArrayBuffer(8);
+ writeSeed(instanceBuffer, seedLow, seedHigh);
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ const obj = {
+ init: () => {
+ wasm.writeMemory(new Uint8Array(instanceBuffer));
+ wasm.init();
+ return obj;
+ },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 512,
+ digestSize: 16,
+ };
+ return obj;
+ });
+}
+
+var name$4 = "ripemd160";
+var data$4 = "AGFzbQEAAAABEQRgAAF/YAAAYAF/AGACf38AAwkIAAECAwIBAAIEBQFwAQEBBQQBAQICBg4CfwFB4IkFC38AQcAICweDAQkGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAARByaXBlbWQxNjBfdXBkYXRlAAMLSGFzaF9VcGRhdGUABApIYXNoX0ZpbmFsAAUNSGFzaF9HZXRTdGF0ZQAGDkhhc2hfQ2FsY3VsYXRlAAcKU1RBVEVfU0laRQMBCtAxCAUAQYAJCzoAQQBB8MPLnnw2ApiJAUEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQELpiwBHn9BACAAKAIkIgEgACgCACICIAAoAhAiAyACIAAoAiwiBCAAKAIMIgUgACgCBCIGIAAoAjwiByACIAAoAjAiCCAHIAAoAggiCUEAKAKIiQEiCkEAKAKQiQEiC0EAKAKUiQEiDEF/c3JBACgCjIkBIg1zaiAAKAIUIg5qQeaXioUFakEId0EAKAKYiQEiD2oiEEEKdyIRaiABIA1BCnciEmogAiALQQp3IhNqIAwgACgCHCIUaiAPIAAoAjgiFWogECANIBNBf3Nyc2pB5peKhQVqQQl3IAxqIhYgECASQX9zcnNqQeaXioUFakEJdyATaiIQIBYgEUF/c3JzakHml4qFBWpBC3cgEmoiFyAQIBZBCnciFkF/c3JzakHml4qFBWpBDXcgEWoiGCAXIBBBCnciGUF/c3JzakHml4qFBWpBD3cgFmoiGkEKdyIbaiAAKAIYIhAgGEEKdyIcaiAAKAI0IhEgF0EKdyIXaiADIBlqIAQgFmogGiAYIBdBf3Nyc2pB5peKhQVqQQ93IBlqIhYgGiAcQX9zcnNqQeaXioUFakEFdyAXaiIXIBYgG0F/c3JzakHml4qFBWpBB3cgHGoiGCAXIBZBCnciGUF/c3JzakHml4qFBWpBB3cgG2oiGiAYIBdBCnciF0F/c3JzakHml4qFBWpBCHcgGWoiG0EKdyIcaiAFIBpBCnciHWogACgCKCIWIBhBCnciGGogBiAXaiAAKAIgIgAgGWogGyAaIBhBf3Nyc2pB5peKhQVqQQt3IBdqIhcgGyAdQX9zcnNqQeaXioUFakEOdyAYaiIYIBcgHEF/c3JzakHml4qFBWpBDncgHWoiGSAYIBdBCnciGkF/c3JzakHml4qFBWpBDHcgHGoiGyAZIBhBCnciHEF/c3JzakHml4qFBWpBBncgGmoiHUEKdyIXaiAUIBtBCnciGGogBSAZQQp3IhlqIAQgHGogECAaaiAdIBlxIBsgGUF/c3FyakGkorfiBWpBCXcgHGoiGiAYcSAdIBhBf3NxcmpBpKK34gVqQQ13IBlqIhkgF3EgGiAXQX9zcXJqQaSit+IFakEPdyAYaiIbIBpBCnciGHEgGSAYQX9zcXJqQaSit+IFakEHdyAXaiIcIBlBCnciF3EgGyAXQX9zcXJqQaSit+IFakEMdyAYaiIdQQp3IhlqIBUgHEEKdyIaaiAWIBtBCnciG2ogDiAXaiARIBhqIB0gG3EgHCAbQX9zcXJqQaSit+IFakEIdyAXaiIXIBpxIB0gGkF/c3FyakGkorfiBWpBCXcgG2oiGCAZcSAXIBlBf3NxcmpBpKK34gVqQQt3IBpqIhsgF0EKdyIXcSAYIBdBf3NxcmpBpKK34gVqQQd3IBlqIhwgGEEKdyIYcSAbIBhBf3NxcmpBpKK34gVqQQd3IBdqIh1BCnciGWogASAcQQp3IhpqIAMgG0EKdyIbaiAIIBhqIAAgF2ogHSAbcSAcIBtBf3NxcmpBpKK34gVqQQx3IBhqIhcgGnEgHSAaQX9zcXJqQaSit+IFakEHdyAbaiIYIBlxIBcgGUF/c3FyakGkorfiBWpBBncgGmoiGiAXQQp3IhdxIBggF0F/c3FyakGkorfiBWpBD3cgGWoiGyAYQQp3IhhxIBogGEF/c3FyakGkorfiBWpBDXcgF2oiHEEKdyIdaiAGIBtBCnciHmogDiAaQQp3IhlqIAcgGGogCSAXaiAcIBlxIBsgGUF/c3FyakGkorfiBWpBC3cgGGoiFyAcQX9zciAec2pB8/3A6wZqQQl3IBlqIhggF0F/c3IgHXNqQfP9wOsGakEHdyAeaiIZIBhBf3NyIBdBCnciF3NqQfP9wOsGakEPdyAdaiIaIBlBf3NyIBhBCnciGHNqQfP9wOsGakELdyAXaiIbQQp3IhxqIAEgGkEKdyIdaiAQIBlBCnciGWogFSAYaiAUIBdqIBsgGkF/c3IgGXNqQfP9wOsGakEIdyAYaiIXIBtBf3NyIB1zakHz/cDrBmpBBncgGWoiGCAXQX9zciAcc2pB8/3A6wZqQQZ3IB1qIhkgGEF/c3IgF0EKdyIXc2pB8/3A6wZqQQ53IBxqIhogGUF/c3IgGEEKdyIYc2pB8/3A6wZqQQx3IBdqIhtBCnciHGogFiAaQQp3Ih1qIAkgGUEKdyIZaiAIIBhqIAAgF2ogGyAaQX9zciAZc2pB8/3A6wZqQQ13IBhqIhcgG0F/c3IgHXNqQfP9wOsGakEFdyAZaiIYIBdBf3NyIBxzakHz/cDrBmpBDncgHWoiGSAYQX9zciAXQQp3IhdzakHz/cDrBmpBDXcgHGoiGiAZQX9zciAYQQp3IhhzakHz/cDrBmpBDXcgF2oiG0EKdyIcaiAQIBpBCnciHWogACAZQQp3IhlqIBEgGGogAyAXaiAbIBpBf3NyIBlzakHz/cDrBmpBB3cgGGoiGiAbQX9zciAdc2pB8/3A6wZqQQV3IBlqIhcgGnEgHCAXQX9zcXJqQenttdMHakEPdyAdaiIYIBdxIBpBCnciGiAYQX9zcXJqQenttdMHakEFdyAcaiIZIBhxIBdBCnciGyAZQX9zcXJqQenttdMHakEIdyAaaiIXQQp3IhxqIAcgGUEKdyIdaiAEIBhBCnciHmogBSAbaiAGIBpqIBcgGXEgHiAXQX9zcXJqQenttdMHakELdyAbaiIYIBdxIB0gGEF/c3FyakHp7bXTB2pBDncgHmoiFyAYcSAcIBdBf3NxcmpB6e210wdqQQ53IB1qIhkgF3EgGEEKdyIaIBlBf3NxcmpB6e210wdqQQZ3IBxqIhggGXEgF0EKdyIbIBhBf3NxcmpB6e210wdqQQ53IBpqIhdBCnciHGogESAYQQp3Ih1qIAkgGUEKdyIZaiAIIBtqIA4gGmogFyAYcSAZIBdBf3NxcmpB6e210wdqQQZ3IBtqIhggF3EgHSAYQX9zcXJqQenttdMHakEJdyAZaiIXIBhxIBwgF0F/c3FyakHp7bXTB2pBDHcgHWoiGSAXcSAYQQp3IhogGUF/c3FyakHp7bXTB2pBCXcgHGoiGCAZcSAXQQp3IhsgGEF/c3FyakHp7bXTB2pBDHcgGmoiF0EKdyIcIAdqIBUgGUEKdyIdaiAWIBtqIBQgGmogFyAYcSAdIBdBf3NxcmpB6e210wdqQQV3IBtqIhkgF3EgGEEKdyIYIBlBf3NxcmpB6e210wdqQQ93IB1qIhcgGXEgHCAXQX9zcXJqQenttdMHakEIdyAYaiIaIBdBCnciG3MgGCAIaiAXIBlBCnciGHMgGnNqQQh3IBxqIhdzakEFdyAYaiIZQQp3IhwgAGogGkEKdyIaIAZqIBggFmogFyAacyAZc2pBDHcgG2oiGCAccyAbIANqIBkgF0EKdyIXcyAYc2pBCXcgGmoiGXNqQQx3IBdqIhogGUEKdyIbcyAXIA5qIBkgGEEKdyIXcyAac2pBBXcgHGoiGHNqQQ53IBdqIhlBCnciHCAVaiAaQQp3IhogCWogFyAUaiAYIBpzIBlzakEGdyAbaiIXIBxzIBsgEGogGSAYQQp3IhhzIBdzakEIdyAaaiIZc2pBDXcgGGoiGiAZQQp3IhtzIBggEWogGSAXQQp3IhhzIBpzakEGdyAcaiIZc2pBBXcgGGoiHEEKdyIdQQAoApSJAWogBCAWIA4gDiARIBYgDiAUIAEgACABIBAgFCAEIBAgBiAPaiATIA1zIAsgDXMgDHMgCmogAmpBC3cgD2oiD3NqQQ53IAxqIhdBCnciHmogAyASaiAJIAxqIA8gEnMgF3NqQQ93IBNqIgwgHnMgBSATaiAXIA9BCnciE3MgDHNqQQx3IBJqIhJzakEFdyATaiIPIBJBCnciF3MgEyAOaiASIAxBCnciDHMgD3NqQQh3IB5qIhJzakEHdyAMaiITQQp3Ih5qIAEgD0EKdyIPaiAMIBRqIBIgD3MgE3NqQQl3IBdqIgwgHnMgFyAAaiATIBJBCnciEnMgDHNqQQt3IA9qIhNzakENdyASaiIPIBNBCnciF3MgEiAWaiATIAxBCnciDHMgD3NqQQ53IB5qIhJzakEPdyAMaiITQQp3Ih5qIBJBCnciCiAHaiAXIBFqIBMgCnMgDCAIaiASIA9BCnciDHMgE3NqQQZ3IBdqIhJzakEHdyAMaiITIBJBCnciD3MgDCAVaiASIB5zIBNzakEJdyAKaiIXc2pBCHcgHmoiDCAXcSATQQp3IhMgDEF/c3FyakGZ84nUBWpBB3cgD2oiEkEKdyIeaiAWIAxBCnciCmogBiAXQQp3IhdqIBEgE2ogAyAPaiASIAxxIBcgEkF/c3FyakGZ84nUBWpBBncgE2oiDCAScSAKIAxBf3NxcmpBmfOJ1AVqQQh3IBdqIhIgDHEgHiASQX9zcXJqQZnzidQFakENdyAKaiITIBJxIAxBCnciDyATQX9zcXJqQZnzidQFakELdyAeaiIMIBNxIBJBCnciFyAMQX9zcXJqQZnzidQFakEJdyAPaiISQQp3Ih5qIAIgDEEKdyIKaiAIIBNBCnciE2ogBSAXaiAHIA9qIBIgDHEgEyASQX9zcXJqQZnzidQFakEHdyAXaiIMIBJxIAogDEF/c3FyakGZ84nUBWpBD3cgE2oiEiAMcSAeIBJBf3NxcmpBmfOJ1AVqQQd3IApqIhMgEnEgDEEKdyIPIBNBf3NxcmpBmfOJ1AVqQQx3IB5qIgwgE3EgEkEKdyIXIAxBf3NxcmpBmfOJ1AVqQQ93IA9qIhJBCnciHmogBCAMQQp3IgpqIBUgE0EKdyITaiAJIBdqIA4gD2ogEiAMcSATIBJBf3NxcmpBmfOJ1AVqQQl3IBdqIgwgEnEgCiAMQX9zcXJqQZnzidQFakELdyATaiISIAxxIB4gEkF/c3FyakGZ84nUBWpBB3cgCmoiEyAScSAMQQp3IgwgE0F/c3FyakGZ84nUBWpBDXcgHmoiDyATcSASQQp3IhIgD0F/cyIKcXJqQZnzidQFakEMdyAMaiIXQQp3Ih5qIAMgD0EKdyIPaiAVIBNBCnciE2ogFiASaiAFIAxqIBcgCnIgE3NqQaHX5/YGakELdyASaiIMIBdBf3NyIA9zakGh1+f2BmpBDXcgE2oiEiAMQX9zciAec2pBodfn9gZqQQZ3IA9qIhMgEkF/c3IgDEEKdyIMc2pBodfn9gZqQQd3IB5qIg8gE0F/c3IgEkEKdyISc2pBodfn9gZqQQ53IAxqIhdBCnciHmogCSAPQQp3IgpqIAYgE0EKdyITaiAAIBJqIAcgDGogFyAPQX9zciATc2pBodfn9gZqQQl3IBJqIgwgF0F/c3IgCnNqQaHX5/YGakENdyATaiISIAxBf3NyIB5zakGh1+f2BmpBD3cgCmoiEyASQX9zciAMQQp3IgxzakGh1+f2BmpBDncgHmoiDyATQX9zciASQQp3IhJzakGh1+f2BmpBCHcgDGoiF0EKdyIeaiAEIA9BCnciCmogESATQQp3IhNqIBAgEmogAiAMaiAXIA9Bf3NyIBNzakGh1+f2BmpBDXcgEmoiDCAXQX9zciAKc2pBodfn9gZqQQZ3IBNqIhIgDEF/c3IgHnNqQaHX5/YGakEFdyAKaiITIBJBf3NyIAxBCnciD3NqQaHX5/YGakEMdyAeaiIXIBNBf3NyIBJBCnciHnNqQaHX5/YGakEHdyAPaiIKQQp3IgxqIAQgF0EKdyISaiABIBNBCnciE2ogBiAeaiAIIA9qIAogF0F/c3IgE3NqQaHX5/YGakEFdyAeaiIPIBJxIAogEkF/c3FyakHc+e74eGpBC3cgE2oiEyAMcSAPIAxBf3NxcmpB3Pnu+HhqQQx3IBJqIhcgD0EKdyIScSATIBJBf3NxcmpB3Pnu+HhqQQ53IAxqIh4gE0EKdyIMcSAXIAxBf3NxcmpB3Pnu+HhqQQ93IBJqIgpBCnciE2ogAyAeQQp3Ig9qIAggF0EKdyIXaiAAIAxqIAIgEmogCiAXcSAeIBdBf3NxcmpB3Pnu+HhqQQ53IAxqIgwgD3EgCiAPQX9zcXJqQdz57vh4akEPdyAXaiISIBNxIAwgE0F/c3FyakHc+e74eGpBCXcgD2oiFyAMQQp3IgxxIBIgDEF/c3FyakHc+e74eGpBCHcgE2oiHiASQQp3IhJxIBcgEkF/c3FyakHc+e74eGpBCXcgDGoiCkEKdyITaiAVIB5BCnciD2ogByAXQQp3IhdqIBQgEmogBSAMaiAKIBdxIB4gF0F/c3FyakHc+e74eGpBDncgEmoiDCAPcSAKIA9Bf3NxcmpB3Pnu+HhqQQV3IBdqIhIgE3EgDCATQX9zcXJqQdz57vh4akEGdyAPaiIPIAxBCnciDHEgEiAMQX9zcXJqQdz57vh4akEIdyATaiIXIBJBCnciEnEgDyASQX9zcXJqQdz57vh4akEGdyAMaiIeQQp3IgpqIAIgF0EKdyIOaiADIA9BCnciE2ogCSASaiAQIAxqIB4gE3EgFyATQX9zcXJqQdz57vh4akEFdyASaiIDIA5xIB4gDkF/c3FyakHc+e74eGpBDHcgE2oiDCADIApBf3Nyc2pBzvrPynpqQQl3IA5qIg4gDCADQQp3IgNBf3Nyc2pBzvrPynpqQQ93IApqIhIgDiAMQQp3IgxBf3Nyc2pBzvrPynpqQQV3IANqIhNBCnciD2ogCSASQQp3IhZqIAggDkEKdyIJaiAUIAxqIAEgA2ogEyASIAlBf3Nyc2pBzvrPynpqQQt3IAxqIgMgEyAWQX9zcnNqQc76z8p6akEGdyAJaiIIIAMgD0F/c3JzakHO+s/KempBCHcgFmoiCSAIIANBCnciA0F/c3JzakHO+s/KempBDXcgD2oiDiAJIAhBCnciCEF/c3JzakHO+s/KempBDHcgA2oiFEEKdyIWaiAAIA5BCnciDGogBSAJQQp3IgBqIAYgCGogFSADaiAUIA4gAEF/c3JzakHO+s/KempBBXcgCGoiAyAUIAxBf3Nyc2pBzvrPynpqQQx3IABqIgAgAyAWQX9zcnNqQc76z8p6akENdyAMaiIGIAAgA0EKdyIDQX9zcnNqQc76z8p6akEOdyAWaiIIIAYgAEEKdyIAQX9zcnNqQc76z8p6akELdyADaiIJQQp3IhVqNgKQiQFBACALIBggAmogGSAaQQp3IgJzIBxzakEPdyAbaiIOQQp3IhZqIBAgA2ogCSAIIAZBCnciA0F/c3JzakHO+s/KempBCHcgAGoiBkEKd2o2AoyJAUEAKAKIiQEhEEEAIA0gGyAFaiAcIBlBCnciBXMgDnNqQQ13IAJqIhRBCndqIAcgAGogBiAJIAhBCnciAEF/c3JzakHO+s/KempBBXcgA2oiB2o2AoiJAUEAKAKYiQEhCEEAIAAgEGogAiABaiAOIB1zIBRzakELdyAFaiIBaiARIANqIAcgBiAVQX9zcnNqQc76z8p6akEGd2o2ApiJAUEAIAAgCGogHWogBSAEaiAUIBZzIAFzakELd2o2ApSJAQuMAgEEfwJAIAFFDQBBACECQQBBACgCgIkBIgMgAWoiBDYCgIkBIANBP3EhBQJAIAQgA08NAEEAQQAoAoSJAUEBajYChIkBCwJAIAVFDQACQEHAACAFayICIAFNDQAgBSECDAELQQAhA0EAIQQDQCADIAVqQZyJAWogACADai0AADoAACACIARBAWoiBEH/AXEiA0sNAAtBnIkBEAIgASACayEBIAAgAmohAEEAIQILAkAgAUHAAEkNAANAIAAQAiAAQcAAaiEAIAFBQGoiAUE/Sw0ACwsgAUUNAEEAIQNBACEEA0AgAyACakGciQFqIAAgA2otAAA6AAAgASAEQQFqIgRB/wFxIgNLDQALCwsJAEGACSAAEAMLggEBAn8jAEEQayIAJAAgAEEAKAKAiQEiAUEDdDYCCCAAQQAoAoSJAUEDdCABQR12cjYCDEGACEE4QfgAIAFBP3EiAUE4SRsgAWsQAyAAQQhqQQgQA0EAQQAoAoiJATYCgAlBAEEAKQKMiQE3AoQJQQBBACkClIkBNwKMCSAAQRBqJAALBgBBgIkBC8EBAQF/IwBBEGsiASQAQQBB8MPLnnw2ApiJAUEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQFBgAkgABADIAFBACgCgIkBIgBBA3Q2AgggAUEAKAKEiQFBA3QgAEEddnI2AgxBgAhBOEH4ACAAQT9xIgBBOEkbIABrEAMgAUEIakEIEANBAEEAKAKIiQE2AoAJQQBBACkCjIkBNwKECUEAQQApApSJATcCjAkgAUEQaiQACwtLAQBBgAgLRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA";
+var hash$4 = "42f1de39";
+var wasmJson$4 = {
+ name: name$4,
+ data: data$4,
+ hash: hash$4
+};
+
+const mutex$2 = new Mutex();
+let wasmCache$2 = null;
+/**
+ * Calculates RIPEMD-160 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function ripemd160(data) {
+ if (wasmCache$2 === null) {
+ return lockedCreate(mutex$2, wasmJson$4, 20)
+ .then((wasm) => {
+ wasmCache$2 = wasm;
+ return wasmCache$2.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$2.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new RIPEMD-160 hash instance
+ */
+function createRIPEMD160() {
+ return WASMInterface(wasmJson$4, 20).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 20,
+ };
+ return obj;
+ });
+}
+
+function calculateKeyBuffer(hasher, key) {
+ const { blockSize } = hasher;
+ const buf = getUInt8Buffer(key);
+ if (buf.length > blockSize) {
+ hasher.update(buf);
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ return uintArr;
+ }
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
+}
+function calculateHmac(hasher, key) {
+ hasher.init();
+ const { blockSize } = hasher;
+ const keyBuf = calculateKeyBuffer(hasher, key);
+ const keyBuffer = new Uint8Array(blockSize);
+ keyBuffer.set(keyBuf);
+ const opad = new Uint8Array(blockSize);
+ for (let i = 0; i < blockSize; i++) {
+ const v = keyBuffer[i];
+ opad[i] = v ^ 0x5C;
+ keyBuffer[i] = v ^ 0x36;
+ }
+ hasher.update(keyBuffer);
+ const obj = {
+ init: () => {
+ hasher.init();
+ hasher.update(keyBuffer);
+ return obj;
+ },
+ update: (data) => {
+ hasher.update(data);
+ return obj;
+ },
+ digest: ((outputType) => {
+ const uintArr = hasher.digest('binary');
+ hasher.init();
+ hasher.update(opad);
+ hasher.update(uintArr);
+ return hasher.digest(outputType);
+ }),
+ save: () => {
+ throw new Error('save() not supported');
+ },
+ load: () => {
+ throw new Error('load() not supported');
+ },
+ blockSize: hasher.blockSize,
+ digestSize: hasher.digestSize,
+ };
+ return obj;
+}
+/**
+ * Calculates HMAC hash
+ * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
+ * @param key Key (string, Buffer or TypedArray)
+ */
+function createHMAC(hash, key) {
+ if (!hash || !hash.then) {
+ throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
+ }
+ return hash.then((hasher) => calculateHmac(hasher, key));
+}
+
+function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const DK = new Uint8Array(hashLength);
+ const block1 = new Uint8Array(salt.length + 4);
+ const block1View = new DataView(block1.buffer);
+ const saltBuffer = getUInt8Buffer(salt);
+ const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);
+ block1.set(saltUIntBuffer);
+ let destPos = 0;
+ const hLen = digest.digestSize;
+ const l = Math.ceil(hashLength / hLen);
+ let T = null;
+ let U = null;
+ for (let i = 1; i <= l; i++) {
+ block1View.setUint32(salt.length, i);
+ digest.init();
+ digest.update(block1);
+ T = digest.digest('binary');
+ U = T.slice();
+ for (let j = 1; j < iterations; j++) {
+ digest.init();
+ digest.update(U);
+ U = digest.digest('binary');
+ for (let k = 0; k < hLen; k++) {
+ T[k] ^= U[k];
+ }
+ }
+ DK.set(T.subarray(0, hashLength - destPos), destPos);
+ destPos += hLen;
+ }
+ if (outputType === 'binary') {
+ return DK;
+ }
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, DK, hashLength);
+ });
+}
+const validateOptions$2 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!options.hashFunction || !options.hashFunction.then) {
+ throw new Error('Invalid hash function is provided! Usage: pbkdf2("password", "salt", 1000, 32, createSHA1()).');
+ }
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) {
+ throw new Error('Iterations should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Generates a new PBKDF2 hash for the supplied password
+ */
+function pbkdf2(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$2(options);
+ const hmac = yield createHMAC(options.hashFunction, options.password);
+ return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);
+ });
+}
+
+var name$3 = "scrypt";
+var data$3 = "AGFzbQEAAAABIwZgAX8Bf2AAAX9gBX9/fn9/AGAEf39/fwBgAX8AYAN/f38AAwcGAAECAwQFBAUBcAEBAQUGAQECgIACBggBfwFBkIgECwc5BAZtZW1vcnkCABJIYXNoX1NldE1lbW9yeVNpemUAAA5IYXNoX0dldEJ1ZmZlcgABBnNjcnlwdAAFCpcmBlsBAX9BACEBAkAgAEEAKAKACGsiAEUNAAJAIABBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/ASEBDAELQQAhAUEAQQApA4AIIABBEHStfDcDgAgLIAFBGHRBGHULagECfwJAQQAoAogIIgANAEEAPwBBEHQiADYCiAhBgIAgQQAoAoAIayIBRQ0AAkAgAUEQdiABQYCAfHEgAUlqIgBAAEF/Rw0AQQAPC0EAQQApA4AIIABBEHStfDcDgAhBACgCiAghAAsgAAu5EAMMfwl+An8gAUEFdCEFIAQgAUEIdGohBiAEIAFBB3QiB2ohCAJAAkACQAJAIAFFDQBBACEJIAAhCiAEIQsDQCALIAooAgA2AgAgCkEEaiEKIAtBBGohCyAJQQFqIgkgBUkNAAsgAlANAiABQQh0IQxBACENIAMhDgNAQQAhCSABIQ8DQCAOIAlqIgogBCAJaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgDiEJIAQhDyABIRADQCAJIAdqIgogDyAHaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9BgAFqIQ8gEEF/aiIQDQALIAggBCAGIAEQAyAOIAxqIQ4gDUECaiINrSACVA0ADAILCyACUA0CIAhBQGoiCikDOCERIAopAzAhEiAKKQMoIRMgCikDICEUIAopAxghFSAKKQMQIRYgCikDCCEXIAopAwAhGEECIQoDQCAKrSEZIApBAmohCiAZIAJUDQALIAYgETcDOCAGIBI3AzAgBiATNwMoIAYgFDcDICAGIBU3AxggBiAWNwMQIAYgFzcDCCAGIBg3AwALAkAgAUUNACAHQUBqIgogCGohGiACp0F/aiEOIAogBGohGyABQQd0IQ1BACEMA0AgAyANIBsoAgAgDnFsaiEHQQAhCSABIQ8DQCAEIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgAyANIBooAgAgDnFsaiEHQQAhCSABIQ8DQCAIIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAIIAQgBiABEAMgDEECaiIMrSACVA0ADAILCyAIQUBqIgopAzghESAKKQMwIRIgCikDKCETIAopAyAhFCAKKQMYIRUgCikDECEWIAopAwghFyAKKQMAIRhBAiEKA0AgCq0hGSAKQQJqIQogGSACVA0ACyAGIBE3AzggBiASNwMwIAYgEzcDKCAGIBQ3AyAgBiAVNwMYIAYgFjcDECAGIBc3AwggBiAYNwMACyABRQ0AQQAhCgNAIAAgBCgCADYCACAAQQRqIQAgBEEEaiEEIApBAWoiCiAFSQ0ACwsL4wUDAX8IfgJ/IAIgA0EHdCAAakFAaiIEKQMAIgU3AwAgAiAEKQMIIgY3AwggAiAEKQMQIgc3AxAgAiAEKQMYIgg3AxggAiAEKQMgIgk3AyAgAiAEKQMoIgo3AyggAiAEKQMwIgs3AzAgAiAEKQM4Igw3AzgCQCADRQ0AIANBAXQhDSAAQfgAaiEEIANBBnQhDkECIQADQCACIAUgBEGIf2opAwCFNwMAIAIgBiAEQZB/aikDAIU3AwggAiAHIARBmH9qKQMAhTcDECACIAggBEGgf2opAwCFNwMYIAIgCSAEQah/aikDAIU3AyAgAiAKIARBsH9qKQMAhTcDKCACIAsgBEG4f2opAwCFNwMwIAIgDCAEQUBqKQMAhTcDOCACEAQgASACKQMANwMAIAFBCGogAikDCDcDACABQRBqIAIpAxA3AwAgAUEYaiACKQMYNwMAIAFBIGogAikDIDcDACABQShqIAIpAyg3AwAgAUEwaiACKQMwNwMAIAFBOGogAikDODcDACACIAIpAwAgBEFIaikDAIU3AwAgAiACKQMIIARBUGopAwCFNwMIIAIgAikDECAEQVhqKQMAhTcDECACIAIpAxggBEFgaikDAIU3AxggAiACKQMgIARBaGopAwCFNwMgIAIgAikDKCAEQXBqKQMAhTcDKCACIAIpAzAgBEF4aikDAIU3AzAgAiACKQM4IAQpAwCFNwM4IAIQBCABIA5qIgMgAikDADcDACADQQhqIAIpAwg3AwAgA0EQaiACKQMQNwMAIANBGGogAikDGDcDACADQSBqIAIpAyA3AwAgA0EoaiACKQMoNwMAIANBMGogAikDMDcDACADQThqIAIpAzg3AwAgACANTw0BIARBgAFqIQQgAUHAAGohASAAQQJqIQAgAikDOCEMIAIpAzAhCyACKQMoIQogAikDICEJIAIpAxghCCACKQMQIQcgAikDCCEGIAIpAwAhBQwACwsLug0IAX4BfwF+AX8BfgF/AX4SfyAAIAAoAgQgACkDKCIBQiCIpyICIAApAzgiA0IgiKciBGpBB3cgACkDCCIFQiCIp3MiBiAEakEJdyAAKQMYIgdCIIincyIIIAZqQQ13IAJzIgkgB6ciCiABpyILakEHdyADp3MiAiALakEJdyAFp3MiDCACakENdyAKcyINIAxqQRJ3IAtzIg4gACkDACIBQiCIpyIPIAApAxAiA0IgiKciEGpBB3cgACkDICIFQiCIp3MiC2pBB3dzIgogCSAIakESdyAEcyIRIAJqQQd3IAApAzAiB6ciCSABpyISakEHdyADp3MiBCASakEJdyAFp3MiEyAEakENdyAJcyIUcyIJIBFqQQl3IAsgEGpBCXcgB0IgiKdzIhVzIhYgCWpBDXcgAnMiFyAWakESdyARcyIRakEHdyAGIBQgE2pBEncgEnMiEmpBB3cgFSALakENdyAPcyIUcyICIBJqQQl3IAxzIg8gAmpBDXcgBnMiGHMiBiARakEJdyAIIA0gFCAVakESdyAQcyIQIARqQQd3cyIMIBBqQQl3cyIIcyIVIAZqQQ13IApzIhQgDCAKIA5qQQl3IBNzIhMgCmpBDXcgC3MiGSATakESdyAOcyIKakEHdyAXcyILIApqQQl3IA9zIg4gC2pBDXcgDHMiFyAOakESdyAKcyINIAIgCCAMakENdyAEcyIMIAhqQRJ3IBBzIghqQQd3IBlzIgpqQQd3cyIEIBQgFWpBEncgEXMiECALakEHdyAJIBggD2pBEncgEnMiEWpBB3cgDHMiDCARakEJdyATcyISIAxqQQ13IAlzIg9zIgkgEGpBCXcgCiAIakEJdyAWcyITcyIWIAlqQQ13IAtzIhQgFmpBEncgEHMiEGpBB3cgBiAPIBJqQRJ3IBFzIhFqQQd3IBMgCmpBDXcgAnMiC3MiAiARakEJdyAOcyIOIAJqQQ13IAZzIhhzIgYgEGpBCXcgFSAXIAsgE2pBEncgCHMiCCAMakEHd3MiCyAIakEJd3MiE3MiFSAGakENdyAEcyIXIAsgBCANakEJdyAScyISIARqQQ13IApzIhkgEmpBEncgDXMiBGpBB3cgFHMiCiAEakEJdyAOcyIPIApqQQ13IAtzIhQgD2pBEncgBHMiDSACIBMgC2pBDXcgDHMiDCATakESdyAIcyIIakEHdyAZcyILakEHd3MiBCAXIBVqQRJ3IBBzIhAgCmpBB3cgCSAYIA5qQRJ3IBFzIg5qQQd3IAxzIgwgDmpBCXcgEnMiESAMakENdyAJcyIXcyIJIBBqQQl3IAsgCGpBCXcgFnMiEnMiEyAJakENdyAKcyIYIBNqQRJ3IBBzIhBqQQd3IAYgFyARakESdyAOcyIKakEHdyASIAtqQQ13IAJzIhdzIgIgCmpBCXcgD3MiDiACakENdyAGcyIWcyIGIAkgFiAOakESdyAKcyIWakEHdyAVIBQgFyASakESdyAIcyIIIAxqQQd3cyIKIAhqQQl3cyISIApqQQ13IAxzIg9zIgwgFmpBCXcgBCANakEJdyARcyIRcyIVIAxqQQ13IAlzIhQgFWpBEncgFnMiCWpBB3cgAiAPIBJqQRJ3IAhzIghqQQd3IBEgBGpBDXcgC3MiD3MiCyAIakEJdyATcyITIAtqQQ13IAJzIhdzIhZqNgIEIAAgACgCCCAWIAlqQQl3IAogDyARakESdyANcyIRakEHdyAYcyICIBFqQQl3IA5zIg5zIg9qNgIIIAAgACgCDCAPIBZqQQ13IAZzIg1qNgIMIAAgACgCECAGIBBqQQl3IBJzIhIgDiACakENdyAKcyIYIBcgE2pBEncgCHMiCiAMakEHd3MiCCAKakEJd3MiFiAIakENdyAMcyIMajYCECAAIAAoAgAgDSAPakESdyAJc2o2AgAgACAAKAIUIAwgFmpBEncgCnNqNgIUIAAgACgCGCAIajYCGCAAIAAoAhwgFmo2AhwgACAAKAIgIBIgBmpBDXcgBHMiCSAYIA5qQRJ3IBFzIgYgC2pBB3dzIgogBmpBCXcgFXMiBGo2AiAgACAAKAIkIAQgCmpBDXcgC3MiC2o2AiQgACAAKAIoIAsgBGpBEncgBnNqNgIoIAAgACgCLCAKajYCLCAAIAAoAjAgCSASakESdyAQcyIGIAJqQQd3IBRzIgtqNgIwIAAgACgCNCALIAZqQQl3IBNzIgpqNgI0IAAgACgCOCAKIAtqQQ13IAJzIgJqNgI4IAAgACgCPCACIApqQRJ3IAZzajYCPAtyAwF/AX4CfwJAIAJFDQBBACgCiAgiAyAAIAGtIgQgAyAAQQd0IgUgAmxqIgMgAyAFIAFsaiIGEAIgAkEBRg0AIAJBf2ohASAFIQIDQEEAKAKICCACaiAAIAQgAyAGEAIgAiAFaiECIAFBf2oiAQ0ACwsL";
+var hash$3 = "d96fb75f";
+var wasmJson$3 = {
+ name: name$3,
+ data: data$3,
+ hash: hash$3
+};
+
+function scryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, blockSize, parallelism, hashLength, } = options;
+ const SHA256Hasher = createSHA256();
+ const blockData = yield pbkdf2({
+ password: options.password,
+ salt: options.salt,
+ iterations: 1,
+ hashLength: 128 * blockSize * parallelism,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ const scryptInterface = yield WASMInterface(wasmJson$3, 0);
+ // last block is for storing the temporary vectors
+ const VSize = 128 * blockSize * costFactor;
+ const XYSize = 256 * blockSize;
+ scryptInterface.setMemorySize(blockData.length + VSize + XYSize);
+ scryptInterface.writeMemory(blockData, 0);
+ // mix blocks
+ scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);
+ const expensiveSalt = scryptInterface
+ .getMemory()
+ .subarray(0, 128 * blockSize * parallelism);
+ const outputData = yield pbkdf2({
+ password: options.password,
+ salt: expensiveSalt,
+ iterations: 1,
+ hashLength,
+ hashFunction: SHA256Hasher,
+ outputType: 'binary',
+ });
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(hashLength * 2);
+ return getDigestHex(digestChars, outputData, hashLength);
+ }
+ // return binary format
+ return outputData;
+ });
+}
+// eslint-disable-next-line no-bitwise
+const isPowerOfTwo = (v) => v && !(v & (v - 1));
+const validateOptions$1 = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {
+ throw new Error('Block size should be a positive number');
+ }
+ if (!Number.isInteger(options.costFactor)
+ || options.costFactor < 2
+ || !isPowerOfTwo(options.costFactor)) {
+ throw new Error('Cost factor should be a power of 2, greater than 1');
+ }
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {
+ throw new Error('Parallelism should be a positive number');
+ }
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {
+ throw new Error('Hash length should be a positive number.');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'hex';
+ }
+ if (!['hex', 'binary'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);
+ }
+};
+/**
+ * Calculates hash using the scrypt password-based key derivation function
+ * @returns Computed hash as a hexadecimal string or as
+ * Uint8Array depending on the outputType option
+ */
+function scrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions$1(options);
+ return scryptInternal(options);
+ });
+}
+
+var name$2 = "bcrypt";
+var data$2 = "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";
+var hash$2 = "9f4c7b9e";
+var wasmJson$2 = {
+ name: name$2,
+ data: data$2,
+ hash: hash$2
+};
+
+function bcryptInternal(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { costFactor, password, salt } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 16);
+ const shouldEncode = options.outputType === 'encoded' ? 1 : 0;
+ bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);
+ const memory = bcryptInterface.getMemory();
+ if (options.outputType === 'encoded') {
+ return intArrayToString(memory, 60);
+ }
+ if (options.outputType === 'hex') {
+ const digestChars = new Uint8Array(24 * 2);
+ return getDigestHex(digestChars, memory, 24);
+ }
+ // return binary format
+ // the data is copied to allow GC of the original memory buffer
+ return memory.slice(0, 24);
+ });
+}
+const validateOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {
+ throw new Error('Cost factor should be a number between 4 and 31');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+ options.salt = getUInt8Buffer(options.salt);
+ if (options.salt.length !== 16) {
+ throw new Error('Salt should be 16 bytes long');
+ }
+ if (options.outputType === undefined) {
+ options.outputType = 'encoded';
+ }
+ if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {
+ throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
+ }
+};
+/**
+ * Calculates hash using the bcrypt password-hashing function
+ * @returns Computed hash
+ */
+function bcrypt(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateOptions(options);
+ return bcryptInternal(options);
+ });
+}
+const validateHashCharacters = (hash) => {
+ if (!/^\$2[axyb]\$[0-3][0-9]\$[./A-Za-z0-9]{53}$/.test(hash)) {
+ return false;
+ }
+ if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {
+ return false;
+ }
+ if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {
+ return false;
+ }
+ return true;
+};
+const validateVerifyOptions = (options) => {
+ if (!options || typeof options !== 'object') {
+ throw new Error('Invalid options parameter. It requires an object.');
+ }
+ if (options.hash === undefined || typeof options.hash !== 'string') {
+ throw new Error('Hash should be specified');
+ }
+ if (options.hash.length !== 60) {
+ throw new Error('Hash should be 60 bytes long');
+ }
+ if (!validateHashCharacters(options.hash)) {
+ throw new Error('Invalid hash');
+ }
+ options.password = getUInt8Buffer(options.password);
+ if (options.password.length < 1) {
+ throw new Error('Password should be at least 1 byte long');
+ }
+ if (options.password.length > 72) {
+ throw new Error('Password should be at most 72 bytes long');
+ }
+};
+/**
+ * Verifies password using bcrypt password-hashing function
+ * @returns True if the encoded hash matches the password
+ */
+function bcryptVerify(options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ validateVerifyOptions(options);
+ const { hash, password } = options;
+ const bcryptInterface = yield WASMInterface(wasmJson$2, 0);
+ bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);
+ const passwordBuffer = getUInt8Buffer(password);
+ bcryptInterface.writeMemory(passwordBuffer, 60);
+ return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);
+ });
+}
+
+var name$1 = "whirlpool";
+var data$1 = "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";
+var hash$1 = "358808f8";
+var wasmJson$1 = {
+ name: name$1,
+ data: data$1,
+ hash: hash$1
+};
+
+const mutex$1 = new Mutex();
+let wasmCache$1 = null;
+/**
+ * Calculates Whirlpool hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function whirlpool(data) {
+ if (wasmCache$1 === null) {
+ return lockedCreate(mutex$1, wasmJson$1, 64)
+ .then((wasm) => {
+ wasmCache$1 = wasm;
+ return wasmCache$1.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache$1.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new Whirlpool hash instance
+ */
+function createWhirlpool() {
+ return WASMInterface(wasmJson$1, 64).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 64,
+ };
+ return obj;
+ });
+}
+
+var name = "sm3";
+var data = "AGFzbQEAAAABDANgAAF/YAAAYAF/AAMIBwABAgIBAAIEBQFwAQEBBQQBAQICBg4CfwFB8IkFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQq4GAcFAEGACQtRAEEAQs3ct5zuycP9sH83AqCJAUEAQrzhvMuqlc6YFjcCmIkBQQBC14WRuYHAgcVaNwKQiQFBAELvrICcl9esiskANwKIiQFBAEIANwKAiQELiAIBBH8CQCAARQ0AQQAhAUEAQQAoAoCJASICIABqIgM2AoCJASACQT9xIQQCQCADIAJPDQBBAEEAKAKEiQFBAWo2AoSJAQtBgAkhAgJAIARFDQACQEHAACAEayIBIABNDQAgBCEBDAELQQAhAgNAIAQgAmpBqIkBaiACQYAJai0AADoAACAEIAJBAWoiAmpBwABHDQALQaiJARADIAFBgAlqIQIgACABayEAQQAhAQsCQCAAQcAASQ0AA0AgAhADIAJBwABqIQIgAEFAaiIAQT9LDQALCyAARQ0AIAFBqIkBaiEEA0AgBCACLQAAOgAAIARBAWohBCACQQFqIQIgAEF/aiIADQALCwuDDAEZfyMAQZACayIBJAAgASAAKAIIIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZycjYCCCABIAAoAhQiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyNgIUIAEgACgCGCICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnI2AhggASAAKAIcIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZyciIDNgIcIAEgACgCACICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiBDYCACABIAAoAhAiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgU2AhAgASAAKAIEIgJBGHQgAkEIdEGAgPwHcXIgAkEIdkGA/gNxIAJBGHZyciIGNgIEIAEgACgCICICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiBzYCICABIAAoAgwiAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgg2AgwgACgCJCECIAEgACgCNCIJQRh0IAlBCHRBgID8B3FyIAlBCHZBgP4DcSAJQRh2cnIiCjYCNCABIAAoAigiCUEYdCAJQQh0QYCA/AdxciAJQQh2QYD+A3EgCUEYdnJyIgs2AiggASADIARzIApBD3dzIgkgC3MgCEEHd3MgCUEPd3MgCUEXd3MiDDYCQCABIAAoAjgiCUEYdCAJQQh0QYCA/AdxciAJQQh2QYD+A3EgCUEYdnJyIgM2AjggASAAKAIsIglBGHQgCUEIdEGAgPwHcXIgCUEIdkGA/gNxIAlBGHZyciIENgIsIAEgByAGcyADQQ93cyIJIARzIAVBB3dzIAlBD3dzIAlBF3dzNgJEIAEgAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyIgk2AiQgASgCCCEDIAEgACgCPCICQRh0IAJBCHRBgID8B3FyIAJBCHZBgP4DcSACQRh2cnIiAjYCPCABIAAoAjAiAEEYdCAAQQh0QYCA/AdxciAAQQh2QYD+A3EgAEEYdnJyIgQ2AjAgASAJIANzIAJBD3dzIgAgBHMgASgCFEEHd3MgAEEPd3MgAEEXd3M2AkggASAIIAtzIAxBD3dzIgAgCnMgAEEPd3MgAEEXd3MgASgCGEEHd3M2AkxBACEGQSAhByABIQlBACgCiIkBIg0hCEEAKAKkiQEiDiEPQQAoAqCJASIQIQpBACgCnIkBIhEhEkEAKAKYiQEiEyELQQAoApSJASIUIRVBACgCkIkBIhYhA0EAKAKMiQEiFyEYA0AgEiALIgJzIAoiBHMgD2ogCCIAQQx3IgogAmpBmYqxzgcgB3ZBmYqxzgcgBnRyakEHdyIPaiAJKAIAIhlqIghBCXcgCHMgCEERd3MhCyADIgUgGHMgAHMgFWogDyAKc2ogCUEQaigCACAZc2ohCCAJQQRqIQkgB0F/aiEHIBJBE3chCiAYQQl3IQMgBCEPIAIhEiAFIRUgACEYIAZBAWoiBkEQRw0AC0EAIQZBECEHA0AgASAGaiIJQdAAaiAJQSxqKAIAIAlBEGooAgBzIAlBxABqKAIAIhVBD3dzIhIgCUE4aigCAHMgCUEcaigCAEEHd3MgEkEPd3MgEkEXd3MiGTYCACAKIg8gCyIJQX9zcSACIAlxciAEaiAIIhJBDHciCiAJakGKu57UByAHd2pBB3ciBGogDGoiCEEJdyAIcyAIQRF3cyELIBIgAyIYIABycSAYIABxciAFaiAEIApzaiAZIAxzaiEIIAJBE3chCiAAQQl3IQMgB0EBaiEHIBUhDCAPIQQgCSECIBghBSASIQAgBkEEaiIGQcABRw0AC0EAIA8gDnM2AqSJAUEAIAogEHM2AqCJAUEAIAkgEXM2ApyJAUEAIAsgE3M2ApiJAUEAIBggFHM2ApSJAUEAIAMgFnM2ApCJAUEAIBIgF3M2AoyJAUEAIAggDXM2AoiJASABQZACaiQAC4UIAQd/IwBBEGsiACQAIABBACgCgIkBIgFBG3QgAUELdEGAgPwHcXIgAUEFdkGA/gNxIAFBA3RBGHZycjYCDCAAQQAoAoSJASICQQN0IAFBHXZyIgNBGHQgA0EIdEGAgPwHcXIgA0EIdkGA/gNxIANBGHZyciIENgIIAkBBOEH4ACABQT9xIgVBOEkbIAVrIgNFDQBBACADIAFqIgE2AoCJAQJAIAEgA08NAEEAIAJBAWo2AoSJAQtBkAghAQJAAkAgBUUNACADQcAAIAVrIgJJDQFBACEBA0AgBSABakGoiQFqIAFBkAhqLQAAOgAAIAUgAUEBaiIBakHAAEcNAAtBqIkBEAMgAkGQCGohASADIAJrIQMLQQAhBQsCQCADQcAASQ0AA0AgARADIAFBwABqIQEgA0FAaiIDQT9LDQALCyADRQ0AIAVBqIkBaiEFA0AgBSABLQAAOgAAIAVBAWohBSABQQFqIQEgA0F/aiIDDQALC0EAQQAoAoCJASIBQQhqNgKAiQEgAUE/cSECAkAgAUF4SQ0AQQBBACgChIkBQQFqNgKEiQELQQAhBkEIIQUgAEEIaiEBAkACQCACRQ0AAkAgAkE4Tw0AIAIhBgwBCyACQaiJAWogBDoAAAJAIAJBP0YNACACQamJAWogBEEIdjoAACACQT9zQX9qIgVFDQAgAkGqiQFqIQEgAEEIakECciEDA0AgASADLQAAOgAAIAFBAWohASADQQFqIQMgBUF/aiIFDQALC0GoiQEQAyACQUhqIgVFDQEgAEEIakHAACACa2ohAQsgBkGoiQFqIQMDQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASAFQX9qIgUNAAsLQQBBACgCiIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCgAlBAEEAKAKMiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKECUEAQQAoApCJASIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnI2AogJQQBBACgClIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCjAlBAEEAKAKYiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKQCUEAQQAoApyJASIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnI2ApQJQQBBACgCoIkBIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYCmAlBAEEAKAKkiQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKcCSAAQRBqJAALBgBBgIkBC8ABAQJ/QQBCzdy3nO7Jw/2wfzcCoIkBQQBCvOG8y6qVzpgWNwKYiQFBAELXhZG5gcCBxVo3ApCJAUEAQu+sgJyX16yKyQA3AoiJAUEAQgA3AoCJAQJAIABFDQBBACAANgKAiQFBgAkhAQJAIABBwABJDQBBgAkhAQNAIAEQAyABQcAAaiEBIABBQGoiAEE/Sw0ACyAARQ0BC0EAIQIDQCACQaiJAWogASACai0AADoAACAAIAJBAWoiAkcNAAsLEAQLC1ECAEGACAsEaAAAAABBkAgLQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
+var hash = "6e6f46ad";
+var wasmJson = {
+ name: name,
+ data: data,
+ hash: hash
+};
+
+const mutex = new Mutex();
+let wasmCache = null;
+/**
+ * Calculates SM3 hash
+ * @param data Input data (string, Buffer or TypedArray)
+ * @returns Computed hash as a hexadecimal string
+ */
+function sm3(data) {
+ if (wasmCache === null) {
+ return lockedCreate(mutex, wasmJson, 32)
+ .then((wasm) => {
+ wasmCache = wasm;
+ return wasmCache.calculate(data);
+ });
+ }
+ try {
+ const hash = wasmCache.calculate(data);
+ return Promise.resolve(hash);
+ }
+ catch (err) {
+ return Promise.reject(err);
+ }
+}
+/**
+ * Creates a new SM3 hash instance
+ */
+function createSM3() {
+ return WASMInterface(wasmJson, 32).then((wasm) => {
+ wasm.init();
+ const obj = {
+ init: () => { wasm.init(); return obj; },
+ update: (data) => { wasm.update(data); return obj; },
+ digest: (outputType) => wasm.digest(outputType),
+ save: () => wasm.save(),
+ load: (data) => { wasm.load(data); return obj; },
+ blockSize: 64,
+ digestSize: 32,
+ };
+ return obj;
+ });
+}
+
+export { adler32, argon2Verify, argon2d, argon2i, argon2id, bcrypt, bcryptVerify, blake2b, blake2s, blake3, crc32, crc32c, createAdler32, createBLAKE2b, createBLAKE2s, createBLAKE3, createCRC32, createCRC32C, createHMAC, createKeccak, createMD4, createMD5, createRIPEMD160, createSHA1, createSHA224, createSHA256, createSHA3, createSHA384, createSHA512, createSM3, createWhirlpool, createXXHash128, createXXHash3, createXXHash32, createXXHash64, keccak, md4, md5, pbkdf2, ripemd160, scrypt, sha1, sha224, sha256, sha3, sha384, sha512, sm3, whirlpool, xxhash128, xxhash3, xxhash32, xxhash64 };
diff --git a/packages/pouchdb-platform/lib/index-3ee6fe23.js b/packages/pouchdb-platform/lib/index-3ee6fe23.js
new file mode 100644
index 0000000000..6db067a40b
--- /dev/null
+++ b/packages/pouchdb-platform/lib/index-3ee6fe23.js
@@ -0,0 +1,189 @@
+import crypto$1 from 'crypto';
+
+// Unique ID creation requires a high quality random # generator. In node.js
+// this is pretty straight-forward - we use the crypto API.
+
+var crypto = crypto$1;
+
+var rng$2 = function nodeRNG() {
+ return crypto.randomBytes(16);
+};
+
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+
+var byteToHex = [];
+for (var i = 0; i < 256; ++i) {
+ byteToHex[i] = (i + 0x100).toString(16).substr(1);
+}
+
+function bytesToUuid$2(buf, offset) {
+ var i = offset || 0;
+ var bth = byteToHex;
+ // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
+ return ([
+ bth[buf[i++]], bth[buf[i++]],
+ bth[buf[i++]], bth[buf[i++]], '-',
+ bth[buf[i++]], bth[buf[i++]], '-',
+ bth[buf[i++]], bth[buf[i++]], '-',
+ bth[buf[i++]], bth[buf[i++]], '-',
+ bth[buf[i++]], bth[buf[i++]],
+ bth[buf[i++]], bth[buf[i++]],
+ bth[buf[i++]], bth[buf[i++]]
+ ]).join('');
+}
+
+var bytesToUuid_1 = bytesToUuid$2;
+
+var rng$1 = rng$2;
+var bytesToUuid$1 = bytesToUuid_1;
+
+// **`v1()` - Generate time-based UUID**
+//
+// Inspired by https://github.com/LiosK/UUID.js
+// and http://docs.python.org/library/uuid.html
+
+var _nodeId;
+var _clockseq;
+
+// Previous uuid creation time
+var _lastMSecs = 0;
+var _lastNSecs = 0;
+
+// See https://github.com/uuidjs/uuid for API details
+function v1$1(options, buf, offset) {
+ var i = buf && offset || 0;
+ var b = buf || [];
+
+ options = options || {};
+ var node = options.node || _nodeId;
+ var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
+
+ // node and clockseq need to be initialized to random values if they're not
+ // specified. We do this lazily to minimize issues related to insufficient
+ // system entropy. See #189
+ if (node == null || clockseq == null) {
+ var seedBytes = rng$1();
+ if (node == null) {
+ // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
+ node = _nodeId = [
+ seedBytes[0] | 0x01,
+ seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
+ ];
+ }
+ if (clockseq == null) {
+ // Per 4.2.2, randomize (14 bit) clockseq
+ clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
+ }
+ }
+
+ // UUID timestamps are 100 nano-second units since the Gregorian epoch,
+ // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
+ // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
+ // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
+ var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();
+
+ // Per 4.2.1.2, use count of uuid's generated during the current clock
+ // cycle to simulate higher resolution clock
+ var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
+
+ // Time since last uuid creation (in msecs)
+ var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
+
+ // Per 4.2.1.2, Bump clockseq on clock regression
+ if (dt < 0 && options.clockseq === undefined) {
+ clockseq = clockseq + 1 & 0x3fff;
+ }
+
+ // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
+ // time interval
+ if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
+ nsecs = 0;
+ }
+
+ // Per 4.2.1.2 Throw error if too many uuids are requested
+ if (nsecs >= 10000) {
+ throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
+ }
+
+ _lastMSecs = msecs;
+ _lastNSecs = nsecs;
+ _clockseq = clockseq;
+
+ // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
+ msecs += 12219292800000;
+
+ // `time_low`
+ var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+ b[i++] = tl >>> 24 & 0xff;
+ b[i++] = tl >>> 16 & 0xff;
+ b[i++] = tl >>> 8 & 0xff;
+ b[i++] = tl & 0xff;
+
+ // `time_mid`
+ var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
+ b[i++] = tmh >>> 8 & 0xff;
+ b[i++] = tmh & 0xff;
+
+ // `time_high_and_version`
+ b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
+ b[i++] = tmh >>> 16 & 0xff;
+
+ // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
+ b[i++] = clockseq >>> 8 | 0x80;
+
+ // `clock_seq_low`
+ b[i++] = clockseq & 0xff;
+
+ // `node`
+ for (var n = 0; n < 6; ++n) {
+ b[i + n] = node[n];
+ }
+
+ return buf ? buf : bytesToUuid$1(b);
+}
+
+var v1_1 = v1$1;
+
+var rng = rng$2;
+var bytesToUuid = bytesToUuid_1;
+
+function v4$1(options, buf, offset) {
+ var i = buf && offset || 0;
+
+ if (typeof(options) == 'string') {
+ buf = options === 'binary' ? new Array(16) : null;
+ options = null;
+ }
+ options = options || {};
+
+ var rnds = options.random || (options.rng || rng)();
+
+ // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+ rnds[6] = (rnds[6] & 0x0f) | 0x40;
+ rnds[8] = (rnds[8] & 0x3f) | 0x80;
+
+ // Copy bytes to buffer, if provided
+ if (buf) {
+ for (var ii = 0; ii < 16; ++ii) {
+ buf[i + ii] = rnds[ii];
+ }
+ }
+
+ return buf || bytesToUuid(rnds);
+}
+
+var v4_1 = v4$1;
+
+var v1 = v1_1;
+var v4 = v4_1;
+
+var uuid = v4;
+uuid.v1 = v1;
+uuid.v4 = v4;
+
+var uuid_1 = uuid;
+
+export { uuid_1 as u };
diff --git a/packages/pouchdb-platform/lib/node-8c918d45.js b/packages/pouchdb-platform/lib/node-8c918d45.js
new file mode 100644
index 0000000000..9e8a0d1edd
--- /dev/null
+++ b/packages/pouchdb-platform/lib/node-8c918d45.js
@@ -0,0 +1,14 @@
+export { default as assert } from 'node:assert';
+export { default as fs } from 'node:fs';
+export { default as buffer } from 'node:buffer';
+export { default as events } from 'node:events';
+export { default as crypto } from 'node:crypto';
+export { default as stream } from 'node:stream';
+export { default as http } from 'node:http';
+export { default as url } from 'node:url';
+export { default as https } from 'node:https';
+export { default as zlib } from 'node:zlib';
+export { default as util } from 'node:util';
+export { default as vm } from 'node:vm';
+export { default as path } from 'node:path';
+export { default as os } from 'node:os';
diff --git a/packages/pouchdb-platform/lib/package.json b/packages/pouchdb-platform/lib/package.json
new file mode 100644
index 0000000000..7c34deb583
--- /dev/null
+++ b/packages/pouchdb-platform/lib/package.json
@@ -0,0 +1 @@
+{"type":"module"}
\ No newline at end of file
diff --git a/packages/pouchdb-platform/lib/plugin-find.js.js b/packages/pouchdb-platform/lib/plugin-find.js.js
new file mode 100644
index 0000000000..bc4ffc50ed
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-find.js.js
@@ -0,0 +1,12 @@
+import find from 'pouchdb-find';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'pouchdb-find plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(find);
+}
diff --git a/packages/pouchdb-platform/lib/plugin-fruitdown.js.js b/packages/pouchdb-platform/lib/plugin-fruitdown.js.js
new file mode 100644
index 0000000000..8ded53be04
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-fruitdown.js.js
@@ -0,0 +1,12 @@
+import FruitdownPouchPlugin from 'pouchdb-adapter-fruitdown';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'fruitdown adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(FruitdownPouchPlugin);
+}
diff --git a/packages/pouchdb-platform/lib/plugin-indexeddb.js.js b/packages/pouchdb-platform/lib/plugin-indexeddb.js.js
new file mode 100644
index 0000000000..3c66ca599c
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-indexeddb.js.js
@@ -0,0 +1,12 @@
+import IndexeddbPouchPlugin from 'pouchdb-adapter-indexeddb';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'indexeddb adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(IndexeddbPouchPlugin);
+}
diff --git a/packages/pouchdb-platform/lib/plugin-localstorage.js.js b/packages/pouchdb-platform/lib/plugin-localstorage.js.js
new file mode 100644
index 0000000000..5d4b7d10f0
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-localstorage.js.js
@@ -0,0 +1,12 @@
+import LocalStoragePouchPlugin from 'pouchdb-adapter-localstorage';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'localstorage adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(LocalStoragePouchPlugin);
+}
diff --git a/packages/pouchdb-platform/lib/plugin-memory.js.js b/packages/pouchdb-platform/lib/plugin-memory.js.js
new file mode 100644
index 0000000000..9f25fb46af
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-memory.js.js
@@ -0,0 +1,12 @@
+import MemoryPouchPlugin from 'pouchdb-adapter-memory';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'memory adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(MemoryPouchPlugin);
+}
diff --git a/packages/pouchdb-platform/lib/plugin-websql.js.js b/packages/pouchdb-platform/lib/plugin-websql.js.js
new file mode 100644
index 0000000000..c6b315e675
--- /dev/null
+++ b/packages/pouchdb-platform/lib/plugin-websql.js.js
@@ -0,0 +1,12 @@
+import WebsqlPouchPlugin from 'pouchdb-adapter-websql';
+import { guardedConsole } from 'pouchdb-utils';
+
+// this code only runs in the browser, as its own dist/ script
+
+if (typeof PouchDB === 'undefined') {
+ guardedConsole('error', 'websql adapter plugin error: ' +
+ 'Cannot find global "PouchDB" object! ' +
+ 'Did you remember to include pouchdb.js?');
+} else {
+ PouchDB.plugin(WebsqlPouchPlugin);
+}
diff --git a/packages/pouchdb-platform/lib/pouchdb-abstract-mapreduce.js b/packages/pouchdb-platform/lib/pouchdb-abstract-mapreduce.js
new file mode 100644
index 0000000000..0f33fe6699
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-abstract-mapreduce.js
@@ -0,0 +1,1211 @@
+import { upsert, isRemote, nextTick, flatten, guardedConsole } from 'pouchdb-utils';
+import { base64StringToBlobOrBuffer } from 'pouchdb-binary-utils';
+import { collate, toIndexableString, normalizeKey, parseIndexableString } from 'pouchdb-collate';
+import { generateErrorFromResponse } from 'pouchdb-errors';
+import { Headers } from 'pouchdb-fetch';
+import { stringMd5 } from 'pouchdb-crypto';
+import { callbackify, mapToKeysArray, sequentialize, promisedCallback, fin, NotFoundError, QueryParseError, uniq, BuiltInError } from 'pouchdb-mapreduce-utils';
+
+/*
+ * Simple task queue to sequentialize actions. Assumes
+ * callbacks will eventually fire (once).
+ */
+
+
+class TaskQueue {
+ constructor() {
+ this.promise = new Promise(function (fulfill) {fulfill(); });
+ }
+
+ add(promiseFactory) {
+ this.promise = this.promise.catch(function () {
+ // just recover
+ }).then(function () {
+ return promiseFactory();
+ });
+ return this.promise;
+ }
+
+ finish() {
+ return this.promise;
+ }
+}
+
+function stringify(input) {
+ if (!input) {
+ return 'undefined'; // backwards compat for empty reduce
+ }
+ // for backwards compat with mapreduce, functions/strings are stringified
+ // as-is. everything else is JSON-stringified.
+ switch (typeof input) {
+ case 'function':
+ // e.g. a mapreduce map
+ return input.toString();
+ case 'string':
+ // e.g. a mapreduce built-in _reduce function
+ return input.toString();
+ default:
+ // e.g. a JSON object in the case of mango queries
+ return JSON.stringify(input);
+ }
+}
+
+/* create a string signature for a view so we can cache it and uniq it */
+function createViewSignature(mapFun, reduceFun) {
+ // the "undefined" part is for backwards compatibility
+ return stringify(mapFun) + stringify(reduceFun) + 'undefined';
+}
+
+async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {
+ const viewSignature = createViewSignature(mapFun, reduceFun);
+
+ let cachedViews;
+ if (!temporary) {
+ // cache this to ensure we don't try to update the same view twice
+ cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};
+ if (cachedViews[viewSignature]) {
+ return cachedViews[viewSignature];
+ }
+ }
+
+ const promiseForView = sourceDB.info().then(async function (info) {
+ const depDbName = info.db_name + '-mrview-' +
+ (temporary ? 'temp' : await stringMd5(viewSignature));
+
+ // save the view name in the source db so it can be cleaned up if necessary
+ // (e.g. when the _design doc is deleted, remove all associated view data)
+ function diffFunction(doc) {
+ doc.views = doc.views || {};
+ let fullViewName = viewName;
+ if (fullViewName.indexOf('/') === -1) {
+ fullViewName = viewName + '/' + viewName;
+ }
+ const depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};
+ /* istanbul ignore if */
+ if (depDbs[depDbName]) {
+ return; // no update necessary
+ }
+ depDbs[depDbName] = true;
+ return doc;
+ }
+ await upsert(sourceDB, '_local/' + localDocName, diffFunction);
+ const res = await sourceDB.registerDependentDatabase(depDbName);
+ const db = res.db;
+ db.auto_compaction = true;
+ const view = {
+ name: depDbName,
+ db: db,
+ sourceDB: sourceDB,
+ adapter: sourceDB.adapter,
+ mapFun: mapFun,
+ reduceFun: reduceFun
+ };
+
+ let lastSeqDoc;
+ try {
+ lastSeqDoc = await view.db.get('_local/lastSeq');
+ } catch (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ }
+
+ view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;
+ if (cachedViews) {
+ view.db.once('destroyed', function () {
+ delete cachedViews[viewSignature];
+ });
+ }
+ return view;
+ });
+
+ if (cachedViews) {
+ cachedViews[viewSignature] = promiseForView;
+ }
+ return promiseForView;
+}
+
+var persistentQueues = {};
+var tempViewQueue = new TaskQueue();
+var CHANGES_BATCH_SIZE = 50;
+
+function parseViewName(name) {
+ // can be either 'ddocname/viewname' or just 'viewname'
+ // (where the ddoc name is the same)
+ return name.indexOf('/') === -1 ? [name, name] : name.split('/');
+}
+
+function isGenOne(changes) {
+ // only return true if the current change is 1-
+ // and there are no other leafs
+ return changes.length === 1 && /^1-/.test(changes[0].rev);
+}
+
+function emitError(db, e, data) {
+ try {
+ db.emit('error', e);
+ } catch (err) {
+ guardedConsole('error',
+ 'The user\'s map/reduce function threw an uncaught error.\n' +
+ 'You can debug this error by doing:\n' +
+ 'myDatabase.on(\'error\', function (err) { debugger; });\n' +
+ 'Please double-check your map/reduce function.');
+ guardedConsole('error', e, data);
+ }
+}
+
+/**
+ * Returns an "abstract" mapreduce object of the form:
+ *
+ * {
+ * query: queryFun,
+ * viewCleanup: viewCleanupFun
+ * }
+ *
+ * Arguments are:
+ *
+ * localDoc: string
+ * This is for the local doc that gets saved in order to track the
+ * "dependent" DBs and clean them up for viewCleanup. It should be
+ * unique, so that indexer plugins don't collide with each other.
+ * mapper: function (mapFunDef, emit)
+ * Returns a map function based on the mapFunDef, which in the case of
+ * normal map/reduce is just the de-stringified function, but may be
+ * something else, such as an object in the case of pouchdb-find.
+ * reducer: function (reduceFunDef)
+ * Ditto, but for reducing. Modules don't have to support reducing
+ * (e.g. pouchdb-find).
+ * ddocValidator: function (ddoc, viewName)
+ * Throws an error if the ddoc or viewName is not valid.
+ * This could be a way to communicate to the user that the configuration for the
+ * indexer is invalid.
+ */
+function createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {
+
+ function tryMap(db, fun, doc) {
+ // emit an event if there was an error thrown by a map function.
+ // putting try/catches in a single function also avoids deoptimizations.
+ try {
+ fun(doc);
+ } catch (e) {
+ emitError(db, e, {fun: fun, doc: doc});
+ }
+ }
+
+ function tryReduce(db, fun, keys, values, rereduce) {
+ // same as above, but returning the result or an error. there are two separate
+ // functions to avoid extra memory allocations since the tryCode() case is used
+ // for custom map functions (common) vs this function, which is only used for
+ // custom reduce functions (rare)
+ try {
+ return {output : fun(keys, values, rereduce)};
+ } catch (e) {
+ emitError(db, e, {fun: fun, keys: keys, values: values, rereduce: rereduce});
+ return {error: e};
+ }
+ }
+
+ function sortByKeyThenValue(x, y) {
+ const keyCompare = collate(x.key, y.key);
+ return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);
+ }
+
+ function sliceResults(results, limit, skip) {
+ skip = skip || 0;
+ if (typeof limit === 'number') {
+ return results.slice(skip, limit + skip);
+ } else if (skip > 0) {
+ return results.slice(skip);
+ }
+ return results;
+ }
+
+ function rowToDocId(row) {
+ const val = row.value;
+ // Users can explicitly specify a joined doc _id, or it
+ // defaults to the doc _id that emitted the key/value.
+ const docId = (val && typeof val === 'object' && val._id) || row.id;
+ return docId;
+ }
+
+ function readAttachmentsAsBlobOrBuffer(res) {
+ res.rows.forEach(function (row) {
+ const atts = row.doc && row.doc._attachments;
+ if (!atts) {
+ return;
+ }
+ Object.keys(atts).forEach(function (filename) {
+ const att = atts[filename];
+ atts[filename].data = base64StringToBlobOrBuffer(att.data, att.content_type);
+ });
+ });
+ }
+
+ function postprocessAttachments(opts) {
+ return function (res) {
+ if (opts.include_docs && opts.attachments && opts.binary) {
+ readAttachmentsAsBlobOrBuffer(res);
+ }
+ return res;
+ };
+ }
+
+ function addHttpParam(paramName, opts, params, asJson) {
+ // add an http param from opts to params, optionally json-encoded
+ let val = opts[paramName];
+ if (typeof val !== 'undefined') {
+ if (asJson) {
+ val = encodeURIComponent(JSON.stringify(val));
+ }
+ params.push(paramName + '=' + val);
+ }
+ }
+
+ function coerceInteger(integerCandidate) {
+ if (typeof integerCandidate !== 'undefined') {
+ const asNumber = Number(integerCandidate);
+ // prevents e.g. '1foo' or '1.1' being coerced to 1
+ if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {
+ return asNumber;
+ } else {
+ return integerCandidate;
+ }
+ }
+ }
+
+ function coerceOptions(opts) {
+ opts.group_level = coerceInteger(opts.group_level);
+ opts.limit = coerceInteger(opts.limit);
+ opts.skip = coerceInteger(opts.skip);
+ return opts;
+ }
+
+ function checkPositiveInteger(number) {
+ if (number) {
+ if (typeof number !== 'number') {
+ return new QueryParseError(`Invalid value for integer: "${number}"`);
+ }
+ if (number < 0) {
+ return new QueryParseError(`Invalid value for positive integer: "${number}"`);
+ }
+ }
+ }
+
+ function checkQueryParseError(options, fun) {
+ const startkeyName = options.descending ? 'endkey' : 'startkey';
+ const endkeyName = options.descending ? 'startkey' : 'endkey';
+
+ if (typeof options[startkeyName] !== 'undefined' &&
+ typeof options[endkeyName] !== 'undefined' &&
+ collate(options[startkeyName], options[endkeyName]) > 0) {
+ throw new QueryParseError('No rows can match your key range, ' +
+ 'reverse your start_key and end_key or set {descending : true}');
+ } else if (fun.reduce && options.reduce !== false) {
+ if (options.include_docs) {
+ throw new QueryParseError('{include_docs:true} is invalid for reduce');
+ } else if (options.keys && options.keys.length > 1 &&
+ !options.group && !options.group_level) {
+ throw new QueryParseError('Multi-key fetches for reduce views must use ' +
+ '{group: true}');
+ }
+ }
+ ['group_level', 'limit', 'skip'].forEach(function (optionName) {
+ const error = checkPositiveInteger(options[optionName]);
+ if (error) {
+ throw error;
+ }
+ });
+ }
+
+ async function httpQuery(db, fun, opts) {
+ // List of parameters to add to the PUT request
+ let params = [];
+ let body;
+ let method = 'GET';
+ let ok;
+
+ // If opts.reduce exists and is defined, then add it to the list
+ // of parameters.
+ // If reduce=false then the results are that of only the map function
+ // not the final result of map and reduce.
+ addHttpParam('reduce', opts, params);
+ addHttpParam('include_docs', opts, params);
+ addHttpParam('attachments', opts, params);
+ addHttpParam('limit', opts, params);
+ addHttpParam('descending', opts, params);
+ addHttpParam('group', opts, params);
+ addHttpParam('group_level', opts, params);
+ addHttpParam('skip', opts, params);
+ addHttpParam('stale', opts, params);
+ addHttpParam('conflicts', opts, params);
+ addHttpParam('startkey', opts, params, true);
+ addHttpParam('start_key', opts, params, true);
+ addHttpParam('endkey', opts, params, true);
+ addHttpParam('end_key', opts, params, true);
+ addHttpParam('inclusive_end', opts, params);
+ addHttpParam('key', opts, params, true);
+ addHttpParam('update_seq', opts, params);
+
+ // Format the list of parameters into a valid URI query string
+ params = params.join('&');
+ params = params === '' ? '' : '?' + params;
+
+ // If keys are supplied, issue a POST to circumvent GET query string limits
+ // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
+ if (typeof opts.keys !== 'undefined') {
+ const MAX_URL_LENGTH = 2000;
+ // according to http://stackoverflow.com/a/417184/680742,
+ // the de facto URL length limit is 2000 characters
+
+ const keysAsString = `keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;
+ if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {
+ // If the keys are short enough, do a GET. we do this to work around
+ // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)
+ params += (params[0] === '?' ? '&' : '?') + keysAsString;
+ } else {
+ method = 'POST';
+ if (typeof fun === 'string') {
+ body = {keys: opts.keys};
+ } else { // fun is {map : mapfun}, so append to this
+ fun.keys = opts.keys;
+ }
+ }
+ }
+
+ // We are referencing a query defined in the design doc
+ if (typeof fun === 'string') {
+ const parts = parseViewName(fun);
+
+ const response = await db.fetch('_design/' + parts[0] + '/_view/' + parts[1] + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: method,
+ body: JSON.stringify(body)
+ });
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ // fail the entire request if the result contains an error
+ result.rows.forEach(function (row) {
+ /* istanbul ignore if */
+ if (row.value && row.value.error && row.value.error === "builtin_reduce_error") {
+ throw new Error(row.reason);
+ }
+ });
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // We are using a temporary view, terrible for performance, good for testing
+ body = body || {};
+ Object.keys(fun).forEach(function (key) {
+ if (Array.isArray(fun[key])) {
+ body[key] = fun[key];
+ } else {
+ body[key] = fun[key].toString();
+ }
+ });
+
+ const response = await db.fetch('_temp_view' + params, {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST',
+ body: JSON.stringify(body)
+ });
+
+ ok = response.ok;
+ // status = response.status;
+ const result = await response.json();
+ if (!ok) {
+ result.status = response.status;
+ throw generateErrorFromResponse(result);
+ }
+
+ return new Promise(function (resolve) {
+ resolve(result);
+ }).then(postprocessAttachments(opts));
+ }
+
+ // custom adapters can define their own api._query
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customQuery(db, fun, opts) {
+ return new Promise(function (resolve, reject) {
+ db._query(fun, opts, function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ // custom adapters can define their own api._viewCleanup
+ // and override the default behavior
+ /* istanbul ignore next */
+ function customViewCleanup(db) {
+ return new Promise(function (resolve, reject) {
+ db._viewCleanup(function (err, res) {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+ }
+
+ function defaultsTo(value) {
+ return function (reason) {
+ /* istanbul ignore else */
+ if (reason.status === 404) {
+ return value;
+ } else {
+ throw reason;
+ }
+ };
+ }
+
+ // returns a promise for a list of docs to update, based on the input docId.
+ // the order doesn't matter, because post-3.2.0, bulkDocs
+ // is an atomic operation in all three adapters.
+ async function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {
+ const metaDocId = '_local/doc_' + docId;
+ const defaultMetaDoc = {_id: metaDocId, keys: []};
+ const docData = docIdsToChangesAndEmits.get(docId);
+ const indexableKeysToKeyValues = docData[0];
+ const changes = docData[1];
+
+ function getMetaDoc() {
+ if (isGenOne(changes)) {
+ // generation 1, so we can safely assume initial state
+ // for performance reasons (avoids unnecessary GETs)
+ return Promise.resolve(defaultMetaDoc);
+ }
+ return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));
+ }
+
+ function getKeyValueDocs(metaDoc) {
+ if (!metaDoc.keys.length) {
+ // no keys, no need for a lookup
+ return Promise.resolve({rows: []});
+ }
+ return view.db.allDocs({
+ keys: metaDoc.keys,
+ include_docs: true
+ });
+ }
+
+ function processKeyValueDocs(metaDoc, kvDocsRes) {
+ const kvDocs = [];
+ const oldKeys = new Set();
+
+ for (let i = 0, len = kvDocsRes.rows.length; i < len; i++) {
+ const row = kvDocsRes.rows[i];
+ const doc = row.doc;
+ if (!doc) { // deleted
+ continue;
+ }
+ kvDocs.push(doc);
+ oldKeys.add(doc._id);
+ doc._deleted = !indexableKeysToKeyValues.has(doc._id);
+ if (!doc._deleted) {
+ const keyValue = indexableKeysToKeyValues.get(doc._id);
+ if ('value' in keyValue) {
+ doc.value = keyValue.value;
+ }
+ }
+ }
+ const newKeys = mapToKeysArray(indexableKeysToKeyValues);
+ newKeys.forEach(function (key) {
+ if (!oldKeys.has(key)) {
+ // new doc
+ const kvDoc = {
+ _id: key
+ };
+ const keyValue = indexableKeysToKeyValues.get(key);
+ if ('value' in keyValue) {
+ kvDoc.value = keyValue.value;
+ }
+ kvDocs.push(kvDoc);
+ }
+ });
+ metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));
+ kvDocs.push(metaDoc);
+
+ return kvDocs;
+ }
+
+ const metaDoc = await getMetaDoc();
+ const keyValueDocs = await getKeyValueDocs(metaDoc);
+ return processKeyValueDocs(metaDoc, keyValueDocs);
+ }
+
+ function updatePurgeSeq(view) {
+ // with this approach, we just assume to have processed all missing purges and write the latest
+ // purgeSeq into the _local/purgeSeq doc.
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const purgeSeq = res.purgeSeq;
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res._rev;
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return undefined;
+ }).then(function (rev) {
+ return view.db.put({
+ _id: '_local/purgeSeq',
+ _rev: rev,
+ purgeSeq,
+ });
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ });
+ }
+
+ // updates all emitted key/value docs and metaDocs in the mrview database
+ // for the given batch of documents from the source database
+ function saveKeyValues(view, docIdsToChangesAndEmits, seq) {
+ var seqDocId = '_local/lastSeq';
+ return view.db.get(seqDocId)
+ .catch(defaultsTo({_id: seqDocId, seq: 0}))
+ .then(function (lastSeqDoc) {
+ var docIds = mapToKeysArray(docIdsToChangesAndEmits);
+ return Promise.all(docIds.map(function (docId) {
+ return getDocsToPersist(docId, view, docIdsToChangesAndEmits);
+ })).then(function (listOfDocsToPersist) {
+ var docsToPersist = flatten(listOfDocsToPersist);
+ lastSeqDoc.seq = seq;
+ docsToPersist.push(lastSeqDoc);
+ // write all docs in a single operation, update the seq once
+ return view.db.bulkDocs({docs : docsToPersist});
+ })
+ // TODO: this should be placed somewhere else, probably? we're querying both docs twice
+ // (first time when getting the actual purges).
+ .then(() => updatePurgeSeq(view));
+ });
+ }
+
+ function getQueue(view) {
+ const viewName = typeof view === 'string' ? view : view.name;
+ let queue = persistentQueues[viewName];
+ if (!queue) {
+ queue = persistentQueues[viewName] = new TaskQueue();
+ }
+ return queue;
+ }
+
+ async function updateView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return updateViewInQueue(view, opts);
+ })();
+ }
+
+ async function updateViewInQueue(view, opts) {
+ // bind the emit function once
+ let mapResults;
+ let doc;
+ let taskId;
+
+ function emit(key, value) {
+ const output = {id: doc._id, key: normalizeKey(key)};
+ // Don't explicitly store the value unless it's defined and non-null.
+ // This saves on storage space, because often people don't use it.
+ if (typeof value !== 'undefined' && value !== null) {
+ output.value = normalizeKey(value);
+ }
+ mapResults.push(output);
+ }
+
+ const mapFun = mapper(view.mapFun, emit);
+
+ let currentSeq = view.seq || 0;
+
+ function createTask() {
+ return view.sourceDB.info().then(function (info) {
+ taskId = view.sourceDB.activeTasks.add({
+ name: 'view_indexing',
+ total_items: info.update_seq - currentSeq,
+ });
+ });
+ }
+
+ function processChange(docIdsToChangesAndEmits, seq) {
+ return function () {
+ return saveKeyValues(view, docIdsToChangesAndEmits, seq);
+ };
+ }
+
+ let indexed_docs = 0;
+ const progress = {
+ view: view.name,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+
+ const queue = new TaskQueue();
+
+ async function processNextBatch() {
+ const response = await view.sourceDB.changes({
+ return_docs: true,
+ conflicts: true,
+ include_docs: true,
+ style: 'all_docs',
+ since: currentSeq,
+ limit: opts.changes_batch_size
+ });
+ const purges = await getRecentPurges();
+ return processBatch(response, purges);
+ }
+
+ function getRecentPurges() {
+ return view.db.get('_local/purgeSeq').then(function (res) {
+ return res.purgeSeq;
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return -1;
+ }).then(function (purgeSeq) {
+ return view.sourceDB.get('_local/purges').then(function (res) {
+ const recentPurges = res.purges.filter(function (purge, index) {
+ return index > purgeSeq;
+ }).map((purge) => purge.docId);
+
+ const uniquePurges = recentPurges.filter(function (docId, index) {
+ return recentPurges.indexOf(docId) === index;
+ });
+
+ return Promise.all(uniquePurges.map(function (docId) {
+ return view.sourceDB.get(docId).then(function (doc) {
+ return { docId, doc };
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return { docId };
+ });
+ }));
+ }).catch(function (err) {
+ if (err && err.status !== 404) {
+ throw err;
+ }
+ return [];
+ });
+ });
+ }
+
+ function processBatch(response, purges) {
+ var results = response.results;
+ if (!results.length && !purges.length) {
+ return;
+ }
+
+ for (let purge of purges) {
+ const index = results.findIndex(function (change) {
+ return change.id === purge.docId;
+ });
+ if (index < 0) {
+ // mimic a db.remove() on the changes feed
+ const entry = {
+ _id: purge.docId,
+ doc: {
+ _id: purge.docId,
+ _deleted: 1,
+ },
+ changes: [],
+ };
+
+ if (purge.doc) {
+ // update with new winning rev after purge
+ entry.doc = purge.doc;
+ entry.changes.push({ rev: purge.doc._rev });
+ }
+
+ results.push(entry);
+ }
+ }
+
+ var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);
+
+ queue.add(processChange(docIdsToChangesAndEmits, currentSeq));
+
+ indexed_docs = indexed_docs + results.length;
+ const progress = {
+ view: view.name,
+ last_seq: response.last_seq,
+ results_count: results.length,
+ indexed_docs: indexed_docs
+ };
+ view.sourceDB.emit('indexing', progress);
+ view.sourceDB.activeTasks.update(taskId, {completed_items: indexed_docs});
+
+ if (results.length < opts.changes_batch_size) {
+ return;
+ }
+ return processNextBatch();
+ }
+
+ function createDocIdsToChangesAndEmits(results) {
+ const docIdsToChangesAndEmits = new Map();
+ for (let i = 0, len = results.length; i < len; i++) {
+ const change = results[i];
+ if (change.doc._id[0] !== '_') {
+ mapResults = [];
+ doc = change.doc;
+
+ if (!doc._deleted) {
+ tryMap(view.sourceDB, mapFun, doc);
+ }
+ mapResults.sort(sortByKeyThenValue);
+
+ const indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);
+ docIdsToChangesAndEmits.set(change.doc._id, [
+ indexableKeysToKeyValues,
+ change.changes
+ ]);
+ }
+ currentSeq = change.seq;
+ }
+ return docIdsToChangesAndEmits;
+ }
+
+ function createIndexableKeysToKeyValues(mapResults) {
+ const indexableKeysToKeyValues = new Map();
+ let lastKey;
+ for (let i = 0, len = mapResults.length; i < len; i++) {
+ const emittedKeyValue = mapResults[i];
+ const complexKey = [emittedKeyValue.key, emittedKeyValue.id];
+ if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {
+ complexKey.push(i); // dup key+id, so make it unique
+ }
+ indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);
+ lastKey = emittedKeyValue.key;
+ }
+ return indexableKeysToKeyValues;
+ }
+
+ try {
+ await createTask();
+ await processNextBatch();
+ await queue.finish();
+ view.seq = currentSeq;
+ view.sourceDB.activeTasks.remove(taskId);
+ } catch (error) {
+ view.sourceDB.activeTasks.remove(taskId, error);
+ }
+ }
+
+ function reduceView(view, results, options) {
+ if (options.group_level === 0) {
+ delete options.group_level;
+ }
+
+ const shouldGroup = options.group || options.group_level;
+
+ const reduceFun = reducer(view.reduceFun);
+
+ const groups = [];
+ const lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :
+ options.group_level;
+ results.forEach(function (e) {
+ const last = groups[groups.length - 1];
+ let groupKey = shouldGroup ? e.key : null;
+
+ // only set group_level for array keys
+ if (shouldGroup && Array.isArray(groupKey)) {
+ groupKey = groupKey.slice(0, lvl);
+ }
+
+ if (last && collate(last.groupKey, groupKey) === 0) {
+ last.keys.push([e.key, e.id]);
+ last.values.push(e.value);
+ return;
+ }
+ groups.push({
+ keys: [[e.key, e.id]],
+ values: [e.value],
+ groupKey: groupKey
+ });
+ });
+ results = [];
+ for (let i = 0, len = groups.length; i < len; i++) {
+ const e = groups[i];
+ const reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);
+ if (reduceTry.error && reduceTry.error instanceof BuiltInError) {
+ // CouchDB returns an error if a built-in errors out
+ throw reduceTry.error;
+ }
+ results.push({
+ // CouchDB just sets the value to null if a non-built-in errors out
+ value: reduceTry.error ? null : reduceTry.output,
+ key: e.groupKey
+ });
+ }
+ // no total_rows/offset when reducing
+ return {rows: sliceResults(results, options.limit, options.skip)};
+ }
+
+ function queryView(view, opts) {
+ return sequentialize(getQueue(view), function () {
+ return queryViewInQueue(view, opts);
+ })();
+ }
+
+ async function queryViewInQueue(view, opts) {
+ let totalRows;
+ const shouldReduce = view.reduceFun && opts.reduce !== false;
+ const skip = opts.skip || 0;
+ if (typeof opts.keys !== 'undefined' && !opts.keys.length) {
+ // equivalent query
+ opts.limit = 0;
+ delete opts.keys;
+ }
+
+ async function fetchFromView(viewOpts) {
+ viewOpts.include_docs = true;
+ const res = await view.db.allDocs(viewOpts);
+ totalRows = res.total_rows;
+
+ return res.rows.map(function (result) {
+ // implicit migration - in older versions of PouchDB,
+ // we explicitly stored the doc as {id: ..., key: ..., value: ...}
+ // this is tested in a migration test
+ /* istanbul ignore next */
+ if ('value' in result.doc && typeof result.doc.value === 'object' &&
+ result.doc.value !== null) {
+ const keys = Object.keys(result.doc.value).sort();
+ // this detection method is not perfect, but it's unlikely the user
+ // emitted a value which was an object with these 3 exact keys
+ const expectedKeys = ['id', 'key', 'value'];
+ if (!(keys < expectedKeys || keys > expectedKeys)) {
+ return result.doc.value;
+ }
+ }
+
+ const parsedKeyAndDocId = parseIndexableString(result.doc._id);
+ return {
+ key: parsedKeyAndDocId[0],
+ id: parsedKeyAndDocId[1],
+ value: ('value' in result.doc ? result.doc.value : null)
+ };
+ });
+ }
+
+ async function onMapResultsReady(rows) {
+ let finalResults;
+ if (shouldReduce) {
+ finalResults = reduceView(view, rows, opts);
+ } else if (typeof opts.keys === 'undefined') {
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: rows
+ };
+ } else {
+ // support limit, skip for keys query
+ finalResults = {
+ total_rows: totalRows,
+ offset: skip,
+ rows: sliceResults(rows,opts.limit,opts.skip)
+ };
+ }
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ finalResults.update_seq = view.seq;
+ }
+ if (opts.include_docs) {
+ const docIds = uniq(rows.map(rowToDocId));
+
+ const allDocsRes = await view.sourceDB.allDocs({
+ keys: docIds,
+ include_docs: true,
+ conflicts: opts.conflicts,
+ attachments: opts.attachments,
+ binary: opts.binary
+ });
+ var docIdsToDocs = new Map();
+ allDocsRes.rows.forEach(function (row) {
+ docIdsToDocs.set(row.id, row.doc);
+ });
+ rows.forEach(function (row) {
+ var docId = rowToDocId(row);
+ var doc = docIdsToDocs.get(docId);
+ if (doc) {
+ row.doc = doc;
+ }
+ });
+ return finalResults;
+ } else {
+ return finalResults;
+ }
+ }
+
+ if (typeof opts.keys !== 'undefined') {
+ const keys = opts.keys;
+ const fetchPromises = keys.map(function (key) {
+ const viewOpts = {
+ startkey : toIndexableString([key]),
+ endkey : toIndexableString([key, {}])
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ return fetchFromView(viewOpts);
+ });
+ const result = await Promise.all(fetchPromises);
+ const flattenedResult = flatten(result);
+ return onMapResultsReady(flattenedResult);
+ } else { // normal query, no 'keys'
+ const viewOpts = {
+ descending : opts.descending
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ viewOpts.update_seq = true;
+ }
+ let startkey;
+ let endkey;
+ if ('start_key' in opts) {
+ startkey = opts.start_key;
+ }
+ if ('startkey' in opts) {
+ startkey = opts.startkey;
+ }
+ if ('end_key' in opts) {
+ endkey = opts.end_key;
+ }
+ if ('endkey' in opts) {
+ endkey = opts.endkey;
+ }
+ if (typeof startkey !== 'undefined') {
+ viewOpts.startkey = opts.descending ?
+ toIndexableString([startkey, {}]) :
+ toIndexableString([startkey]);
+ }
+ if (typeof endkey !== 'undefined') {
+ let inclusiveEnd = opts.inclusive_end !== false;
+ if (opts.descending) {
+ inclusiveEnd = !inclusiveEnd;
+ }
+
+ viewOpts.endkey = toIndexableString(
+ inclusiveEnd ? [endkey, {}] : [endkey]);
+ }
+ if (typeof opts.key !== 'undefined') {
+ const keyStart = toIndexableString([opts.key]);
+ const keyEnd = toIndexableString([opts.key, {}]);
+ if (viewOpts.descending) {
+ viewOpts.endkey = keyStart;
+ viewOpts.startkey = keyEnd;
+ } else {
+ viewOpts.startkey = keyStart;
+ viewOpts.endkey = keyEnd;
+ }
+ }
+ if (!shouldReduce) {
+ if (typeof opts.limit === 'number') {
+ viewOpts.limit = opts.limit;
+ }
+ viewOpts.skip = skip;
+ }
+
+ const result = await fetchFromView(viewOpts);
+ return onMapResultsReady(result);
+ }
+ }
+
+ async function httpViewCleanup(db) {
+ const response = await db.fetch('_view_cleanup', {
+ headers: new Headers({'Content-Type': 'application/json'}),
+ method: 'POST'
+ });
+ return response.json();
+ }
+
+ async function localViewCleanup(db) {
+ try {
+ const metaDoc = await db.get('_local/' + localDocName);
+ const docsToViews = new Map();
+
+ Object.keys(metaDoc.views).forEach(function (fullViewName) {
+ const parts = parseViewName(fullViewName);
+ const designDocName = '_design/' + parts[0];
+ const viewName = parts[1];
+ let views = docsToViews.get(designDocName);
+ if (!views) {
+ views = new Set();
+ docsToViews.set(designDocName, views);
+ }
+ views.add(viewName);
+ });
+ const opts = {
+ keys : mapToKeysArray(docsToViews),
+ include_docs : true
+ };
+
+ const res = await db.allDocs(opts);
+ const viewsToStatus = {};
+ res.rows.forEach(function (row) {
+ const ddocName = row.key.substring(8); // cuts off '_design/'
+ docsToViews.get(row.key).forEach(function (viewName) {
+ let fullViewName = ddocName + '/' + viewName;
+ /* istanbul ignore if */
+ if (!metaDoc.views[fullViewName]) {
+ // new format, without slashes, to support PouchDB 2.2.0
+ // migration test in pouchdb's browser.migration.js verifies this
+ fullViewName = viewName;
+ }
+ const viewDBNames = Object.keys(metaDoc.views[fullViewName]);
+ // design doc deleted, or view function nonexistent
+ const statusIsGood = row.doc && row.doc.views &&
+ row.doc.views[viewName];
+ viewDBNames.forEach(function (viewDBName) {
+ viewsToStatus[viewDBName] =
+ viewsToStatus[viewDBName] || statusIsGood;
+ });
+ });
+ });
+
+ const dbsToDelete = Object.keys(viewsToStatus)
+ .filter(function (viewDBName) { return !viewsToStatus[viewDBName]; });
+
+ const destroyPromises = dbsToDelete.map(function (viewDBName) {
+ return sequentialize(getQueue(viewDBName), function () {
+ return new db.constructor(viewDBName, db.__opts).destroy();
+ })();
+ });
+
+ return Promise.all(destroyPromises).then(function () {
+ return {ok: true};
+ });
+ } catch (err) {
+ if (err.status === 404) {
+ return {ok: true};
+ } else {
+ throw err;
+ }
+ }
+ }
+
+ async function queryPromised(db, fun, opts) {
+ /* istanbul ignore next */
+ if (typeof db._query === 'function') {
+ return customQuery(db, fun, opts);
+ }
+ if (isRemote(db)) {
+ return httpQuery(db, fun, opts);
+ }
+
+ const updateViewOpts = {
+ changes_batch_size: db.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE
+ };
+
+ if (typeof fun !== 'string') {
+ // temp_view
+ checkQueryParseError(opts, fun);
+
+ tempViewQueue.add(async function () {
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ 'temp_view/temp_view',
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ true,
+ /* localDocName */ localDocName);
+
+ return fin(updateView(view, updateViewOpts).then(
+ function () { return queryView(view, opts); }),
+ function () { return view.db.destroy(); }
+ );
+ });
+ return tempViewQueue.finish();
+ } else {
+ // persistent view
+ const fullViewName = fun;
+ const parts = parseViewName(fullViewName);
+ const designDocName = parts[0];
+ const viewName = parts[1];
+
+ const doc = await db.get('_design/' + designDocName);
+ fun = doc.views && doc.views[viewName];
+
+ if (!fun) {
+ // basic validator; it's assumed that every subclass would want this
+ throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);
+ }
+
+ ddocValidator(doc, viewName);
+ checkQueryParseError(opts, fun);
+
+ const view = await createView(
+ /* sourceDB */ db,
+ /* viewName */ fullViewName,
+ /* mapFun */ fun.map,
+ /* reduceFun */ fun.reduce,
+ /* temporary */ false,
+ /* localDocName */ localDocName);
+
+ if (opts.stale === 'ok' || opts.stale === 'update_after') {
+ if (opts.stale === 'update_after') {
+ nextTick(function () {
+ updateView(view, updateViewOpts);
+ });
+ }
+ return queryView(view, opts);
+ } else { // stale not ok
+ await updateView(view, updateViewOpts);
+ return queryView(view, opts);
+ }
+ }
+ }
+
+ function abstractQuery(fun, opts, callback) {
+ const db = this;
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts = opts ? coerceOptions(opts) : {};
+
+ if (typeof fun === 'function') {
+ fun = {map : fun};
+ }
+
+ const promise = Promise.resolve().then(function () {
+ return queryPromised(db, fun, opts);
+ });
+ promisedCallback(promise, callback);
+ return promise;
+ }
+
+ const abstractViewCleanup = callbackify(function () {
+ const db = this;
+ /* istanbul ignore next */
+ if (typeof db._viewCleanup === 'function') {
+ return customViewCleanup(db);
+ }
+ if (isRemote(db)) {
+ return httpViewCleanup(db);
+ }
+ return localViewCleanup(db);
+ });
+
+ return {
+ query: abstractQuery,
+ viewCleanup: abstractViewCleanup
+ };
+}
+
+export { createAbstractMapReduce as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-http.js b/packages/pouchdb-platform/lib/pouchdb-adapter-http.js
new file mode 100644
index 0000000000..487c5a038a
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-http.js
@@ -0,0 +1,1127 @@
+// // 'use strict'; is default when ESM
+
+// import pool from './promise-pool';
+// import {toBase64} from 'pouchdb-crypto';
+// import { fetch, Headers, AbortController } from 'pouchdb-fetch';
+
+// import {
+// createError,
+// BAD_ARG,
+// generateErrorFromResponse
+// } from 'pouchdb-errors';
+
+// import {
+// pick,
+// filterChange,
+// adapterFun as coreAdapterFun,
+// explainError,
+// clone,
+// parseUri,
+// bulkGetShim,
+// flatten,
+// nextTick
+// } from 'pouchdb-utils';
+
+// import {
+// binaryStringToBlobOrBuffer as binStringToBuffer,
+// base64StringToBlobOrBuffer as b64StringToBuffer,
+// blobOrBufferToBase64 as blufferToBase64
+// } from 'pouchdb-binary-utils';
+
+// const CHANGES_BATCH_SIZE = 25;
+// const MAX_SIMULTANEOUS_REVS = 50;
+// const CHANGES_TIMEOUT_BUFFER = 5000;
+// const DEFAULT_HEARTBEAT = 10000;
+
+// const supportsBulkGetMap = {};
+
+// function readAttachmentsAsBlobOrBuffer(row) {
+// const doc = row.doc || row.ok;
+// const atts = doc && doc._attachments;
+// if (!atts) {
+// return;
+// }
+// Object.keys(atts).forEach(function (filename) {
+// const att = atts[filename];
+// att.data = b64StringToBuffer(att.data, att.content_type);
+// });
+// }
+
+// function encodeDocId(id) {
+// if (/^_design/.test(id)) {
+// return '_design/' + encodeURIComponent(id.slice(8));
+// }
+// if (id.startsWith('_local/')) {
+// return '_local/' + encodeURIComponent(id.slice(7));
+// }
+// return encodeURIComponent(id);
+// }
+
+// function preprocessAttachments(doc) {
+// if (!doc._attachments || !Object.keys(doc._attachments)) {
+// return Promise.resolve();
+// }
+
+// return Promise.all(Object.keys(doc._attachments).map(function (key) {
+// const attachment = doc._attachments[key];
+// if (attachment.data && typeof attachment.data !== 'string') {
+// return new Promise(function (resolve) {
+// blufferToBase64(attachment.data, resolve);
+// }).then(function (b64) {
+// attachment.data = b64;
+// });
+// }
+// }));
+// }
+
+// function hasUrlPrefix(opts) {
+// if (!opts.prefix) {
+// return false;
+// }
+// const protocol = parseUri(opts.prefix).protocol;
+// return protocol === 'http' || protocol === 'https';
+// }
+
+// // Get all the information you possibly can about the URI given by name and
+// // return it as a suitable object.
+// function getHost(name, opts) {
+// // encode db name if opts.prefix is a url (#5574)
+// if (hasUrlPrefix(opts)) {
+// const dbName = opts.name.substr(opts.prefix.length);
+// // Ensure prefix has a trailing slash
+// const prefix = opts.prefix.replace(/\/?$/, '/');
+// name = prefix + encodeURIComponent(dbName);
+// }
+
+// const uri = parseUri(name);
+// if (uri.user || uri.password) {
+// uri.auth = {username: uri.user, password: uri.password};
+// }
+
+// // Split the path part of the URI into parts using '/' as the delimiter
+// // after removing any leading '/' and any trailing '/'
+// const parts = uri.path.replace(/(^\/|\/$)/g, '').split('/');
+
+// uri.db = parts.pop();
+// // Prevent double encoding of URI component
+// if (uri.db.indexOf('%') === -1) {
+// uri.db = encodeURIComponent(uri.db);
+// }
+
+// uri.path = parts.join('/');
+
+// return uri;
+// }
+
+// // Generate a URL with the host data given by opts and the given path
+// function genDBUrl(opts, path) {
+// return new URL({...opts, pathname: opts.db + '/' + path });
+// }
+
+// function paramsToStr(params) {
+// const paramKeys = Object.keys(params);
+// if (paramKeys.length === 0) {
+// return '';
+// }
+
+// return '?' + paramKeys.map(key => key + '=' + encodeURIComponent(params[key])).join('&');
+// }
+
+// function shouldCacheBust(opts) {
+// const ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?
+// navigator.userAgent.toLowerCase() : '';
+// const isIE = ua.indexOf('msie') !== -1;
+// const isTrident = ua.indexOf('trident') !== -1;
+// const isEdge = ua.indexOf('edge') !== -1;
+// const isGET = !('method' in opts) || opts.method === 'GET';
+// return (isIE || isTrident || isEdge) && isGET;
+// }
+
+// // Implements the PouchDB API for dealing with CouchDB instances over HTTP
+// function HttpPouch(opts, callback) {
+
+// // The functions that will be publicly available for HttpPouch
+// const api = this;
+
+// const host = getHost(opts.name, opts);
+// const dbUrl = genDBUrl(host, '');
+
+// opts = clone(opts);
+
+// const ourFetch = async function (url, options) {
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// options.credentials = 'include';
+
+// if (opts.auth || host.auth) {
+// const nAuth = opts.auth || host.auth;
+// const str = nAuth.username + ':' + nAuth.password;
+
+// const token = await toBase64(str);
+// //btoa(unescape(encodeURIComponent(str)));
+// options.headers.set('Authorization', 'Basic ' + token);
+// }
+
+// const headers = opts.headers || {};
+// Object.keys(headers).forEach(function (key) {
+// options.headers.append(key, headers[key]);
+// });
+
+// /* istanbul ignore if */
+// if (shouldCacheBust(options)) {
+// url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();
+// }
+
+// const fetchFun = opts.fetch || fetch;
+// return await fetchFun(url, options);
+// };
+
+// function adapterFun(name, fun) {
+// return (function (...args) {
+// setup().then(function () {
+// return fun.apply(this, args);
+// }).catch((e)=>args.pop()(e));
+// }).bind(api);
+// }
+
+// async function fetchJSON(url, options) {
+
+// const result = {};
+
+// options = options || {};
+// options.headers = options.headers || new Headers();
+
+// if (!options.headers.get('Content-Type')) {
+// options.headers.set('Content-Type', 'application/json');
+// }
+// if (!options.headers.get('Accept')) {
+// options.headers.set('Accept', 'application/json');
+// }
+
+// const response = await ourFetch(url, options);
+// result.ok = response.ok;
+// result.status = response.status;
+// const json = await response.json();
+
+// result.data = json;
+// if (!result.ok) {
+// result.data.status = result.status;
+// const err = generateErrorFromResponse(result.data);
+// throw err;
+// }
+
+// if (Array.isArray(result.data)) {
+// result.data = result.data.map(function (v) {
+// if (v.error || v.missing) {
+// return generateErrorFromResponse(v);
+// } else {
+// return v;
+// }
+// });
+// }
+
+// return result;
+// }
+
+// let setupPromise;
+
+// async function setup() {
+// if (opts.skip_setup) {
+// return Promise.resolve();
+// }
+
+// // If there is a setup in process or previous successful setup
+// // done then we will use that
+// // If previous setups have been rejected we will try again
+// if (setupPromise) {
+// return setupPromise;
+// }
+
+// setupPromise = fetchJSON(dbUrl).catch(function (err) {
+// if (err && err.status && err.status === 404) {
+// // Doesnt exist, create it
+// explainError(404, 'PouchDB is just detecting if the remote exists.');
+// return fetchJSON(dbUrl, {method: 'PUT'});
+// } else {
+// return Promise.reject(err);
+// }
+// }).catch(function (err) {
+// // If we try to create a database that already exists, skipped in
+// // istanbul since its catching a race condition.
+// /* istanbul ignore if */
+// if (err && err.status && err.status === 412) {
+// return true;
+// }
+// return Promise.reject(err);
+// });
+
+// setupPromise.catch(function () {
+// setupPromise = null;
+// });
+
+// return setupPromise;
+// }
+
+// nextTick(function () {
+// callback(null, api);
+// });
+
+// api._remote = true;
+
+// /* istanbul ignore next */
+// api.type = function () {
+// return 'http';
+// };
+
+// api.id = adapterFun('id', async function (callback) {
+// let result;
+// try {
+// const response = await ourFetch(new URL(host));
+// result = await response.json();
+// } catch (err) {
+// result = {};
+// }
+
+// // Bad response or missing `uuid` should not prevent ID generation.
+// const uuid = (result && result.uuid) ? (result.uuid + host.db) : genDBUrl(host, '');
+// callback(null, uuid);
+// });
+
+// // Sends a POST request to the host calling the couchdb _compact function
+// // version: The version of CouchDB it is running
+// api.compact = adapterFun('compact', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// await fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'});
+
+// function ping() {
+// api.info(function (err, res) {
+// // CouchDB may send a "compact_running:true" if it's
+// // already compacting. PouchDB Server doesn't.
+// /* istanbul ignore else */
+// if (res && !res.compact_running) {
+// callback(null, {ok: true});
+// } else {
+// setTimeout(ping, opts.interval || 200);
+// }
+// });
+// }
+// // Ping the http if it's finished compaction
+// ping();
+// });
+
+// api.bulkGet = coreAdapterFun('bulkGet', function (opts, callback) {
+// const self = this;
+
+// async function doBulkGet(cb) {
+// const params = {};
+// if (opts.revs) {
+// params.revs = true;
+// }
+// if (opts.attachments) {
+// /* istanbul ignore next */
+// params.attachments = true;
+// }
+// if (opts.latest) {
+// params.latest = true;
+// }
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {
+// method: 'POST',
+// body: JSON.stringify({ docs: opts.docs})
+// });
+
+// if (opts.attachments && opts.binary) {
+// result.data.results.forEach(function (res) {
+// res.docs.forEach(readAttachmentsAsBlobOrBuffer);
+// });
+// }
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// }
+
+// /* istanbul ignore next */
+// function doBulkGetShim() {
+// // avoid "url too long error" by splitting up into multiple requests
+// const batchSize = MAX_SIMULTANEOUS_REVS;
+// const numBatches = Math.ceil(opts.docs.length / batchSize);
+// let numDone = 0;
+// const results = new Array(numBatches);
+
+// function onResult(batchNum) {
+// return function (err, res) {
+// // err is impossible because shim returns a list of errs in that case
+// results[batchNum] = res.results;
+// if (++numDone === numBatches) {
+// callback(null, {results: flatten(results)});
+// }
+// };
+// }
+
+// for (let i = 0; i < numBatches; i++) {
+// const subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);
+// subOpts.docs = opts.docs.slice(i * batchSize,
+// Math.min(opts.docs.length, (i + 1) * batchSize));
+// bulkGetShim(self, subOpts, onResult(i));
+// }
+// }
+
+// // mark the whole database as either supporting or not supporting _bulk_get
+// const dbUrl = new URL(host);
+// const supportsBulkGet = supportsBulkGetMap[dbUrl];
+
+// /* istanbul ignore next */
+// if (typeof supportsBulkGet !== 'boolean') {
+// // check if this database supports _bulk_get
+// doBulkGet(function (err, res) {
+// if (err) {
+// supportsBulkGetMap[dbUrl] = false;
+// explainError(
+// err.status,
+// 'PouchDB is just detecting if the remote ' +
+// 'supports the _bulk_get API.'
+// );
+// doBulkGetShim();
+// } else {
+// supportsBulkGetMap[dbUrl] = true;
+// callback(null, res);
+// }
+// });
+// } else if (supportsBulkGet) {
+// doBulkGet(callback);
+// } else {
+// doBulkGetShim();
+// }
+// });
+
+// // Calls GET on the host, which gets back a JSON string containing
+// // couchdb: A welcome string
+// // version: The version of CouchDB it is running
+// api._info = async function (callback) {
+// try {
+// await setup();
+// const response = await ourFetch(genDBUrl(host, ''));
+// const info = await response.json();
+// info.host = genDBUrl(host, '');
+// callback(null, info);
+// } catch (err) {
+// callback(err);
+// }
+// };
+
+// api.fetch = async function (path, options) {
+// await setup();
+// const url = path.substring(0, 1) === '/' ?
+// new URL(path.substring(1), new URL(host)) :
+// genDBUrl(host, path);
+// return ourFetch(url, options);
+// };
+
+// // Get the document with the given id from the database given by host.
+// // The id could be solely the _id in the database, or it may be a
+// // _design/ID or _local/ID path
+// api.get = adapterFun('get', async function (id, opts, callback) {
+// // If no options were given, set the callback to the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+
+// if (opts.revs) {
+// params.revs = true;
+// }
+
+// if (opts.revs_info) {
+// params.revs_info = true;
+// }
+
+// if (opts.latest) {
+// params.latest = true;
+// }
+
+// if (opts.open_revs) {
+// if (opts.open_revs !== "all") {
+// opts.open_revs = JSON.stringify(opts.open_revs);
+// }
+// params.open_revs = opts.open_revs;
+// }
+
+// if (opts.rev) {
+// params.rev = opts.rev;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = opts.conflicts;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = opts.update_seq;
+// }
+
+// id = encodeDocId(id);
+
+// function fetchAttachments(doc) {
+// const atts = doc._attachments;
+// const filenames = atts && Object.keys(atts);
+// if (!atts || !filenames.length) {
+// return;
+// }
+// // we fetch these manually in separate XHRs, because
+// // Sync Gateway would normally send it back as multipart/mixed,
+// // which we cannot parse. Also, this is more efficient than
+// // receiving attachments as base64-encoded strings.
+// async function fetchData(filename) {
+// const att = atts[filename];
+// const path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +
+// '?rev=' + doc._rev;
+
+// const response = await ourFetch(genDBUrl(host, path));
+
+// let blob;
+// if ('buffer' in response) {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// let data;
+// if (opts.binary) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = att.content_type;
+// }
+// data = blob;
+// } else {
+// data = await toBase64(blob);
+// // await new Promise(function (resolve) {
+// // blufferToBase64(blob, resolve);
+// // });
+// }
+
+// delete att.stub;
+// delete att.length;
+// att.data = data;
+// }
+
+// const promiseFactories = filenames.map(function (filename) {
+// return function () {
+// return fetchData(filename);
+// };
+// });
+
+// // This limits the number of parallel xhr requests to 5 any time
+// // to avoid issues with maximum browser request limits
+// return pool(promiseFactories, 5);
+// }
+
+// function fetchAllAttachments(docOrDocs) {
+// if (Array.isArray(docOrDocs)) {
+// return Promise.all(docOrDocs.map(function (doc) {
+// if (doc.ok) {
+// return fetchAttachments(doc.ok);
+// }
+// }));
+// }
+// return fetchAttachments(docOrDocs);
+// }
+
+// const url = genDBUrl(host, id + paramsToStr(params));
+// try {
+// const res = await fetchJSON(url);
+// if (opts.attachments) {
+// await fetchAllAttachments(res.data);
+// }
+// callback(null, res.data);
+// } catch (error) {
+// error.docId = id;
+// callback(error);
+// }
+// });
+
+
+// // Delete the document given by doc from the database given by host.
+// api.remove = adapterFun('remove', async function (docOrId, optsOrRev, opts, cb) {
+// let doc;
+// if (typeof optsOrRev === 'string') {
+// // id, rev, opts, callback style
+// doc = {
+// _id: docOrId,
+// _rev: optsOrRev
+// };
+// if (typeof opts === 'function') {
+// cb = opts;
+// opts = {};
+// }
+// } else {
+// // doc, opts, callback style
+// doc = docOrId;
+// if (typeof optsOrRev === 'function') {
+// cb = optsOrRev;
+// opts = {};
+// } else {
+// cb = opts;
+// opts = optsOrRev;
+// }
+// }
+
+// const rev = (doc._rev || opts.rev);
+// const url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// cb(null, result.data);
+// } catch (error) {
+// cb(error);
+// }
+// });
+
+// function encodeAttachmentId(attachmentId) {
+// return attachmentId.split("/").map(encodeURIComponent).join("/");
+// }
+
+// // Get the attachment
+// api.getAttachment = adapterFun('getAttachment', async function (docId, attachmentId,
+// opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// const params = opts.rev ? ('?rev=' + opts.rev) : '';
+// const url = genDBUrl(host, encodeDocId(docId)) + '/' +
+// encodeAttachmentId(attachmentId) + params;
+// let contentType;
+// try {
+// const response = await ourFetch(url, {method: 'GET'});
+
+// if (!response.ok) {
+// throw response;
+// }
+
+// contentType = response.headers.get('content-type');
+// let blob;
+// if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') {
+// blob = await response.buffer();
+// } else {
+// /* istanbul ignore next */
+// blob = await response.blob();
+// }
+
+// // TODO: also remove
+// if (typeof process !== 'undefined' && !process.browser) {
+// const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type');
+// if (!typeFieldDescriptor || typeFieldDescriptor.set) {
+// blob.type = contentType;
+// }
+// }
+// callback(null, blob);
+// } catch (err) {
+// callback(err);
+// }
+// });
+
+// // Remove the attachment given by the id and rev
+// api.removeAttachment = adapterFun('removeAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// callback,
+// ) {
+// const url = genDBUrl(host, encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId)) + '?rev=' + rev;
+
+// try {
+// const result = await fetchJSON(url, {method: 'DELETE'});
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Add the attachment given by blob and its contentType property
+// // to the document with the given id, the revision given by rev, and
+// // add it to the database given by host.
+// api.putAttachment = adapterFun('putAttachment', async function (
+// docId,
+// attachmentId,
+// rev,
+// blob,
+// type,
+// callback,
+// ) {
+// if (typeof type === 'function') {
+// callback = type;
+// type = blob;
+// blob = rev;
+// rev = null;
+// }
+// const id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);
+// let url = genDBUrl(host, id);
+// if (rev) {
+// url += '?rev=' + rev;
+// }
+
+// if (typeof blob === 'string') {
+// // input is assumed to be a base64 string
+// let binary;
+// try {
+// binary = atob(blob);
+// } catch (err) {
+// return callback(createError(BAD_ARG,
+// 'Attachment is not a valid base64 string'));
+// }
+// blob = binary ? binStringToBuffer(binary, type) : '';
+// }
+
+// try {
+// // Add the attachment
+// const result = await fetchJSON(url, {
+// headers: new Headers({'Content-Type': type}),
+// method: 'PUT',
+// body: blob
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Update/create multiple documents given by req in the database
+// // given by host.
+// api._bulkDocs = async function (req, opts, callback) {
+// // If new_edits=false then it prevents the database from creating
+// // new revision numbers for the documents. Instead it just uses
+// // the old ones. This is used in database replication.
+// req.new_edits = opts.new_edits;
+
+// try {
+// await setup();
+// await Promise.all(req.docs.map(preprocessAttachments));
+
+// // Update/create the documents
+// const result = await fetchJSON(genDBUrl(host, '_bulk_docs'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // Update/create document
+// api._put = async function (doc, opts, callback) {
+// try {
+// await setup();
+// await preprocessAttachments(doc);
+
+// const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
+// method: 'PUT',
+// body: JSON.stringify(doc)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// error.docId = doc && doc._id;
+// callback(error);
+// }
+// };
+
+
+// // Get a listing of the documents in the database given
+// // by host and ordered by increasing id.
+// api.allDocs = adapterFun('allDocs', async function (opts, callback) {
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+// opts = clone(opts);
+
+// // List of parameters to add to the GET request
+// const params = {};
+// let body;
+// let method = 'GET';
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// if (opts.include_docs) {
+// params.include_docs = true;
+// }
+
+// // added in CouchDB 1.6.0
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.key) {
+// params.key = JSON.stringify(opts.key);
+// }
+
+// if (opts.start_key) {
+// opts.startkey = opts.start_key;
+// }
+
+// if (opts.startkey) {
+// params.startkey = JSON.stringify(opts.startkey);
+// }
+
+// if (opts.end_key) {
+// opts.endkey = opts.end_key;
+// }
+
+// if (opts.endkey) {
+// params.endkey = JSON.stringify(opts.endkey);
+// }
+
+// if (typeof opts.inclusive_end !== 'undefined') {
+// params.inclusive_end = !!opts.inclusive_end;
+// }
+
+// if (typeof opts.limit !== 'undefined') {
+// params.limit = opts.limit;
+// }
+
+// if (typeof opts.skip !== 'undefined') {
+// params.skip = opts.skip;
+// }
+
+// const paramStr = paramsToStr(params);
+
+// if (typeof opts.keys !== 'undefined') {
+// method = 'POST';
+// body = {keys: opts.keys};
+// }
+
+// try {
+// const result = await fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {
+// method: method,
+// body: JSON.stringify(body)
+// });
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
+// }
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// // Get a list of changes made to documents in the database given by host.
+// // TODO According to the README, there should be two other methods here,
+// // api.changes.addListener and api.changes.removeListener.
+// api._changes = function (opts) {
+
+// // We internally page the results of a changes request, this means
+// // if there is a large set of changes to be returned we can start
+// // processing them quicker instead of waiting on the entire
+// // set of changes to return and attempting to process them at once
+// const batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;
+
+// opts = clone(opts);
+
+// if (opts.continuous && !('heartbeat' in opts)) {
+// opts.heartbeat = DEFAULT_HEARTBEAT;
+// }
+
+// let requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;
+
+// // ensure CHANGES_TIMEOUT_BUFFER applies
+// if ('timeout' in opts && opts.timeout &&
+// (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// /* istanbul ignore if */
+// if ('heartbeat' in opts && opts.heartbeat &&
+// (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {
+// requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;
+// }
+
+// const params = {};
+// if ('timeout' in opts && opts.timeout) {
+// params.timeout = opts.timeout;
+// }
+
+// const limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;
+// let leftToFetch = limit;
+
+// if (opts.style) {
+// params.style = opts.style;
+// }
+
+// if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {
+// params.include_docs = true;
+// }
+
+// if (opts.attachments) {
+// params.attachments = true;
+// }
+
+// if (opts.continuous) {
+// params.feed = 'longpoll';
+// }
+
+// if (opts.seq_interval) {
+// params.seq_interval = opts.seq_interval;
+// }
+
+// if (opts.conflicts) {
+// params.conflicts = true;
+// }
+
+// if (opts.descending) {
+// params.descending = true;
+// }
+
+// /* istanbul ignore if */
+// if (opts.update_seq) {
+// params.update_seq = true;
+// }
+
+// if ('heartbeat' in opts) {
+// // If the heartbeat value is false, it disables the default heartbeat
+// if (opts.heartbeat) {
+// params.heartbeat = opts.heartbeat;
+// }
+// }
+
+// if (opts.filter && typeof opts.filter === 'string') {
+// params.filter = opts.filter;
+// }
+
+// if (opts.view && typeof opts.view === 'string') {
+// params.filter = '_view';
+// params.view = opts.view;
+// }
+
+// // If opts.query_params exists, pass it through to the changes request.
+// // These parameters may be used by the filter on the source database.
+// if (opts.query_params && typeof opts.query_params === 'object') {
+// for (const param_name in opts.query_params) {
+// /* istanbul ignore else */
+// if (Object.prototype.hasOwnProperty.call(opts.query_params, param_name)) {
+// params[param_name] = opts.query_params[param_name];
+// }
+// }
+// }
+
+// let method = 'GET';
+// let body;
+
+// if (opts.doc_ids) {
+// // set this automagically for the user; it's annoying that couchdb
+// // requires both a "filter" and a "doc_ids" param.
+// params.filter = '_doc_ids';
+// method = 'POST';
+// body = {doc_ids: opts.doc_ids };
+// }
+// /* istanbul ignore next */
+// else if (opts.selector) {
+// // set this automagically for the user, similar to above
+// params.filter = '_selector';
+// method = 'POST';
+// body = {selector: opts.selector };
+// }
+
+// const controller = new AbortController();
+// let lastFetchedSeq;
+
+// // Get all the changes starting wtih the one immediately after the
+// // sequence number given by since.
+// const fetchData = async function (since, callback) {
+// if (opts.aborted) {
+// return;
+// }
+// params.since = since;
+// // "since" can be any kind of json object in Cloudant/CouchDB 2.x
+// /* istanbul ignore next */
+// if (typeof params.since === "object") {
+// params.since = JSON.stringify(params.since);
+// }
+
+// if (opts.descending) {
+// if (limit) {
+// params.limit = leftToFetch;
+// }
+// } else {
+// params.limit = (!limit || leftToFetch > batchSize) ?
+// batchSize : leftToFetch;
+// }
+
+// // Set the options for the ajax call
+// const url = genDBUrl(host, '_changes' + paramsToStr(params));
+// const fetchOpts = {
+// signal: controller.signal,
+// method: method,
+// body: JSON.stringify(body)
+// };
+// lastFetchedSeq = since;
+
+// /* istanbul ignore if */
+// if (opts.aborted) {
+// return;
+// }
+
+// // Get the changes
+// try {
+// await setup();
+// const result = await fetchJSON(url, fetchOpts);
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// };
+
+// // If opts.since exists, get all the changes from the sequence
+// // number given by opts.since. Otherwise, get all the changes
+// // from the sequence number 0.
+// const results = {results: []};
+
+// const fetched = function (err, res) {
+// if (opts.aborted) {
+// return;
+// }
+// let raw_results_length = 0;
+// // If the result of the ajax call (res) contains changes (res.results)
+// if (res && res.results) {
+// raw_results_length = res.results.length;
+// results.last_seq = res.last_seq;
+// let pending = null;
+// let lastSeq = null;
+// // Attach 'pending' property if server supports it (CouchDB 2.0+)
+// /* istanbul ignore if */
+// if (typeof res.pending === 'number') {
+// pending = res.pending;
+// }
+// if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {
+// lastSeq = results.last_seq;
+// }
+// // For each change
+// const req = {};
+// req.query = opts.query_params;
+// res.results = res.results.filter(function (c) {
+// leftToFetch--;
+// const ret = filterChange(opts)(c);
+// if (ret) {
+// if (opts.include_docs && opts.attachments && opts.binary) {
+// readAttachmentsAsBlobOrBuffer(c);
+// }
+// if (opts.return_docs) {
+// results.results.push(c);
+// }
+// opts.onChange(c, pending, lastSeq);
+// }
+// return ret;
+// });
+// } else if (err) {
+// // In case of an error, stop listening for changes and call
+// // opts.complete
+// opts.aborted = true;
+// opts.complete(err);
+// return;
+// }
+
+// // The changes feed may have timed out with no results
+// // if so reuse last update sequence
+// if (res && res.last_seq) {
+// lastFetchedSeq = res.last_seq;
+// }
+
+// const finished = (limit && leftToFetch <= 0) ||
+// (res && raw_results_length < batchSize) ||
+// (opts.descending);
+
+// if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {
+// // Queue a call to fetch again with the newest sequence number
+// nextTick(function () { fetchData(lastFetchedSeq, fetched); });
+// } else {
+// // We're done, call the callback
+// opts.complete(null, results);
+// }
+// };
+
+// fetchData(opts.since || 0, fetched);
+
+// // Return a method to cancel this method from processing any more
+// return {
+// cancel: function () {
+// opts.aborted = true;
+// controller.abort();
+// }
+// };
+// };
+
+// // Given a set of document/revision IDs (given by req), tets the subset of
+// // those that do NOT correspond to revisions stored in the database.
+// // See http://wiki.apache.org/couchdb/HttpPostRevsDiff
+// api.revsDiff = adapterFun('revsDiff', async function (req, opts, callback) {
+// // If no options were given, set the callback to be the second parameter
+// if (typeof opts === 'function') {
+// callback = opts;
+// opts = {};
+// }
+
+// try {
+// // Get the missing document/revision IDs
+// const result = await fetchJSON(genDBUrl(host, '_revs_diff'), {
+// method: 'POST',
+// body: JSON.stringify(req)
+// });
+// callback(null, result.data);
+// } catch (error) {
+// callback(error);
+// }
+// });
+
+// api._close = function (callback) {
+// callback();
+// };
+
+// api._destroy = async function (options, callback) {
+// try {
+// const json = await fetchJSON(genDBUrl(host, ''), {method: 'DELETE'});
+// callback(null, json);
+// } catch (error) {
+// if (error.status === 404) {
+// callback(null, {ok: true});
+// } else {
+// callback(error);
+// }
+// }
+// };
+// }
+
+// // HttpPouch is a valid adapter.
+// HttpPouch.valid = function () {
+// return true;
+// };
+
+// export default function (PouchDB) {
+// PouchDB.adapter('http', HttpPouch, false);
+// PouchDB.adapter('https', HttpPouch, false);
+// }
+var index = {};
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-idb.js b/packages/pouchdb-platform/lib/pouchdb-adapter-idb.js
new file mode 100644
index 0000000000..36bafeeee8
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-idb.js
@@ -0,0 +1,2015 @@
+import { pick, changesHandler as changesHandler$1, nextTick, clone, uuid, filterChange, toPromise, hasLocalStorage, guardedConsole } from 'pouchdb-utils';
+import { compactTree, collectConflicts, isDeleted, latest, traverseRevTree, isLocalId as isLocalId$1, winningRev } from 'pouchdb-merge';
+import { createError, IDB_ERROR, MISSING_STUB, MISSING_DOC, REV_CONFLICT } from 'pouchdb-errors';
+import { isLocalId, parseDoc, preprocessAttachments, processDocs } from 'pouchdb-adapter-utils';
+import { safeJsonStringify, safeJsonParse } from 'pouchdb-json';
+import { base64StringToBlobOrBuffer, readAsBinaryString } from 'pouchdb-binary-utils';
+
+// IndexedDB requires a versioned database structure, so we use the
+// version here to manage migrations.
+var ADAPTER_VERSION = 5;
+
+// The object stores created for each database
+// DOC_STORE stores the document meta data, its revision history and state
+// Keyed by document id
+var DOC_STORE = 'document-store';
+// BY_SEQ_STORE stores a particular version of a document, keyed by its
+// sequence id
+var BY_SEQ_STORE = 'by-sequence';
+// Where we store attachments
+var ATTACH_STORE = 'attach-store';
+// Where we store many-to-many relations
+// between attachment digests and seqs
+var ATTACH_AND_SEQ_STORE = 'attach-seq-store';
+
+// Where we store database-wide meta data in a single record
+// keyed by id: META_STORE
+var META_STORE = 'meta-store';
+// Where we store local documents
+var LOCAL_STORE = 'local-store';
+// Where we detect blob support
+var DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';
+
+function idbError(callback) {
+ return function (evt) {
+ var message = 'unknown_error';
+ if (evt.target && evt.target.error) {
+ message = evt.target.error.name || evt.target.error.message;
+ }
+ callback(createError(IDB_ERROR, message, evt.type));
+ };
+}
+
+// Unfortunately, the metadata has to be stringified
+// when it is put into the database, because otherwise
+// IndexedDB can throw errors for deeply-nested objects.
+// Originally we just used JSON.parse/JSON.stringify; now
+// we use this custom vuvuzela library that avoids recursion.
+// If we could do it all over again, we'd probably use a
+// format for the revision trees other than JSON.
+function encodeMetadata(metadata, winningRev, deleted) {
+ return {
+ data: safeJsonStringify(metadata),
+ winningRev: winningRev,
+ deletedOrLocal: deleted ? '1' : '0',
+ seq: metadata.seq, // highest seq for this doc
+ id: metadata.id
+ };
+}
+
+function decodeMetadata(storedObject) {
+ if (!storedObject) {
+ return null;
+ }
+ var metadata = safeJsonParse(storedObject.data);
+ metadata.winningRev = storedObject.winningRev;
+ metadata.deleted = storedObject.deletedOrLocal === '1';
+ metadata.seq = storedObject.seq;
+ return metadata;
+}
+
+// read the doc back out from the database. we don't store the
+// _id or _rev because we already have _doc_id_rev.
+function decodeDoc(doc) {
+ if (!doc) {
+ return doc;
+ }
+ var idx = doc._doc_id_rev.lastIndexOf(':');
+ doc._id = doc._doc_id_rev.substring(0, idx - 1);
+ doc._rev = doc._doc_id_rev.substring(idx + 1);
+ delete doc._doc_id_rev;
+ return doc;
+}
+
+// Read a blob from the database, encoding as necessary
+// and translating from base64 if the IDB doesn't support
+// native Blobs
+function readBlobData(body, type, asBlob, callback) {
+ if (asBlob) {
+ if (!body) {
+ callback(new Blob([''], {type: type}));
+ } else if (typeof body !== 'string') { // we have blob support
+ callback(body);
+ } else { // no blob support
+ callback(base64StringToBlobOrBuffer(body, type));
+ }
+ } else { // as base64 string
+ if (!body) {
+ callback('');
+ } else if (typeof body !== 'string') { // we have blob support
+ readAsBinaryString(body, function (binary) {
+ callback(btoa(binary));
+ });
+ } else { // no blob support
+ callback(body);
+ }
+ }
+}
+
+function fetchAttachmentsIfNecessary(doc, opts, txn, cb) {
+ var attachments = Object.keys(doc._attachments || {});
+ if (!attachments.length) {
+ return cb && cb();
+ }
+ var numDone = 0;
+
+ function checkDone() {
+ if (++numDone === attachments.length && cb) {
+ cb();
+ }
+ }
+
+ function fetchAttachment(doc, att) {
+ var attObj = doc._attachments[att];
+ var digest = attObj.digest;
+ var req = txn.objectStore(ATTACH_STORE).get(digest);
+ req.onsuccess = function (e) {
+ attObj.body = e.target.result.body;
+ checkDone();
+ };
+ }
+
+ attachments.forEach(function (att) {
+ if (opts.attachments && opts.include_docs) {
+ fetchAttachment(doc, att);
+ } else {
+ doc._attachments[att].stub = true;
+ checkDone();
+ }
+ });
+}
+
+// IDB-specific postprocessing necessary because
+// we don't know whether we stored a true Blob or
+// a base64-encoded string, and if it's a Blob it
+// needs to be read outside of the transaction context
+function postProcessAttachments(results, asBlob) {
+ return Promise.all(results.map(function (row) {
+ if (row.doc && row.doc._attachments) {
+ var attNames = Object.keys(row.doc._attachments);
+ return Promise.all(attNames.map(function (att) {
+ var attObj = row.doc._attachments[att];
+ if (!('body' in attObj)) { // already processed
+ return;
+ }
+ var body = attObj.body;
+ var type = attObj.content_type;
+ return new Promise(function (resolve) {
+ readBlobData(body, type, asBlob, function (data) {
+ row.doc._attachments[att] = Object.assign(
+ pick(attObj, ['digest', 'content_type']),
+ {data: data}
+ );
+ resolve();
+ });
+ });
+ }));
+ }
+ }));
+}
+
+function compactRevs(revs, docId, txn) {
+
+ var possiblyOrphanedDigests = [];
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var attStore = txn.objectStore(ATTACH_STORE);
+ var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+ var count = revs.length;
+
+ function checkDone() {
+ count--;
+ if (!count) { // done processing all revs
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function deleteOrphanedAttachments() {
+ if (!possiblyOrphanedDigests.length) {
+ return;
+ }
+ possiblyOrphanedDigests.forEach(function (digest) {
+ var countReq = attAndSeqStore.index('digestSeq').count(
+ IDBKeyRange.bound(
+ digest + '::', digest + '::\uffff', false, false));
+ countReq.onsuccess = function (e) {
+ var count = e.target.result;
+ if (!count) {
+ // orphaned
+ attStore.delete(digest);
+ }
+ };
+ });
+ }
+
+ revs.forEach(function (rev) {
+ var index = seqStore.index('_doc_id_rev');
+ var key = docId + "::" + rev;
+ index.getKey(key).onsuccess = function (e) {
+ var seq = e.target.result;
+ if (typeof seq !== 'number') {
+ return checkDone();
+ }
+ seqStore.delete(seq);
+
+ var cursor = attAndSeqStore.index('seq')
+ .openCursor(IDBKeyRange.only(seq));
+
+ cursor.onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var digest = cursor.value.digestSeq.split('::')[0];
+ possiblyOrphanedDigests.push(digest);
+ attAndSeqStore.delete(cursor.primaryKey);
+ cursor.continue();
+ } else { // done
+ checkDone();
+ }
+ };
+ };
+ });
+}
+
+function openTransactionSafely(idb, stores, mode) {
+ try {
+ return {
+ txn: idb.transaction(stores, mode)
+ };
+ } catch (err) {
+ return {
+ error: err
+ };
+ }
+}
+
+var changesHandler = new changesHandler$1();
+
+function idbBulkDocs(dbOpts, req, opts, api, idb, callback) {
+ var docInfos = req.docs;
+ var txn;
+ var docStore;
+ var bySeqStore;
+ var attachStore;
+ var attachAndSeqStore;
+ var metaStore;
+ var docInfoError;
+ var metaDoc;
+
+ for (var i = 0, len = docInfos.length; i < len; i++) {
+ var doc = docInfos[i];
+ if (doc._id && isLocalId(doc._id)) {
+ continue;
+ }
+ doc = docInfos[i] = parseDoc(doc, opts.new_edits, dbOpts);
+ if (doc.error && !docInfoError) {
+ docInfoError = doc;
+ }
+ }
+
+ if (docInfoError) {
+ return callback(docInfoError);
+ }
+
+ var allDocsProcessed = false;
+ var docCountDelta = 0;
+ var results = new Array(docInfos.length);
+ var fetchedDocs = new Map();
+ var preconditionErrored = false;
+ var blobType = api._meta.blobSupport ? 'blob' : 'base64';
+
+ preprocessAttachments(docInfos, blobType, function (err) {
+ if (err) {
+ return callback(err);
+ }
+ startTransaction();
+ });
+
+ function startTransaction() {
+
+ var stores = [
+ DOC_STORE, BY_SEQ_STORE,
+ ATTACH_STORE,
+ LOCAL_STORE, ATTACH_AND_SEQ_STORE,
+ META_STORE
+ ];
+ var txnResult = openTransactionSafely(idb, stores, 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ txn.onabort = idbError(callback);
+ txn.ontimeout = idbError(callback);
+ txn.oncomplete = complete;
+ docStore = txn.objectStore(DOC_STORE);
+ bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ attachStore = txn.objectStore(ATTACH_STORE);
+ attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+ metaStore = txn.objectStore(META_STORE);
+
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ metaDoc = e.target.result;
+ updateDocCountIfReady();
+ };
+
+ verifyAttachments(function (err) {
+ if (err) {
+ preconditionErrored = true;
+ return callback(err);
+ }
+ fetchExistingDocs();
+ });
+ }
+
+ function onAllDocsProcessed() {
+ allDocsProcessed = true;
+ updateDocCountIfReady();
+ }
+
+ function idbProcessDocs() {
+ processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,
+ txn, results, writeDoc, opts, onAllDocsProcessed);
+ }
+
+ function updateDocCountIfReady() {
+ if (!metaDoc || !allDocsProcessed) {
+ return;
+ }
+ // caching the docCount saves a lot of time in allDocs() and
+ // info(), which is why we go to all the trouble of doing this
+ metaDoc.docCount += docCountDelta;
+ metaStore.put(metaDoc);
+ }
+
+ function fetchExistingDocs() {
+
+ if (!docInfos.length) {
+ return;
+ }
+
+ var numFetched = 0;
+
+ function checkDone() {
+ if (++numFetched === docInfos.length) {
+ idbProcessDocs();
+ }
+ }
+
+ function readMetadata(event) {
+ var metadata = decodeMetadata(event.target.result);
+
+ if (metadata) {
+ fetchedDocs.set(metadata.id, metadata);
+ }
+ checkDone();
+ }
+
+ for (var i = 0, len = docInfos.length; i < len; i++) {
+ var docInfo = docInfos[i];
+ if (docInfo._id && isLocalId(docInfo._id)) {
+ checkDone(); // skip local docs
+ continue;
+ }
+ var req = docStore.get(docInfo.metadata.id);
+ req.onsuccess = readMetadata;
+ }
+ }
+
+ function complete() {
+ if (preconditionErrored) {
+ return;
+ }
+
+ changesHandler.notify(api._meta.name);
+ callback(null, results);
+ }
+
+ function verifyAttachment(digest, callback) {
+
+ var req = attachStore.get(digest);
+ req.onsuccess = function (e) {
+ if (!e.target.result) {
+ var err = createError(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ err.status = 412;
+ callback(err);
+ } else {
+ callback();
+ }
+ };
+ }
+
+ function verifyAttachments(finish) {
+
+
+ var digests = [];
+ docInfos.forEach(function (docInfo) {
+ if (docInfo.data && docInfo.data._attachments) {
+ Object.keys(docInfo.data._attachments).forEach(function (filename) {
+ var att = docInfo.data._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ function checkDone() {
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ }
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback) {
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ var doc = docInfo.data;
+ doc._id = docInfo.metadata.id;
+ doc._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ doc._deleted = true;
+ }
+
+ var hasAttachments = doc._attachments &&
+ Object.keys(doc._attachments).length;
+ if (hasAttachments) {
+ return writeAttachments(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+
+ docCountDelta += delta;
+ updateDocCountIfReady();
+
+ finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+
+ function finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback) {
+
+ var doc = docInfo.data;
+ var metadata = docInfo.metadata;
+
+ doc._doc_id_rev = metadata.id + '::' + metadata.rev;
+ delete doc._id;
+ delete doc._rev;
+
+ function afterPutDoc(e) {
+ var revsToDelete = docInfo.stemmedRevs || [];
+
+ if (isUpdate && api.auto_compaction) {
+ revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));
+ }
+
+ if (revsToDelete && revsToDelete.length) {
+ compactRevs(revsToDelete, docInfo.metadata.id, txn);
+ }
+
+ metadata.seq = e.target.result;
+ // Current _rev is calculated from _rev_tree on read
+ // delete metadata.rev;
+ var metadataToStore = encodeMetadata(metadata, winningRev,
+ winningRevIsDeleted);
+ var metaDataReq = docStore.put(metadataToStore);
+ metaDataReq.onsuccess = afterPutMetadata;
+ }
+
+ function afterPutDocError(e) {
+ // ConstraintError, need to update, not put (see #1638 for details)
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ var index = bySeqStore.index('_doc_id_rev');
+ var getKeyReq = index.getKey(doc._doc_id_rev);
+ getKeyReq.onsuccess = function (e) {
+ var putReq = bySeqStore.put(doc, e.target.result);
+ putReq.onsuccess = afterPutDoc;
+ };
+ }
+
+ function afterPutMetadata() {
+ results[resultsIdx] = {
+ ok: true,
+ id: metadata.id,
+ rev: metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ insertAttachmentMappings(docInfo, metadata.seq, callback);
+ }
+
+ var putReq = bySeqStore.put(doc);
+
+ putReq.onsuccess = afterPutDoc;
+ putReq.onerror = afterPutDocError;
+ }
+
+ function writeAttachments(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback) {
+
+
+ var doc = docInfo.data;
+
+ var numDone = 0;
+ var attachments = Object.keys(doc._attachments);
+
+ function collectResults() {
+ if (numDone === attachments.length) {
+ finishDoc(docInfo, winningRev, winningRevIsDeleted,
+ isUpdate, resultsIdx, callback);
+ }
+ }
+
+ function attachmentSaved() {
+ numDone++;
+ collectResults();
+ }
+
+ attachments.forEach(function (key) {
+ var att = docInfo.data._attachments[key];
+ if (!att.stub) {
+ var data = att.data;
+ delete att.data;
+ att.revpos = parseInt(winningRev, 10);
+ var digest = att.digest;
+ saveAttachment(digest, data, attachmentSaved);
+ } else {
+ numDone++;
+ collectResults();
+ }
+ });
+ }
+
+ // map seqs to attachment digests, which
+ // we will need later during compaction
+ function insertAttachmentMappings(docInfo, seq, callback) {
+
+ var attsAdded = 0;
+ var attsToAdd = Object.keys(docInfo.data._attachments || {});
+
+ if (!attsToAdd.length) {
+ return callback();
+ }
+
+ function checkDone() {
+ if (++attsAdded === attsToAdd.length) {
+ callback();
+ }
+ }
+
+ function add(att) {
+ var digest = docInfo.data._attachments[att].digest;
+ var req = attachAndSeqStore.put({
+ seq: seq,
+ digestSeq: digest + '::' + seq
+ });
+
+ req.onsuccess = checkDone;
+ req.onerror = function (e) {
+ // this callback is for a constaint error, which we ignore
+ // because this docid/rev has already been associated with
+ // the digest (e.g. when new_edits == false)
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ checkDone();
+ };
+ }
+ for (var i = 0; i < attsToAdd.length; i++) {
+ add(attsToAdd[i]); // do in parallel
+ }
+ }
+
+ function saveAttachment(digest, data, callback) {
+
+
+ var getKeyReq = attachStore.count(digest);
+ getKeyReq.onsuccess = function (e) {
+ var count = e.target.result;
+ if (count) {
+ return callback(); // already exists
+ }
+ var newAtt = {
+ digest: digest,
+ body: data
+ };
+ var putReq = attachStore.put(newAtt);
+ putReq.onsuccess = callback;
+ };
+ }
+}
+
+// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations
+// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or
+// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because
+// we're not processing each document one-at-a-time.
+function runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {
+
+ if (batchSize === -1) {
+ batchSize = 1000;
+ }
+
+ // Bail out of getAll()/getAllKeys() in the following cases:
+ // 1) either method is unsupported - we need both
+ // 2) batchSize is 1 (might as well use IDBCursor)
+ // 3) descending – no real way to do this via getAll()/getAllKeys()
+
+ var useGetAll = typeof objectStore.getAll === 'function' &&
+ typeof objectStore.getAllKeys === 'function' &&
+ batchSize > 1 && !descending;
+
+ var keysBatch;
+ var valuesBatch;
+ var pseudoCursor;
+
+ function onGetAll(e) {
+ valuesBatch = e.target.result;
+ if (keysBatch) {
+ onBatch(keysBatch, valuesBatch, pseudoCursor);
+ }
+ }
+
+ function onGetAllKeys(e) {
+ keysBatch = e.target.result;
+ if (valuesBatch) {
+ onBatch(keysBatch, valuesBatch, pseudoCursor);
+ }
+ }
+
+ function continuePseudoCursor() {
+ if (!keysBatch.length) { // no more results
+ return onBatch();
+ }
+ // fetch next batch, exclusive start
+ var lastKey = keysBatch[keysBatch.length - 1];
+ var newKeyRange;
+ if (keyRange && keyRange.upper) {
+ try {
+ newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,
+ true, keyRange.upperOpen);
+ } catch (e) {
+ if (e.name === "DataError" && e.code === 0) {
+ return onBatch(); // we're done, startkey and endkey are equal
+ }
+ }
+ } else {
+ newKeyRange = IDBKeyRange.lowerBound(lastKey, true);
+ }
+ keyRange = newKeyRange;
+ keysBatch = null;
+ valuesBatch = null;
+ objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
+ objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
+ }
+
+ function onCursor(e) {
+ var cursor = e.target.result;
+ if (!cursor) { // done
+ return onBatch();
+ }
+ // regular IDBCursor acts like a batch where batch size is always 1
+ onBatch([cursor.key], [cursor.value], cursor);
+ }
+
+ if (useGetAll) {
+ pseudoCursor = {"continue": continuePseudoCursor};
+ objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
+ objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
+ } else if (descending) {
+ objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;
+ } else {
+ objectStore.openCursor(keyRange).onsuccess = onCursor;
+ }
+}
+
+// simple shim for objectStore.getAll(), falling back to IDBCursor
+function getAll(objectStore, keyRange, onSuccess) {
+ if (typeof objectStore.getAll === 'function') {
+ // use native getAll
+ objectStore.getAll(keyRange).onsuccess = onSuccess;
+ return;
+ }
+ // fall back to cursors
+ var values = [];
+
+ function onCursor(e) {
+ var cursor = e.target.result;
+ if (cursor) {
+ values.push(cursor.value);
+ cursor.continue();
+ } else {
+ onSuccess({
+ target: {
+ result: values
+ }
+ });
+ }
+ }
+
+ objectStore.openCursor(keyRange).onsuccess = onCursor;
+}
+
+function allDocsKeys(keys, docStore, onBatch) {
+ // It's not guaranted to be returned in right order
+ var valuesBatch = new Array(keys.length);
+ var count = 0;
+ keys.forEach(function (key, index) {
+ docStore.get(key).onsuccess = function (event) {
+ if (event.target.result) {
+ valuesBatch[index] = event.target.result;
+ } else {
+ valuesBatch[index] = {key: key, error: 'not_found'};
+ }
+ count++;
+ if (count === keys.length) {
+ onBatch(keys, valuesBatch, {});
+ }
+ };
+ });
+}
+
+function createKeyRange(start, end, inclusiveEnd, key, descending) {
+ try {
+ if (start && end) {
+ if (descending) {
+ return IDBKeyRange.bound(end, start, !inclusiveEnd, false);
+ } else {
+ return IDBKeyRange.bound(start, end, false, !inclusiveEnd);
+ }
+ } else if (start) {
+ if (descending) {
+ return IDBKeyRange.upperBound(start);
+ } else {
+ return IDBKeyRange.lowerBound(start);
+ }
+ } else if (end) {
+ if (descending) {
+ return IDBKeyRange.lowerBound(end, !inclusiveEnd);
+ } else {
+ return IDBKeyRange.upperBound(end, !inclusiveEnd);
+ }
+ } else if (key) {
+ return IDBKeyRange.only(key);
+ }
+ } catch (e) {
+ return {error: e};
+ }
+ return null;
+}
+
+function idbAllDocs(opts, idb, callback) {
+ var start = 'startkey' in opts ? opts.startkey : false;
+ var end = 'endkey' in opts ? opts.endkey : false;
+ var key = 'key' in opts ? opts.key : false;
+ var keys = 'keys' in opts ? opts.keys : false;
+ var skip = opts.skip || 0;
+ var limit = typeof opts.limit === 'number' ? opts.limit : -1;
+ var inclusiveEnd = opts.inclusive_end !== false;
+
+ var keyRange ;
+ var keyRangeError;
+ if (!keys) {
+ keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);
+ keyRangeError = keyRange && keyRange.error;
+ if (keyRangeError &&
+ !(keyRangeError.name === "DataError" && keyRangeError.code === 0)) {
+ // DataError with error code 0 indicates start is less than end, so
+ // can just do an empty query. Else need to throw
+ return callback(createError(IDB_ERROR,
+ keyRangeError.name, keyRangeError.message));
+ }
+ }
+
+ var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];
+
+ if (opts.attachments) {
+ stores.push(ATTACH_STORE);
+ }
+ var txnResult = openTransactionSafely(idb, stores, 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ txn.oncomplete = onTxnComplete;
+ txn.onabort = idbError(callback);
+ var docStore = txn.objectStore(DOC_STORE);
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var metaStore = txn.objectStore(META_STORE);
+ var docIdRevIndex = seqStore.index('_doc_id_rev');
+ var results = [];
+ var docCount;
+ var updateSeq;
+
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ docCount = e.target.result.docCount;
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ getMaxUpdateSeq(seqStore, function (e) {
+ if (e.target.result && e.target.result.length > 0) {
+ updateSeq = e.target.result[0];
+ }
+ });
+ }
+
+ function getMaxUpdateSeq(objectStore, onSuccess) {
+ function onCursor(e) {
+ var cursor = e.target.result;
+ var maxKey = undefined;
+ if (cursor && cursor.key) {
+ maxKey = cursor.key;
+ }
+ return onSuccess({
+ target: {
+ result: [maxKey]
+ }
+ });
+ }
+ objectStore.openCursor(null, 'prev').onsuccess = onCursor;
+ }
+
+ // if the user specifies include_docs=true, then we don't
+ // want to block the main cursor while we're fetching the doc
+ function fetchDocAsynchronously(metadata, row, winningRev) {
+ var key = metadata.id + "::" + winningRev;
+ docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {
+ row.doc = decodeDoc(e.target.result) || {};
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ row.doc._conflicts = conflicts;
+ }
+ }
+ fetchAttachmentsIfNecessary(row.doc, opts, txn);
+ };
+ }
+
+ function allDocsInner(winningRev, metadata) {
+ var row = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ var deleted = metadata.deleted;
+ if (deleted) {
+ if (keys) {
+ results.push(row);
+ // deleted docs are okay with "keys" requests
+ row.value.deleted = true;
+ row.doc = null;
+ }
+ } else if (skip-- <= 0) {
+ results.push(row);
+ if (opts.include_docs) {
+ fetchDocAsynchronously(metadata, row, winningRev);
+ }
+ }
+ }
+
+ function processBatch(batchValues) {
+ for (var i = 0, len = batchValues.length; i < len; i++) {
+ if (results.length === limit) {
+ break;
+ }
+ var batchValue = batchValues[i];
+ if (batchValue.error && keys) {
+ // key was not found with "keys" requests
+ results.push(batchValue);
+ continue;
+ }
+ var metadata = decodeMetadata(batchValue);
+ var winningRev = metadata.winningRev;
+ allDocsInner(winningRev, metadata);
+ }
+ }
+
+ function onBatch(batchKeys, batchValues, cursor) {
+ if (!cursor) {
+ return;
+ }
+ processBatch(batchValues);
+ if (results.length < limit) {
+ cursor.continue();
+ }
+ }
+
+ function onGetAll(e) {
+ var values = e.target.result;
+ if (opts.descending) {
+ values = values.reverse();
+ }
+ processBatch(values);
+ }
+
+ function onResultsReady() {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq && updateSeq !== undefined) {
+ returnVal.update_seq = updateSeq;
+ }
+ callback(null, returnVal);
+ }
+
+ function onTxnComplete() {
+ if (opts.attachments) {
+ postProcessAttachments(results, opts.binary).then(onResultsReady);
+ } else {
+ onResultsReady();
+ }
+ }
+
+ // don't bother doing any requests if start > end or limit === 0
+ if (keyRangeError || limit === 0) {
+ return;
+ }
+ if (keys) {
+ return allDocsKeys(keys, docStore, onBatch);
+ }
+ if (limit === -1) { // just fetch everything
+ return getAll(docStore, keyRange, onGetAll);
+ }
+ // else do a cursor
+ // choose a batch size based on the skip, since we'll need to skip that many
+ runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);
+}
+
+//
+// Blobs are not supported in all versions of IndexedDB, notably
+// Chrome <37 and Android <5. In those versions, storing a blob will throw.
+//
+// Various other blob bugs exist in Chrome v37-42 (inclusive).
+// Detecting them is expensive and confusing to users, and Chrome 37-42
+// is at very low usage worldwide, so we do a hacky userAgent check instead.
+//
+// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120
+// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916
+// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836
+//
+function checkBlobSupport(txn) {
+ return new Promise(function (resolve) {
+ var blob = new Blob(['']);
+ var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');
+
+ req.onsuccess = function () {
+ var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/);
+ var matchedEdge = navigator.userAgent.match(/Edge\//);
+ // MS Edge pretends to be Chrome 42:
+ // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx
+ resolve(matchedEdge || !matchedChrome ||
+ parseInt(matchedChrome[1], 10) >= 43);
+ };
+
+ req.onerror = txn.onabort = function (e) {
+ // If the transaction aborts now its due to not being able to
+ // write to the database, likely due to the disk being full
+ e.preventDefault();
+ e.stopPropagation();
+ resolve(false);
+ };
+ }).catch(function () {
+ return false; // error, so assume unsupported
+ });
+}
+
+function countDocs(txn, cb) {
+ var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');
+ index.count(IDBKeyRange.only('0')).onsuccess = function (e) {
+ cb(e.target.result);
+ };
+}
+
+// This task queue ensures that IDB open calls are done in their own tick
+
+var running = false;
+var queue = [];
+
+function tryCode(fun, err, res, PouchDB) {
+ try {
+ fun(err, res);
+ } catch (err) {
+ // Shouldn't happen, but in some odd cases
+ // IndexedDB implementations might throw a sync
+ // error, in which case this will at least log it.
+ PouchDB.emit('error', err);
+ }
+}
+
+function applyNext() {
+ if (running || !queue.length) {
+ return;
+ }
+ running = true;
+ queue.shift()();
+}
+
+function enqueueTask(action, callback, PouchDB) {
+ queue.push(function runAction() {
+ action(function runCallback(err, res) {
+ tryCode(callback, err, res, PouchDB);
+ running = false;
+ nextTick(function runNext() {
+ applyNext();
+ });
+ });
+ });
+ applyNext();
+}
+
+function changes(opts, api, dbName, idb) {
+ opts = clone(opts);
+
+ if (opts.continuous) {
+ var id = dbName + ':' + uuid();
+ changesHandler.addListener(dbName, id, api, opts);
+ changesHandler.notify(dbName);
+ return {
+ cancel: function () {
+ changesHandler.removeListener(dbName, id);
+ }
+ };
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+
+ opts.since = opts.since || 0;
+ var lastSeq = opts.since;
+
+ var limit = 'limit' in opts ? opts.limit : -1;
+ if (limit === 0) {
+ limit = 1; // per CouchDB _changes spec
+ }
+
+ var results = [];
+ var numResults = 0;
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ var txn;
+ var bySeqStore;
+ var docStore;
+ var docIdRevIndex;
+
+ function onBatch(batchKeys, batchValues, cursor) {
+ if (!cursor || !batchKeys.length) { // done
+ return;
+ }
+
+ var winningDocs = new Array(batchKeys.length);
+ var metadatas = new Array(batchKeys.length);
+
+ function processMetadataAndWinningDoc(metadata, winningDoc) {
+ var change = opts.processChange(winningDoc, metadata, opts);
+ lastSeq = change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') { // anything but true/false indicates error
+ return Promise.reject(filtered);
+ }
+
+ if (!filtered) {
+ return Promise.resolve();
+ }
+ numResults++;
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ // process the attachment immediately
+ // for the benefit of live listeners
+ if (opts.attachments && opts.include_docs) {
+ return new Promise(function (resolve) {
+ fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {
+ postProcessAttachments([change], opts.binary).then(function () {
+ resolve(change);
+ });
+ });
+ });
+ } else {
+ return Promise.resolve(change);
+ }
+ }
+
+ function onBatchDone() {
+ var promises = [];
+ for (var i = 0, len = winningDocs.length; i < len; i++) {
+ if (numResults === limit) {
+ break;
+ }
+ var winningDoc = winningDocs[i];
+ if (!winningDoc) {
+ continue;
+ }
+ var metadata = metadatas[i];
+ promises.push(processMetadataAndWinningDoc(metadata, winningDoc));
+ }
+
+ Promise.all(promises).then(function (changes) {
+ for (var i = 0, len = changes.length; i < len; i++) {
+ if (changes[i]) {
+ opts.onChange(changes[i]);
+ }
+ }
+ }).catch(opts.complete);
+
+ if (numResults !== limit) {
+ cursor.continue();
+ }
+ }
+
+ // Fetch all metadatas/winningdocs from this batch in parallel, then process
+ // them all only once all data has been collected. This is done in parallel
+ // because it's faster than doing it one-at-a-time.
+ var numDone = 0;
+ batchValues.forEach(function (value, i) {
+ var doc = decodeDoc(value);
+ var seq = batchKeys[i];
+ fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {
+ metadatas[i] = metadata;
+ winningDocs[i] = winningDoc;
+ if (++numDone === batchKeys.length) {
+ onBatchDone();
+ }
+ });
+ });
+ }
+
+ function onGetMetadata(doc, seq, metadata, cb) {
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return cb();
+ }
+
+ if (metadata.winningRev === doc._rev) {
+ // this is the winning doc
+ return cb(metadata, doc);
+ }
+
+ // fetch winning doc in separate request
+ var docIdRev = doc._id + '::' + metadata.winningRev;
+ var req = docIdRevIndex.get(docIdRev);
+ req.onsuccess = function (e) {
+ cb(metadata, decodeDoc(e.target.result));
+ };
+ }
+
+ function fetchWinningDocAndMetadata(doc, seq, cb) {
+ if (docIds && !docIds.has(doc._id)) {
+ return cb();
+ }
+
+ var metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(doc, seq, metadata, cb);
+ }
+ // metadata not cached, have to go fetch it
+ docStore.get(doc._id).onsuccess = function (e) {
+ metadata = decodeMetadata(e.target.result);
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(doc, seq, metadata, cb);
+ };
+ }
+
+ function finish() {
+ opts.complete(null, {
+ results: results,
+ last_seq: lastSeq
+ });
+ }
+
+ function onTxnComplete() {
+ if (!opts.continuous && opts.attachments) {
+ // cannot guarantee that postProcessing was already done,
+ // so do it again
+ postProcessAttachments(results).then(finish);
+ } else {
+ finish();
+ }
+ }
+
+ var objectStores = [DOC_STORE, BY_SEQ_STORE];
+ if (opts.attachments) {
+ objectStores.push(ATTACH_STORE);
+ }
+ var txnResult = openTransactionSafely(idb, objectStores, 'readonly');
+ if (txnResult.error) {
+ return opts.complete(txnResult.error);
+ }
+ txn = txnResult.txn;
+ txn.onabort = idbError(opts.complete);
+ txn.oncomplete = onTxnComplete;
+
+ bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ docStore = txn.objectStore(DOC_STORE);
+ docIdRevIndex = bySeqStore.index('_doc_id_rev');
+
+ var keyRange = (opts.since && !opts.descending) ?
+ IDBKeyRange.lowerBound(opts.since, true) : null;
+
+ runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);
+}
+
+var cachedDBs = new Map();
+var blobSupportPromise;
+var openReqList = new Map();
+
+function IdbPouch(opts, callback) {
+ var api = this;
+
+ enqueueTask(function (thisCallback) {
+ init(api, opts, thisCallback);
+ }, callback, api.constructor);
+}
+
+function init(api, opts, callback) {
+
+ var dbName = opts.name;
+
+ var idb = null;
+ var idbGlobalFailureError = null;
+ api._meta = null;
+
+ function enrichCallbackError(callback) {
+ return function (error, result) {
+ if (error && error instanceof Error && !error.reason) {
+ if (idbGlobalFailureError) {
+ error.reason = idbGlobalFailureError;
+ }
+ }
+
+ callback(error, result);
+ };
+ }
+
+ // called when creating a fresh new database
+ function createSchema(db) {
+ var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});
+ db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})
+ .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});
+ db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});
+ db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});
+ db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);
+
+ // added in v2
+ docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});
+
+ // added in v3
+ db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});
+
+ // added in v4
+ var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,
+ {autoIncrement: true});
+ attAndSeqStore.createIndex('seq', 'seq');
+ attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});
+ }
+
+ // migration to version 2
+ // unfortunately "deletedOrLocal" is a misnomer now that we no longer
+ // store local docs in the main doc-store, but whaddyagonnado
+ function addDeletedOrLocalIndex(txn, callback) {
+ var docStore = txn.objectStore(DOC_STORE);
+ docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});
+
+ docStore.openCursor().onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var metadata = cursor.value;
+ var deleted = isDeleted(metadata);
+ metadata.deletedOrLocal = deleted ? "1" : "0";
+ docStore.put(metadata);
+ cursor.continue();
+ } else {
+ callback();
+ }
+ };
+ }
+
+ // migration to version 3 (part 1)
+ function createLocalStoreSchema(db) {
+ db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})
+ .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});
+ }
+
+ // migration to version 3 (part 2)
+ function migrateLocalStore(txn, cb) {
+ var localStore = txn.objectStore(LOCAL_STORE);
+ var docStore = txn.objectStore(DOC_STORE);
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+
+ var cursor = docStore.openCursor();
+ cursor.onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ var metadata = cursor.value;
+ var docId = metadata.id;
+ var local = isLocalId$1(docId);
+ var rev = winningRev(metadata);
+ if (local) {
+ var docIdRev = docId + "::" + rev;
+ // remove all seq entries
+ // associated with this docId
+ var start = docId + "::";
+ var end = docId + "::~";
+ var index = seqStore.index('_doc_id_rev');
+ var range = IDBKeyRange.bound(start, end, false, false);
+ var seqCursor = index.openCursor(range);
+ seqCursor.onsuccess = function (e) {
+ seqCursor = e.target.result;
+ if (!seqCursor) {
+ // done
+ docStore.delete(cursor.primaryKey);
+ cursor.continue();
+ } else {
+ var data = seqCursor.value;
+ if (data._doc_id_rev === docIdRev) {
+ localStore.put(data);
+ }
+ seqStore.delete(seqCursor.primaryKey);
+ seqCursor.continue();
+ }
+ };
+ } else {
+ cursor.continue();
+ }
+ } else if (cb) {
+ cb();
+ }
+ };
+ }
+
+ // migration to version 4 (part 1)
+ function addAttachAndSeqStore(db) {
+ var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,
+ {autoIncrement: true});
+ attAndSeqStore.createIndex('seq', 'seq');
+ attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});
+ }
+
+ // migration to version 4 (part 2)
+ function migrateAttsAndSeqs(txn, callback) {
+ var seqStore = txn.objectStore(BY_SEQ_STORE);
+ var attStore = txn.objectStore(ATTACH_STORE);
+ var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
+
+ // need to actually populate the table. this is the expensive part,
+ // so as an optimization, check first that this database even
+ // contains attachments
+ var req = attStore.count();
+ req.onsuccess = function (e) {
+ var count = e.target.result;
+ if (!count) {
+ return callback(); // done
+ }
+
+ seqStore.openCursor().onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ return callback(); // done
+ }
+ var doc = cursor.value;
+ var seq = cursor.primaryKey;
+ var atts = Object.keys(doc._attachments || {});
+ var digestMap = {};
+ for (var j = 0; j < atts.length; j++) {
+ var att = doc._attachments[atts[j]];
+ digestMap[att.digest] = true; // uniq digests, just in case
+ }
+ var digests = Object.keys(digestMap);
+ for (j = 0; j < digests.length; j++) {
+ var digest = digests[j];
+ attAndSeqStore.put({
+ seq: seq,
+ digestSeq: digest + '::' + seq
+ });
+ }
+ cursor.continue();
+ };
+ };
+ }
+
+ // migration to version 5
+ // Instead of relying on on-the-fly migration of metadata,
+ // this brings the doc-store to its modern form:
+ // - metadata.winningrev
+ // - metadata.seq
+ // - stringify the metadata when storing it
+ function migrateMetadata(txn) {
+
+ function decodeMetadataCompat(storedObject) {
+ if (!storedObject.data) {
+ // old format, when we didn't store it stringified
+ storedObject.deleted = storedObject.deletedOrLocal === '1';
+ return storedObject;
+ }
+ return decodeMetadata(storedObject);
+ }
+
+ // ensure that every metadata has a winningRev and seq,
+ // which was previously created on-the-fly but better to migrate
+ var bySeqStore = txn.objectStore(BY_SEQ_STORE);
+ var docStore = txn.objectStore(DOC_STORE);
+ var cursor = docStore.openCursor();
+ cursor.onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ return; // done
+ }
+ var metadata = decodeMetadataCompat(cursor.value);
+
+ metadata.winningRev = metadata.winningRev ||
+ winningRev(metadata);
+
+ function fetchMetadataSeq() {
+ // metadata.seq was added post-3.2.0, so if it's missing,
+ // we need to fetch it manually
+ var start = metadata.id + '::';
+ var end = metadata.id + '::\uffff';
+ var req = bySeqStore.index('_doc_id_rev').openCursor(
+ IDBKeyRange.bound(start, end));
+
+ var metadataSeq = 0;
+ req.onsuccess = function (e) {
+ var cursor = e.target.result;
+ if (!cursor) {
+ metadata.seq = metadataSeq;
+ return onGetMetadataSeq();
+ }
+ var seq = cursor.primaryKey;
+ if (seq > metadataSeq) {
+ metadataSeq = seq;
+ }
+ cursor.continue();
+ };
+ }
+
+ function onGetMetadataSeq() {
+ var metadataToStore = encodeMetadata(metadata,
+ metadata.winningRev, metadata.deleted);
+
+ var req = docStore.put(metadataToStore);
+ req.onsuccess = function () {
+ cursor.continue();
+ };
+ }
+
+ if (metadata.seq) {
+ return onGetMetadataSeq();
+ }
+
+ fetchMetadataSeq();
+ };
+
+ }
+
+ api._remote = false;
+ api.type = function () {
+ return 'idb';
+ };
+
+ api._id = toPromise(function (callback) {
+ callback(null, api._meta.instanceId);
+ });
+
+ api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {
+ idbBulkDocs(opts, req, reqOpts, api, idb, enrichCallbackError(callback));
+ };
+
+ // First we look up the metadata in the ids database, then we fetch the
+ // current revision(s) from the by sequence store
+ api._get = function idb_get(id, opts, callback) {
+ var doc;
+ var metadata;
+ var err;
+ var txn = opts.ctx;
+ if (!txn) {
+ var txnResult = openTransactionSafely(idb,
+ [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ }
+
+ function finish() {
+ callback(err, {doc: doc, metadata: metadata, ctx: txn});
+ }
+
+ txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {
+ metadata = decodeMetadata(e.target.result);
+ // we can determine the result here if:
+ // 1. there is no such document
+ // 2. the document is deleted and we don't ask about specific rev
+ // When we ask with opts.rev we expect the answer to be either
+ // doc (possibly with _deleted=true) or missing error
+ if (!metadata) {
+ err = createError(MISSING_DOC, 'missing');
+ return finish();
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = metadata.winningRev;
+ var deleted = isDeleted(metadata);
+ if (deleted) {
+ err = createError(MISSING_DOC, "deleted");
+ return finish();
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var objectStore = txn.objectStore(BY_SEQ_STORE);
+ var key = metadata.id + '::' + rev;
+
+ objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {
+ doc = e.target.result;
+ if (doc) {
+ doc = decodeDoc(doc);
+ }
+ if (!doc) {
+ err = createError(MISSING_DOC, 'missing');
+ return finish();
+ }
+ finish();
+ };
+ };
+ };
+
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var txn;
+ if (opts.ctx) {
+ txn = opts.ctx;
+ } else {
+ var txnResult = openTransactionSafely(idb,
+ [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ txn = txnResult.txn;
+ }
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {
+ var body = e.target.result.body;
+ readBlobData(body, type, opts.binary, function (blobData) {
+ callback(null, blobData);
+ });
+ };
+ };
+
+ api._info = function idb_info(callback) {
+ var updateSeq;
+ var docCount;
+
+ var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {
+ docCount = e.target.result.docCount;
+ };
+ txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {
+ var cursor = e.target.result;
+ updateSeq = cursor ? cursor.key : 0;
+ };
+
+ txn.oncomplete = function () {
+ callback(null, {
+ doc_count: docCount,
+ update_seq: updateSeq,
+ // for debugging
+ idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')
+ });
+ };
+ };
+
+ api._allDocs = function idb_allDocs(opts, callback) {
+ idbAllDocs(opts, idb, enrichCallbackError(callback));
+ };
+
+ api._changes = function idbChanges(opts) {
+ return changes(opts, api, dbName, idb);
+ };
+
+ api._close = function (callback) {
+ // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close
+ // "Returns immediately and closes the connection in a separate thread..."
+ idb.close();
+ cachedDBs.delete(dbName);
+ callback();
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+ var req = txn.objectStore(DOC_STORE).get(docId);
+ req.onsuccess = function (event) {
+ var doc = decodeMetadata(event.target.result);
+ if (!doc) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, doc.rev_tree);
+ }
+ };
+ };
+
+ // This function removes revisions of document docId
+ // which are listed in revs and sets this document
+ // revision to to rev_tree
+ api._doCompaction = function (docId, revs, callback) {
+ var stores = [
+ DOC_STORE,
+ BY_SEQ_STORE,
+ ATTACH_STORE,
+ ATTACH_AND_SEQ_STORE
+ ];
+ var txnResult = openTransactionSafely(idb, stores, 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var txn = txnResult.txn;
+
+ var docStore = txn.objectStore(DOC_STORE);
+
+ docStore.get(docId).onsuccess = function (event) {
+ var metadata = decodeMetadata(event.target.result);
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+ compactRevs(revs, docId, txn);
+ var winningRev = metadata.winningRev;
+ var deleted = metadata.deleted;
+ txn.objectStore(DOC_STORE).put(
+ encodeMetadata(metadata, winningRev, deleted));
+ };
+ txn.onabort = idbError(callback);
+ txn.oncomplete = function () {
+ callback();
+ };
+ };
+
+
+ api._getLocal = function (id, callback) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ var tx = txnResult.txn;
+ var req = tx.objectStore(LOCAL_STORE).get(id);
+
+ req.onerror = idbError(callback);
+ req.onsuccess = function (e) {
+ var doc = e.target.result;
+ if (!doc) {
+ callback(createError(MISSING_DOC));
+ } else {
+ delete doc['_doc_id_rev']; // for backwards compat
+ callback(null, doc);
+ }
+ };
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+ if (!oldRev) {
+ doc._rev = '0-1';
+ } else {
+ doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);
+ }
+
+ var tx = opts.ctx;
+ var ret;
+ if (!tx) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ tx = txnResult.txn;
+ tx.onerror = idbError(callback);
+ tx.oncomplete = function () {
+ if (ret) {
+ callback(null, ret);
+ }
+ };
+ }
+
+ var oStore = tx.objectStore(LOCAL_STORE);
+ var req;
+ if (oldRev) {
+ req = oStore.get(id);
+ req.onsuccess = function (e) {
+ var oldDoc = e.target.result;
+ if (!oldDoc || oldDoc._rev !== oldRev) {
+ callback(createError(REV_CONFLICT));
+ } else { // update
+ var req = oStore.put(doc);
+ req.onsuccess = function () {
+ ret = {ok: true, id: doc._id, rev: doc._rev};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ };
+ }
+ };
+ } else { // new doc
+ req = oStore.add(doc);
+ req.onerror = function (e) {
+ // constraint error, already exists
+ callback(createError(REV_CONFLICT));
+ e.preventDefault(); // avoid transaction abort
+ e.stopPropagation(); // avoid transaction onerror
+ };
+ req.onsuccess = function () {
+ ret = {ok: true, id: doc._id, rev: doc._rev};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ };
+ }
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ var tx = opts.ctx;
+ if (!tx) {
+ var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');
+ if (txnResult.error) {
+ return callback(txnResult.error);
+ }
+ tx = txnResult.txn;
+ tx.oncomplete = function () {
+ if (ret) {
+ callback(null, ret);
+ }
+ };
+ }
+ var ret;
+ var id = doc._id;
+ var oStore = tx.objectStore(LOCAL_STORE);
+ var req = oStore.get(id);
+
+ req.onerror = idbError(callback);
+ req.onsuccess = function (e) {
+ var oldDoc = e.target.result;
+ if (!oldDoc || oldDoc._rev !== doc._rev) {
+ callback(createError(MISSING_DOC));
+ } else {
+ oStore.delete(id);
+ ret = {ok: true, id: id, rev: '0-0'};
+ if (opts.ctx) { // return immediately
+ callback(null, ret);
+ }
+ }
+ };
+ };
+
+ api._destroy = function (opts, callback) {
+ changesHandler.removeAllListeners(dbName);
+
+ //Close open request for "dbName" database to fix ie delay.
+ var openReq = openReqList.get(dbName);
+ if (openReq && openReq.result) {
+ openReq.result.close();
+ cachedDBs.delete(dbName);
+ }
+ var req = indexedDB.deleteDatabase(dbName);
+
+ req.onsuccess = function () {
+ //Remove open request from the list.
+ openReqList.delete(dbName);
+ if (hasLocalStorage() && (dbName in localStorage)) {
+ delete localStorage[dbName];
+ }
+ callback(null, { 'ok': true });
+ };
+
+ req.onerror = idbError(callback);
+ };
+
+ var cached = cachedDBs.get(dbName);
+
+ if (cached) {
+ idb = cached.idb;
+ api._meta = cached.global;
+ return nextTick(function () {
+ callback(null, api);
+ });
+ }
+
+ var req = indexedDB.open(dbName, ADAPTER_VERSION);
+ openReqList.set(dbName, req);
+
+ req.onupgradeneeded = function (e) {
+ var db = e.target.result;
+ if (e.oldVersion < 1) {
+ return createSchema(db); // new db, initial schema
+ }
+ // do migrations
+
+ var txn = e.currentTarget.transaction;
+ // these migrations have to be done in this function, before
+ // control is returned to the event loop, because IndexedDB
+
+ if (e.oldVersion < 3) {
+ createLocalStoreSchema(db); // v2 -> v3
+ }
+ if (e.oldVersion < 4) {
+ addAttachAndSeqStore(db); // v3 -> v4
+ }
+
+ var migrations = [
+ addDeletedOrLocalIndex, // v1 -> v2
+ migrateLocalStore, // v2 -> v3
+ migrateAttsAndSeqs, // v3 -> v4
+ migrateMetadata // v4 -> v5
+ ];
+
+ var i = e.oldVersion;
+
+ function next() {
+ var migration = migrations[i - 1];
+ i++;
+ if (migration) {
+ migration(txn, next);
+ }
+ }
+
+ next();
+ };
+
+ req.onsuccess = function (e) {
+
+ idb = e.target.result;
+
+ idb.onversionchange = function () {
+ idb.close();
+ cachedDBs.delete(dbName);
+ };
+
+ idb.onabort = function (e) {
+ guardedConsole('error', 'Database has a global failure', e.target.error);
+ idbGlobalFailureError = e.target.error;
+ idb.close();
+ cachedDBs.delete(dbName);
+ };
+
+ // Do a few setup operations (in parallel as much as possible):
+ // 1. Fetch meta doc
+ // 2. Check blob support
+ // 3. Calculate docCount
+ // 4. Generate an instanceId if necessary
+ // 5. Store docCount and instanceId on meta doc
+
+ var txn = idb.transaction([
+ META_STORE,
+ DETECT_BLOB_SUPPORT_STORE,
+ DOC_STORE
+ ], 'readwrite');
+
+ var storedMetaDoc = false;
+ var metaDoc;
+ var docCount;
+ var blobSupport;
+ var instanceId;
+
+ function completeSetup() {
+ if (typeof blobSupport === 'undefined' || !storedMetaDoc) {
+ return;
+ }
+ api._meta = {
+ name: dbName,
+ instanceId: instanceId,
+ blobSupport: blobSupport
+ };
+
+ cachedDBs.set(dbName, {
+ idb: idb,
+ global: api._meta
+ });
+ callback(null, api);
+ }
+
+ function storeMetaDocIfReady() {
+ if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {
+ return;
+ }
+ var instanceKey = dbName + '_id';
+ if (instanceKey in metaDoc) {
+ instanceId = metaDoc[instanceKey];
+ } else {
+ metaDoc[instanceKey] = instanceId = uuid();
+ }
+ metaDoc.docCount = docCount;
+ txn.objectStore(META_STORE).put(metaDoc);
+ }
+
+ //
+ // fetch or generate the instanceId
+ //
+ txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {
+ metaDoc = e.target.result || { id: META_STORE };
+ storeMetaDocIfReady();
+ };
+
+ //
+ // countDocs
+ //
+ countDocs(txn, function (count) {
+ docCount = count;
+ storeMetaDocIfReady();
+ });
+
+ //
+ // check blob support
+ //
+ if (!blobSupportPromise) {
+ // make sure blob support is only checked once
+ blobSupportPromise = checkBlobSupport(txn);
+ }
+
+ blobSupportPromise.then(function (val) {
+ blobSupport = val;
+ completeSetup();
+ });
+
+ // only when the metadata put transaction has completed,
+ // consider the setup done
+ txn.oncomplete = function () {
+ storedMetaDoc = true;
+ completeSetup();
+ };
+ txn.onabort = idbError(callback);
+ };
+
+ req.onerror = function (e) {
+ var msg = e.target.error && e.target.error.message;
+
+ if (!msg) {
+ msg = 'Failed to open indexedDB, are you in private browsing mode?';
+ } else if (msg.indexOf("stored database is a higher version") !== -1) {
+ msg = new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter');
+ }
+
+ guardedConsole('error', msg);
+ callback(createError(IDB_ERROR, msg));
+ };
+}
+
+IdbPouch.valid = function () {
+ // Following #7085 buggy idb versions (typically Safari < 10.1) are
+ // considered valid.
+
+ // On Firefox SecurityError is thrown while referencing indexedDB if cookies
+ // are not allowed. `typeof indexedDB` also triggers the error.
+ try {
+ // some outdated implementations of IDB that appear on Samsung
+ // and HTC Android devices <4.4 are missing IDBKeyRange
+ return typeof indexedDB !== 'undefined' && typeof IDBKeyRange !== 'undefined';
+ } catch (e) {
+ return false;
+ }
+};
+
+function index (PouchDB) {
+ PouchDB.adapter('idb', IdbPouch, true);
+}
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-indexeddb.js b/packages/pouchdb-platform/lib/pouchdb-adapter-indexeddb.js
new file mode 100644
index 0000000000..35fcaea1c2
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-indexeddb.js
@@ -0,0 +1,1802 @@
+import { uuid, filterChange, changesHandler } from 'pouchdb-utils';
+import { createError, IDB_ERROR, MISSING_DOC, UNKNOWN_ERROR, REV_CONFLICT, MISSING_STUB, BAD_ARG } from 'pouchdb-errors';
+import { readAsBinaryString, binaryStringToBlobOrBuffer } from 'pouchdb-binary-utils';
+import { latest, merge, winningRev, compactTree, collectConflicts, traverseRevTree, removeLeafFromTree } from 'pouchdb-merge';
+import { parseDoc } from 'pouchdb-adapter-utils';
+import { binaryMd5 } from 'pouchdb-md5';
+
+// 'use strict'; is default when ESM
+
+var IDB_NULL = Number.MIN_SAFE_INTEGER;
+var IDB_FALSE = Number.MIN_SAFE_INTEGER + 1;
+var IDB_TRUE = Number.MIN_SAFE_INTEGER + 2;
+
+// These are the same as bellow but without the global flag
+// we want to use RegExp.test because it's really fast, but the global flag
+// makes the regex const stateful (seriously) as it walked through all instances
+var TEST_KEY_INVALID = /^[^a-zA-Z_$]|[^a-zA-Z0-9_$]+/;
+var TEST_PATH_INVALID = /\\.|(^|\.)[^a-zA-Z_$]|[^a-zA-Z0-9_$.]+/;
+function needsSanitise(name, isPath) {
+ if (isPath) {
+ return TEST_PATH_INVALID.test(name);
+ } else {
+ return TEST_KEY_INVALID.test(name);
+ }
+}
+
+//
+// IndexedDB only allows valid JS names in its index paths, whereas JSON allows
+// for any string at all. This converts invalid JS names to valid ones, to allow
+// for them to be indexed.
+//
+// For example, "foo-bar" is a valid JSON key, but cannot be a valid JS name
+// (because that would be read as foo minus bar).
+//
+// Very high level rules for valid JS names are:
+// - First character cannot start with a number
+// - Otherwise all characters must be be a-z, A-Z, 0-9, $ or _.
+// - We allow . unless the name represents a single field, as that represents
+// a deep index path.
+//
+// This is more aggressive than it needs to be, but also simpler.
+//
+var KEY_INVALID = new RegExp(TEST_KEY_INVALID.source, 'g');
+var PATH_INVALID = new RegExp(TEST_PATH_INVALID.source, 'g');
+var SLASH = '\\'.charCodeAt(0);
+const IS_DOT = '.'.charCodeAt(0);
+
+function sanitise(name, isPath) {
+ var correctCharacters = function (match) {
+ var good = '';
+ for (var i = 0; i < match.length; i++) {
+ var code = match.charCodeAt(i);
+ // If you're sanitising a path, a slash character is there to be interpreted
+ // by whatever parses the path later as "escape the next thing".
+ //
+ // e.g., if you want to index THIS string:
+ // {"foo": {"bar.baz": "THIS"}}
+ // Your index path would be "foo.bar\.baz".
+
+ if (code === IS_DOT && isPath && i === 0) {
+ good += '.';
+ } else if (code === SLASH && isPath) {
+ continue;
+ } else {
+ good += '_c' + code + '_';
+ }
+ }
+ return good;
+ };
+
+ if (isPath) {
+ return name.replace(PATH_INVALID, correctCharacters);
+ } else {
+ return name.replace(KEY_INVALID, correctCharacters);
+ }
+}
+
+function needsRewrite(data) {
+ for (var key of Object.keys(data)) {
+ if (needsSanitise(key)) {
+ return true;
+ } else if (data[key] === null || typeof data[key] === 'boolean') {
+ return true;
+ } else if (typeof data[key] === 'object') {
+ return needsRewrite(data[key]);
+ }
+ }
+}
+
+function rewrite(data) {
+ if (!needsRewrite(data)) {
+ return false;
+ }
+
+ var isArray = Array.isArray(data);
+ var clone = isArray
+ ? []
+ : {};
+
+ Object.keys(data).forEach(function (key) {
+ var safeKey = isArray ? key : sanitise(key);
+
+ if (data[key] === null) {
+ clone[safeKey] = IDB_NULL;
+ } else if (typeof data[key] === 'boolean') {
+ clone[safeKey] = data[key] ? IDB_TRUE : IDB_FALSE;
+ } else if (typeof data[key] === 'object') {
+ clone[safeKey] = rewrite(data[key]);
+ } else {
+ clone[safeKey] = data[key];
+ }
+ });
+
+ return clone;
+}
+
+// 'use strict'; is default when ESM
+
+var DOC_STORE = 'docs';
+var META_STORE = 'meta';
+
+function idbError(callback) {
+ return function (evt) {
+ var message = 'unknown_error';
+ if (evt.target && evt.target.error) {
+ message = evt.target.error.name || evt.target.error.message;
+ }
+ callback(createError(IDB_ERROR, message, evt.type));
+ };
+}
+
+function processAttachment(name, src, doc, isBinary) {
+
+ delete doc._attachments[name].stub;
+
+ if (isBinary) {
+ doc._attachments[name].data =
+ src.attachments[doc._attachments[name].digest].data;
+ return Promise.resolve();
+ }
+
+ return new Promise(function (resolve) {
+ var data = src.attachments[doc._attachments[name].digest].data;
+ readAsBinaryString(data, function (binString) {
+ doc._attachments[name].data = btoa(binString);
+ delete doc._attachments[name].length;
+ resolve();
+ });
+ });
+}
+
+function rawIndexFields(ddoc, viewName) {
+ // fields are an array of either the string name of the field, or a key value
+ var fields = ddoc.views[viewName].options &&
+ ddoc.views[viewName].options.def &&
+ ddoc.views[viewName].options.def.fields || [];
+
+ // Either ['foo'] or [{'foo': 'desc'}]
+ return fields.map(function (field) {
+ if (typeof field === 'string') {
+ return field;
+ } else {
+ return Object.keys(field)[0];
+ }
+ });
+}
+
+/**
+ * true if the view is has a "partial_filter_selector".
+ */
+function isPartialFilterView(ddoc, viewName) {
+ return viewName in ddoc.views &&
+ ddoc.views[viewName].options &&
+ ddoc.views[viewName].options.def &&
+ ddoc.views[viewName].options.def.partial_filter_selector;
+}
+
+function naturalIndexName(fields) {
+ return '_find_idx/' + fields.join('/');
+}
+
+/**
+ * Convert the fields the user gave us in the view and convert them to work for
+ * indexeddb.
+ *
+ * fields is an array of field strings. A field string could be one field:
+ * 'foo'
+ * Or it could be a json path:
+ * 'foo.bar'
+ */
+function correctIndexFields(fields) {
+ // Every index has to have deleted at the front, because when we do a query
+ // we need to filter out deleted documents.
+ return ['deleted'].concat(
+ fields.map(function (field) {
+ if (['_id', '_rev', '_deleted', '_attachments'].includes(field)) {
+ // These properties are stored at the top level without the underscore
+ return field.substr(1);
+ } else {
+ // The custom document fields are inside the `data` property
+ return 'data.' + sanitise(field, true);
+ }
+ })
+ );
+}
+
+// 'use strict'; is default when ESM
+
+//
+// Core PouchDB schema version. Increment this if we, as a library, want to make
+// schema changes in indexeddb. See upgradePouchDbSchema()
+//
+var POUCHDB_IDB_VERSION = 1;
+
+//
+// Functions that manage a combinate indexeddb version, by combining the current
+// time in millis that represents user migrations with a large multiplier that
+// represents PouchDB system migrations.
+//
+// This lets us use the idb version number to both represent
+// PouchDB-library-level migrations as well as "user migrations" required for
+// when design documents trigger the addition or removal of native indexes.
+//
+// Given that Number.MAX_SAFE_INTEGER = 9007199254740991
+//
+// We can easily use the largest 2-3 digits and either allow:
+// - 900 system migrations up to 2198/02/18
+// - or 89 system migrations up to 5050/02/14
+//
+// This impl does the former. If this code still exists after 2198 someone send my
+// descendants a Spacebook message congratulating them on their impressive genes.
+//
+// 9007199254740991 <- MAX_SAFE_INTEGER
+// 10000000000000 <- 10^13
+// 7199254740991 <- 2198-02-18T16:59:00.991Z
+//
+var versionMultiplier = Math.pow(10, 13);
+function createIdbVersion() {
+ return (versionMultiplier * POUCHDB_IDB_VERSION) + new Date().getTime();
+}
+function getPouchDbVersion(version) {
+ return Math.floor(version / versionMultiplier);
+}
+
+function maintainNativeIndexes(openReq, reject) {
+ var docStore = openReq.transaction.objectStore(DOC_STORE);
+ var ddocsReq = docStore.getAll(IDBKeyRange.bound('_design/', '_design/\uffff'));
+
+ ddocsReq.onsuccess = function (e) {
+ var results = e.target.result;
+ var existingIndexNames = Array.from(docStore.indexNames);
+
+ // NB: the only thing we're supporting here is the declared indexing
+ // fields nothing more.
+ var expectedIndexes = results.filter(function (row) {
+ return row.deleted === 0 && row.revs[row.rev].data.views;
+ }).map(function (row) {
+ return row.revs[row.rev].data;
+ }).reduce(function (indexes, ddoc) {
+ return Object.keys(ddoc.views).reduce(function (acc, viewName) {
+ var fields = rawIndexFields(ddoc, viewName);
+
+ if (fields && fields.length > 0) {
+ acc[naturalIndexName(fields)] = correctIndexFields(fields);
+ }
+
+ return acc;
+ }, indexes);
+ }, {});
+
+ var expectedIndexNames = Object.keys(expectedIndexes);
+
+ // Delete any indexes that aren't system indexes or expected
+ var systemIndexNames = ['seq'];
+ existingIndexNames.forEach(function (index) {
+ if (systemIndexNames.indexOf(index) === -1 && expectedIndexNames.indexOf(index) === -1) {
+ docStore.deleteIndex(index);
+ }
+ });
+
+ // Work out which indexes are missing and create them
+ var newIndexNames = expectedIndexNames.filter(function (ei) {
+ return existingIndexNames.indexOf(ei) === -1;
+ });
+
+ try {
+ newIndexNames.forEach(function (indexName) {
+ docStore.createIndex(indexName, expectedIndexes[indexName]);
+ });
+ } catch (err) {
+ reject(err);
+ }
+ };
+}
+
+function upgradePouchDbSchema(db, pouchdbVersion) {
+ if (pouchdbVersion < 1) {
+ var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});
+ docStore.createIndex('seq', 'seq', {unique: true});
+
+ db.createObjectStore(META_STORE, {keyPath: 'id'});
+ }
+
+ // Declare more PouchDB schema changes here
+ // if (pouchdbVersion < 2) { .. }
+}
+
+function openDatabase(openDatabases, api, opts, resolve, reject) {
+ var openReq = opts.versionchanged ?
+ indexedDB.open(opts.name) :
+ indexedDB.open(opts.name, createIdbVersion());
+
+ openReq.onupgradeneeded = function (e) {
+ if (e.oldVersion > 0 && e.oldVersion < versionMultiplier) {
+ // This DB was created with the "idb" adapter, **not** this one.
+ // For now we're going to just error out here: users must manually
+ // migrate between the two. In the future, dependent on performance tests,
+ // we might silently migrate
+ throw new Error('Incorrect adapter: you should specify the "idb" adapter to open this DB');
+ } else if (e.oldVersion === 0 && e.newVersion < versionMultiplier) {
+ // Firefox still creates the database with version=1 even if we throw,
+ // so we need to be sure to destroy the empty database before throwing
+ indexedDB.deleteDatabase(opts.name);
+ throw new Error('Database was deleted while open');
+ }
+
+ var db = e.target.result;
+
+ var pouchdbVersion = getPouchDbVersion(e.oldVersion);
+ upgradePouchDbSchema(db, pouchdbVersion);
+ maintainNativeIndexes(openReq, reject);
+ };
+
+ openReq.onblocked = function (e) {
+ // AFAICT this only occurs if, after sending `onversionchange` events to
+ // all other open DBs (ie in different tabs), there are still open
+ // connections to the DB. In this code we should never see this because we
+ // close our DBs on these events, and all DB interactions are wrapped in
+ // safely re-opening the DB.
+ console.error('onblocked, this should never happen', e);
+ };
+
+ openReq.onsuccess = function (e) {
+ var idb = e.target.result;
+
+ idb.onabort = function (e) {
+ console.error('Database has a global failure', e.target.error);
+ delete openDatabases[opts.name];
+ idb.close();
+ };
+
+ idb.onversionchange = function () {
+ console.log('Database was made stale, closing handle');
+ openDatabases[opts.name].versionchanged = true;
+ idb.close();
+ };
+
+ idb.onclose = function () {
+ console.log('Database was made stale, closing handle');
+ if (opts.name in openDatabases) {
+ openDatabases[opts.name].versionchanged = true;
+ }
+ };
+
+ var metadata = {id: META_STORE};
+ var txn = idb.transaction([META_STORE], 'readwrite');
+
+ txn.oncomplete = function () {
+ resolve({idb: idb, metadata: metadata});
+ };
+
+ var metaStore = txn.objectStore(META_STORE);
+ metaStore.get(META_STORE).onsuccess = function (e) {
+ metadata = e.target.result || metadata;
+ var changed = false;
+
+ if (!('doc_count' in metadata)) {
+ changed = true;
+ metadata.doc_count = 0;
+ }
+
+ if (!('seq' in metadata)) {
+ changed = true;
+ metadata.seq = 0;
+ }
+
+ if (!('db_uuid' in metadata)) {
+ changed = true;
+ metadata.db_uuid = uuid();
+ }
+
+ if (changed) {
+ metaStore.put(metadata);
+ }
+ };
+ };
+
+ openReq.onerror = function (e) {
+ reject(e.target.error);
+ };
+}
+
+function setup (openDatabases, api, opts) {
+ if (!openDatabases[opts.name] || openDatabases[opts.name].versionchanged) {
+ opts.versionchanged = openDatabases[opts.name] &&
+ openDatabases[opts.name].versionchanged;
+
+ openDatabases[opts.name] = new Promise(function (resolve, reject) {
+ openDatabase(openDatabases, api, opts, resolve, reject);
+ });
+ }
+
+ return openDatabases[opts.name];
+}
+
+// 'use strict'; is default when ESM
+
+function info (metadata, callback) {
+ callback(null, {
+ doc_count: metadata.doc_count,
+ update_seq: metadata.seq
+ });
+}
+
+// 'use strict'; is default when ESM
+
+function get (txn, id, opts, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ txn.txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {
+ var doc = e.target.result;
+ var rev;
+ if (!opts.rev) {
+ rev = (doc && doc.rev);
+ } else {
+ rev = opts.latest ? latest(opts.rev, doc) : opts.rev;
+ }
+
+ if (!doc || (doc.deleted && !opts.rev) || !(rev in doc.revs)) {
+ callback(createError(MISSING_DOC, 'missing'));
+ return;
+ }
+
+ var result = doc.revs[rev].data;
+ result._id = doc.id;
+ result._rev = rev;
+
+ // WARNING: expecting possible old format
+ // TODO: why are we passing the transaction in the context?
+ // It's not clear we ever thread these txns usefully
+ callback(null, {
+ doc: result,
+ metadata: doc,
+ ctx: txn
+ });
+ };
+}
+
+// 'use strict'; is default when ESM
+
+function parseAttachment(attachment, opts, cb) {
+ if (opts.binary) {
+ return cb(null, attachment);
+ } else {
+ readAsBinaryString(attachment, function (binString) {
+ cb(null, btoa(binString));
+ });
+ }
+}
+
+function getAttachment(txn, docId, attachId, _, opts, cb) {
+ if (txn.error) {
+ return cb(txn.error);
+ }
+
+ var attachment;
+
+ txn.txn.objectStore(DOC_STORE).get(docId).onsuccess = function (e) {
+ var doc = e.target.result;
+ var rev = doc.revs[opts.rev || doc.rev].data;
+ var digest = rev._attachments[attachId].digest;
+ attachment = doc.attachments[digest].data;
+ };
+
+ txn.txn.oncomplete = function () {
+ parseAttachment(attachment, opts, cb);
+ };
+
+ txn.txn.onabort = cb;
+}
+
+// 'use strict'; is default when ESM
+
+function bulkDocs (api, req, opts, metadata, dbOpts, idbChanges, callback) {
+
+ var txn;
+
+ // TODO: I would prefer to get rid of these globals
+ var error;
+ var results = [];
+ var docs = [];
+ var lastWriteIndex;
+
+ var revsLimit = dbOpts.revs_limit || 1000;
+ var rewriteEnabled = dbOpts.name.indexOf("-mrview-") === -1;
+ const autoCompaction = dbOpts.auto_compaction;
+
+ // We only need to track 1 revision for local documents
+ function docsRevsLimit(doc) {
+ return doc.id.startsWith('_local/') ? 1 : revsLimit;
+ }
+
+ function rootIsMissing(doc) {
+ return doc.rev_tree[0].ids[1].status === 'missing';
+ }
+
+ function parseBase64(data) {
+ try {
+ return atob(data);
+ } catch (e) {
+ return {
+ error: createError(BAD_ARG, 'Attachment is not a valid base64 string')
+ };
+ }
+ }
+
+ // Reads the original doc from the store if available
+ // As in allDocs with keys option using multiple get calls is the fastest way
+ function fetchExistingDocs(txn, docs) {
+ var fetched = 0;
+ var oldDocs = {};
+
+ function readDone(e) {
+ if (e.target.result) {
+ oldDocs[e.target.result.id] = e.target.result;
+ }
+ if (++fetched === docs.length) {
+ processDocs(txn, docs, oldDocs);
+ }
+ }
+
+ docs.forEach(function (doc) {
+ txn.objectStore(DOC_STORE).get(doc.id).onsuccess = readDone;
+ });
+ }
+
+ function revHasAttachment(doc, rev, digest) {
+ return doc.revs[rev] &&
+ doc.revs[rev].data._attachments &&
+ Object.values(doc.revs[rev].data._attachments).find(function (att) {
+ return att.digest === digest;
+ });
+ }
+
+ function processDocs(txn, docs, oldDocs) {
+
+ docs.forEach(function (doc, i) {
+ var newDoc;
+
+ // The first document write cannot be a deletion
+ if ('was_delete' in opts && !(Object.prototype.hasOwnProperty.call(oldDocs, doc.id))) {
+ newDoc = createError(MISSING_DOC, 'deleted');
+
+ // The first write of a document cannot specify a revision
+ } else if (opts.new_edits &&
+ !Object.prototype.hasOwnProperty.call(oldDocs, doc.id) &&
+ rootIsMissing(doc)) {
+ newDoc = createError(REV_CONFLICT);
+
+ // Update the existing document
+ } else if (Object.prototype.hasOwnProperty.call(oldDocs, doc.id)) {
+ newDoc = update(txn, doc, oldDocs[doc.id]);
+ // The update can be rejected if it is an update to an existing
+ // revision, if so skip it
+ if (newDoc == false) {
+ return;
+ }
+
+ // New document
+ } else {
+ // Ensure new documents are also stemmed
+ var merged = merge([], doc.rev_tree[0], docsRevsLimit(doc));
+ doc.rev_tree = merged.tree;
+ doc.stemmedRevs = merged.stemmedRevs;
+ newDoc = doc;
+ newDoc.isNewDoc = true;
+ newDoc.wasDeleted = doc.revs[doc.rev].deleted ? 1 : 0;
+ }
+
+ if (newDoc.error) {
+ results[i] = newDoc;
+ } else {
+ oldDocs[newDoc.id] = newDoc;
+ lastWriteIndex = i;
+ write(txn, newDoc, i);
+ }
+ });
+ }
+
+ // Converts from the format returned by parseDoc into the new format
+ // we use to store
+ function convertDocFormat(doc) {
+
+ var newDoc = {
+ id: doc.metadata.id,
+ rev: doc.metadata.rev,
+ rev_tree: doc.metadata.rev_tree,
+ revs: doc.metadata.revs || {}
+ };
+
+ newDoc.revs[newDoc.rev] = {
+ data: doc.data,
+ deleted: doc.metadata.deleted
+ };
+
+ return newDoc;
+ }
+
+ function update(txn, doc, oldDoc) {
+
+ // Ignore updates to existing revisions
+ if ((doc.rev in oldDoc.revs) && !opts.new_edits) {
+ return false;
+ }
+
+ var isRoot = /^1-/.test(doc.rev);
+
+ // Reattach first writes after a deletion to last deleted tree
+ if (oldDoc.deleted && !doc.deleted && opts.new_edits && isRoot) {
+ var tmp = doc.revs[doc.rev].data;
+ tmp._rev = oldDoc.rev;
+ tmp._id = oldDoc.id;
+ doc = convertDocFormat(parseDoc(tmp, opts.new_edits, dbOpts));
+ }
+
+ var merged = merge(oldDoc.rev_tree, doc.rev_tree[0], docsRevsLimit(doc));
+ doc.stemmedRevs = merged.stemmedRevs;
+ doc.rev_tree = merged.tree;
+
+ // Merge the old and new rev data
+ var revs = oldDoc.revs;
+ revs[doc.rev] = doc.revs[doc.rev];
+ doc.revs = revs;
+
+ doc.attachments = oldDoc.attachments;
+
+ var inConflict = opts.new_edits && (((oldDoc.deleted && doc.deleted) ||
+ (!oldDoc.deleted && merged.conflicts !== 'new_leaf') ||
+ (oldDoc.deleted && !doc.deleted && merged.conflicts === 'new_branch') ||
+ (oldDoc.rev === doc.rev)));
+
+ if (inConflict) {
+ return createError(REV_CONFLICT);
+ }
+
+ doc.wasDeleted = oldDoc.deleted;
+
+ return doc;
+ }
+
+ function write(txn, doc, i) {
+
+ // We copy the data from the winning revision into the root
+ // of the document so that it can be indexed
+ var winningRev$1 = winningRev(doc);
+ // rev of new doc for attachments and to return it
+ var writtenRev = doc.rev;
+ var isLocal = doc.id.startsWith('_local/');
+
+ var theDoc = doc.revs[winningRev$1].data;
+
+ const isNewDoc = doc.isNewDoc;
+
+ if (rewriteEnabled) {
+ // doc.data is what we index, so we need to clone and rewrite it, and clean
+ // it up for indexability
+ var result = rewrite(theDoc);
+ if (result) {
+ doc.data = result;
+ delete doc.data._attachments;
+ } else {
+ doc.data = theDoc;
+ }
+ } else {
+ doc.data = theDoc;
+ }
+
+ doc.rev = winningRev$1;
+ // .deleted needs to be an int for indexing
+ doc.deleted = doc.revs[winningRev$1].deleted ? 1 : 0;
+
+ // Bump the seq for every new (non local) revision written
+ // TODO: index expects a unique seq, not sure if ignoring local will
+ // work
+ if (!isLocal) {
+ doc.seq = ++metadata.seq;
+
+ var delta = 0;
+ // If its a new document, we wont decrement if deleted
+ if (doc.isNewDoc) {
+ delta = doc.deleted ? 0 : 1;
+ } else if (doc.wasDeleted !== doc.deleted) {
+ delta = doc.deleted ? -1 : 1;
+ }
+ metadata.doc_count += delta;
+ }
+ delete doc.isNewDoc;
+ delete doc.wasDeleted;
+
+ // If there have been revisions stemmed when merging trees,
+ // delete their data
+ let revsToDelete = doc.stemmedRevs || [];
+
+ if (autoCompaction && !isNewDoc) {
+ const result = compactTree(doc);
+ if (result.length) {
+ revsToDelete = revsToDelete.concat(result);
+ }
+ }
+
+ if (revsToDelete.length) {
+ revsToDelete.forEach(function (rev) { delete doc.revs[rev]; });
+ }
+
+ delete doc.stemmedRevs;
+
+ if (!('attachments' in doc)) {
+ doc.attachments = {};
+ }
+
+ if (theDoc._attachments) {
+ for (var k in theDoc._attachments) {
+ var attachment = theDoc._attachments[k];
+ if (attachment.stub) {
+ if (!(attachment.digest in doc.attachments)) {
+ error = createError(MISSING_STUB);
+ // TODO: Not sure how safe this manual abort is, seeing
+ // console issues
+ txn.abort();
+ return;
+ }
+
+ if (revHasAttachment(doc, writtenRev, attachment.digest)) {
+ doc.attachments[attachment.digest].revs[writtenRev] = true;
+ }
+
+ } else {
+
+ doc.attachments[attachment.digest] = attachment;
+ doc.attachments[attachment.digest].revs = {};
+ doc.attachments[attachment.digest].revs[writtenRev] = true;
+
+ theDoc._attachments[k] = {
+ stub: true,
+ digest: attachment.digest,
+ content_type: attachment.content_type,
+ length: attachment.length,
+ revpos: parseInt(writtenRev, 10)
+ };
+ }
+ }
+ }
+
+ // Local documents have different revision handling
+ if (isLocal && doc.deleted) {
+ txn.objectStore(DOC_STORE).delete(doc.id).onsuccess = function () {
+ results[i] = {
+ ok: true,
+ id: doc.id,
+ rev: '0-0'
+ };
+ };
+ updateSeq(i);
+ return;
+ }
+
+ txn.objectStore(DOC_STORE).put(doc).onsuccess = function () {
+ results[i] = {
+ ok: true,
+ id: doc.id,
+ rev: writtenRev
+ };
+ updateSeq(i);
+ };
+ }
+
+ function updateSeq(i) {
+ if (i === lastWriteIndex) {
+ txn.objectStore(META_STORE).put(metadata);
+ }
+ }
+
+ function preProcessAttachment(attachment) {
+ if (attachment.stub) {
+ return Promise.resolve(attachment);
+ }
+
+ var binData;
+ if (typeof attachment.data === 'string') {
+ binData = parseBase64(attachment.data);
+ if (binData.error) {
+ return Promise.reject(binData.error);
+ }
+ attachment.data = binaryStringToBlobOrBuffer(binData, attachment.content_type);
+ } else {
+ binData = attachment.data;
+ }
+
+ return new Promise(function (resolve) {
+ binaryMd5(binData, function (result) {
+ attachment.digest = 'md5-' + result;
+ attachment.length = binData.size || binData.length || 0;
+ resolve(attachment);
+ });
+ });
+ }
+
+ function preProcessAttachments() {
+ var promises = docs.map(function (doc) {
+ var data = doc.revs[doc.rev].data;
+ if (!data._attachments) {
+ return Promise.resolve(data);
+ }
+ var attachments = Object.keys(data._attachments).map(function (k) {
+ data._attachments[k].name = k;
+ return preProcessAttachment(data._attachments[k]);
+ });
+
+ return Promise.all(attachments).then(function (newAttachments) {
+ var processed = {};
+ newAttachments.forEach(function (attachment) {
+ processed[attachment.name] = attachment;
+ delete attachment.name;
+ });
+ data._attachments = processed;
+ return data;
+ });
+ });
+ return Promise.all(promises);
+ }
+
+ for (var i = 0, len = req.docs.length; i < len; i++) {
+ var result;
+ // TODO: We should get rid of throwing for invalid docs, also not sure
+ // why this is needed in idb-next and not idb
+ try {
+ result = parseDoc(req.docs[i], opts.new_edits, dbOpts);
+ } catch (err) {
+ result = err;
+ }
+ if (result.error) {
+ return callback(result);
+ }
+
+ // Ideally parseDoc would return data in this format, but it is currently
+ // shared so we need to convert
+ docs.push(convertDocFormat(result));
+ }
+
+ preProcessAttachments().then(function () {
+ api._openTransactionSafely([DOC_STORE, META_STORE], 'readwrite', function (err, _txn) {
+ if (err) {
+ return callback(err);
+ }
+
+ txn = _txn;
+
+ txn.onabort = function () {
+ callback(error || createError(UNKNOWN_ERROR, 'transaction was aborted'));
+ };
+ txn.ontimeout = idbError(callback);
+
+ txn.oncomplete = function () {
+ idbChanges.notify(dbOpts.name);
+ callback(null, results);
+ };
+
+ // We would like to use promises here, but idb sucks
+ fetchExistingDocs(txn, docs);
+ });
+ }).catch(function (err) {
+ callback(err);
+ });
+}
+
+// 'use strict'; is default when ESM
+
+function allDocsKeys(keys, docStore, allDocsInner) {
+ // It's not guaranted to be returned in right order
+ var valuesBatch = new Array(keys.length);
+ var count = 0;
+ keys.forEach(function (key, index) {
+ docStore.get(key).onsuccess = function (event) {
+ if (event.target.result) {
+ valuesBatch[index] = event.target.result;
+ } else {
+ valuesBatch[index] = {key: key, error: 'not_found'};
+ }
+ count++;
+ if (count === keys.length) {
+ valuesBatch.forEach(function (doc) {
+ allDocsInner(doc);
+ });
+ }
+ };
+ });
+}
+
+function createKeyRange(start, end, inclusiveEnd, key, descending) {
+ try {
+ if (start && end) {
+ if (descending) {
+ return IDBKeyRange.bound(end, start, !inclusiveEnd, false);
+ } else {
+ return IDBKeyRange.bound(start, end, false, !inclusiveEnd);
+ }
+ } else if (start) {
+ if (descending) {
+ return IDBKeyRange.upperBound(start);
+ } else {
+ return IDBKeyRange.lowerBound(start);
+ }
+ } else if (end) {
+ if (descending) {
+ return IDBKeyRange.lowerBound(end, !inclusiveEnd);
+ } else {
+ return IDBKeyRange.upperBound(end, !inclusiveEnd);
+ }
+ } else if (key) {
+ return IDBKeyRange.only(key);
+ }
+ } catch (e) {
+ return {error: e};
+ }
+ return null;
+}
+
+function handleKeyRangeError(opts, metadata, err, callback) {
+ if (err.name === "DataError" && err.code === 0) {
+ // data error, start is less than end
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ return callback(null, returnVal);
+ }
+ callback(createError(IDB_ERROR, err.name, err.message));
+}
+
+function allDocs (txn, metadata, opts, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ // TODO: Weird hack, I dont like it
+ if (opts.limit === 0) {
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: opts.skip,
+ rows: []
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ return callback(null, returnVal);
+ }
+
+ var results = [];
+ var processing = [];
+
+ var start = 'startkey' in opts ? opts.startkey : false;
+ var end = 'endkey' in opts ? opts.endkey : false;
+ var key = 'key' in opts ? opts.key : false;
+ var keys = 'keys' in opts ? opts.keys : false;
+ var skip = opts.skip || 0;
+ var limit = typeof opts.limit === 'number' ? opts.limit : -1;
+ var inclusiveEnd = opts.inclusive_end !== false;
+ var descending = 'descending' in opts && opts.descending ? 'prev' : null;
+
+ var keyRange;
+ if (!keys) {
+ keyRange = createKeyRange(start, end, inclusiveEnd, key, descending);
+ if (keyRange && keyRange.error) {
+ return handleKeyRangeError(opts, metadata, keyRange.error, callback);
+ }
+ }
+
+ var docStore = txn.txn.objectStore(DOC_STORE);
+
+ txn.txn.oncomplete = onTxnComplete;
+
+ if (keys) {
+ return allDocsKeys(opts.keys, docStore, allDocsInner);
+ }
+
+ function include_doc(row, doc) {
+ var docData = doc.revs[doc.rev].data;
+
+ row.doc = docData;
+ row.doc._id = doc.id;
+ row.doc._rev = doc.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(doc);
+ if (conflicts.length) {
+ row.doc._conflicts = conflicts;
+ }
+ }
+ if (opts.attachments && docData._attachments) {
+ for (var name in docData._attachments) {
+ processing.push(processAttachment(name, doc, row.doc, opts.binary));
+ }
+ }
+ }
+
+ function allDocsInner(doc) {
+ if (doc.error && keys) {
+ // key was not found with "keys" requests
+ results.push(doc);
+ return true;
+ }
+
+ var row = {
+ id: doc.id,
+ key: doc.id,
+ value: {
+ rev: doc.rev
+ }
+ };
+
+ var deleted = doc.deleted;
+ if (deleted) {
+ if (keys) {
+ results.push(row);
+ row.value.deleted = true;
+ row.doc = null;
+ }
+ } else if (skip-- <= 0) {
+ results.push(row);
+ if (opts.include_docs) {
+ include_doc(row, doc);
+ }
+ if (--limit === 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function onTxnComplete() {
+ Promise.all(processing).then(function () {
+ var returnVal = {
+ total_rows: metadata.doc_count,
+ offset: 0,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = metadata.seq;
+ }
+ callback(null, returnVal);
+ });
+ }
+
+ var cursor = descending ?
+ docStore.openCursor(keyRange, descending) :
+ docStore.openCursor(keyRange);
+
+ cursor.onsuccess = function (e) {
+
+ var doc = e.target.result && e.target.result.value;
+
+ // Happens if opts does not have limit,
+ // because cursor will end normally then,
+ // when all docs are retrieved.
+ // Would not be needed, if getAll() optimization was used like in #6059
+ if (!doc) { return; }
+
+ // Skip local docs
+ if (doc.id.startsWith('_local/')) {
+ return e.target.result.continue();
+ }
+
+ var continueCursor = allDocsInner(doc);
+ if (continueCursor) {
+ e.target.result.continue();
+ }
+ };
+
+}
+
+function changes (txn, idbChanges, api, dbOpts, opts) {
+ if (txn.error) {
+ return opts.complete(txn.error);
+ }
+
+ if (opts.continuous) {
+ var id = dbOpts.name + ':' + uuid();
+ idbChanges.addListener(dbOpts.name, id, api, opts);
+ idbChanges.notify(dbOpts.name);
+ return {
+ cancel: function () {
+ idbChanges.removeListener(dbOpts.name, id);
+ }
+ };
+ }
+
+ var limit = 'limit' in opts ? opts.limit : -1;
+ if (limit === 0) {
+ limit = 1;
+ }
+
+ var store = txn.txn.objectStore(DOC_STORE).index('seq');
+
+ var filter = filterChange(opts);
+ var received = 0;
+
+ var lastSeq = opts.since || 0;
+ var results = [];
+
+ var processing = [];
+
+ function onReqSuccess(e) {
+ if (!e.target.result) { return; }
+ var cursor = e.target.result;
+ var doc = cursor.value;
+ // Overwrite doc.data, which may have been rewritten (see rewrite.js) with
+ // the clean version for that rev
+ doc.data = doc.revs[doc.rev].data;
+ doc.data._id = doc.id;
+ doc.data._rev = doc.rev;
+ if (doc.deleted) {
+ doc.data._deleted = true;
+ }
+
+ if (opts.doc_ids && opts.doc_ids.indexOf(doc.id) === -1) {
+ return cursor.continue();
+ }
+
+ // WARNING: expecting possible old format
+ var change = opts.processChange(doc.data, doc, opts);
+ change.seq = doc.seq;
+ lastSeq = doc.seq;
+ var filtered = filter(change);
+
+ // If its an error
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ received++;
+ if (opts.return_docs) {
+ results.push(change);
+ }
+
+ if (opts.include_docs && opts.attachments && doc.data._attachments) {
+ var promises = [];
+ for (var name in doc.data._attachments) {
+ var p = processAttachment(name, doc, change.doc, opts.binary);
+ // We add the processing promise to 2 arrays, one tracks all
+ // the promises needed before we fire onChange, the other
+ // ensure we process all attachments before onComplete
+ promises.push(p);
+ processing.push(p);
+ }
+
+ Promise.all(promises).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+ }
+ if (received !== limit) {
+ cursor.continue();
+ }
+ }
+
+ function onTxnComplete() {
+ Promise.all(processing).then(function () {
+ opts.complete(null, {
+ results: results,
+ last_seq: lastSeq
+ });
+ });
+ }
+
+ var req;
+ if (opts.descending) {
+ req = store.openCursor(null, 'prev');
+ } else {
+ req = store.openCursor(IDBKeyRange.lowerBound(opts.since, true));
+ }
+
+ txn.txn.oncomplete = onTxnComplete;
+ req.onsuccess = onReqSuccess;
+}
+
+// 'use strict'; is default when ESM
+
+function getRevisionTree (txn, id, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ var req = txn.txn.objectStore(DOC_STORE).get(id);
+ req.onsuccess = function (e) {
+ if (!e.target.result) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, e.target.result.rev_tree);
+ }
+ };
+}
+
+// 'use strict'; is default when ESM
+
+function doCompaction (txn, id, revs, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ var docStore = txn.txn.objectStore(DOC_STORE);
+
+ docStore.get(id).onsuccess = function (e) {
+ var doc = e.target.result;
+
+ traverseRevTree(doc.rev_tree, function (isLeaf, pos, revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var attachments = [];
+
+ revs.forEach(function (rev) {
+ if (rev in doc.revs) {
+ // Make a list of attachments that are used by the revisions being
+ // deleted
+ if (doc.revs[rev].data._attachments) {
+ for (var k in doc.revs[rev].data._attachments) {
+ attachments.push(doc.revs[rev].data._attachments[k].digest);
+ }
+ }
+ delete doc.revs[rev];
+ }
+ });
+
+ // Attachments have a list of revisions that are using them, when
+ // that list becomes empty we can delete the attachment.
+ attachments.forEach(function (digest) {
+ revs.forEach(function (rev) {
+ delete doc.attachments[digest].revs[rev];
+ });
+ if (!Object.keys(doc.attachments[digest].revs).length) {
+ delete doc.attachments[digest];
+ }
+ });
+
+ docStore.put(doc);
+ };
+
+ txn.txn.oncomplete = function () {
+ callback();
+ };
+}
+
+function destroy (dbOpts, openDatabases, idbChanges, callback) {
+
+ idbChanges.removeAllListeners(dbOpts.name);
+
+ function doDestroy() {
+ var req = indexedDB.deleteDatabase(dbOpts.name);
+ req.onsuccess = function () {
+ delete openDatabases[dbOpts.name];
+ callback(null, {ok: true});
+ };
+ }
+
+ // If the database is open we need to close it
+ if (dbOpts.name in openDatabases) {
+ openDatabases[dbOpts.name].then(function (res) {
+ res.idb.close();
+ doDestroy();
+ });
+ } else {
+ doDestroy();
+ }
+
+}
+
+// 'use strict'; is default when ESM
+
+// Adapted from
+// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-find/src/adapters/local/find/query-planner.js#L20-L24
+// This could change / improve in the future?
+var COUCH_COLLATE_LO = null;
+var COUCH_COLLATE_HI = '\uffff'; // actually used as {"\uffff": {}}
+
+// Adapted from: https://www.w3.org/TR/IndexedDB/#compare-two-keys
+// Importantly, *there is no upper bound possible* in idb. The ideal data
+// structure an infintely deep array:
+// var IDB_COLLATE_HI = []; IDB_COLLATE_HI.push(IDB_COLLATE_HI)
+// But IDBKeyRange is not a fan of shenanigans, so I've just gone with 12 layers
+// because it looks nice and surely that's enough!
+var IDB_COLLATE_LO = Number.NEGATIVE_INFINITY;
+var IDB_COLLATE_HI = [[[[[[[[[[[[]]]]]]]]]]]];
+
+//
+// TODO: this should be made offical somewhere and used by AllDocs / get /
+// changes etc as well.
+//
+function externaliseRecord(idbDoc) {
+ var doc = idbDoc.revs[idbDoc.rev].data;
+ doc._id = idbDoc.id;
+ doc._rev = idbDoc.rev;
+ if (idbDoc.deleted) {
+ doc._deleted = true;
+ }
+
+ return doc;
+}
+
+/**
+ * Generates a keyrange based on the opts passed to query
+ *
+ * The first key is always 0, as that's how we're filtering out deleted entries.
+ */
+function generateKeyRange(opts) {
+ function defined(obj, k) {
+ return obj[k] !== void 0;
+ }
+
+ // Converts a valid CouchDB key into a valid IndexedDB one
+ function convert(key, exact) {
+ // The first item in every native index is doc.deleted, and we always want
+ // to only search documents that are not deleted.
+ // "foo" -> [0, "foo"]
+ var filterDeleted = [0].concat(key);
+
+ return filterDeleted.map(function (k) {
+ // null, true and false are not indexable by indexeddb. When we write
+ // these values we convert them to these constants, and so when we
+ // query for them we need to convert the query also.
+ if (k === null && exact) {
+ // for non-exact queries we treat null as a collate property
+ // see `if (!exact)` block below
+ return IDB_NULL;
+ } else if (k === true) {
+ return IDB_TRUE;
+ } else if (k === false) {
+ return IDB_FALSE;
+ }
+
+ if (!exact) {
+ // We get passed CouchDB's collate low and high values, so for non-exact
+ // ranged queries we're going to convert them to our IDB equivalents
+ if (k === COUCH_COLLATE_LO) {
+ return IDB_COLLATE_LO;
+ } else if (Object.prototype.hasOwnProperty.call(k, COUCH_COLLATE_HI)) {
+ return IDB_COLLATE_HI;
+ }
+ }
+
+ return k;
+ });
+ }
+
+ // CouchDB and so PouchdB defaults to true. We need to make this explicit as
+ // we invert these later for IndexedDB.
+ if (!defined(opts, 'inclusive_end')) {
+ opts.inclusive_end = true;
+ }
+ if (!defined(opts, 'inclusive_start')) {
+ opts.inclusive_start = true;
+ }
+
+ if (opts.descending) {
+ // Flip before generating. We'll check descending again later when performing
+ // an index request
+ var realEndkey = opts.startkey,
+ realInclusiveEnd = opts.inclusive_start;
+
+ opts.startkey = opts.endkey;
+ opts.endkey = realEndkey;
+ opts.inclusive_start = opts.inclusive_end;
+ opts.inclusive_end = realInclusiveEnd;
+ }
+
+ try {
+ if (defined(opts, 'key')) {
+ return IDBKeyRange.only(convert(opts.key, true));
+ }
+
+ if (defined(opts, 'startkey') && !defined(opts, 'endkey')) {
+ // lowerBound, but without the deleted docs.
+ // [1] is the start of the deleted doc range, and we don't want to include then.
+ return IDBKeyRange.bound(
+ convert(opts.startkey), [1],
+ !opts.inclusive_start, true
+ );
+ }
+
+ if (!defined(opts, 'startkey') && defined(opts, 'endkey')) {
+ return IDBKeyRange.upperBound(convert(opts.endkey), !opts.inclusive_end);
+ }
+
+ if (defined(opts, 'startkey') && defined(opts, 'endkey')) {
+ return IDBKeyRange.bound(
+ convert(opts.startkey), convert(opts.endkey),
+ !opts.inclusive_start, !opts.inclusive_end
+ );
+ }
+
+ return IDBKeyRange.only([0]);
+ } catch (err) {
+ console.error('Could not generate keyRange', err, opts);
+ throw Error('Could not generate key range with ' + JSON.stringify(opts));
+ }
+}
+
+function getIndexHandle(pdb, fields, reject) {
+ var indexName = naturalIndexName(fields);
+
+ return new Promise(function (resolve) {
+ pdb._openTransactionSafely([DOC_STORE], 'readonly', function (err, txn) {
+ if (err) {
+ return idbError(reject)(err);
+ }
+
+ txn.onabort = idbError(reject);
+ txn.ontimeout = idbError(reject);
+
+ var existingIndexNames = Array.from(txn.objectStore(DOC_STORE).indexNames);
+
+ if (existingIndexNames.indexOf(indexName) === -1) {
+ // The index is missing, force a db restart and try again
+ pdb._freshen()
+ .then(function () { return getIndexHandle(pdb, fields, reject); })
+ .then(resolve);
+ } else {
+ resolve(txn.objectStore(DOC_STORE).index(indexName));
+ }
+ });
+ });
+}
+
+// In theory we should return something like the doc example below, but find
+// only needs rows: [{doc: {...}}], so I think we can just not bother for now
+// {
+// "offset" : 0,
+// "rows": [{
+// "id": "doc3",
+// "key": "Lisa Says",
+// "value": null,
+// "doc": {
+// "_id": "doc3",
+// "_rev": "1-z",
+// "title": "Lisa Says"
+// }
+// }],
+// "total_rows" : 4
+// }
+function query(idb, signature, opts, fallback) {
+ // At this stage, in the current implementation, find has already gone through
+ // and determined if the index already exists from PouchDB's perspective (eg
+ // there is a design doc for it).
+ //
+ // If we find that the index doesn't exist this means we have to close and
+ // re-open the DB to correct indexes before proceeding, at which point the
+ // index should exist.
+
+ var pdb = this;
+
+ // Assumption, there will be only one /, between the design document name
+ // and the view name.
+ var parts = signature.split('/');
+
+ return new Promise(function (resolve, reject) {
+ pdb.get('_design/' + parts[0]).then(function (ddoc) {
+ if (isPartialFilterView(ddoc, parts[1])) {
+ // Fix for #8522
+ // An IndexedDB index is always over all entries. And there is no way to filter them.
+ // Therefore the normal findAbstractMapper will be used
+ // for indexes with partial_filter_selector.
+ return fallback(signature, opts).then(resolve, reject);
+ }
+
+ var fields = rawIndexFields(ddoc, parts[1]);
+ if (!fields) {
+ throw new Error('ddoc ' + ddoc._id +' with view ' + parts[1] +
+ ' does not have map.options.def.fields defined.');
+ }
+
+ var skip = opts.skip;
+ var limit = Number.isInteger(opts.limit) && opts.limit;
+
+ return getIndexHandle(pdb, fields, reject)
+ .then(function (indexHandle) {
+ var keyRange = generateKeyRange(opts);
+ var req = indexHandle.openCursor(keyRange, opts.descending ? 'prev' : 'next');
+
+ var rows = [];
+ req.onerror = idbError(reject);
+ req.onsuccess = function (e) {
+ var cursor = e.target.result;
+
+ if (!cursor || limit === 0) {
+ return resolve({
+ rows: rows
+ });
+ }
+
+ if (skip) {
+ cursor.advance(skip);
+ skip = false;
+ return;
+ }
+
+ if (limit) {
+ limit = limit - 1;
+ }
+
+ rows.push({doc: externaliseRecord(cursor.value)});
+ cursor.continue();
+ };
+ });
+ })
+ .catch(reject);
+ });
+
+}
+
+function viewCleanup(idb, fallback) {
+ // I'm not sure we have to do anything here.
+ //
+ // One option is to just close and re-open the DB, which performs the same
+ // action. The only reason you'd want to call this is if you deleted a bunch
+ // of indexes and wanted the space back immediately.
+ //
+ // Otherwise index cleanup happens when:
+ // - A DB is opened
+ // - A find query is performed against an index that doesn't exist but should
+
+ // Fix for #8522
+ // On views with partial_filter_selector the standard find-abstract-mapper is used.
+ // Its indexes must be cleaned up.
+ // Fallback is the standard viewCleanup.
+ return fallback();
+}
+
+function purgeAttachments(doc, revs) {
+ if (!doc.attachments) {
+ // If there are no attachments, doc.attachments is an empty object
+ return {};
+ }
+
+ // Iterate over all attachments and remove the respective revs
+ for (let key in doc.attachments) {
+ const attachment = doc.attachments[key];
+
+ for (let rev of revs) {
+ if (attachment.revs[rev]) {
+ delete attachment.revs[rev];
+ }
+ }
+
+ if (Object.keys(attachment.revs).length === 0) {
+ delete doc.attachments[key];
+ }
+ }
+
+ return doc.attachments;
+}
+
+// `purge()` expects a path of revisions in its revs argument that:
+// - starts with a leaf rev
+// - continues sequentially with the remaining revs of that leaf’s branch
+//
+// eg. for this rev tree:
+// 1-9692 ▶ 2-37aa ▶ 3-df22 ▶ 4-6e94 ▶ 5-df4a ▶ 6-6a3a ▶ 7-57e5
+// ┃ ┗━━━━━━▶ 5-8d8c ▶ 6-65e0
+// ┗━━━━━━▶ 3-43f6 ▶ 4-a3b4
+//
+// …if you wanted to purge '7-57e5', you would provide ['7-57e5', '6-6a3a', '5-df4a']
+//
+// The purge adapter implementation in `pouchdb-core` uses the helper function `findPathToLeaf`
+// from `pouchdb-merge` to construct this array correctly. Since this purge implementation is
+// only ever called from there, we do no additional checks here as to whether `revs` actually
+// fulfills the criteria above, since `findPathToLeaf` already does these.
+function purge(txn, docId, revs, callback) {
+ if (txn.error) {
+ return callback(txn.error);
+ }
+
+ const docStore = txn.txn.objectStore(DOC_STORE);
+ const deletedRevs = [];
+ let documentWasRemovedCompletely = false;
+ docStore.get(docId).onsuccess = (e) => {
+ const doc = e.target.result;
+
+ // we could do a dry run here to check if revs is a proper path towards a leaf in the rev tree
+
+ for (const rev of revs) {
+ // purge rev from tree
+ doc.rev_tree = removeLeafFromTree(doc.rev_tree, rev);
+
+ // assign new revs
+ delete doc.revs[rev];
+ deletedRevs.push(rev);
+ }
+
+ if (doc.rev_tree.length === 0) {
+ // if the rev tree is empty, we can delete the entire document
+ docStore.delete(doc.id);
+ documentWasRemovedCompletely = true;
+ return;
+ }
+
+ // find new winning rev
+ doc.rev = winningRev(doc);
+ doc.data = doc.revs[doc.rev].data;
+ doc.attachments = purgeAttachments(doc, revs);
+
+ // finally, write the purged doc
+ docStore.put(doc);
+ };
+
+ txn.txn.oncomplete = function () {
+ callback(null, {
+ ok: true,
+ deletedRevs,
+ documentWasRemovedCompletely
+ });
+ };
+}
+
+// 'use strict'; is default when ESM
+
+var ADAPTER_NAME = 'indexeddb';
+
+// TODO: Constructor should be capitalised
+var idbChanges = new changesHandler();
+
+// A shared list of database handles
+var openDatabases = {};
+
+function IdbPouch(dbOpts, callback) {
+
+ if (dbOpts.view_adapter) {
+ console.log('Please note that the indexeddb adapter manages _find indexes itself, therefore it is not using your specified view_adapter');
+ }
+
+ var api = this;
+ var metadata = {};
+
+ // Wrapper that gives you an active DB handle. You probably want $t.
+ var $ = function (fun) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ args.unshift(res.idb);
+ fun.apply(api, args);
+ }).catch(function (err) {
+ var last = args.pop();
+ if (typeof last === 'function') {
+ last(err);
+ } else {
+ console.error(err);
+ }
+ });
+ };
+ };
+ // the promise version of $
+ var $p = function (fun) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+
+ return setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ args.unshift(res.idb);
+
+ return fun.apply(api, args);
+ });
+ };
+ };
+ // Wrapper that gives you a safe transaction handle. It's important to use
+ // this instead of opening your own transaction from a db handle got from $,
+ // because in the time between getting the db handle and opening the
+ // transaction it may have been invalidated by index changes.
+ var $t = function (fun, stores, mode) {
+ stores = stores || [DOC_STORE];
+ mode = mode || 'readonly';
+
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ var txn = {};
+ setup(openDatabases, api, dbOpts).then(function (res) {
+ metadata = res.metadata;
+ txn.txn = res.idb.transaction(stores, mode);
+ }).catch(function (err) {
+ console.error('Failed to establish transaction safely');
+ console.error(err);
+ txn.error = err;
+ }).then(function () {
+ args.unshift(txn);
+ fun.apply(api, args);
+ });
+ };
+ };
+
+ api._openTransactionSafely = function (stores, mode, callback) {
+ $t(function (txn, callback) {
+ callback(txn.error, txn.txn);
+ }, stores, mode)(callback);
+ };
+
+ api._remote = false;
+ api.type = function () { return ADAPTER_NAME; };
+
+ api._id = $(function (_, cb) {
+ cb(null, metadata.db_uuid);
+ });
+
+ api._info = $(function (_, cb) {
+ return info(metadata, cb);
+ });
+
+ api._get = $t(get);
+
+ api._bulkDocs = $(function (_, req, opts, callback) {
+ bulkDocs(api, req, opts, metadata, dbOpts, idbChanges, callback);
+ });
+
+ api._allDocs = $t(function (txn, opts, cb) {
+ allDocs(txn, metadata, opts, cb);
+ });
+
+ api._getAttachment = $t(getAttachment);
+
+ api._changes = $t(function (txn, opts) {
+ changes(txn, idbChanges, api, dbOpts, opts);
+ });
+
+ api._getRevisionTree = $t(getRevisionTree);
+ api._doCompaction = $t(doCompaction, [DOC_STORE], 'readwrite');
+
+ api._customFindAbstractMapper = {
+ query: $p(query),
+ viewCleanup: $p(viewCleanup)
+ };
+
+ api._destroy = function (opts, callback) {
+ return destroy(dbOpts, openDatabases, idbChanges, callback);
+ };
+
+ api._close = $(function (db, cb) {
+ delete openDatabases[dbOpts.name];
+ db.close();
+ cb();
+ });
+
+ // Closing and re-opening the DB re-generates native indexes
+ api._freshen = function () {
+ return new Promise(function (resolve) {
+ api._close(function () {
+ $(resolve)();
+ });
+ });
+ };
+
+ api._purge = $t(purge, [DOC_STORE], 'readwrite');
+
+ // TODO: this setTimeout seems nasty, if its needed lets
+ // figure out / explain why
+ setTimeout(function () {
+ callback(null, api);
+ });
+}
+
+// TODO: this isnt really valid permanently, just being lazy to start
+IdbPouch.valid = function () {
+ return true;
+};
+
+function index (PouchDB) {
+ PouchDB.adapter(ADAPTER_NAME, IdbPouch, true);
+}
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb-core.js b/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb-core.js
new file mode 100644
index 0000000000..82d7874eb6
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb-core.js
@@ -0,0 +1,1573 @@
+import levelup from 'levelup';
+import sublevelPouch from './pouchdb-sublevel.js';
+import { o as obj } from './through2-358f03fa.js';
+import Deque from 'double-ended-queue';
+import PouchDB from 'pouchdb-core';
+import { nextTick, changesHandler, clone, functionName, uuid, filterChange } from 'pouchdb-utils';
+import { allDocsKeysQuery, isLocalId, parseDoc, isDeleted, processDocs } from 'pouchdb-adapter-utils';
+import { traverseRevTree, latest, winningRev, collectConflicts, compactTree } from 'pouchdb-merge';
+import { safeJsonStringify, safeJsonParse } from 'pouchdb-json';
+import { binaryMd5 } from 'pouchdb-md5';
+import { typedBuffer, binaryStringToBlobOrBuffer } from 'pouchdb-binary-utils';
+import { createError, NOT_OPEN, MISSING_DOC, REV_CONFLICT, MISSING_STUB, BAD_ARG } from 'pouchdb-errors';
+import 'ltgt';
+import 'node:events';
+import 'level-codec';
+import './_commonjsHelpers-7d1333e8.js';
+import 'stream';
+import 'events';
+import 'buffer';
+import 'util';
+
+function readAsBlobOrBuffer(storedObject, type) {
+ // In Node, we've stored a buffer
+ storedObject.type = type; // non-standard, but used for consistency
+ return storedObject;
+}
+
+// in Node, we store the buffer directly
+function prepareAttachmentForStorage(attData, cb) {
+ cb(attData);
+}
+
+function createEmptyBlobOrBuffer(type) {
+ return typedBuffer('', 'binary', type);
+}
+
+// similar to an idb or websql transaction object
+
+function getCacheFor(transaction, store) {
+ var prefix = store.prefix()[0];
+ var cache = transaction._cache;
+ var subCache = cache.get(prefix);
+ if (!subCache) {
+ subCache = new Map();
+ cache.set(prefix, subCache);
+ }
+ return subCache;
+}
+
+class LevelTransaction {
+ constructor() {
+ this._batch = [];
+ this._cache = new Map();
+ }
+
+ get(store, key, callback) {
+ var cache = getCacheFor(this, store);
+ var exists = cache.get(key);
+ if (exists) {
+ return nextTick(function () {
+ callback(null, exists);
+ });
+ } else if (exists === null) { // deleted marker
+ /* istanbul ignore next */
+ return nextTick(function () {
+ callback({name: 'NotFoundError'});
+ });
+ }
+ store.get(key, function (err, res) {
+ if (err) {
+ /* istanbul ignore else */
+ if (err.name === 'NotFoundError') {
+ cache.set(key, null);
+ }
+ return callback(err);
+ }
+ cache.set(key, res);
+ callback(null, res);
+ });
+ }
+
+ batch(batch) {
+ for (var i = 0, len = batch.length; i < len; i++) {
+ var operation = batch[i];
+
+ var cache = getCacheFor(this, operation.prefix);
+
+ if (operation.type === 'put') {
+ cache.set(operation.key, operation.value);
+ } else {
+ cache.set(operation.key, null);
+ }
+ }
+ this._batch = this._batch.concat(batch);
+ }
+
+ execute(db, callback) {
+ var keys = new Set();
+ var uniqBatches = [];
+
+ // remove duplicates; last one wins
+ for (var i = this._batch.length - 1; i >= 0; i--) {
+ var operation = this._batch[i];
+ var lookupKey = operation.prefix.prefix()[0] + '\xff' + operation.key;
+ if (keys.has(lookupKey)) {
+ continue;
+ }
+ keys.add(lookupKey);
+ uniqBatches.push(operation);
+ }
+
+ db.batch(uniqBatches, callback);
+ }
+}
+
+var DOC_STORE = 'document-store';
+var BY_SEQ_STORE = 'by-sequence';
+var ATTACHMENT_STORE = 'attach-store';
+var BINARY_STORE = 'attach-binary-store';
+var LOCAL_STORE = 'local-store';
+var META_STORE = 'meta-store';
+
+// leveldb barks if we try to open a db multiple times
+// so we cache opened connections here for initstore()
+var dbStores = new Map();
+
+// store the value of update_seq in the by-sequence store the key name will
+// never conflict, since the keys in the by-sequence store are integers
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var MD5_PREFIX = 'md5-';
+
+var safeJsonEncoding = {
+ encode: safeJsonStringify,
+ decode: safeJsonParse,
+ buffer: false,
+ type: 'cheap-json'
+};
+
+var levelChanges = new changesHandler();
+
+// winningRev and deleted are performance-killers, but
+// in newer versions of PouchDB, they are cached on the metadata
+function getWinningRev(metadata) {
+ return 'winningRev' in metadata ?
+ metadata.winningRev : winningRev(metadata);
+}
+
+function getIsDeleted(metadata, winningRev) {
+ return 'deleted' in metadata ?
+ metadata.deleted : isDeleted(metadata, winningRev);
+}
+
+function fetchAttachment(att, stores, opts) {
+ var type = att.content_type;
+ return new Promise(function (resolve, reject) {
+ stores.binaryStore.get(att.digest, function (err, buffer) {
+ var data;
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return reject(err);
+ } else {
+ // empty
+ if (!opts.binary) {
+ data = '';
+ } else {
+ data = binaryStringToBlobOrBuffer('', type);
+ }
+ }
+ } else { // non-empty
+ if (opts.binary) {
+ data = readAsBlobOrBuffer(buffer, type);
+ } else {
+ data = buffer.toString('base64');
+ }
+ }
+ delete att.stub;
+ delete att.length;
+ att.data = data;
+ resolve();
+ });
+ });
+}
+
+function fetchAttachments(results, stores, opts) {
+ var atts = [];
+ results.forEach(function (row) {
+ if (!(row.doc && row.doc._attachments)) {
+ return;
+ }
+ var attNames = Object.keys(row.doc._attachments);
+ attNames.forEach(function (attName) {
+ var att = row.doc._attachments[attName];
+ if (!('data' in att)) {
+ atts.push(att);
+ }
+ });
+ });
+
+ return Promise.all(atts.map(function (att) {
+ return fetchAttachment(att, stores, opts);
+ }));
+}
+
+function LevelPouch(opts, callback) {
+ opts = clone(opts);
+ var api = this;
+ var instanceId;
+ var stores = {};
+ var revLimit = opts.revs_limit;
+ var db;
+ var name = opts.name;
+ // TODO: this is undocumented and unused probably
+ /* istanbul ignore else */
+ if (typeof opts.createIfMissing === 'undefined') {
+ opts.createIfMissing = true;
+ }
+
+ var leveldown = opts.db;
+
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ dbStore = new Map();
+ dbStores.set(leveldownName, dbStore);
+ }
+ if (dbStore.has(name)) {
+ db = dbStore.get(name);
+ afterDBCreated();
+ } else {
+ dbStore.set(name, sublevelPouch(levelup(leveldown(name), opts, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ dbStore.delete(name);
+ return callback(err);
+ }
+ db = dbStore.get(name);
+ db._docCount = -1;
+ db._queue = new Deque();
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationOne(name, db, afterDBCreated);
+ } else {
+ afterDBCreated();
+ }
+ })));
+ }
+
+ function afterDBCreated() {
+ stores.docStore = db.sublevel(DOC_STORE, {valueEncoding: safeJsonEncoding});
+ stores.bySeqStore = db.sublevel(BY_SEQ_STORE, {valueEncoding: 'json'});
+ stores.attachmentStore =
+ db.sublevel(ATTACHMENT_STORE, {valueEncoding: 'json'});
+ stores.binaryStore = db.sublevel(BINARY_STORE, {valueEncoding: 'binary'});
+ stores.localStore = db.sublevel(LOCAL_STORE, {valueEncoding: 'json'});
+ stores.metaStore = db.sublevel(META_STORE, {valueEncoding: 'json'});
+ /* istanbul ignore else */
+ if (typeof opts.migrate === 'object') { // migration for leveldown
+ opts.migrate.doMigrationTwo(db, stores, afterLastMigration);
+ } else {
+ afterLastMigration();
+ }
+ }
+
+ function afterLastMigration() {
+ stores.metaStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (typeof db._updateSeq === 'undefined') {
+ db._updateSeq = value || 0;
+ }
+ stores.metaStore.get(DOC_COUNT_KEY, function (err, value) {
+ db._docCount = !err ? value : 0;
+ stores.metaStore.get(UUID_KEY, function (err, value) {
+ instanceId = !err ? value : uuid();
+ stores.metaStore.put(UUID_KEY, instanceId, function () {
+ nextTick(function () {
+ callback(null, api);
+ });
+ });
+ });
+ });
+ });
+ }
+
+ function countDocs(callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(new Error('database is closed'));
+ }
+ return callback(null, db._docCount); // use cached value
+ }
+
+ api._remote = false;
+ /* istanbul ignore next */
+ api.type = function () {
+ return 'leveldb';
+ };
+
+ api._id = function (callback) {
+ callback(null, instanceId);
+ };
+
+ api._info = function (callback) {
+ var res = {
+ doc_count: db._docCount,
+ update_seq: db._updateSeq,
+ backend_adapter: functionName(leveldown)
+ };
+ return nextTick(function () {
+ callback(null, res);
+ });
+ };
+
+ function tryCode(fun, args) {
+ try {
+ fun.apply(null, args);
+ } catch (err) {
+ args[args.length - 1](err);
+ }
+ }
+
+ function executeNext() {
+ var firstTask = db._queue.peekFront();
+
+ if (firstTask.type === 'read') {
+ runReadOperation(firstTask);
+ } else { // write, only do one at a time
+ runWriteOperation(firstTask);
+ }
+ }
+
+ function runReadOperation(firstTask) {
+ // do multiple reads at once simultaneously, because it's safe
+
+ var readTasks = [firstTask];
+ var i = 1;
+ var nextTask = db._queue.get(i);
+ while (typeof nextTask !== 'undefined' && nextTask.type === 'read') {
+ readTasks.push(nextTask);
+ i++;
+ nextTask = db._queue.get(i);
+ }
+
+ var numDone = 0;
+
+ readTasks.forEach(function (readTask) {
+ var args = readTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ if (++numDone === readTasks.length) {
+ nextTick(function () {
+ // all read tasks have finished
+ readTasks.forEach(function () {
+ db._queue.shift();
+ });
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ }
+ };
+ tryCode(readTask.fun, args);
+ });
+ }
+
+ function runWriteOperation(firstTask) {
+ var args = firstTask.args;
+ var callback = args[args.length - 1];
+ args[args.length - 1] = function (...cbArgs) {
+ callback.apply(null, cbArgs);
+ nextTick(function () {
+ db._queue.shift();
+ if (db._queue.length) {
+ executeNext();
+ }
+ });
+ };
+ tryCode(firstTask.fun, args);
+ }
+
+ // all read/write operations to the database are done in a queue,
+ // similar to how websql/idb works. this avoids problems such
+ // as e.g. compaction needing to have a lock on the database while
+ // it updates stuff. in the future we can revisit this.
+ function writeLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'write'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick(executeNext);
+ }
+ };
+ }
+
+ // same as the writelock, but multiple can run at once
+ function readLock(fun) {
+ return function (...args) {
+ db._queue.push({
+ fun: fun,
+ args: args,
+ type: 'read'
+ });
+
+ if (db._queue.length === 1) {
+ nextTick(executeNext);
+ }
+ };
+ }
+
+ function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+ }
+
+ function parseSeq(s) {
+ return parseInt(s, 10);
+ }
+
+ api._get = readLock(function (id, opts, callback) {
+ opts = clone(opts);
+
+ stores.docStore.get(id, function (err, metadata) {
+
+ if (err || !metadata) {
+ return callback(createError(MISSING_DOC, 'missing'));
+ }
+
+ var rev;
+ if (!opts.rev) {
+ rev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, rev);
+ if (deleted) {
+ return callback(createError(MISSING_DOC, "deleted"));
+ }
+ } else {
+ rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;
+ }
+
+ var seq = metadata.rev_map[rev];
+
+ stores.bySeqStore.get(formatSeq(seq), function (err, doc) {
+ if (!doc) {
+ return callback(createError(MISSING_DOC));
+ }
+ /* istanbul ignore if */
+ if ('_id' in doc && doc._id !== metadata.id) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ doc._id = metadata.id;
+ if ('_rev' in doc) {
+ /* istanbul ignore if */
+ if (doc._rev !== rev) {
+ // this failing implies something very wrong
+ return callback(new Error('wrong doc returned'));
+ }
+ } else {
+ // we didn't always store this
+ doc._rev = rev;
+ }
+ return callback(null, {doc: doc, metadata: metadata});
+ });
+ });
+ });
+
+ // not technically part of the spec, but if putAttachment has its own
+ // method...
+ api._getAttachment = function (docId, attachId, attachment, opts, callback) {
+ var digest = attachment.digest;
+ var type = attachment.content_type;
+
+ stores.binaryStore.get(digest, function (err, attach) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ }
+ // Empty attachment
+ return callback(null, opts.binary ? createEmptyBlobOrBuffer(type) : '');
+ }
+
+ if (opts.binary) {
+ callback(null, readAsBlobOrBuffer(attach, type));
+ } else {
+ callback(null, attach.toString('base64'));
+ }
+ });
+ };
+
+ api._bulkDocs = writeLock(function (req, opts, callback) {
+ var newEdits = opts.new_edits;
+ var results = new Array(req.docs.length);
+ var fetchedDocs = new Map();
+ var stemmedRevs = new Map();
+
+ var txn = new LevelTransaction();
+ var docCountDelta = 0;
+ var newUpdateSeq = db._updateSeq;
+
+ // parse the docs and give each a sequence number
+ var userDocs = req.docs;
+ var docInfos = userDocs.map(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ return doc;
+ }
+ var newDoc = parseDoc(doc, newEdits, api.__opts);
+
+ if (newDoc.metadata && !newDoc.metadata.rev_map) {
+ newDoc.metadata.rev_map = {};
+ }
+
+ return newDoc;
+ });
+ var infoErrors = docInfos.filter(function (doc) {
+ return doc.error;
+ });
+
+ if (infoErrors.length) {
+ return callback(infoErrors[0]);
+ }
+
+ // verify any stub attachments as a precondition test
+
+ function verifyAttachment(digest, callback) {
+ txn.get(stores.attachmentStore, digest, function (levelErr) {
+ if (levelErr) {
+ var err = createError(MISSING_STUB,
+ 'unknown stub attachment with digest ' +
+ digest);
+ callback(err);
+ } else {
+ callback();
+ }
+ });
+ }
+
+ function verifyAttachments(finish) {
+ var digests = [];
+ userDocs.forEach(function (doc) {
+ if (doc && doc._attachments) {
+ Object.keys(doc._attachments).forEach(function (filename) {
+ var att = doc._attachments[filename];
+ if (att.stub) {
+ digests.push(att.digest);
+ }
+ });
+ }
+ });
+ if (!digests.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var err;
+
+ digests.forEach(function (digest) {
+ verifyAttachment(digest, function (attErr) {
+ if (attErr && !err) {
+ err = attErr;
+ }
+
+ if (++numDone === digests.length) {
+ finish(err);
+ }
+ });
+ });
+ }
+
+ function fetchExistingDocs(finish) {
+ var numDone = 0;
+ var overallErr;
+ function checkDone() {
+ if (++numDone === userDocs.length) {
+ return finish(overallErr);
+ }
+ }
+
+ userDocs.forEach(function (doc) {
+ if (doc._id && isLocalId(doc._id)) {
+ // skip local docs
+ return checkDone();
+ }
+ txn.get(stores.docStore, doc._id, function (err, info) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ overallErr = err;
+ }
+ } else {
+ fetchedDocs.set(doc._id, info);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ function compact(revsMap, callback) {
+ var promise = Promise.resolve();
+ revsMap.forEach(function (revs, docId) {
+ // TODO: parallelize, for now need to be sequential to
+ // pass orphaned attachment tests
+ promise = promise.then(function () {
+ return new Promise(function (resolve, reject) {
+ api._doCompactionNoLock(docId, revs, {ctx: txn}, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return reject(err);
+ }
+ resolve();
+ });
+ });
+ });
+ });
+
+ promise.then(function () {
+ callback();
+ }, callback);
+ }
+
+ function autoCompact(callback) {
+ var revsMap = new Map();
+ fetchedDocs.forEach(function (metadata, docId) {
+ revsMap.set(docId, compactTree(metadata));
+ });
+ compact(revsMap, callback);
+ }
+
+ function finish() {
+ compact(stemmedRevs, function (error) {
+ /* istanbul ignore if */
+ if (error) {
+ complete(error);
+ }
+ if (api.auto_compaction) {
+ return autoCompact(complete);
+ }
+ complete();
+ });
+ }
+
+ function writeDoc(docInfo, winningRev, winningRevIsDeleted, newRevIsDeleted,
+ isUpdate, delta, resultsIdx, callback2) {
+ docCountDelta += delta;
+
+ var err = null;
+ var recv = 0;
+
+ docInfo.metadata.winningRev = winningRev;
+ docInfo.metadata.deleted = winningRevIsDeleted;
+
+ docInfo.data._id = docInfo.metadata.id;
+ docInfo.data._rev = docInfo.metadata.rev;
+
+ if (newRevIsDeleted) {
+ docInfo.data._deleted = true;
+ }
+
+ if (docInfo.stemmedRevs.length) {
+ stemmedRevs.set(docInfo.metadata.id, docInfo.stemmedRevs);
+ }
+
+ var attachments = docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) :
+ [];
+
+ function attachmentSaved(attachmentErr) {
+ recv++;
+ if (!err) {
+ /* istanbul ignore if */
+ if (attachmentErr) {
+ err = attachmentErr;
+ callback2(err);
+ } else if (recv === attachments.length) {
+ finish();
+ }
+ }
+ }
+
+ function onMD5Load(doc, key, data, attachmentSaved) {
+ return function (result) {
+ saveAttachment(doc, MD5_PREFIX + result, key, data, attachmentSaved);
+ };
+ }
+
+ function doMD5(doc, key, attachmentSaved) {
+ return function (data) {
+ binaryMd5(data, onMD5Load(doc, key, data, attachmentSaved));
+ };
+ }
+
+ for (var i = 0; i < attachments.length; i++) {
+ var key = attachments[i];
+ var att = docInfo.data._attachments[key];
+
+ if (att.stub) {
+ // still need to update the refs mapping
+ var id = docInfo.data._id;
+ var rev = docInfo.data._rev;
+ saveAttachmentRefs(id, rev, att.digest, attachmentSaved);
+ continue;
+ }
+ var data;
+ if (typeof att.data === 'string') {
+ // input is assumed to be a base64 string
+ try {
+ data = atob(att.data);
+ } catch (e) {
+ callback(createError(BAD_ARG,
+ 'Attachment is not a valid base64 string'));
+ return;
+ }
+ doMD5(docInfo, key, attachmentSaved)(data);
+ } else {
+ prepareAttachmentForStorage(att.data,
+ doMD5(docInfo, key, attachmentSaved));
+ }
+ }
+
+ function finish() {
+ var seq = docInfo.metadata.rev_map[docInfo.metadata.rev];
+ /* istanbul ignore if */
+ if (seq) {
+ // check that there aren't any existing revisions with the same
+ // revision id, else we shouldn't do anything
+ return callback2();
+ }
+ seq = ++newUpdateSeq;
+ docInfo.metadata.rev_map[docInfo.metadata.rev] =
+ docInfo.metadata.seq = seq;
+ var seqKey = formatSeq(seq);
+ var batch = [{
+ key: seqKey,
+ value: docInfo.data,
+ prefix: stores.bySeqStore,
+ type: 'put'
+ }, {
+ key: docInfo.metadata.id,
+ value: docInfo.metadata,
+ prefix: stores.docStore,
+ type: 'put'
+ }];
+ txn.batch(batch);
+ results[resultsIdx] = {
+ ok: true,
+ id: docInfo.metadata.id,
+ rev: docInfo.metadata.rev
+ };
+ fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
+ callback2();
+ }
+
+ if (!attachments.length) {
+ finish();
+ }
+ }
+
+ // attachments are queued per-digest, otherwise the refs could be
+ // overwritten by concurrent writes in the same bulkDocs session
+ var attachmentQueues = {};
+
+ function saveAttachmentRefs(id, rev, digest, callback) {
+
+ function fetchAtt() {
+ return new Promise(function (resolve, reject) {
+ txn.get(stores.attachmentStore, digest, function (err, oldAtt) {
+ /* istanbul ignore if */
+ if (err && err.name !== 'NotFoundError') {
+ return reject(err);
+ }
+ resolve(oldAtt);
+ });
+ });
+ }
+
+ function saveAtt(oldAtt) {
+ var ref = [id, rev].join('@');
+ var newAtt = {};
+
+ if (oldAtt) {
+ if (oldAtt.refs) {
+ // only update references if this attachment already has them
+ // since we cannot migrate old style attachments here without
+ // doing a full db scan for references
+ newAtt.refs = oldAtt.refs;
+ newAtt.refs[ref] = true;
+ }
+ } else {
+ newAtt.refs = {};
+ newAtt.refs[ref] = true;
+ }
+
+ return new Promise(function (resolve) {
+ txn.batch([{
+ type: 'put',
+ prefix: stores.attachmentStore,
+ key: digest,
+ value: newAtt
+ }]);
+ resolve(!oldAtt);
+ });
+ }
+
+ // put attachments in a per-digest queue, to avoid two docs with the same
+ // attachment overwriting each other
+ var queue = attachmentQueues[digest] || Promise.resolve();
+ attachmentQueues[digest] = queue.then(function () {
+ return fetchAtt().then(saveAtt).then(function (isNewAttachment) {
+ callback(null, isNewAttachment);
+ }, callback);
+ });
+ }
+
+ function saveAttachment(docInfo, digest, key, data, callback) {
+ var att = docInfo.data._attachments[key];
+ delete att.data;
+ att.digest = digest;
+ att.length = data.length;
+ var id = docInfo.metadata.id;
+ var rev = docInfo.metadata.rev;
+ att.revpos = parseInt(rev, 10);
+
+ saveAttachmentRefs(id, rev, digest, function (err, isNewAttachment) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ // do not try to store empty attachments
+ if (data.length === 0) {
+ return callback(err);
+ }
+ if (!isNewAttachment) {
+ // small optimization - don't bother writing it again
+ return callback(err);
+ }
+ txn.batch([{
+ type: 'put',
+ prefix: stores.binaryStore,
+ key: digest,
+ value: Buffer.from(data, 'binary')
+ }]);
+ callback();
+ });
+ }
+
+ function complete(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return nextTick(function () {
+ callback(err);
+ });
+ }
+ txn.batch([
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: UPDATE_SEQ_KEY,
+ value: newUpdateSeq
+ },
+ {
+ prefix: stores.metaStore,
+ type: 'put',
+ key: DOC_COUNT_KEY,
+ value: db._docCount + docCountDelta
+ }
+ ]);
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ db._docCount += docCountDelta;
+ db._updateSeq = newUpdateSeq;
+ levelChanges.notify(name);
+ nextTick(function () {
+ callback(null, results);
+ });
+ });
+ }
+
+ if (!docInfos.length) {
+ return callback(null, []);
+ }
+
+ verifyAttachments(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ fetchExistingDocs(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ processDocs(revLimit, docInfos, api, fetchedDocs, txn, results,
+ writeDoc, opts, finish);
+ });
+ });
+ });
+ api._allDocs = function (opts, callback) {
+ if ('keys' in opts) {
+ return allDocsKeysQuery(this, opts);
+ }
+ return readLock(function (opts, callback) {
+ opts = clone(opts);
+ countDocs(function (err, docCount) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var readstreamOpts = {};
+ var skip = opts.skip || 0;
+ if (opts.startkey) {
+ readstreamOpts.gte = opts.startkey;
+ }
+ if (opts.endkey) {
+ readstreamOpts.lte = opts.endkey;
+ }
+ if (opts.key) {
+ readstreamOpts.gte = readstreamOpts.lte = opts.key;
+ }
+ if (opts.descending) {
+ readstreamOpts.reverse = true;
+ // switch start and ends
+ var tmp = readstreamOpts.lte;
+ readstreamOpts.lte = readstreamOpts.gte;
+ readstreamOpts.gte = tmp;
+ }
+ var limit;
+ if (typeof opts.limit === 'number') {
+ limit = opts.limit;
+ }
+ if (limit === 0 ||
+ ('gte' in readstreamOpts && 'lte' in readstreamOpts &&
+ readstreamOpts.gte > readstreamOpts.lte)) {
+ // should return 0 results when start is greater than end.
+ // normally level would "fix" this for us by reversing the order,
+ // so short-circuit instead
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: []
+ };
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ return callback(null, returnVal);
+ }
+ var results = [];
+ var docstream = stores.docStore.readStream(readstreamOpts);
+
+ var throughStream = obj(function (entry, _, next) {
+ var metadata = entry.value;
+ // winningRev and deleted are performance-killers, but
+ // in newer versions of PouchDB, they are cached on the metadata
+ var winningRev = getWinningRev(metadata);
+ var deleted = getIsDeleted(metadata, winningRev);
+ if (!deleted) {
+ if (skip-- > 0) {
+ next();
+ return;
+ } else if (typeof limit === 'number' && limit-- <= 0) {
+ docstream.unpipe();
+ docstream.destroy();
+ next();
+ return;
+ }
+ } else if (opts.deleted !== 'ok') {
+ next();
+ return;
+ }
+ function allDocsInner(data) {
+ var doc = {
+ id: metadata.id,
+ key: metadata.id,
+ value: {
+ rev: winningRev
+ }
+ };
+ if (opts.include_docs) {
+ doc.doc = data;
+ doc.doc._rev = doc.value.rev;
+ if (opts.conflicts) {
+ var conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc.doc._conflicts = conflicts;
+ }
+ }
+ for (var att in doc.doc._attachments) {
+ if (Object.prototype.hasOwnProperty.call(doc.doc._attachments, att)) {
+ doc.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ if (opts.inclusive_end === false && metadata.id === opts.endkey) {
+ return next();
+ } else if (deleted) {
+ if (opts.deleted === 'ok') {
+ doc.value.deleted = true;
+ doc.doc = null;
+ } else {
+ /* istanbul ignore next */
+ return next();
+ }
+ }
+ results.push(doc);
+ next();
+ }
+ if (opts.include_docs) {
+ var seq = metadata.rev_map[winningRev];
+ stores.bySeqStore.get(formatSeq(seq), function (err, data) {
+ allDocsInner(data);
+ });
+ }
+ else {
+ allDocsInner();
+ }
+ }, function (next) {
+ Promise.resolve().then(function () {
+ if (opts.include_docs && opts.attachments) {
+ return fetchAttachments(results, stores, opts);
+ }
+ }).then(function () {
+ var returnVal = {
+ total_rows: docCount,
+ offset: opts.skip,
+ rows: results
+ };
+
+ /* istanbul ignore if */
+ if (opts.update_seq) {
+ returnVal.update_seq = db._updateSeq;
+ }
+ callback(null, returnVal);
+ }, callback);
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ });
+
+ docstream.on('error', callback);
+
+ docstream.pipe(throughStream);
+ });
+ })(opts, callback);
+ };
+
+ api._changes = function (opts) {
+ opts = clone(opts);
+
+ if (opts.continuous) {
+ var id = name + ':' + uuid();
+ levelChanges.addListener(name, id, api, opts);
+ levelChanges.notify(name);
+ return {
+ cancel: function () {
+ levelChanges.removeListener(name, id);
+ }
+ };
+ }
+
+ var descending = opts.descending;
+ var results = [];
+ var lastSeq = opts.since || 0;
+ var called = 0;
+ var streamOpts = {
+ reverse: descending
+ };
+ var limit;
+ if ('limit' in opts && opts.limit > 0) {
+ limit = opts.limit;
+ }
+ if (!streamOpts.reverse) {
+ streamOpts.start = formatSeq(opts.since || 0);
+ }
+
+ var docIds = opts.doc_ids && new Set(opts.doc_ids);
+ var filter = filterChange(opts);
+ var docIdsToMetadata = new Map();
+
+ function complete() {
+ opts.done = true;
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+ changeStream.unpipe(throughStream);
+ changeStream.destroy();
+ if (!opts.continuous && !opts.cancelled) {
+ if (opts.include_docs && opts.attachments && opts.return_docs) {
+ fetchAttachments(results, stores, opts).then(function () {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ });
+ } else {
+ opts.complete(null, {results: results, last_seq: lastSeq});
+ }
+ }
+ }
+ var changeStream = stores.bySeqStore.readStream(streamOpts);
+ var throughStream = obj(function (data, _, next) {
+ if (limit && called >= limit) {
+ complete();
+ return next();
+ }
+ if (opts.cancelled || opts.done) {
+ return next();
+ }
+
+ var seq = parseSeq(data.key);
+ var doc = data.value;
+
+ if (seq === opts.since && !descending) {
+ // couchdb ignores `since` if descending=true
+ return next();
+ }
+
+ if (docIds && !docIds.has(doc._id)) {
+ return next();
+ }
+
+ var metadata;
+
+ function onGetMetadata(metadata) {
+ var winningRev = getWinningRev(metadata);
+
+ function onGetWinningDoc(winningDoc) {
+
+ var change = opts.processChange(winningDoc, metadata, opts);
+ change.seq = metadata.seq;
+
+ var filtered = filter(change);
+ if (typeof filtered === 'object') {
+ return opts.complete(filtered);
+ }
+
+ if (filtered) {
+ called++;
+
+ if (opts.attachments && opts.include_docs) {
+ // fetch attachment immediately for the benefit
+ // of live listeners
+ fetchAttachments([change], stores, opts).then(function () {
+ opts.onChange(change);
+ });
+ } else {
+ opts.onChange(change);
+ }
+
+ if (opts.return_docs) {
+ results.push(change);
+ }
+ }
+ next();
+ }
+
+ if (metadata.seq !== seq) {
+ // some other seq is later
+ return next();
+ }
+
+ lastSeq = seq;
+
+ if (winningRev === doc._rev) {
+ return onGetWinningDoc(doc);
+ }
+
+ // fetch the winner
+
+ var winningSeq = metadata.rev_map[winningRev];
+
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, doc) {
+ onGetWinningDoc(doc);
+ });
+ }
+
+ metadata = docIdsToMetadata.get(doc._id);
+ if (metadata) { // cached
+ return onGetMetadata(metadata);
+ }
+ // metadata not cached, have to go fetch it
+ stores.docStore.get(doc._id, function (err, metadata) {
+ /* istanbul ignore if */
+ if (opts.cancelled || opts.done || db.isClosed() ||
+ isLocalId(metadata.id)) {
+ return next();
+ }
+ docIdsToMetadata.set(doc._id, metadata);
+ onGetMetadata(metadata);
+ });
+ }, function (next) {
+ if (opts.cancelled) {
+ return next();
+ }
+ if (opts.return_docs && opts.limit) {
+ /* istanbul ignore if */
+ if (opts.limit < results.length) {
+ results.length = opts.limit;
+ }
+ }
+
+ next();
+ }).on('unpipe', function () {
+ throughStream.end();
+ complete();
+ });
+ changeStream.pipe(throughStream);
+ return {
+ cancel: function () {
+ opts.cancelled = true;
+ complete();
+ }
+ };
+ };
+
+ api._close = function (callback) {
+ /* istanbul ignore if */
+ if (db.isClosed()) {
+ return callback(createError(NOT_OPEN));
+ }
+ db.close(function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ dbStore.delete(name);
+
+ var adapterName = functionName(leveldown);
+ var adapterStore = dbStores.get(adapterName);
+ var viewNamePrefix = PouchDB.prefix + name + "-mrview-";
+ var keys = [...adapterStore.keys()].filter(k => k.includes(viewNamePrefix));
+ keys.forEach(key => {
+ var eventEmitter = adapterStore.get(key);
+ eventEmitter.removeAllListeners();
+ eventEmitter.close();
+ adapterStore.delete(key);
+ });
+
+ callback();
+ }
+ });
+ };
+
+ api._getRevisionTree = function (docId, callback) {
+ stores.docStore.get(docId, function (err, metadata) {
+ if (err) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, metadata.rev_tree);
+ }
+ });
+ };
+
+ api._doCompaction = writeLock(function (docId, revs, opts, callback) {
+ api._doCompactionNoLock(docId, revs, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._doCompactionNoLock = function (docId, revs, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ if (!revs.length) {
+ return callback();
+ }
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.docStore, docId, function (err, metadata) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ var seqs = revs.map(function (rev) {
+ var seq = metadata.rev_map[rev];
+ delete metadata.rev_map[rev];
+ return seq;
+ });
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ var rev = pos + '-' + revHash;
+ if (revs.indexOf(rev) !== -1) {
+ opts.status = 'missing';
+ }
+ });
+
+ var batch = [];
+ batch.push({
+ key: metadata.id,
+ value: metadata,
+ type: 'put',
+ prefix: stores.docStore
+ });
+
+ var digestMap = {};
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === revs.length) { // done
+ /* istanbul ignore if */
+ if (overallErr) {
+ return callback(overallErr);
+ }
+ deleteOrphanedAttachments();
+ }
+ }
+
+ function finish(err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ txn.batch(batch);
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback();
+ }
+ txn.execute(db, callback);
+ }
+
+ function deleteOrphanedAttachments() {
+ var possiblyOrphanedAttachments = Object.keys(digestMap);
+ if (!possiblyOrphanedAttachments.length) {
+ return finish();
+ }
+ var numDone = 0;
+ var overallErr;
+ function checkDone(err) {
+ /* istanbul ignore if */
+ if (err) {
+ overallErr = err;
+ }
+ if (++numDone === possiblyOrphanedAttachments.length) {
+ finish(overallErr);
+ }
+ }
+ var refsToDelete = new Map();
+ revs.forEach(function (rev) {
+ refsToDelete.set(docId + '@' + rev, true);
+ });
+ possiblyOrphanedAttachments.forEach(function (digest) {
+ txn.get(stores.attachmentStore, digest, function (err, attData) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var refs = Object.keys(attData.refs || {}).filter(function (ref) {
+ return !refsToDelete.has(ref);
+ });
+ var newRefs = {};
+ refs.forEach(function (ref) {
+ newRefs[ref] = true;
+ });
+ if (refs.length) { // not orphaned
+ batch.push({
+ key: digest,
+ type: 'put',
+ value: {refs: newRefs},
+ prefix: stores.attachmentStore
+ });
+ } else { // orphaned, can safely delete
+ batch = batch.concat([{
+ key: digest,
+ type: 'del',
+ prefix: stores.attachmentStore
+ }, {
+ key: digest,
+ type: 'del',
+ prefix: stores.binaryStore
+ }]);
+ }
+ checkDone();
+ });
+ });
+ }
+
+ seqs.forEach(function (seq) {
+ batch.push({
+ key: formatSeq(seq),
+ type: 'del',
+ prefix: stores.bySeqStore
+ });
+ txn.get(stores.bySeqStore, formatSeq(seq), function (err, doc) {
+ /* istanbul ignore if */
+ if (err) {
+ if (err.name === 'NotFoundError') {
+ return checkDone();
+ } else {
+ return checkDone(err);
+ }
+ }
+ var atts = Object.keys(doc._attachments || {});
+ atts.forEach(function (attName) {
+ var digest = doc._attachments[attName].digest;
+ digestMap[digest] = true;
+ });
+ checkDone();
+ });
+ });
+ });
+ };
+
+ api._getLocal = function (id, callback) {
+ stores.localStore.get(id, function (err, doc) {
+ if (err) {
+ callback(createError(MISSING_DOC));
+ } else {
+ callback(null, doc);
+ }
+ });
+ };
+
+ api._putLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._putLocalNoLock(doc, opts, callback);
+ } else {
+ api._putLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._putLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._putLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._putLocalNoLock = function (doc, opts, callback) {
+ delete doc._revisions; // ignore this, trust the rev
+ var oldRev = doc._rev;
+ var id = doc._id;
+
+ var txn = opts.ctx || new LevelTransaction();
+
+ txn.get(stores.localStore, id, function (err, resp) {
+ if (err && oldRev) {
+ return callback(createError(REV_CONFLICT));
+ }
+ if (resp && resp._rev !== oldRev) {
+ return callback(createError(REV_CONFLICT));
+ }
+ doc._rev =
+ oldRev ? '0-' + (parseInt(oldRev.split('-')[1], 10) + 1) : '0-1';
+ var batch = [
+ {
+ type: 'put',
+ prefix: stores.localStore,
+ key: id,
+ value: doc
+ }
+ ];
+
+ txn.batch(batch);
+ var ret = {ok: true, id: doc._id, rev: doc._rev};
+
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ api._removeLocal = function (doc, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (opts.ctx) {
+ api._removeLocalNoLock(doc, opts, callback);
+ } else {
+ api._removeLocalWithLock(doc, opts, callback);
+ }
+ };
+
+ api._removeLocalWithLock = writeLock(function (doc, opts, callback) {
+ api._removeLocalNoLock(doc, opts, callback);
+ });
+
+ // the NoLock version is for use by bulkDocs
+ api._removeLocalNoLock = function (doc, opts, callback) {
+ var txn = opts.ctx || new LevelTransaction();
+ txn.get(stores.localStore, doc._id, function (err, resp) {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.name !== 'NotFoundError') {
+ return callback(err);
+ } else {
+ return callback(createError(MISSING_DOC));
+ }
+ }
+ if (resp._rev !== doc._rev) {
+ return callback(createError(REV_CONFLICT));
+ }
+ txn.batch([{
+ prefix: stores.localStore,
+ type: 'del',
+ key: doc._id
+ }]);
+ var ret = {ok: true, id: doc._id, rev: '0-0'};
+ if (opts.ctx) {
+ // don't execute immediately
+ return callback(null, ret);
+ }
+ txn.execute(db, function (err) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ callback(null, ret);
+ });
+ });
+ };
+
+ // close and delete open leveldb stores
+ api._destroy = function (opts, callback) {
+ var dbStore;
+ var leveldownName = functionName(leveldown);
+ /* istanbul ignore else */
+ if (dbStores.has(leveldownName)) {
+ dbStore = dbStores.get(leveldownName);
+ } else {
+ return callDestroy(name, callback);
+ }
+
+ /* istanbul ignore else */
+ if (dbStore.has(name)) {
+ levelChanges.removeAllListeners(name);
+
+ dbStore.get(name).close(function () {
+ dbStore.delete(name);
+ callDestroy(name, callback);
+ });
+ } else {
+ callDestroy(name, callback);
+ }
+ };
+ function callDestroy(name, cb) {
+ // May not exist if leveldown is backed by memory adapter
+ /* istanbul ignore else */
+ if ('destroy' in leveldown) {
+ leveldown.destroy(name, cb);
+ } else {
+ cb(null);
+ }
+ }
+}
+
+export { LevelPouch as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb.js b/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb.js
new file mode 100644
index 0000000000..83a8f7e4a4
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-leveldb.js
@@ -0,0 +1,265 @@
+import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
+import { fs } from 'pouchdb-platform';
+import path from 'node:path';
+import { isLocalId, winningRev } from 'pouchdb-merge';
+import level from 'level';
+import { o as obj } from './through2-358f03fa.js';
+import LevelWriteStream from 'level-write-stream';
+import 'stream';
+import './_commonjsHelpers-7d1333e8.js';
+import 'events';
+import 'buffer';
+import 'util';
+
+// require leveldown. provide verbose output on error as it is the default
+// nodejs adapter, which we do not provide for the user
+/* istanbul ignore next */
+var requireLeveldown = function () {
+ try {
+ return require('leveldown');
+ } catch (err) {
+ /* eslint no-ex-assign: 0*/
+ err = err || 'leveldown import error';
+ if (err.code === 'MODULE_NOT_FOUND') {
+ // handle leveldown not installed case
+ return new Error([
+ 'the \'leveldown\' package is not available. install it, or,',
+ 'specify another storage backend using the \'db\' option'
+ ].join(' '));
+ } else if (err.message && err.message.match('Module version mismatch')) {
+ // handle common user enviornment error
+ return new Error([
+ err.message,
+ 'This generally implies that leveldown was built with a different',
+ 'version of node than that which is running now. You may try',
+ 'fully removing and reinstalling PouchDB or leveldown to resolve.'
+ ].join(' '));
+ }
+ // handle general internal nodejs require error
+ return new Error(err.toString() + ': unable to import leveldown');
+ }
+};
+
+var stores = [
+ 'document-store',
+ 'by-sequence',
+ 'attach-store',
+ 'attach-binary-store'
+];
+function formatSeq(n) {
+ return ('0000000000000000' + n).slice(-16);
+}
+var UPDATE_SEQ_KEY = '_local_last_update_seq';
+var DOC_COUNT_KEY = '_local_doc_count';
+var UUID_KEY = '_local_uuid';
+
+var doMigrationOne = function (name, db, callback) {
+ // local require to prevent crashing if leveldown isn't installed.
+ var leveldown = require("leveldown");
+
+ var base = path.resolve(name);
+ function move(store, index, cb) {
+ var storePath = path.join(base, store);
+ var opts;
+ if (index === 3) {
+ opts = {
+ valueEncoding: 'binary'
+ };
+ } else {
+ opts = {
+ valueEncoding: 'json'
+ };
+ }
+ var sub = db.sublevel(store, opts);
+ var orig = level(storePath, opts);
+ var from = orig.createReadStream();
+ var writeStream = new LevelWriteStream(sub);
+ var to = writeStream();
+ from.on('end', function () {
+ orig.close(function (err) {
+ cb(err, storePath);
+ });
+ });
+ from.pipe(to);
+ }
+ fs.unlink(base + '.uuid', function (err) {
+ if (err) {
+ return callback();
+ }
+ var todo = 4;
+ var done = [];
+ stores.forEach(function (store, i) {
+ move(store, i, function (err, storePath) {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ done.push(storePath);
+ if (!(--todo)) {
+ done.forEach(function (item) {
+ leveldown.destroy(item, function () {
+ if (++todo === done.length) {
+ fs.rmdir(base, callback);
+ }
+ });
+ });
+ }
+ });
+ });
+ });
+};
+var doMigrationTwo = function (db, stores, callback) {
+ var batches = [];
+ stores.bySeqStore.get(UUID_KEY, function (err, value) {
+ if (err) {
+ // no uuid key, so don't need to migrate;
+ return callback();
+ }
+ batches.push({
+ key: UUID_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UUID_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ stores.bySeqStore.get(DOC_COUNT_KEY, function (err, value) {
+ if (value) {
+ // if no doc count key,
+ // just skip
+ // we can live with this
+ batches.push({
+ key: DOC_COUNT_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: DOC_COUNT_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ stores.bySeqStore.get(UPDATE_SEQ_KEY, function (err, value) {
+ if (value) {
+ // if no UPDATE_SEQ_KEY
+ // just skip
+ // we've gone to far to stop.
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ value: value,
+ prefix: stores.metaStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ batches.push({
+ key: UPDATE_SEQ_KEY,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ }
+ var deletedSeqs = {};
+ stores.docStore.createReadStream({
+ startKey: '_',
+ endKey: '_\xFF'
+ }).pipe(obj(function (ch, _, next) {
+ if (!isLocalId(ch.key)) {
+ return next();
+ }
+ batches.push({
+ key: ch.key,
+ prefix: stores.docStore,
+ type: 'del'
+ });
+ var winner = winningRev(ch.value);
+ Object.keys(ch.value.rev_map).forEach(function (key) {
+ if (key !== 'winner') {
+ this.push(formatSeq(ch.value.rev_map[key]));
+ }
+ }, this);
+ var winningSeq = ch.value.rev_map[winner];
+ stores.bySeqStore.get(formatSeq(winningSeq), function (err, value) {
+ if (!err) {
+ batches.push({
+ key: ch.key,
+ value: value,
+ prefix: stores.localStore,
+ type: 'put',
+ valueEncoding: 'json'
+ });
+ }
+ next();
+ });
+
+ })).pipe(obj(function (seq, _, next) {
+ /* istanbul ignore if */
+ if (deletedSeqs[seq]) {
+ return next();
+ }
+ deletedSeqs[seq] = true;
+ stores.bySeqStore.get(seq, function (err, resp) {
+ /* istanbul ignore if */
+ if (err || !isLocalId(resp._id)) {
+ return next();
+ }
+ batches.push({
+ key: seq,
+ prefix: stores.bySeqStore,
+ type: 'del'
+ });
+ next();
+ });
+ }, function () {
+ db.batch(batches, callback);
+ }));
+ });
+ });
+ });
+
+};
+
+var migrate = {
+ doMigrationOne: doMigrationOne,
+ doMigrationTwo: doMigrationTwo
+};
+
+function LevelDownPouch(opts, callback) {
+
+ // Users can pass in their own leveldown alternative here, in which case
+ // it overrides the default one. (This is in addition to the custom builds.)
+ var leveldown = opts.db;
+
+ /* istanbul ignore else */
+ if (!leveldown) {
+ leveldown = requireLeveldown();
+
+ /* istanbul ignore if */
+ if (leveldown instanceof Error) {
+ return callback(leveldown);
+ }
+ }
+
+ var _opts = Object.assign({
+ db: leveldown,
+ migrate: migrate
+ }, opts);
+
+ CoreLevelPouch.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+LevelDownPouch.valid = function () {
+ return true;
+};
+LevelDownPouch.use_prefix = false;
+
+function index (PouchDB) {
+ PouchDB.adapter('leveldb', LevelDownPouch, true);
+}
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-localstorage.js b/packages/pouchdb-platform/lib/pouchdb-adapter-localstorage.js
new file mode 100644
index 0000000000..9d32f48d3e
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-localstorage.js
@@ -0,0 +1,20 @@
+import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
+import localstoragedown from 'localstorage-down';
+
+function LocalStoragePouch(opts, callback) {
+ var _opts = Object.assign({
+ db: localstoragedown
+ }, opts);
+
+ CoreLevelPouch.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+LocalStoragePouch.valid = () => typeof localStorage !== 'undefined';
+LocalStoragePouch.use_prefix = true;
+
+const localstorageAdapter = (PouchDB) => {
+ PouchDB.adapter('localstorage', LocalStoragePouch, true);
+};
+
+export { localstorageAdapter as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-memory.js b/packages/pouchdb-platform/lib/pouchdb-adapter-memory.js
new file mode 100644
index 0000000000..ad20a37011
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-memory.js
@@ -0,0 +1,22 @@
+import CoreLevelPouch from 'pouchdb-adapter-leveldb-core';
+import memdown from 'memdown';
+
+function MemDownPouch(opts, callback) {
+ var _opts = Object.assign({
+ db: memdown
+ }, opts);
+
+ CoreLevelPouch.call(this, _opts, callback);
+}
+
+// overrides for normal LevelDB behavior on Node
+MemDownPouch.valid = function () {
+ return true;
+};
+MemDownPouch.use_prefix = false;
+
+function index (PouchDB) {
+ PouchDB.adapter('memory', MemDownPouch, true);
+}
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-adapter-utils.js b/packages/pouchdb-platform/lib/pouchdb-adapter-utils.js
new file mode 100644
index 0000000000..a3b1a981e7
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-adapter-utils.js
@@ -0,0 +1,463 @@
+import { uuid, rev, invalidIdError } from 'pouchdb-utils';
+export { invalidIdError, normalizeDdocFunctionName, parseDdocFunctionName } from 'pouchdb-utils';
+import { createError, DOC_VALIDATION, INVALID_REV, BAD_ARG, REV_CONFLICT, MISSING_DOC } from 'pouchdb-errors';
+import { revExists, winningRev, isDeleted, merge, isLocalId } from 'pouchdb-merge';
+export { isDeleted, isLocalId } from 'pouchdb-merge';
+import { binaryStringToBlobOrBuffer, blobOrBufferToBinaryString, blobOrBufferToBase64 } from 'pouchdb-binary-utils';
+import { binaryMd5 } from 'pouchdb-md5';
+
+function allDocsKeysQuery(api, opts) {
+ var keys = opts.keys;
+ var finalResults = {
+ offset: opts.skip
+ };
+ return Promise.all(keys.map(function (key) {
+ var subOpts = Object.assign({key: key, deleted: 'ok'}, opts);
+ ['limit', 'skip', 'keys'].forEach(function (optKey) {
+ delete subOpts[optKey];
+ });
+ return new Promise(function (resolve, reject) {
+ api._allDocs(subOpts, function (err, res) {
+ /* istanbul ignore if */
+ if (err) {
+ return reject(err);
+ }
+ /* istanbul ignore if */
+ if (opts.update_seq && res.update_seq !== undefined) {
+ finalResults.update_seq = res.update_seq;
+ }
+ finalResults.total_rows = res.total_rows;
+ resolve(res.rows[0] || {key: key, error: 'not_found'});
+ });
+ });
+ })).then(function (results) {
+ finalResults.rows = results;
+ return finalResults;
+ });
+}
+
+function toObject(array) {
+ return array.reduce(function (obj, item) {
+ obj[item] = true;
+ return obj;
+ }, {});
+}
+// List of top level reserved words for doc
+var reservedWords = toObject([
+ '_id',
+ '_rev',
+ '_access',
+ '_attachments',
+ '_deleted',
+ '_revisions',
+ '_revs_info',
+ '_conflicts',
+ '_deleted_conflicts',
+ '_local_seq',
+ '_rev_tree',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats',
+ // Specific to Couchbase Sync Gateway
+ '_removed'
+]);
+
+// List of reserved words that should end up in the document
+var dataWords = toObject([
+ '_access',
+ '_attachments',
+ // replication documents
+ '_replication_id',
+ '_replication_state',
+ '_replication_state_time',
+ '_replication_state_reason',
+ '_replication_stats'
+]);
+
+function parseRevisionInfo(rev) {
+ if (!/^\d+-/.test(rev)) {
+ return createError(INVALID_REV);
+ }
+ var idx = rev.indexOf('-');
+ var left = rev.substring(0, idx);
+ var right = rev.substring(idx + 1);
+ return {
+ prefix: parseInt(left, 10),
+ id: right
+ };
+}
+
+function makeRevTreeFromRevisions(revisions, opts) {
+ var pos = revisions.start - revisions.ids.length + 1;
+
+ var revisionIds = revisions.ids;
+ var ids = [revisionIds[0], opts, []];
+
+ for (var i = 1, len = revisionIds.length; i < len; i++) {
+ ids = [revisionIds[i], {status: 'missing'}, [ids]];
+ }
+
+ return [{
+ pos: pos,
+ ids: ids
+ }];
+}
+
+// Preprocess documents, parse their revisions, assign an id and a
+// revision for new writes that are missing them, etc
+function parseDoc(doc, newEdits, dbOpts) {
+ if (!dbOpts) {
+ dbOpts = {
+ deterministic_revs: true
+ };
+ }
+
+ var nRevNum;
+ var newRevId;
+ var revInfo;
+ var opts = {status: 'available'};
+ if (doc._deleted) {
+ opts.deleted = true;
+ }
+
+ if (newEdits) {
+ if (!doc._id) {
+ doc._id = uuid();
+ }
+ newRevId = rev(doc, dbOpts.deterministic_revs);
+ if (doc._rev) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ doc._rev_tree = [{
+ pos: revInfo.prefix,
+ ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]
+ }];
+ nRevNum = revInfo.prefix + 1;
+ } else {
+ doc._rev_tree = [{
+ pos: 1,
+ ids : [newRevId, opts, []]
+ }];
+ nRevNum = 1;
+ }
+ } else {
+ if (doc._revisions) {
+ doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);
+ nRevNum = doc._revisions.start;
+ newRevId = doc._revisions.ids[0];
+ }
+ if (!doc._rev_tree) {
+ revInfo = parseRevisionInfo(doc._rev);
+ if (revInfo.error) {
+ return revInfo;
+ }
+ nRevNum = revInfo.prefix;
+ newRevId = revInfo.id;
+ doc._rev_tree = [{
+ pos: nRevNum,
+ ids: [newRevId, opts, []]
+ }];
+ }
+ }
+
+ invalidIdError(doc._id);
+
+ doc._rev = nRevNum + '-' + newRevId;
+
+ var result = {metadata : {}, data : {}};
+ for (var key in doc) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc, key)) {
+ var specialKey = key[0] === '_';
+ if (specialKey && !reservedWords[key]) {
+ var error = createError(DOC_VALIDATION, key);
+ error.message = DOC_VALIDATION.message + ': ' + key;
+ throw error;
+ } else if (specialKey && !dataWords[key]) {
+ result.metadata[key.slice(1)] = doc[key];
+ } else {
+ result.data[key] = doc[key];
+ }
+ }
+ }
+ return result;
+}
+
+function parseBase64(data) {
+ try {
+ return atob(data);
+ } catch (e) {
+ var err = createError(BAD_ARG,
+ 'Attachment is not a valid base64 string');
+ return {error: err};
+ }
+}
+
+function preprocessString(att, blobType, callback) {
+ var asBinary = parseBase64(att.data);
+ if (asBinary.error) {
+ return callback(asBinary.error);
+ }
+
+ att.length = asBinary.length;
+ if (blobType === 'blob') {
+ att.data = binaryStringToBlobOrBuffer(asBinary, att.content_type);
+ } else if (blobType === 'base64') {
+ att.data = btoa(asBinary);
+ } else { // binary
+ att.data = asBinary;
+ }
+ binaryMd5(asBinary, function (result) {
+ att.digest = 'md5-' + result;
+ callback();
+ });
+}
+
+function preprocessBlob(att, blobType, callback) {
+ binaryMd5(att.data, function (md5) {
+ att.digest = 'md5-' + md5;
+ // size is for blobs (browser), length is for buffers (node)
+ att.length = att.data.size || att.data.length || 0;
+ if (blobType === 'binary') {
+ blobOrBufferToBinaryString(att.data, function (binString) {
+ att.data = binString;
+ callback();
+ });
+ } else if (blobType === 'base64') {
+ blobOrBufferToBase64(att.data, function (b64) {
+ att.data = b64;
+ callback();
+ });
+ } else {
+ callback();
+ }
+ });
+}
+
+function preprocessAttachment(att, blobType, callback) {
+ if (att.stub) {
+ return callback();
+ }
+ if (typeof att.data === 'string') { // input is a base64 string
+ preprocessString(att, blobType, callback);
+ } else { // input is a blob
+ preprocessBlob(att, blobType, callback);
+ }
+}
+
+function preprocessAttachments(docInfos, blobType, callback) {
+
+ if (!docInfos.length) {
+ return callback();
+ }
+
+ var docv = 0;
+ var overallErr;
+
+ docInfos.forEach(function (docInfo) {
+ var attachments = docInfo.data && docInfo.data._attachments ?
+ Object.keys(docInfo.data._attachments) : [];
+ var recv = 0;
+
+ if (!attachments.length) {
+ return done();
+ }
+
+ function processedAttachment(err) {
+ overallErr = err;
+ recv++;
+ if (recv === attachments.length) {
+ done();
+ }
+ }
+
+ for (var key in docInfo.data._attachments) {
+ if (Object.prototype.hasOwnProperty.call(docInfo.data._attachments, key)) {
+ preprocessAttachment(docInfo.data._attachments[key],
+ blobType, processedAttachment);
+ }
+ }
+ });
+
+ function done() {
+ docv++;
+ if (docInfos.length === docv) {
+ if (overallErr) {
+ callback(overallErr);
+ } else {
+ callback();
+ }
+ }
+ }
+}
+
+function updateDoc(revLimit, prev, docInfo, results,
+ i, cb, writeDoc, newEdits) {
+
+ if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
+ results[i] = docInfo;
+ return cb();
+ }
+
+ // sometimes this is pre-calculated. historically not always
+ var previousWinningRev = prev.winningRev || winningRev(prev);
+ var previouslyDeleted = 'deleted' in prev ? prev.deleted :
+ isDeleted(prev, previousWinningRev);
+ var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
+ isDeleted(docInfo.metadata);
+ var isRoot = /^1-/.test(docInfo.metadata.rev);
+
+ if (previouslyDeleted && !deleted && newEdits && isRoot) {
+ var newDoc = docInfo.data;
+ newDoc._rev = previousWinningRev;
+ newDoc._id = docInfo.metadata.id;
+ docInfo = parseDoc(newDoc, newEdits);
+ }
+
+ var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
+
+ var inConflict = newEdits && ((
+ (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
+ (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
+ (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
+
+ if (inConflict) {
+ var err = createError(REV_CONFLICT);
+ results[i] = err;
+ return cb();
+ }
+
+ var newRev = docInfo.metadata.rev;
+ docInfo.metadata.rev_tree = merged.tree;
+ docInfo.stemmedRevs = merged.stemmedRevs || [];
+ /* istanbul ignore else */
+ if (prev.rev_map) {
+ docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
+ }
+
+ // recalculate
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$1);
+
+ // calculate the total number of documents that were added/removed,
+ // from the perspective of total_rows/doc_count
+ var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
+ previouslyDeleted < winningRevIsDeleted ? -1 : 1;
+
+ var newRevIsDeleted;
+ if (newRev === winningRev$1) {
+ // if the new rev is the same as the winning rev, we can reuse that value
+ newRevIsDeleted = winningRevIsDeleted;
+ } else {
+ // if they're not the same, then we need to recalculate
+ newRevIsDeleted = isDeleted(docInfo.metadata, newRev);
+ }
+
+ writeDoc(docInfo, winningRev$1, winningRevIsDeleted, newRevIsDeleted,
+ true, delta, i, cb);
+}
+
+function rootIsMissing(docInfo) {
+ return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';
+}
+
+function processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,
+ writeDoc, opts, overallCallback) {
+
+ // Default to 1000 locally
+ revLimit = revLimit || 1000;
+
+ function insertDoc(docInfo, resultsIdx, callback) {
+ // Cant insert new deleted documents
+ var winningRev$1 = winningRev(docInfo.metadata);
+ var deleted = isDeleted(docInfo.metadata, winningRev$1);
+ if ('was_delete' in opts && deleted) {
+ results[resultsIdx] = createError(MISSING_DOC, 'deleted');
+ return callback();
+ }
+
+ // 4712 - detect whether a new document was inserted with a _rev
+ var inConflict = newEdits && rootIsMissing(docInfo);
+
+ if (inConflict) {
+ var err = createError(REV_CONFLICT);
+ results[resultsIdx] = err;
+ return callback();
+ }
+
+ var delta = deleted ? 0 : 1;
+
+ writeDoc(docInfo, winningRev$1, deleted, deleted, false,
+ delta, resultsIdx, callback);
+ }
+
+ var newEdits = opts.new_edits;
+ var idsToDocs = new Map();
+
+ var docsDone = 0;
+ var docsToDo = docInfos.length;
+
+ function checkAllDocsDone() {
+ if (++docsDone === docsToDo && overallCallback) {
+ overallCallback();
+ }
+ }
+
+ docInfos.forEach(function (currentDoc, resultsIdx) {
+
+ if (currentDoc._id && isLocalId(currentDoc._id)) {
+ var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';
+ api[fun](currentDoc, {ctx: tx}, function (err, res) {
+ results[resultsIdx] = err || res;
+ checkAllDocsDone();
+ });
+ return;
+ }
+
+ var id = currentDoc.metadata.id;
+ if (idsToDocs.has(id)) {
+ docsToDo--; // duplicate
+ idsToDocs.get(id).push([currentDoc, resultsIdx]);
+ } else {
+ idsToDocs.set(id, [[currentDoc, resultsIdx]]);
+ }
+ });
+
+ // in the case of new_edits, the user can provide multiple docs
+ // with the same id. these need to be processed sequentially
+ idsToDocs.forEach(function (docs, id) {
+ var numDone = 0;
+
+ function docWritten() {
+ if (++numDone < docs.length) {
+ nextDoc();
+ } else {
+ checkAllDocsDone();
+ }
+ }
+ function nextDoc() {
+ var value = docs[numDone];
+ var currentDoc = value[0];
+ var resultsIdx = value[1];
+
+ if (fetchedDocs.has(id)) {
+ updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,
+ resultsIdx, docWritten, writeDoc, newEdits);
+ } else {
+ // Ensure stemming applies to new writes as well
+ var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);
+ currentDoc.metadata.rev_tree = merged.tree;
+ currentDoc.stemmedRevs = merged.stemmedRevs || [];
+ insertDoc(currentDoc, resultsIdx, docWritten);
+ }
+ }
+ nextDoc();
+ });
+}
+
+export { allDocsKeysQuery, parseDoc, preprocessAttachments, processDocs, updateDoc };
diff --git a/packages/pouchdb-platform/lib/pouchdb-binary-utils.js b/packages/pouchdb-platform/lib/pouchdb-binary-utils.js
new file mode 100644
index 0000000000..ad278068cb
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-binary-utils.js
@@ -0,0 +1,83 @@
+function typedBuffer(binString, buffType, type) {
+ // buffType is either 'binary' or 'base64'
+ const buff = Buffer.from(binString, buffType);
+ buff.type = type; // non-standard, but used for consistency with the browser
+ return buff;
+}
+
+function b64ToBluffer(b64, type) {
+ return typedBuffer(b64, 'base64', type);
+}
+
+// From http://stackoverflow.com/questions/14967647/ (continues on next line)
+// encode-decode-image-with-base64-breaks-image (2013-04-21)
+function binaryStringToArrayBuffer(bin) {
+ var length = bin.length;
+ var buf = new ArrayBuffer(length);
+ var arr = new Uint8Array(buf);
+ for (var i = 0; i < length; i++) {
+ arr[i] = bin.charCodeAt(i);
+ }
+ return buf;
+}
+
+function binStringToBluffer(binString, type) {
+ return typedBuffer(binString, 'binary', type);
+}
+
+function blobToBase64$1(blobOrBuffer, callback) {
+ callback(blobOrBuffer.toString('base64'));
+}
+
+const toBase64 = (arrayBuffer) => btoa(String.fromCharCode(
+ ...new Uint8Array(arrayBuffer)
+));
+
+function blobToBase64(blobOrBuffer, callback) {
+ new Response(blobOrBuffer).arrayBuffer().then(toBase64).then(
+ (b64)=>callback(null,b64),err=>callback(err));
+ //callback(blobOrBuffer.toString('binary'));
+}
+
+// simplified API. universal browser support is assumed
+function readAsArrayBuffer(blob, callback) {
+ var reader = new FileReader();
+ reader.onloadend = function (e) {
+ var result = e.target.result || new ArrayBuffer(0);
+ callback(result);
+ };
+ reader.readAsArrayBuffer(blob);
+}
+
+//Can't find original post, but this is close
+//http://stackoverflow.com/questions/6965107/ (continues on next line)
+//converting-between-strings-and-arraybuffers
+function arrayBufferToBinaryString(buffer) {
+ var binary = '';
+ var bytes = new Uint8Array(buffer);
+ var length = bytes.byteLength;
+ for (var i = 0; i < length; i++) {
+ binary += String.fromCharCode(bytes[i]);
+ }
+ return binary;
+}
+
+// shim for browsers that don't support it
+function readAsBinaryString(blob, callback) {
+ var reader = new FileReader();
+ var hasBinaryString = typeof reader.readAsBinaryString === 'function';
+ reader.onloadend = function (e) {
+ var result = e.target.result || '';
+ if (hasBinaryString) {
+ return callback(result);
+ }
+ callback(arrayBufferToBinaryString(result));
+ };
+ if (hasBinaryString) {
+ reader.readAsBinaryString(blob);
+ } else {
+ reader.readAsArrayBuffer(blob);
+ }
+}
+
+export { b64ToBluffer as base64StringToBlobOrBuffer, binaryStringToArrayBuffer, binStringToBluffer as binaryStringToBlobOrBuffer, blobToBase64$1 as blobOrBufferToBase64, blobToBase64 as blobOrBufferToBinaryString, readAsArrayBuffer, readAsBinaryString, typedBuffer };
diff --git a/packages/pouchdb-platform/lib/pouchdb-browser.js b/packages/pouchdb-platform/lib/pouchdb-browser.js
new file mode 100644
index 0000000000..52e01dbf3a
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-browser.js
@@ -0,0 +1,10 @@
+import PouchDB from 'pouchdb-core';
+export { default } from 'pouchdb-core';
+import IDBPouch from 'pouchdb-adapter-idb';
+import mapreduce from 'pouchdb-mapreduce';
+import replication from 'pouchdb-replication';
+
+PouchDB.plugin(IDBPouch)
+ //.plugin(HttpPouch)
+ .plugin(mapreduce)
+ .plugin(replication);
diff --git a/packages/pouchdb-platform/lib/pouchdb-changes-filter.js b/packages/pouchdb-platform/lib/pouchdb-changes-filter.js
new file mode 100644
index 0000000000..13ce3b4019
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-changes-filter.js
@@ -0,0 +1,130 @@
+import { createError, BAD_REQUEST, generateErrorFromResponse, MISSING_DOC } from 'pouchdb-errors';
+import { normalizeDdocFunctionName, isRemote, parseDdocFunctionName } from 'pouchdb-utils';
+import { matchesSelector } from 'pouchdb-selector-core';
+import vm from 'vm';
+
+function evalFilter(input) {
+ var code = '(function() {\n"use strict";\nreturn ' + input + '\n})()';
+
+ return vm.runInNewContext(code);
+}
+
+function evalView(input) {
+ var code = [
+ '"use strict";',
+ 'var emitted = false;',
+ 'var emit = function (a, b) {',
+ ' emitted = true;',
+ '};',
+ 'var view = ' + input + ';',
+ 'view(doc);',
+ 'if (emitted) {',
+ ' return true;',
+ '}'
+ ].join('\n');
+
+ return vm.runInNewContext('(function(doc) {\n' + code + '\n})');
+}
+
+function validate(opts, callback) {
+ if (opts.selector) {
+ if (opts.filter && opts.filter !== '_selector') {
+ var filterName = typeof opts.filter === 'string' ?
+ opts.filter : 'function';
+ return callback(new Error('selector invalid for filter "' + filterName + '"'));
+ }
+ }
+ callback();
+}
+
+function normalize(opts) {
+ if (opts.view && !opts.filter) {
+ opts.filter = '_view';
+ }
+
+ if (opts.selector && !opts.filter) {
+ opts.filter = '_selector';
+ }
+
+ if (opts.filter && typeof opts.filter === 'string') {
+ if (opts.filter === '_view') {
+ opts.view = normalizeDdocFunctionName(opts.view);
+ } else {
+ opts.filter = normalizeDdocFunctionName(opts.filter);
+ }
+ }
+}
+
+function shouldFilter(changesHandler, opts) {
+ return opts.filter && typeof opts.filter === 'string' &&
+ !opts.doc_ids && !isRemote(changesHandler.db);
+}
+
+function filter(changesHandler, opts) {
+ var callback = opts.complete;
+ if (opts.filter === '_view') {
+ if (!opts.view || typeof opts.view !== 'string') {
+ var err = createError(BAD_REQUEST,
+ '`view` filter parameter not found or invalid.');
+ return callback(err);
+ }
+ // fetch a view from a design doc, make it behave like a filter
+ var viewName = parseDdocFunctionName(opts.view);
+ changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&
+ ddoc.views[viewName[1]].map;
+ if (!mapFun) {
+ return callback(createError(MISSING_DOC,
+ (ddoc.views ? 'missing json key: ' + viewName[1] :
+ 'missing json key: views')));
+ }
+ opts.filter = evalView(mapFun);
+ changesHandler.doChanges(opts);
+ });
+ } else if (opts.selector) {
+ opts.filter = function (doc) {
+ return matchesSelector(doc, opts.selector);
+ };
+ changesHandler.doChanges(opts);
+ } else {
+ // fetch a filter from a design doc
+ var filterName = parseDdocFunctionName(opts.filter);
+ changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {
+ /* istanbul ignore if */
+ if (changesHandler.isCancelled) {
+ return callback(null, {status: 'cancelled'});
+ }
+ /* istanbul ignore next */
+ if (err) {
+ return callback(generateErrorFromResponse(err));
+ }
+ var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];
+ if (!filterFun) {
+ return callback(createError(MISSING_DOC,
+ ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]
+ : 'missing json key: filters')));
+ }
+ opts.filter = evalFilter(filterFun);
+ changesHandler.doChanges(opts);
+ });
+ }
+}
+
+function applyChangesFilterPlugin(PouchDB) {
+ PouchDB._changesFilterPlugin = {
+ validate: validate,
+ normalize: normalize,
+ shouldFilter: shouldFilter,
+ filter: filter
+ };
+}
+
+export { applyChangesFilterPlugin as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-checkpointer.js b/packages/pouchdb-platform/lib/pouchdb-checkpointer.js
new file mode 100644
index 0000000000..c4a4b25090
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-checkpointer.js
@@ -0,0 +1,275 @@
+import { explainError } from 'pouchdb-utils';
+import { collate } from 'pouchdb-collate';
+
+var CHECKPOINT_VERSION = 1;
+var REPLICATOR = "pouchdb";
+// This is an arbitrary number to limit the
+// amount of replication history we save in the checkpoint.
+// If we save too much, the checkpoing docs will become very big,
+// if we save fewer, we'll run a greater risk of having to
+// read all the changes from 0 when checkpoint PUTs fail
+// CouchDB 2.0 has a more involved history pruning,
+// but let's go for the simple version for now.
+var CHECKPOINT_HISTORY_SIZE = 5;
+var LOWEST_SEQ = 0;
+
+function updateCheckpoint(db, id, checkpoint, session, returnValue) {
+ return db.get(id).catch(function (err) {
+ if (err.status === 404) {
+ if (db.adapter === 'http' || db.adapter === 'https') {
+ explainError(
+ 404, 'PouchDB is just checking if a remote checkpoint exists.'
+ );
+ }
+ return {
+ session_id: session,
+ _id: id,
+ history: [],
+ replicator: REPLICATOR,
+ version: CHECKPOINT_VERSION
+ };
+ }
+ throw err;
+ }).then(function (doc) {
+ if (returnValue.cancelled) {
+ return;
+ }
+
+ // if the checkpoint has not changed, do not update
+ if (doc.last_seq === checkpoint) {
+ return;
+ }
+
+ // Filter out current entry for this replication
+ doc.history = (doc.history || []).filter(function (item) {
+ return item.session_id !== session;
+ });
+
+ // Add the latest checkpoint to history
+ doc.history.unshift({
+ last_seq: checkpoint,
+ session_id: session
+ });
+
+ // Just take the last pieces in history, to
+ // avoid really big checkpoint docs.
+ // see comment on history size above
+ doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);
+
+ doc.version = CHECKPOINT_VERSION;
+ doc.replicator = REPLICATOR;
+
+ doc.session_id = session;
+ doc.last_seq = checkpoint;
+
+ return db.put(doc).catch(function (err) {
+ if (err.status === 409) {
+ // retry; someone is trying to write a checkpoint simultaneously
+ return updateCheckpoint(db, id, checkpoint, session, returnValue);
+ }
+ throw err;
+ });
+ });
+}
+
+class CheckpointerInternal {
+ constructor(src, target, id, returnValue, opts) {
+ this.src = src;
+ this.target = target;
+ this.id = id;
+ this.returnValue = returnValue;
+ this.opts = opts || {};
+ }
+
+ writeCheckpoint(checkpoint, session) {
+ var self = this;
+ return this.updateTarget(checkpoint, session).then(function () {
+ return self.updateSource(checkpoint, session);
+ });
+ }
+
+ updateTarget(checkpoint, session) {
+ if (this.opts.writeTargetCheckpoint) {
+ return updateCheckpoint(this.target, this.id, checkpoint,
+ session, this.returnValue);
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ updateSource(checkpoint, session) {
+ if (this.opts.writeSourceCheckpoint) {
+ var self = this;
+ return updateCheckpoint(this.src, this.id, checkpoint,
+ session, this.returnValue)
+ .catch(function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return true;
+ }
+ throw err;
+ });
+ } else {
+ return Promise.resolve(true);
+ }
+ }
+
+ getCheckpoint() {
+ var self = this;
+
+ if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {
+ return self.src.get(self.id).then(function (sourceDoc) {
+ return sourceDoc.last_seq || LOWEST_SEQ;
+ }).catch(function (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+
+ return self.target.get(self.id).then(function (targetDoc) {
+ if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {
+ return targetDoc.last_seq || LOWEST_SEQ;
+ }
+
+ return self.src.get(self.id).then(function (sourceDoc) {
+ // Since we can't migrate an old version doc to a new one
+ // (no session id), we just go with the lowest seq in this case
+ /* istanbul ignore if */
+ if (targetDoc.version !== sourceDoc.version) {
+ return LOWEST_SEQ;
+ }
+
+ var version;
+ if (targetDoc.version) {
+ version = targetDoc.version.toString();
+ } else {
+ version = "undefined";
+ }
+
+ if (version in comparisons) {
+ return comparisons[version](targetDoc, sourceDoc);
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (err.status === 404 && targetDoc.last_seq) {
+ return self.src.put({
+ _id: self.id,
+ last_seq: LOWEST_SEQ
+ }).then(function () {
+ return LOWEST_SEQ;
+ }, function (err) {
+ if (isForbiddenError(err)) {
+ self.opts.writeSourceCheckpoint = false;
+ return targetDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return LOWEST_SEQ;
+ });
+ }
+ throw err;
+ });
+ }).catch(function (err) {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return LOWEST_SEQ;
+ });
+ }
+}
+
+var comparisons = {
+ "undefined": function (targetDoc, sourceDoc) {
+ // This is the previous comparison function
+ if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {
+ return sourceDoc.last_seq;
+ }
+ /* istanbul ignore next */
+ return 0;
+ },
+ "1": function (targetDoc, sourceDoc) {
+ // This is the comparison function ported from CouchDB
+ return compareReplicationLogs(sourceDoc, targetDoc).last_seq;
+ }
+};
+
+// This checkpoint comparison is ported from CouchDBs source
+// they come from here:
+// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906
+
+function compareReplicationLogs(srcDoc, tgtDoc) {
+ if (srcDoc.session_id === tgtDoc.session_id) {
+ return {
+ last_seq: srcDoc.last_seq,
+ history: srcDoc.history
+ };
+ }
+
+ return compareReplicationHistory(srcDoc.history, tgtDoc.history);
+}
+
+function compareReplicationHistory(sourceHistory, targetHistory) {
+ // the erlang loop via function arguments is not so easy to repeat in JS
+ // therefore, doing this as recursion
+ var S = sourceHistory[0];
+ var sourceRest = sourceHistory.slice(1);
+ var T = targetHistory[0];
+ var targetRest = targetHistory.slice(1);
+
+ if (!S || targetHistory.length === 0) {
+ return {
+ last_seq: LOWEST_SEQ,
+ history: []
+ };
+ }
+
+ var sourceId = S.session_id;
+ /* istanbul ignore if */
+ if (hasSessionId(sourceId, targetHistory)) {
+ return {
+ last_seq: S.last_seq,
+ history: sourceHistory
+ };
+ }
+
+ var targetId = T.session_id;
+ if (hasSessionId(targetId, sourceRest)) {
+ return {
+ last_seq: T.last_seq,
+ history: targetRest
+ };
+ }
+
+ return compareReplicationHistory(sourceRest, targetRest);
+}
+
+function hasSessionId(sessionId, history) {
+ var props = history[0];
+ var rest = history.slice(1);
+
+ if (!sessionId || history.length === 0) {
+ return false;
+ }
+
+ if (sessionId === props.session_id) {
+ return true;
+ }
+
+ return hasSessionId(sessionId, rest);
+}
+
+function isForbiddenError(err) {
+ return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;
+}
+
+function Checkpointer(src, target, id, returnValue, opts) {
+ if (!(this instanceof CheckpointerInternal)) {
+ return new CheckpointerInternal(src, target, id, returnValue, opts);
+ }
+ return Checkpointer;
+}
+
+export { Checkpointer as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-collate.js b/packages/pouchdb-platform/lib/pouchdb-collate.js
new file mode 100644
index 0000000000..c58663bff7
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-collate.js
@@ -0,0 +1,382 @@
+// 'use strict'; is default when ESM
+
+function pad(str, padWith, upToLength) {
+ var padding = '';
+ var targetLength = upToLength - str.length;
+ /* istanbul ignore next */
+ while (padding.length < targetLength) {
+ padding += padWith;
+ }
+ return padding;
+}
+
+function padLeft(str, padWith, upToLength) {
+ var padding = pad(str, padWith, upToLength);
+ return padding + str;
+}
+
+// 'use strict'; is default when ESM
+
+var MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE
+var MAGNITUDE_DIGITS = 3; // ditto
+var SEP = ''; // set to '_' for easier debugging
+
+function collate(a, b) {
+
+ if (a === b) {
+ return 0;
+ }
+
+ a = normalizeKey(a);
+ b = normalizeKey(b);
+
+ var ai = collationIndex(a);
+ var bi = collationIndex(b);
+ if ((ai - bi) !== 0) {
+ return ai - bi;
+ }
+ switch (typeof a) {
+ case 'number':
+ return a - b;
+ case 'boolean':
+ return a < b ? -1 : 1;
+ case 'string':
+ return stringCollate(a, b);
+ }
+ return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);
+}
+
+// couch considers null/NaN/Infinity/-Infinity === undefined,
+// for the purposes of mapreduce indexes. also, dates get stringified.
+function normalizeKey(key) {
+ switch (typeof key) {
+ case 'undefined':
+ return null;
+ case 'number':
+ if (key === Infinity || key === -Infinity || isNaN(key)) {
+ return null;
+ }
+ return key;
+ case 'object':
+ var origKey = key;
+ if (Array.isArray(key)) {
+ var len = key.length;
+ key = new Array(len);
+ for (var i = 0; i < len; i++) {
+ key[i] = normalizeKey(origKey[i]);
+ }
+ /* istanbul ignore next */
+ } else if (key instanceof Date) {
+ return key.toJSON();
+ } else if (key !== null) { // generic object
+ key = {};
+ for (var k in origKey) {
+ if (Object.prototype.hasOwnProperty.call(origKey, k)) {
+ var val = origKey[k];
+ if (typeof val !== 'undefined') {
+ key[k] = normalizeKey(val);
+ }
+ }
+ }
+ }
+ }
+ return key;
+}
+
+function indexify(key) {
+ if (key !== null) {
+ switch (typeof key) {
+ case 'boolean':
+ return key ? 1 : 0;
+ case 'number':
+ return numToIndexableString(key);
+ case 'string':
+ // We've to be sure that key does not contain \u0000
+ // Do order-preserving replacements:
+ // 0 -> 1, 1
+ // 1 -> 1, 2
+ // 2 -> 2, 2
+ /* eslint-disable no-control-regex */
+ return key
+ .replace(/\u0002/g, '\u0002\u0002')
+ .replace(/\u0001/g, '\u0001\u0002')
+ .replace(/\u0000/g, '\u0001\u0001');
+ /* eslint-enable no-control-regex */
+ case 'object':
+ var isArray = Array.isArray(key);
+ var arr = isArray ? key : Object.keys(key);
+ var i = -1;
+ var len = arr.length;
+ var result = '';
+ if (isArray) {
+ while (++i < len) {
+ result += toIndexableString(arr[i]);
+ }
+ } else {
+ while (++i < len) {
+ var objKey = arr[i];
+ result += toIndexableString(objKey) +
+ toIndexableString(key[objKey]);
+ }
+ }
+ return result;
+ }
+ }
+ return '';
+}
+
+// convert the given key to a string that would be appropriate
+// for lexical sorting, e.g. within a database, where the
+// sorting is the same given by the collate() function.
+function toIndexableString(key) {
+ var zero = '\u0000';
+ key = normalizeKey(key);
+ return collationIndex(key) + SEP + indexify(key) + zero;
+}
+
+function parseNumber(str, i) {
+ var originalIdx = i;
+ var num;
+ var zero = str[i] === '1';
+ if (zero) {
+ num = 0;
+ i++;
+ } else {
+ var neg = str[i] === '0';
+ i++;
+ var numAsString = '';
+ var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);
+ var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;
+ /* istanbul ignore next */
+ if (neg) {
+ magnitude = -magnitude;
+ }
+ i += MAGNITUDE_DIGITS;
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ } else {
+ numAsString += ch;
+ }
+ i++;
+ }
+ numAsString = numAsString.split('.');
+ if (numAsString.length === 1) {
+ num = parseInt(numAsString, 10);
+ } else {
+ /* istanbul ignore next */
+ num = parseFloat(numAsString[0] + '.' + numAsString[1]);
+ }
+ /* istanbul ignore next */
+ if (neg) {
+ num = num - 10;
+ }
+ /* istanbul ignore next */
+ if (magnitude !== 0) {
+ // parseFloat is more reliable than pow due to rounding errors
+ // e.g. Number.MAX_VALUE would return Infinity if we did
+ // num * Math.pow(10, magnitude);
+ num = parseFloat(num + 'e' + magnitude);
+ }
+ }
+ return {num: num, length : i - originalIdx};
+}
+
+// move up the stack while parsing
+// this function moved outside of parseIndexableString for performance
+function pop(stack, metaStack) {
+ var obj = stack.pop();
+
+ if (metaStack.length) {
+ var lastMetaElement = metaStack[metaStack.length - 1];
+ if (obj === lastMetaElement.element) {
+ // popping a meta-element, e.g. an object whose value is another object
+ metaStack.pop();
+ lastMetaElement = metaStack[metaStack.length - 1];
+ }
+ var element = lastMetaElement.element;
+ var lastElementIndex = lastMetaElement.index;
+ if (Array.isArray(element)) {
+ element.push(obj);
+ } else if (lastElementIndex === stack.length - 2) { // obj with key+value
+ var key = stack.pop();
+ element[key] = obj;
+ } else {
+ stack.push(obj); // obj with key only
+ }
+ }
+}
+
+function parseIndexableString(str) {
+ var stack = [];
+ var metaStack = []; // stack for arrays and objects
+ var i = 0;
+
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var collationIndex = str[i++];
+ if (collationIndex === '\u0000') {
+ if (stack.length === 1) {
+ return stack.pop();
+ } else {
+ pop(stack, metaStack);
+ continue;
+ }
+ }
+ switch (collationIndex) {
+ case '1':
+ stack.push(null);
+ break;
+ case '2':
+ stack.push(str[i] === '1');
+ i++;
+ break;
+ case '3':
+ var parsedNum = parseNumber(str, i);
+ stack.push(parsedNum.num);
+ i += parsedNum.length;
+ break;
+ case '4':
+ var parsedStr = '';
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
+ while (true) {
+ var ch = str[i];
+ if (ch === '\u0000') {
+ break;
+ }
+ parsedStr += ch;
+ i++;
+ }
+ // perform the reverse of the order-preserving replacement
+ // algorithm (see above)
+ /* eslint-disable no-control-regex */
+ parsedStr = parsedStr.replace(/\u0001\u0001/g, '\u0000')
+ .replace(/\u0001\u0002/g, '\u0001')
+ .replace(/\u0002\u0002/g, '\u0002');
+ /* eslint-enable no-control-regex */
+ stack.push(parsedStr);
+ break;
+ case '5':
+ var arrayElement = { element: [], index: stack.length };
+ stack.push(arrayElement.element);
+ metaStack.push(arrayElement);
+ break;
+ case '6':
+ var objElement = { element: {}, index: stack.length };
+ stack.push(objElement.element);
+ metaStack.push(objElement);
+ break;
+ /* istanbul ignore next */
+ default:
+ throw new Error(
+ 'bad collationIndex or unexpectedly reached end of input: ' +
+ collationIndex);
+ }
+ }
+}
+
+function arrayCollate(a, b) {
+ var len = Math.min(a.length, b.length);
+ for (var i = 0; i < len; i++) {
+ var sort = collate(a[i], b[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ }
+ return (a.length === b.length) ? 0 :
+ (a.length > b.length) ? 1 : -1;
+}
+function stringCollate(a, b) {
+ // See: https://github.com/daleharvey/pouchdb/issues/40
+ // This is incompatible with the CouchDB implementation, but its the
+ // best we can do for now
+ return (a === b) ? 0 : ((a > b) ? 1 : -1);
+}
+function objectCollate(a, b) {
+ var ak = Object.keys(a), bk = Object.keys(b);
+ var len = Math.min(ak.length, bk.length);
+ for (var i = 0; i < len; i++) {
+ // First sort the keys
+ var sort = collate(ak[i], bk[i]);
+ if (sort !== 0) {
+ return sort;
+ }
+ // if the keys are equal sort the values
+ sort = collate(a[ak[i]], b[bk[i]]);
+ if (sort !== 0) {
+ return sort;
+ }
+
+ }
+ return (ak.length === bk.length) ? 0 :
+ (ak.length > bk.length) ? 1 : -1;
+}
+// The collation is defined by erlangs ordered terms
+// the atoms null, true, false come first, then numbers, strings,
+// arrays, then objects
+// null/undefined/NaN/Infinity/-Infinity are all considered null
+function collationIndex(x) {
+ var id = ['boolean', 'number', 'string', 'object'];
+ var idx = id.indexOf(typeof x);
+ //false if -1 otherwise true, but fast!!!!1
+ if (~idx) {
+ if (x === null) {
+ return 1;
+ }
+ if (Array.isArray(x)) {
+ return 5;
+ }
+ return idx < 3 ? (idx + 2) : (idx + 3);
+ }
+ /* istanbul ignore next */
+ if (Array.isArray(x)) {
+ return 5;
+ }
+}
+
+// conversion:
+// x yyy zz...zz
+// x = 0 for negative, 1 for 0, 2 for positive
+// y = exponent (for negative numbers negated) moved so that it's >= 0
+// z = mantisse
+function numToIndexableString(num) {
+
+ if (num === 0) {
+ return '1';
+ }
+
+ // convert number to exponential format for easier and
+ // more succinct string sorting
+ var expFormat = num.toExponential().split(/e\+?/);
+ var magnitude = parseInt(expFormat[1], 10);
+
+ var neg = num < 0;
+
+ var result = neg ? '0' : '2';
+
+ // first sort by magnitude
+ // it's easier if all magnitudes are positive
+ var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);
+ var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);
+
+ result += SEP + magString;
+
+ // then sort by the factor
+ var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)
+ /* istanbul ignore next */
+ if (neg) { // for negative reverse ordering
+ factor = 10 - factor;
+ }
+
+ var factorStr = factor.toFixed(20);
+
+ // strip zeros from the end
+ factorStr = factorStr.replace(/\.?0+$/, '');
+
+ result += SEP + factorStr;
+
+ return result;
+}
+
+export { collate, normalizeKey, parseIndexableString, toIndexableString };
diff --git a/packages/pouchdb-platform/lib/pouchdb-collections.js b/packages/pouchdb-platform/lib/pouchdb-collections.js
new file mode 100644
index 0000000000..8b7a3318dd
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-collections.js
@@ -0,0 +1,103 @@
+function mangle(key) {
+ return '$' + key;
+}
+function unmangle(key) {
+ return key.substring(1);
+}
+function Map$1() {
+ this._store = {};
+}
+Map$1.prototype.get = function (key) {
+ var mangled = mangle(key);
+ return this._store[mangled];
+};
+Map$1.prototype.set = function (key, value) {
+ var mangled = mangle(key);
+ this._store[mangled] = value;
+ return true;
+};
+Map$1.prototype.has = function (key) {
+ var mangled = mangle(key);
+ return mangled in this._store;
+};
+Map$1.prototype.keys = function () {
+ return Object.keys(this._store).map(k => unmangle(k));
+};
+Map$1.prototype.delete = function (key) {
+ var mangled = mangle(key);
+ var res = mangled in this._store;
+ delete this._store[mangled];
+ return res;
+};
+Map$1.prototype.forEach = function (cb) {
+ var keys = Object.keys(this._store);
+ for (var i = 0, len = keys.length; i < len; i++) {
+ var key = keys[i];
+ var value = this._store[key];
+ key = unmangle(key);
+ cb(value, key);
+ }
+};
+Object.defineProperty(Map$1.prototype, 'size', {
+ get: function () {
+ return Object.keys(this._store).length;
+ }
+});
+
+function Set$1(array) {
+ this._store = new Map$1();
+
+ // init with an array
+ if (array && Array.isArray(array)) {
+ for (var i = 0, len = array.length; i < len; i++) {
+ this.add(array[i]);
+ }
+ }
+}
+Set$1.prototype.add = function (key) {
+ return this._store.set(key, true);
+};
+Set$1.prototype.has = function (key) {
+ return this._store.has(key);
+};
+Set$1.prototype.forEach = function (cb) {
+ this._store.forEach(function (value, key) {
+ cb(key);
+ });
+};
+Object.defineProperty(Set$1.prototype, 'size', {
+ get: function () {
+ return this._store.size;
+ }
+});
+
+// Based on https://kangax.github.io/compat-table/es6/ we can sniff out
+// incomplete Map/Set implementations which would otherwise cause our tests to fail.
+// Notably they fail in IE11 and iOS 8.4, which this prevents.
+function supportsMapAndSet() {
+ if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {
+ return false;
+ }
+ var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);
+ return prop && 'get' in prop && Map[Symbol.species] === Map;
+}
+
+// based on https://github.com/montagejs/collections
+
+var ExportedSet;
+var ExportedMap;
+
+if (process.env.COVERAGE) { // don't penalize ourselves on coverage
+ ExportedSet = Set$1;
+ ExportedMap = Map$1;
+} else {
+ if (supportsMapAndSet()) { // prefer built-in Map/Set
+ ExportedSet = Set;
+ ExportedMap = Map;
+ } else { // fall back to our polyfill
+ ExportedSet = Set$1;
+ ExportedMap = Map$1;
+ }
+}
+
+export { ExportedMap as Map, ExportedSet as Set };
diff --git a/packages/pouchdb-platform/lib/pouchdb-core.js b/packages/pouchdb-platform/lib/pouchdb-core.js
new file mode 100644
index 0000000000..ac3cc7631e
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-core.js
@@ -0,0 +1,1523 @@
+import EE from 'node:events';
+import { fetch } from 'pouchdb-fetch';
+import { u as uuid_1 } from './index-3ee6fe23.js';
+import { clone, once, listenerCount, guardedConsole, invalidIdError, rev, bulkGetShim, isRemote, upsert, pick, nextTick, hasLocalStorage } from 'pouchdb-utils';
+import { collectLeaves, isDeleted, collectConflicts, findPathToLeaf, isLocalId, traverseRevTree, rootToLeaf } from 'pouchdb-merge';
+import { createError, UNKNOWN_ERROR, MISSING_DOC, NOT_AN_OBJECT, REV_CONFLICT, INVALID_ID, INVALID_REV, QUERY_PARSE_ERROR, MISSING_BULK_DOCS, BAD_REQUEST } from 'pouchdb-errors';
+import { clone as clone$1 } from 'pouchdb-utils.js';
+import pouchChangesFilter from 'pouchdb-changes-filter';
+import 'crypto';
+
+class ActiveTasks {
+ constructor() {
+ this.tasks = {};
+ }
+
+ list() {
+ return Object.values(this.tasks);
+ }
+
+ add(task) {
+ const id = uuid_1.v4();
+ this.tasks[id] = {
+ id,
+ name: task.name,
+ total_items: task.total_items,
+ created_at: new Date().toJSON()
+ };
+ return id;
+ }
+
+ get(id) {
+ return this.tasks[id];
+ }
+
+ /* eslint-disable no-unused-vars */
+ remove(id, reason) {
+ delete this.tasks[id];
+ return this.tasks;
+ }
+
+ update(id, updatedTask) {
+ const task = this.tasks[id];
+ if (typeof task !== 'undefined') {
+ const mergedTask = {
+ id: task.id,
+ name: task.name,
+ created_at: task.created_at,
+ total_items: updatedTask.total_items || task.total_items,
+ completed_items: updatedTask.completed_items || task.completed_items,
+ updated_at: new Date().toJSON()
+ };
+ this.tasks[id] = mergedTask;
+ }
+ return this.tasks;
+ }
+}
+
+function inherits(A, B) {
+ A.prototype = Object.create(B.prototype, {
+ constructor: { value: A }
+ });
+}
+
+function createClass(parent, init) {
+ let klass = function (...args) {
+ if (!(this instanceof klass)) {
+ return new klass(...args);
+ }
+ init.apply(this, args);
+ };
+ inherits(klass, parent);
+ return klass;
+}
+
+function tryCatchInChangeListener(self, change, pending, lastSeq) {
+ // isolate try/catches to avoid V8 deoptimizations
+ try {
+ self.emit('change', change, pending, lastSeq);
+ } catch (e) {
+ guardedConsole('error', 'Error in .on("change", function):', e);
+ }
+}
+
+function processChange(doc, metadata, opts) {
+ var changeList = [{rev: doc._rev}];
+ if (opts.style === 'all_docs') {
+ changeList = collectLeaves(metadata.rev_tree)
+ .map(function (x) { return {rev: x.rev}; });
+ }
+ var change = {
+ id: metadata.id,
+ changes: changeList,
+ doc: doc
+ };
+
+ if (isDeleted(metadata, doc._rev)) {
+ change.deleted = true;
+ }
+ if (opts.conflicts) {
+ change.doc._conflicts = collectConflicts(metadata);
+ if (!change.doc._conflicts.length) {
+ delete change.doc._conflicts;
+ }
+ }
+ return change;
+}
+
+class Changes extends EE {
+ constructor(db, opts, callback) {
+ super();
+ this.db = db;
+ opts = opts ? clone(opts) : {};
+ var complete = opts.complete = once((err, resp) => {
+ if (err) {
+ if (listenerCount(this, 'error') > 0) {
+ this.emit('error', err);
+ }
+ } else {
+ this.emit('complete', resp);
+ }
+ this.removeAllListeners();
+ db.removeListener('destroyed', onDestroy);
+ });
+ if (callback) {
+ this.on('complete', function (resp) {
+ callback(null, resp);
+ });
+ this.on('error', callback);
+ }
+ const onDestroy = () => {
+ this.cancel();
+ };
+ db.once('destroyed', onDestroy);
+
+ opts.onChange = (change, pending, lastSeq) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ return;
+ }
+ tryCatchInChangeListener(this, change, pending, lastSeq);
+ };
+
+ var promise = new Promise(function (fulfill, reject) {
+ opts.complete = function (err, res) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(res);
+ }
+ };
+ });
+ this.once('cancel', function () {
+ db.removeListener('destroyed', onDestroy);
+ opts.complete(null, {status: 'cancelled'});
+ });
+ this.then = promise.then.bind(promise);
+ this['catch'] = promise['catch'].bind(promise);
+ this.then(function (result) {
+ complete(null, result);
+ }, complete);
+
+
+
+ if (!db.taskqueue.isReady) {
+ db.taskqueue.addTask((failed) => {
+ if (failed) {
+ opts.complete(failed);
+ } else if (this.isCancelled) {
+ this.emit('cancel');
+ } else {
+ this.validateChanges(opts);
+ }
+ });
+ } else {
+ this.validateChanges(opts);
+ }
+ }
+
+ cancel() {
+ this.isCancelled = true;
+ if (this.db.taskqueue.isReady) {
+ this.emit('cancel');
+ }
+ }
+
+ validateChanges(opts) {
+ var callback = opts.complete;
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.validate(opts, (err) => {
+ if (err) {
+ return callback(err);
+ }
+ this.doChanges(opts);
+ });
+ } else {
+ this.doChanges(opts);
+ }
+ }
+
+ doChanges(opts) {
+ var callback = opts.complete;
+
+ opts = clone(opts);
+ if ('live' in opts && !('continuous' in opts)) {
+ opts.continuous = opts.live;
+ }
+ opts.processChange = processChange;
+
+ if (opts.since === 'latest') {
+ opts.since = 'now';
+ }
+ if (!opts.since) {
+ opts.since = 0;
+ }
+ if (opts.since === 'now') {
+ this.db.info().then((info) => {
+ /* istanbul ignore if */
+ if (this.isCancelled) {
+ callback(null, {status: 'cancelled'});
+ return;
+ }
+ opts.since = info.update_seq;
+ this.doChanges(opts);
+ }, callback);
+ return;
+ }
+
+ /* istanbul ignore else */
+ if (PouchDB$1._changesFilterPlugin) {
+ PouchDB$1._changesFilterPlugin.normalize(opts);
+ if (PouchDB$1._changesFilterPlugin.shouldFilter(this, opts)) {
+ return PouchDB$1._changesFilterPlugin.filter(this, opts);
+ }
+ } else {
+ ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {
+ if (key in opts) {
+ guardedConsole('warn',
+ 'The "' + key + '" option was passed in to changes/replicate, ' +
+ 'but pouchdb-changes-filter plugin is not installed, so it ' +
+ 'was ignored. Please install the plugin to enable filtering.'
+ );
+ }
+ });
+ }
+
+ if (!('descending' in opts)) {
+ opts.descending = false;
+ }
+
+ // 0 and 1 should return 1 document
+ opts.limit = opts.limit === 0 ? 1 : opts.limit;
+ opts.complete = callback;
+ var newPromise = this.db._changes(opts);
+ /* istanbul ignore else */
+ if (newPromise && typeof newPromise.cancel === 'function') {
+ const cancel = this.cancel;
+ this.cancel = (...args) => {
+ newPromise.cancel();
+ cancel.apply(this, args);
+ };
+ }
+ }
+}
+
+/**
+ * About Adapter FUN it is not funny
+ * we can use new Proxy to get all calls or we simple use
+ * the new message bassed api which can log for obvious reaasons
+ */
+
+
+/*
+ * A generic pouch adapter
+ */
+
+function compare(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Wrapper for functions that call the bulkdocs api with a single doc,
+// if the first result is an error, return an error
+function yankError(callback, docId) {
+ return (err, results) => {
+ if (err || (results[0] && results[0].error)) {
+ err = err || results[0];
+ err.docId = docId;
+ callback(err);
+ } else {
+ callback(null, results.length ? results[0] : results);
+ }
+ };
+}
+
+// clean docs given to us by the user
+function cleanDocs(docs) {
+ for (let i = 0; i < docs.length; i++) {
+ const doc = docs[i];
+ if (doc._deleted) {
+ delete doc._attachments; // ignore atts for deleted docs
+ } else if (doc._attachments) {
+ // filter out extraneous keys from _attachments
+ const atts = Object.keys(doc._attachments);
+ for (let j = 0; j < atts.length; j++) {
+ const att = atts[j];
+ doc._attachments[att] = pick(doc._attachments[att],
+ ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);
+ }
+ }
+ }
+}
+
+// compare two docs, first by _id then by _rev
+function compareByIdThenRev({_id, _revisions}, b) {
+ const idCompare = compare(_id, b._id);
+ if (idCompare !== 0) {
+ return idCompare;
+ }
+ const aStart = _revisions ? _revisions.start : 0;
+ const bStart = b._revisions ? b._revisions.start : 0;
+ return compare(aStart, bStart);
+}
+
+// for every node in a revision tree computes its distance from the closest
+// leaf
+function computeHeight(revs) {
+ const height = {};
+ const edges = [];
+ traverseRevTree(revs, (isLeaf, pos, id, prnt) => {
+ const rev = `${pos}-${id}`;
+ if (isLeaf) {
+ height[rev] = 0;
+ }
+ if (prnt !== undefined) {
+ edges.push({from: prnt, to: rev});
+ }
+ return rev;
+ });
+
+ edges.reverse();
+ edges.forEach(({from, to}) => {
+ if (height[from] === undefined) {
+ height[from] = 1 + height[to];
+ } else {
+ height[from] = Math.min(height[from], 1 + height[to]);
+ }
+ });
+ return height;
+}
+
+function allDocsKeysParse(opts) {
+ const keys = ('limit' in opts) ?
+ opts.keys.slice(opts.skip, opts.limit + opts.skip) :
+ (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;
+ opts.keys = keys;
+ opts.skip = 0;
+ delete opts.limit;
+ if (opts.descending) {
+ keys.reverse();
+ opts.descending = false;
+ }
+}
+
+// all compaction is done in a queue, to avoid attaching
+// too many listeners at once
+function doNextCompaction(self) {
+ const task = self._compactionQueue[0];
+ const opts = task.opts;
+ const callback = task.callback;
+ self.get('_local/compaction').catch(() => false).then(doc => {
+ if (doc && doc.last_seq) {
+ opts.last_seq = doc.last_seq;
+ }
+ self._compact(opts, (err, res) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ } else {
+ callback(null, res);
+ }
+ nextTick(() => {
+ self._compactionQueue.shift();
+ if (self._compactionQueue.length) {
+ doNextCompaction(self);
+ }
+ });
+ });
+ });
+}
+
+function appendPurgeSeq(db, docId, rev) {
+ return db.get('_local/purges').then(doc => {
+ const purgeSeq = doc.purgeSeq + 1;
+ doc.purges.push({
+ docId,
+ rev,
+ purgeSeq,
+ });
+ if (doc.purges.length > self.purged_infos_limit) {
+ doc.purges.splice(0, doc.purges.length - self.purged_infos_limit);
+ }
+ doc.purgeSeq = purgeSeq;
+ return doc;
+ }).catch(err => {
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {
+ _id: '_local/purges',
+ purges: [{
+ docId,
+ rev,
+ purgeSeq: 0,
+ }],
+ purgeSeq: 0,
+ };
+ }).then(doc => db.put(doc));
+}
+
+function attachmentNameError(name) {
+ if (name.charAt(0) === '_') {
+ return `${name} is not a valid attachment name, attachment names cannot start with '_'`;
+ }
+ return false;
+}
+
+class AbstractPouchDB extends BroadcastChannel {
+ _setup() {
+ this.post = (doc, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return callback(createError(NOT_AN_OBJECT));
+ }
+ this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));
+ };
+
+ this.put = (doc, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof doc !== 'object' || Array.isArray(doc)) {
+ return cb(createError(NOT_AN_OBJECT));
+ }
+ invalidIdError(doc._id);
+ if (isLocalId(doc._id) && typeof this._putLocal === 'function') {
+ if (doc._deleted) {
+ return this._removeLocal(doc, cb);
+ } else {
+ return this._putLocal(doc, cb);
+ }
+ }
+
+ const putDoc = (next) => {
+ if (typeof this._put === 'function' && opts.new_edits !== false) {
+ this._put(doc, opts, next);
+ } else {
+ this.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));
+ }
+ };
+
+ if (opts.force && doc._rev) {
+ transformForceOptionToNewEditsOption();
+ putDoc(err => {
+ const result = err ? null : {ok: true, id: doc._id, rev: doc._rev};
+ cb(err, result);
+ });
+ } else {
+ putDoc(cb);
+ }
+
+ function transformForceOptionToNewEditsOption() {
+ const parts = doc._rev.split('-');
+ const oldRevId = parts[1];
+ const oldRevNum = parseInt(parts[0], 10);
+
+ const newRevNum = oldRevNum + 1;
+ const newRevId = rev();
+
+ doc._revisions = {
+ start: newRevNum,
+ ids: [newRevId, oldRevId]
+ };
+ doc._rev = `${newRevNum}-${newRevId}`;
+ opts.new_edits = false;
+ }
+ };
+
+ this.putAttachment = (docId, attachmentId, rev, blob, type) => {
+ const api = this;
+ if (typeof type === 'function') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267
+ /* istanbul ignore if */
+ if (typeof type === 'undefined') {
+ type = blob;
+ blob = rev;
+ rev = null;
+ }
+ if (!type) {
+ guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');
+ }
+
+ function createAttachment(doc) {
+ let prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;
+ doc._attachments = doc._attachments || {};
+ doc._attachments[attachmentId] = {
+ content_type: type,
+ data: blob,
+ revpos: ++prevrevpos
+ };
+ return api.put(doc);
+ }
+
+ return api.get(docId).then(doc => {
+ if (doc._rev !== rev) {
+ throw createError(REV_CONFLICT);
+ }
+
+ return createAttachment(doc);
+ }, err => {
+ // create new doc
+ /* istanbul ignore else */
+ if (err.reason === MISSING_DOC.message) {
+ return createAttachment({_id: docId});
+ } else {
+ throw err;
+ }
+ });
+ };
+
+ this.removeAttachment = (docId, attachmentId, rev, callback) => {
+ this.get(docId, (err, obj) => {
+ /* istanbul ignore if */
+ if (err) {
+ callback(err);
+ return;
+ }
+ if (obj._rev !== rev) {
+ callback(createError(REV_CONFLICT));
+ return;
+ }
+ /* istanbul ignore if */
+ if (!obj._attachments) {
+ return callback();
+ }
+ delete obj._attachments[attachmentId];
+ if (Object.keys(obj._attachments).length === 0) {
+ delete obj._attachments;
+ }
+ this.put(obj, callback);
+ });
+ };
+
+ this.remove = (docOrId, optsOrRev, opts, callback) => {
+ let doc;
+ if (typeof optsOrRev === 'string') {
+ // id, rev, opts, callback style
+ doc = {
+ _id: docOrId,
+ _rev: optsOrRev
+ };
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ } else {
+ // doc, opts, callback style
+ doc = docOrId;
+ if (typeof optsOrRev === 'function') {
+ callback = optsOrRev;
+ opts = {};
+ } else {
+ callback = opts;
+ opts = optsOrRev;
+ }
+ }
+ opts = opts || {};
+ opts.was_delete = true;
+ const newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};
+ newDoc._deleted = true;
+ if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {
+ return this._removeLocal(doc, callback);
+ }
+ this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));
+ };
+
+ this.revsDiff = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ const ids = Object.keys(req);
+
+ if (!ids.length) {
+ return callback(null, {});
+ }
+
+ let count = 0;
+ const missing = new Map();
+
+ function addToMissing(id, revId) {
+ if (!missing.has(id)) {
+ missing.set(id, {missing: []});
+ }
+ missing.get(id).missing.push(revId);
+ }
+
+ function processDoc(id, rev_tree) {
+ // Is this fast enough? Maybe we should switch to a set simulated by a map
+ const missingForId = req[id].slice(0);
+ traverseRevTree(rev_tree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ const idx = missingForId.indexOf(rev);
+ if (idx === -1) {
+ return;
+ }
+
+ missingForId.splice(idx, 1);
+ /* istanbul ignore if */
+ if (status !== 'available') {
+ addToMissing(id, rev);
+ }
+ });
+
+ // Traversing the tree is synchronous, so now `missingForId` contains
+ // revisions that were not found in the tree
+ missingForId.forEach(rev => {
+ addToMissing(id, rev);
+ });
+ }
+
+ ids.map(function (id) {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ if (err && err.status === 404 && err.message === 'missing') {
+ missing.set(id, {missing: req[id]});
+ } else if (err) {
+ /* istanbul ignore next */
+ return callback(err);
+ } else {
+ processDoc(id, rev_tree);
+ }
+
+ if (++count === ids.length) {
+ // convert LazyMap to object
+ const missingObj = {};
+ missing.forEach((value, key) => {
+ missingObj[key] = value;
+ });
+ return callback(null, missingObj);
+ }
+ });
+ }, this);
+ };
+
+ // _bulk_get API for faster replication, as described in
+ // https://github.com/apache/couchdb-chttpd/pull/33
+ // At the "abstract" level, it will just run multiple get()s in
+ // parallel, because this isn't much of a performance cost
+ // for local databases (except the cost of multiple transactions, which is
+ // small). The http adapter overrides this in order
+ // to do a more efficient single HTTP request.
+ this.bulkGet = (opts, callback) => {
+ bulkGetShim(this, opts, callback);
+ };
+
+ // compact one document and fire callback
+ // by compacting we mean removing all revisions which
+ // are further from the leaf in revision tree than max_height
+ this.compactDocument = (docId, maxHeight, callback) => {
+ this._getRevisionTree(docId, (err, revTree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return callback(err);
+ }
+ const height = computeHeight(revTree);
+ const candidates = [];
+ const revs = [];
+ Object.keys(height).forEach(rev => {
+ if (height[rev] > maxHeight) {
+ candidates.push(rev);
+ }
+ });
+
+ traverseRevTree(revTree, (isLeaf, pos, revHash, ctx, {status}) => {
+ const rev = `${pos}-${revHash}`;
+ if (status === 'available' && candidates.includes(rev)) {
+ revs.push(rev);
+ }
+ });
+ this._doCompaction(docId, revs, callback);
+ });
+ };
+
+ // compact the whole database using single document
+ // compaction
+ this.compact = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ this._compactionQueue = this._compactionQueue || [];
+ this._compactionQueue.push({opts, callback});
+ if (this._compactionQueue.length === 1) {
+ doNextCompaction(this);
+ }
+ };
+
+ /* Begin api wrappers. Specific functionality to storage belongs in the _[method] */
+ this.get = (id, opts, cb) => {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof id !== 'string') {
+ return cb(createError(INVALID_ID));
+ }
+ if (isLocalId(id) && typeof this._getLocal === 'function') {
+ return this._getLocal(id, cb);
+ }
+ let leaves = [];
+
+ const finishOpenRevs = () => {
+ const result = [];
+ let count = leaves.length;
+ /* istanbul ignore if */
+ if (!count) {
+ return cb(null, result);
+ }
+
+ // order with open_revs is unspecified
+ leaves.forEach((leaf) => {
+ this.get(id, {
+ rev: leaf,
+ revs: opts.revs,
+ latest: opts.latest,
+ attachments: opts.attachments,
+ binary: opts.binary
+ }, (err, doc) => {
+ if (!err) {
+ // using latest=true can produce duplicates
+ let existing;
+ for (let i = 0, l = result.length; i < l; i++) {
+ if (result[i].ok && result[i].ok._rev === doc._rev) {
+ existing = true;
+ break;
+ }
+ }
+ if (!existing) {
+ result.push({ok: doc});
+ }
+ } else {
+ result.push({missing: leaf});
+ }
+ count--;
+ if (!count) {
+ cb(null, result);
+ }
+ });
+ });
+ };
+
+ if (opts.open_revs) {
+ if (opts.open_revs === "all") {
+ this._getRevisionTree(id, (err, rev_tree) => {
+ /* istanbul ignore if */
+ if (err) {
+ return cb(err);
+ }
+ leaves = collectLeaves(rev_tree).map(leaf => leaf.rev);
+ finishOpenRevs();
+ });
+ } else {
+ if (Array.isArray(opts.open_revs)) {
+ leaves = opts.open_revs;
+ for (let i = 0; i < leaves.length; i++) {
+ const l = leaves[i];
+ // looks like it's the only thing couchdb checks
+ if (!(typeof (l) === "string" && /^\d+-/.test(l))) {
+ return cb(createError(INVALID_REV));
+ }
+ }
+ finishOpenRevs();
+ } else {
+ return cb(createError(UNKNOWN_ERROR, 'function_clause'));
+ }
+ }
+ return; // open_revs does not like other options
+ }
+
+ return this._get(id, opts, (err, result) => {
+ if (err) {
+ err.docId = id;
+ return cb(err);
+ }
+
+ const doc = result.doc;
+ const metadata = result.metadata;
+ const ctx = result.ctx;
+
+ if (opts.conflicts) {
+ const conflicts = collectConflicts(metadata);
+ if (conflicts.length) {
+ doc._conflicts = conflicts;
+ }
+ }
+
+ if (isDeleted(metadata, doc._rev)) {
+ doc._deleted = true;
+ }
+
+ if (opts.revs || opts.revs_info) {
+ const splittedRev = doc._rev.split('-');
+ const revNo = parseInt(splittedRev[0], 10);
+ const revHash = splittedRev[1];
+
+ const paths = rootToLeaf(metadata.rev_tree);
+ let path = null;
+
+ for (let i = 0; i < paths.length; i++) {
+ const currentPath = paths[i];
+ const hashIndex = currentPath.ids.map(x => x.id)
+ .indexOf(revHash);
+ const hashFoundAtRevPos = hashIndex === (revNo - 1);
+
+ if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {
+ path = currentPath;
+ }
+ }
+
+ /* istanbul ignore if */
+ if (!path) {
+ err = new Error('invalid rev tree');
+ err.docId = id;
+ return cb(err);
+ }
+
+ const indexOfRev = path.ids.map(x => x.id)
+ .indexOf(doc._rev.split('-')[1]) + 1;
+ const howMany = path.ids.length - indexOfRev;
+ path.ids.splice(indexOfRev, howMany);
+ path.ids.reverse();
+
+ if (opts.revs) {
+ doc._revisions = {
+ start: (path.pos + path.ids.length) - 1,
+ ids: path.ids.map(rev => rev.id)
+ };
+ }
+ if (opts.revs_info) {
+ let pos = path.pos + path.ids.length;
+ doc._revs_info = path.ids.map(rev => {
+ pos--;
+ return {
+ rev: `${pos}-${rev.id}`,
+ status: rev.opts.status
+ };
+ });
+ }
+ }
+
+ if (opts.attachments && doc._attachments) {
+ const attachments = doc._attachments;
+ let count = Object.keys(attachments).length;
+ if (count === 0) {
+ return cb(null, doc);
+ }
+ Object.keys(attachments).forEach((key) => {
+ this._getAttachment(doc._id, key, attachments[key], {
+ // Previously the revision handling was done in adapter.js
+ // getAttachment, however since idb-next doesnt we need to
+ // pass the rev through
+ rev: doc._rev,
+ binary: opts.binary,
+ ctx
+ }, (err, data) => {
+ const att = doc._attachments[key];
+ att.data = data;
+ delete att.stub;
+ delete att.length;
+ if (!--count) {
+ cb(null, doc);
+ }
+ });
+ });
+ } else {
+ if (doc._attachments) {
+ for (const key in doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(doc._attachments, key)) {
+ doc._attachments[key].stub = true;
+ }
+ }
+ }
+ cb(null, doc);
+ }
+ });
+ };
+
+ // TODO: I dont like this, it forces an extra read for every
+ // attachment read and enforces a confusing api between
+ // adapter.js and the adapter implementation
+ this.getAttachment = (docId, attachmentId, opts, callback) => {
+ if (opts instanceof Function) {
+ callback = opts;
+ opts = {};
+ }
+ this._get(docId, opts, (err, {doc, ctx}) => {
+ if (err) {
+ return callback(err);
+ }
+ if (doc._attachments && doc._attachments[attachmentId]) {
+ opts.ctx = ctx;
+ opts.binary = true;
+ this._getAttachment(docId, attachmentId,
+ doc._attachments[attachmentId], opts, callback);
+ } else {
+ return callback(createError(MISSING_DOC));
+ }
+ });
+ };
+
+ this.allDocs = (opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;
+ if (opts.start_key) {
+ opts.startkey = opts.start_key;
+ }
+ if (opts.end_key) {
+ opts.endkey = opts.end_key;
+ }
+ if ('keys' in opts) {
+ if (!Array.isArray(opts.keys)) {
+ return callback(new TypeError('options.keys must be an array'));
+ }
+ const incompatibleOpt =
+ ['startkey', 'endkey', 'key'].filter(incompatibleOpt => incompatibleOpt in opts)[0];
+ if (incompatibleOpt) {
+ callback(createError(QUERY_PARSE_ERROR,
+ `Query parameter \`${incompatibleOpt}\` is not compatible with multi-get`
+ ));
+ return;
+ }
+ if (!isRemote(this)) {
+ allDocsKeysParse(opts);
+ if (opts.keys.length === 0) {
+ return this._allDocs({limit: 0}, callback);
+ }
+ }
+ }
+
+ return this._allDocs(opts, callback);
+ };
+
+ this.close = (callback) => {
+ this._closed = true;
+ this.postMessage('closed');
+ return this._close(callback);
+ };
+
+ this.info = function (callback) {
+ this._info((err, info) => {
+ if (err) {
+ return callback(err);
+ }
+ // assume we know better than the adapter, unless it informs us
+ info.db_name = info.db_name || this.name;
+ info.auto_compaction = !!(this.auto_compaction && !isRemote(this));
+ info.adapter = this.adapter;
+ callback(null, info);
+ });
+ };
+
+ this.id = (callback) => {
+ return this._id(callback);
+ };
+
+ this.bulkDocs = (req, opts, callback) => {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ if (Array.isArray(req)) {
+ req = {
+ docs: req
+ };
+ }
+
+ if (!req || !req.docs || !Array.isArray(req.docs)) {
+ return callback(createError(MISSING_BULK_DOCS));
+ }
+
+ for (let i = 0; i < req.docs.length; ++i) {
+ if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {
+ return callback(createError(NOT_AN_OBJECT));
+ }
+ }
+
+ let attachmentError;
+ req.docs.forEach(({_attachments, _id}) => {
+ if (_attachments) {
+ Object.keys(_attachments).forEach(name => {
+ attachmentError = attachmentError || attachmentNameError(name);
+ if (!_attachments[name].content_type) {
+ guardedConsole('warn', 'Attachment', name, 'on document', _id, 'is missing content_type');
+ }
+ });
+ }
+ });
+
+ if (attachmentError) {
+ return callback(createError(BAD_REQUEST, attachmentError));
+ }
+
+ if (!('new_edits' in opts)) {
+ if ('new_edits' in req) {
+ opts.new_edits = req.new_edits;
+ } else {
+ opts.new_edits = true;
+ }
+ }
+
+ const adapter = this;
+ if (!opts.new_edits && !isRemote(adapter)) {
+ // ensure revisions of the same doc are sorted, so that
+ // the local adapter processes them correctly (#2935)
+ req.docs.sort(compareByIdThenRev);
+ }
+
+ cleanDocs(req.docs);
+
+ // in the case of conflicts, we want to return the _ids to the user
+ // however, the underlying adapter may destroy the docs array, so
+ // create a copy here
+ const ids = req.docs.map(({_id}) => _id);
+
+ this._bulkDocs(req, opts, (err, res) => {
+ if (err) {
+ return callback(err);
+ }
+ if (!opts.new_edits) {
+ // this is what couch does when new_edits is false
+ res = res.filter(({error}) => error);
+ }
+ // add ids for error/conflict responses (not required for CouchDB)
+ if (!isRemote(adapter)) {
+ for (let i = 0, l = res.length; i < l; i++) {
+ res[i].id = res[i].id || ids[i];
+ }
+ }
+
+ callback(null, res);
+ });
+ };
+
+ this.registerDependentDatabase = (dependentDb, callback) => {
+ const dbOptions = clone(this.__opts);
+ if (this.__opts.view_adapter) {
+ dbOptions.adapter = this.__opts.view_adapter;
+ }
+
+ const depDB = new this.constructor(dependentDb, dbOptions);
+
+ function diffFun(doc) {
+ doc.dependentDbs = doc.dependentDbs || {};
+ if (doc.dependentDbs[dependentDb]) {
+ return false; // no update required
+ }
+ doc.dependentDbs[dependentDb] = true;
+ return doc;
+ }
+ upsert(this, '_local/_pouch_dependentDbs', diffFun).then(() => {
+ callback(null, {db: depDB});
+ }).catch(callback);
+ };
+
+ this.destroy = (opts, callback) => {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ const usePrefix = 'use_prefix' in this ? this.use_prefix : true;
+
+ const destroyDb = () => {
+ // call destroy method of the particular adaptor
+ this._destroy(opts, (err, resp) => {
+ if (err) {
+ return callback(err);
+ }
+ this._destroyed = true;
+ this.postMessage('destroyed');
+ callback(null, resp || { 'ok': true });
+ });
+ };
+
+ if (isRemote(this)) {
+ // no need to check for dependent DBs if it's a remote DB
+ return destroyDb();
+ }
+
+ this.get('_local/_pouch_dependentDbs', (err, localDoc) => {
+ if (err) {
+ /* istanbul ignore if */
+ if (err.status !== 404) {
+ return callback(err);
+ } else { // no dependencies
+ return destroyDb();
+ }
+ }
+ const dependentDbs = localDoc.dependentDbs;
+ const PouchDB = this.constructor;
+ const deletedMap = Object.keys(dependentDbs).map((name) => {
+ // use_prefix is only false in the browser
+ /* istanbul ignore next */
+ const trueName = usePrefix ?
+ name.replace(new RegExp(`^${PouchDB.prefix}`), '') : name;
+ return new PouchDB(trueName, this.__opts).destroy();
+ });
+ Promise.all(deletedMap).then(destroyDb, callback);
+ });
+ };
+ }
+
+ _compact({last_seq}, callback) {
+ const changesOpts = {
+ return_docs: false,
+ last_seq: last_seq || 0
+ };
+ const promises = [];
+
+ let taskId;
+ let compactedDocs = 0;
+
+ const onChange = ({id}) => {
+ this.activeTasks.update(taskId, {
+ completed_items: ++compactedDocs
+ });
+ promises.push(this.compactDocument(id, 0));
+ };
+ const onError = (err) => {
+ this.activeTasks.remove(taskId, err);
+ callback(err);
+ };
+ const onComplete = ({last_seq}) => {
+ const lastSeq = last_seq;
+ Promise.all(promises).then(() => upsert(this, '_local/compaction', (doc) => {
+ if (!doc.last_seq || doc.last_seq < lastSeq) {
+ doc.last_seq = lastSeq;
+ return doc;
+ }
+ return false; // somebody else got here first, don't update
+ })).then(() => {
+ this.activeTasks.remove(taskId);
+ callback(null, {ok: true});
+ }).catch(onError);
+ };
+
+ this.info().then(({update_seq}) => {
+ taskId = this.activeTasks.add({
+ name: 'database_compaction',
+ total_items: update_seq - changesOpts.last_seq,
+ });
+
+ this.changes(changesOpts)
+ .on('change', onChange)
+ .on('complete', onComplete)
+ .on('error', onError);
+ });
+ }
+
+ changes(opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+
+ opts = opts || {};
+
+ // By default set return_docs to false if the caller has opts.live = true,
+ // this will prevent us from collecting the set of changes indefinitely
+ // resulting in growing memory
+ opts.return_docs = ('return_docs' in opts) ? opts.return_docs : !opts.live;
+
+ return new Changes(this, opts, callback);
+ }
+
+ type() {
+ return (typeof this._type === 'function') ? this._type() : this.adapter;
+ }
+}
+
+// The abstract purge implementation expects a doc id and the rev of a leaf node in that doc.
+// It will return errors if the rev doesn’t exist or isn’t a leaf.
+AbstractPouchDB.prototype.purge = (docId, rev, callback) => {
+ if (typeof undefined._purge === 'undefined') {
+ return callback(createError(UNKNOWN_ERROR,
+ `Purge is not implemented in the ${undefined.adapter} adapter.`
+ ));
+ }
+ const self = undefined;
+
+ self._getRevisionTree(docId, (error, revs) => {
+ if (error) {
+ return callback(error);
+ }
+ if (!revs) {
+ return callback(createError(MISSING_DOC));
+ }
+ let path;
+ try {
+ path = findPathToLeaf(revs, rev);
+ } catch (error) {
+ return callback(error.message || error);
+ }
+ self._purge(docId, path, (error, result) => {
+ if (error) {
+ return callback(error);
+ } else {
+ appendPurgeSeq(self, docId, rev).then(() => callback(null, result));
+ }
+ });
+ });
+};
+
+class TaskQueue {
+ constructor() {
+ this.isReady = false;
+ this.failed = false;
+ this.queue = [];
+ }
+
+ execute() {
+ var fun;
+ if (this.failed) {
+ while ((fun = this.queue.shift())) {
+ fun(this.failed);
+ }
+ } else {
+ while ((fun = this.queue.shift())) {
+ fun();
+ }
+ }
+ }
+
+ fail(err) {
+ this.failed = err;
+ this.execute();
+ }
+
+ ready(db) {
+ this.isReady = true;
+ this.db = db;
+ this.execute();
+ }
+
+ addTask(fun) {
+ this.queue.push(fun);
+ if (this.failed) {
+ this.execute();
+ }
+ }
+}
+
+const getParseAdapter = (PouchDB) => function parseAdapter(name, opts) {
+ var match = name.match(/([a-z-]*):\/\/(.*)/);
+ if (match) {
+ // the http adapter expects the fully qualified name
+ return {
+ name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],
+ adapter: match[1]
+ };
+ }
+
+ var adapters = PouchDB.adapters;
+ var preferredAdapters = PouchDB.preferredAdapters;
+ var prefix = PouchDB.prefix;
+ var adapterName = opts.adapter;
+
+ if (!adapterName) { // automatically determine adapter
+ for (var i = 0; i < preferredAdapters.length; ++i) {
+ adapterName = preferredAdapters[i];
+ // check for browsers that have been upgraded from websql-only to websql+idb
+ /* istanbul ignore if */
+ if (adapterName === 'idb' && 'websql' in adapters &&
+ hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {
+ // log it, because this can be confusing during development
+ guardedConsole('log', 'PouchDB is downgrading "' + name + '" to WebSQL to' +
+ ' avoid data loss, because it was already opened with WebSQL.');
+ continue; // keep using websql to avoid user data loss
+ }
+ break;
+ }
+ }
+
+ var adapter = adapters[adapterName];
+
+ // if adapter is invalid, then an error will be thrown later
+ var usePrefix = (adapter && 'use_prefix' in adapter) ?
+ adapter.use_prefix : true;
+
+ return {
+ name: usePrefix ? (prefix + name) : name,
+ adapter: adapterName
+ };
+};
+
+class PouchInternal extends AbstractPouchDB {
+ constructor(name, opts) {
+ super();
+ this._setup(name, opts);
+ }
+
+ _setup(name, opts) {
+ super._setup();
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ if (opts.deterministic_revs === undefined) {
+ opts.deterministic_revs = true;
+ }
+
+ this.__opts = opts = clone$1(opts);
+
+ this.auto_compaction = opts.auto_compaction;
+ this.purged_infos_limit = opts.purged_infos_limit || 1000;
+ this.prefix = PouchDB.prefix;
+
+ if (typeof name !== 'string') {
+ throw new Error('Missing/invalid DB name');
+ }
+
+ var prefixedName = (opts.prefix || '') + name;
+ var backend = parseAdapter(prefixedName, opts);
+
+ opts.name = backend.name;
+ opts.adapter = opts.adapter || backend.adapter;
+
+ this.name = name;
+ this._adapter = opts.adapter;
+ PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);
+
+ if (!PouchDB.adapters[opts.adapter] ||
+ !PouchDB.adapters[opts.adapter].valid()) {
+ throw new Error('Invalid Adapter: ' + opts.adapter);
+ }
+
+ if (opts.view_adapter) {
+ if (!PouchDB.adapters[opts.view_adapter] ||
+ !PouchDB.adapters[opts.view_adapter].valid()) {
+ throw new Error('Invalid View Adapter: ' + opts.view_adapter);
+ }
+ }
+
+ this.taskqueue = new TaskQueue();
+
+ this.adapter = opts.adapter;
+
+ PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
+ if (err) {
+ return this.taskqueue.fail(err);
+ }
+
+
+ this.emit('created', this);
+ PouchDB.emit('created', this.name);
+ this.taskqueue.ready(this);
+ });
+ }
+}
+
+const PouchDB = createClass(PouchInternal, function (name, opts) {
+ PouchInternal.prototype._setup.call(this, name, opts);
+});
+
+const parseAdapter = getParseAdapter(PouchDB);
+
+
+
+PouchDB.adapters = {};
+PouchDB.preferredAdapters = [];
+
+PouchDB.prefix = '_pouch_';
+
+var eventEmitter = new EE();
+
+
+ Object.keys(EE.prototype).forEach(function (key) {
+ if (typeof EE.prototype[key] === 'function') {
+ PouchDB[key] = eventEmitter[key].bind(eventEmitter);
+ }
+ });
+
+ // these are created in constructor.js, and allow us to notify each DB with
+ // the same name that it was destroyed, via the constructor object
+ var destructListeners = PouchDB._destructionListeners = new Map();
+
+ PouchDB.on('ref', function onConstructorRef(db) {
+ if (!destructListeners.has(db.name)) {
+ destructListeners.set(db.name, []);
+ }
+ destructListeners.get(db.name).push(db);
+ });
+
+ PouchDB.on('unref', function onConstructorUnref(db) {
+ if (!destructListeners.has(db.name)) {
+ return;
+ }
+ var dbList = destructListeners.get(db.name);
+ var pos = dbList.indexOf(db);
+ if (pos < 0) {
+ /* istanbul ignore next */
+ return;
+ }
+ dbList.splice(pos, 1);
+ if (dbList.length > 1) {
+ /* istanbul ignore next */
+ destructListeners.set(db.name, dbList);
+ } else {
+ destructListeners.delete(db.name);
+ }
+ });
+
+ PouchDB.on('destroyed', function onConstructorDestroyed(name) {
+ if (!destructListeners.has(name)) {
+ return;
+ }
+ var dbList = destructListeners.get(name);
+ destructListeners.delete(name);
+ dbList.forEach(function (db) {
+ db.emit('destroyed',true);
+ });
+ });
+
+
+PouchDB.adapter = function (id, obj, addToPreferredAdapters) {
+ /* istanbul ignore else */
+ if (obj.valid()) {
+ PouchDB.adapters[id] = obj;
+ if (addToPreferredAdapters) {
+ PouchDB.preferredAdapters.push(id);
+ }
+ }
+};
+
+PouchDB.plugin = function (obj) {
+ if (typeof obj === 'function') { // function style for plugins
+ obj(PouchDB);
+ } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {
+ throw new Error('Invalid plugin: got "' + obj + '", expected an object or a function');
+ } else {
+ Object.keys(obj).forEach(function (id) { // object style for plugins
+ PouchDB.prototype[id] = obj[id];
+ });
+ }
+ if (this.__defaults) {
+ PouchDB.__defaults = Object.assign({}, this.__defaults);
+ }
+ return PouchDB;
+};
+
+PouchDB.defaults = function (defaultOpts) {
+ let PouchWithDefaults = createClass(PouchDB, function (name, opts) {
+ opts = opts || {};
+
+ if (name && typeof name === 'object') {
+ opts = name;
+ name = opts.name;
+ delete opts.name;
+ }
+
+ opts = Object.assign({}, PouchWithDefaults.__defaults, opts);
+ PouchDB.call(this, name, opts);
+ });
+
+ PouchWithDefaults.preferredAdapters = PouchDB.preferredAdapters.slice();
+ Object.keys(PouchDB).forEach(function (key) {
+ if (!(key in PouchWithDefaults)) {
+ PouchWithDefaults[key] = PouchDB[key];
+ }
+ });
+
+ // make default options transitive
+ // https://github.com/pouchdb/pouchdb/issues/5922
+ PouchWithDefaults.__defaults = Object.assign({}, this.__defaults, defaultOpts);
+
+ return PouchWithDefaults;
+};
+
+PouchDB.fetch = function (url, opts) {
+ return fetch(url, opts);
+};
+
+PouchDB.prototype.activeTasks = PouchDB.activeTasks = new ActiveTasks();
+
+var PouchDB$1 = PouchDB;
+
+// TODO: remove from pouchdb-core (breaking)
+PouchDB$1.plugin(pouchChangesFilter);
+
+export { PouchDB$1 as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-crypto.js b/packages/pouchdb-platform/lib/pouchdb-crypto.js
new file mode 100644
index 0000000000..c2e029f0ad
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-crypto.js
@@ -0,0 +1,63 @@
+async function digestFromMessage(message,algo='SHA-256') {
+ const msgUint8 = new TextEncoder().encode(message);
+ const arrayBuffer = await crypto.subtle.digest(algo, msgUint8); // hash the message
+
+ return {
+ digist(format='hex') {
+ const formats = {
+ hex: () =>
+ Array.from(new Uint8Array(arrayBuffer))
+ // converted buffer to byte array
+ .map((b) => b.toString(16).padStart(2, "0"))
+ .join(""), // converted bytes to hex string;
+ };
+ // Fails by design with wrong format
+ return formats[format]();
+ }
+ };
+}
+
+
+const base64encoderStream = {
+ transform(data,ready) {
+ let reader = new FileReader();
+ reader.onloadend = () => {
+ ready.enqueue(reader.result.split(';base64,',1));
+ reader = null;
+ };
+ reader.readAsDataURL(new Blob(data));
+ }
+};
+
+//new TransformStream(base64encoderStream)
+
+// Old But gold
+function blobToBase64(blobOrBuffer, callback) {
+ new Response(blobOrBuffer).arrayBuffer().then((arrayBuffer) => btoa(
+ String.fromCharCode(
+ ...new Uint8Array(arrayBuffer)
+ ))).then((b64)=>callback(null,b64),err=>callback(err));
+ //callback(blobOrBuffer.toString('binary'));
+}
+// eg "digest":"md5-yDbs1scfYdqqLpxyFb1gFw==",
+// base642hex new Buffer('yDbs1scfYdqqLpxyFb1gFw==', 'base64').toString('hex')
+// hex2base64 new Buffer('c836ecd6c71f61daaa2e9c7215bd6017', 'hex').toString('base64')
+
+// Returns only the ${base64Data}
+// Reverse: await fetch(`data:${'image/jpeg'||''};base64,${base64Data}`);
+const toBase64 = (blob) => new Promise((resolve, reject) => {
+ const reader = new FileReader;
+ reader.onerror = reject;
+ reader.onload = () => {
+ resolve(reader.result.split('base64,',1)[1]);
+ };
+ reader.readAsDataURL(new Blob([].concat(blob)));
+});
+
+
+//import { md5, sha1, sha512, sha3 } from 'hash-wasm'
+// replaces stringMd5 returns hex should also use message.normalize('NFKC')
+const createoldMD5 = (message="") => import('./hash-wasm.js').then(({ md5 }) => md5(new TextEncoder().encode(message)));
+const stringMd5 = async (message="") => (await import('./hash-wasm.js')).md5(message);
+
+export { base64encoderStream, blobToBase64, createoldMD5, digestFromMessage, stringMd5, toBase64 };
diff --git a/packages/pouchdb-platform/lib/pouchdb-errors.js b/packages/pouchdb-platform/lib/pouchdb-errors.js
new file mode 100644
index 0000000000..690f20c207
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-errors.js
@@ -0,0 +1,102 @@
+class PouchError extends Error {
+ constructor(status, error, reason) {
+ super();
+ this.status = status;
+ this.name = error;
+ this.message = reason;
+ this.error = true;
+ }
+
+ toString() {
+ return JSON.stringify({
+ status: this.status,
+ name: this.name,
+ message: this.message,
+ reason: this.reason
+ });
+ }
+}
+
+var UNAUTHORIZED = new PouchError(401, 'unauthorized', "Name or password is incorrect.");
+var MISSING_BULK_DOCS = new PouchError(400, 'bad_request', "Missing JSON list of 'docs'");
+var MISSING_DOC = new PouchError(404, 'not_found', 'missing');
+var REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');
+var INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');
+var MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');
+var RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');
+var NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');
+var UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');
+var BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');
+var INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');
+var QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');
+var DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');
+var BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');
+var NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');
+var DB_MISSING = new PouchError(404, 'not_found', 'Database not found');
+var IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');
+var WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');
+var LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');
+var FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');
+var INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');
+var FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');
+var MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\'t found');
+var INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');
+
+function createError(error, reason) {
+ function CustomPouchError(reason) {
+ // inherit error properties from our parent error manually
+ // so as to allow proper JSON parsing.
+ /* jshint ignore:start */
+ var names = Object.getOwnPropertyNames(error);
+ for (var i = 0, len = names.length; i < len; i++) {
+ if (typeof error[names[i]] !== 'function') {
+ this[names[i]] = error[names[i]];
+ }
+ }
+
+ if (this.stack === undefined) {
+ this.stack = (new Error()).stack;
+ }
+
+ /* jshint ignore:end */
+ if (reason !== undefined) {
+ this.reason = reason;
+ }
+ }
+ CustomPouchError.prototype = PouchError.prototype;
+ return new CustomPouchError(reason);
+}
+
+function generateErrorFromResponse(err) {
+
+ if (typeof err !== 'object') {
+ var data = err;
+ err = UNKNOWN_ERROR;
+ err.data = data;
+ }
+
+ if ('error' in err && err.error === 'conflict') {
+ err.name = 'conflict';
+ err.status = 409;
+ }
+
+ if (!('name' in err)) {
+ err.name = err.error || 'unknown';
+ }
+
+ if (!('status' in err)) {
+ err.status = 500;
+ }
+
+ if (!('message' in err)) {
+ err.message = err.message || err.reason;
+ }
+
+ if (!('stack' in err)) {
+ err.stack = (new Error()).stack;
+ }
+
+ return err;
+}
+
+export { BAD_ARG, BAD_REQUEST, DB_MISSING, DOC_VALIDATION, FILE_EXISTS, FORBIDDEN, IDB_ERROR, INVALID_ID, INVALID_REQUEST, INVALID_REV, INVALID_URL, LDB_ERROR, MISSING_BULK_DOCS, MISSING_DOC, MISSING_ID, MISSING_STUB, NOT_AN_OBJECT, NOT_OPEN, QUERY_PARSE_ERROR, RESERVED_ID, REV_CONFLICT, UNAUTHORIZED, UNKNOWN_ERROR, WSQ_ERROR, createError, generateErrorFromResponse };
diff --git a/packages/pouchdb-platform/lib/pouchdb-fetch.js b/packages/pouchdb-platform/lib/pouchdb-fetch.js
new file mode 100644
index 0000000000..85f4145277
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-fetch.js
@@ -0,0 +1,82444 @@
+import Stream from 'stream';
+import http from 'http';
+import Url from 'url';
+import require$$0 from 'punycode';
+import https from 'https';
+import zlib from 'zlib';
+import fetchCookie from 'fetch-cookie';
+
+var publicApi = {};
+
+var URL$2 = {exports: {}};
+
+var conversions = {};
+var lib = conversions;
+
+function sign(x) {
+ return x < 0 ? -1 : 1;
+}
+
+function evenRound(x) {
+ // Round x to the nearest integer, choosing the even integer if it lies halfway between two.
+ if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)
+ return Math.floor(x);
+ } else {
+ return Math.round(x);
+ }
+}
+
+function createNumberConversion(bitLength, typeOpts) {
+ if (!typeOpts.unsigned) {
+ --bitLength;
+ }
+ const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
+ const upperBound = Math.pow(2, bitLength) - 1;
+
+ const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
+ const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
+
+ return function(V, opts) {
+ if (!opts) opts = {};
+
+ let x = +V;
+
+ if (opts.enforceRange) {
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite number");
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ if (x < lowerBound || x > upperBound) {
+ throw new TypeError("Argument is not in byte range");
+ }
+
+ return x;
+ }
+
+ if (!isNaN(x) && opts.clamp) {
+ x = evenRound(x);
+
+ if (x < lowerBound) x = lowerBound;
+ if (x > upperBound) x = upperBound;
+ return x;
+ }
+
+ if (!Number.isFinite(x) || x === 0) {
+ return 0;
+ }
+
+ x = sign(x) * Math.floor(Math.abs(x));
+ x = x % moduloVal;
+
+ if (!typeOpts.unsigned && x >= moduloBound) {
+ return x - moduloVal;
+ } else if (typeOpts.unsigned) {
+ if (x < 0) {
+ x += moduloVal;
+ } else if (x === -0) { // don't return negative zero
+ return 0;
+ }
+ }
+
+ return x;
+ }
+}
+
+conversions["void"] = function () {
+ return undefined;
+};
+
+conversions["boolean"] = function (val) {
+ return !!val;
+};
+
+conversions["byte"] = createNumberConversion(8, { unsigned: false });
+conversions["octet"] = createNumberConversion(8, { unsigned: true });
+
+conversions["short"] = createNumberConversion(16, { unsigned: false });
+conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
+
+conversions["long"] = createNumberConversion(32, { unsigned: false });
+conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
+
+conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
+conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
+
+conversions["double"] = function (V) {
+ const x = +V;
+
+ if (!Number.isFinite(x)) {
+ throw new TypeError("Argument is not a finite floating-point value");
+ }
+
+ return x;
+};
+
+conversions["unrestricted double"] = function (V) {
+ const x = +V;
+
+ if (isNaN(x)) {
+ throw new TypeError("Argument is NaN");
+ }
+
+ return x;
+};
+
+// not quite valid, but good enough for JS
+conversions["float"] = conversions["double"];
+conversions["unrestricted float"] = conversions["unrestricted double"];
+
+conversions["DOMString"] = function (V, opts) {
+ if (!opts) opts = {};
+
+ if (opts.treatNullAsEmptyString && V === null) {
+ return "";
+ }
+
+ return String(V);
+};
+
+conversions["ByteString"] = function (V, opts) {
+ const x = String(V);
+ let c = undefined;
+ for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
+ if (c > 255) {
+ throw new TypeError("Argument is not a valid bytestring");
+ }
+ }
+
+ return x;
+};
+
+conversions["USVString"] = function (V) {
+ const S = String(V);
+ const n = S.length;
+ const U = [];
+ for (let i = 0; i < n; ++i) {
+ const c = S.charCodeAt(i);
+ if (c < 0xD800 || c > 0xDFFF) {
+ U.push(String.fromCodePoint(c));
+ } else if (0xDC00 <= c && c <= 0xDFFF) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ if (i === n - 1) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ const d = S.charCodeAt(i + 1);
+ if (0xDC00 <= d && d <= 0xDFFF) {
+ const a = c & 0x3FF;
+ const b = d & 0x3FF;
+ U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
+ ++i;
+ } else {
+ U.push(String.fromCodePoint(0xFFFD));
+ }
+ }
+ }
+ }
+
+ return U.join('');
+};
+
+conversions["Date"] = function (V, opts) {
+ if (!(V instanceof Date)) {
+ throw new TypeError("Argument is not a Date object");
+ }
+ if (isNaN(V)) {
+ return undefined;
+ }
+
+ return V;
+};
+
+conversions["RegExp"] = function (V, opts) {
+ if (!(V instanceof RegExp)) {
+ V = new RegExp(V);
+ }
+
+ return V;
+};
+
+var utils = {exports: {}};
+
+utils.exports;
+
+(function (module) {
+
+ module.exports.mixin = function mixin(target, source) {
+ const keys = Object.getOwnPropertyNames(source);
+ for (let i = 0; i < keys.length; ++i) {
+ Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
+ }
+ };
+
+ module.exports.wrapperSymbol = Symbol("wrapper");
+ module.exports.implSymbol = Symbol("impl");
+
+ module.exports.wrapperForImpl = function (impl) {
+ return impl[module.exports.wrapperSymbol];
+ };
+
+ module.exports.implForWrapper = function (wrapper) {
+ return wrapper[module.exports.implSymbol];
+ };
+} (utils));
+
+var utilsExports = utils.exports;
+
+var URLImpl = {};
+
+var urlStateMachine = {exports: {}};
+
+var tr46 = {};
+
+var require$$1 = [
+ [
+ [
+ 0,
+ 44
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 45,
+ 46
+ ],
+ "valid"
+ ],
+ [
+ [
+ 47,
+ 47
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 48,
+ 57
+ ],
+ "valid"
+ ],
+ [
+ [
+ 58,
+ 64
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 65,
+ 65
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 66,
+ 66
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 67,
+ 67
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 68,
+ 68
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 69,
+ 69
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 70,
+ 70
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 71,
+ 71
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 72,
+ 72
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 73,
+ 73
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 74,
+ 74
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 75,
+ 75
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 76,
+ 76
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 77,
+ 77
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 78,
+ 78
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 79,
+ 79
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 80,
+ 80
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 81,
+ 81
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 82,
+ 82
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 83,
+ 83
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 84,
+ 84
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 85,
+ 85
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 86,
+ 86
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 87,
+ 87
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 88,
+ 88
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 89,
+ 89
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 90,
+ 90
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 91,
+ 96
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 97,
+ 122
+ ],
+ "valid"
+ ],
+ [
+ [
+ 123,
+ 127
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 128,
+ 159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 160,
+ 160
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 161,
+ 167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 168,
+ 168
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776
+ ]
+ ],
+ [
+ [
+ 169,
+ 169
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 170,
+ 170
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 171,
+ 172
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 173,
+ 173
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 174,
+ 174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 175,
+ 175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 176,
+ 177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 178,
+ 178
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 179,
+ 179
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 180,
+ 180
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 181,
+ 181
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 182,
+ 182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 183,
+ 183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 184,
+ 184
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 807
+ ]
+ ],
+ [
+ [
+ 185,
+ 185
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 186,
+ 186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 187,
+ 187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 188,
+ 188
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 189,
+ 189
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 50
+ ]
+ ],
+ [
+ [
+ 190,
+ 190
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 52
+ ]
+ ],
+ [
+ [
+ 191,
+ 191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 192,
+ 192
+ ],
+ "mapped",
+ [
+ 224
+ ]
+ ],
+ [
+ [
+ 193,
+ 193
+ ],
+ "mapped",
+ [
+ 225
+ ]
+ ],
+ [
+ [
+ 194,
+ 194
+ ],
+ "mapped",
+ [
+ 226
+ ]
+ ],
+ [
+ [
+ 195,
+ 195
+ ],
+ "mapped",
+ [
+ 227
+ ]
+ ],
+ [
+ [
+ 196,
+ 196
+ ],
+ "mapped",
+ [
+ 228
+ ]
+ ],
+ [
+ [
+ 197,
+ 197
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 198,
+ 198
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 199,
+ 199
+ ],
+ "mapped",
+ [
+ 231
+ ]
+ ],
+ [
+ [
+ 200,
+ 200
+ ],
+ "mapped",
+ [
+ 232
+ ]
+ ],
+ [
+ [
+ 201,
+ 201
+ ],
+ "mapped",
+ [
+ 233
+ ]
+ ],
+ [
+ [
+ 202,
+ 202
+ ],
+ "mapped",
+ [
+ 234
+ ]
+ ],
+ [
+ [
+ 203,
+ 203
+ ],
+ "mapped",
+ [
+ 235
+ ]
+ ],
+ [
+ [
+ 204,
+ 204
+ ],
+ "mapped",
+ [
+ 236
+ ]
+ ],
+ [
+ [
+ 205,
+ 205
+ ],
+ "mapped",
+ [
+ 237
+ ]
+ ],
+ [
+ [
+ 206,
+ 206
+ ],
+ "mapped",
+ [
+ 238
+ ]
+ ],
+ [
+ [
+ 207,
+ 207
+ ],
+ "mapped",
+ [
+ 239
+ ]
+ ],
+ [
+ [
+ 208,
+ 208
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 209,
+ 209
+ ],
+ "mapped",
+ [
+ 241
+ ]
+ ],
+ [
+ [
+ 210,
+ 210
+ ],
+ "mapped",
+ [
+ 242
+ ]
+ ],
+ [
+ [
+ 211,
+ 211
+ ],
+ "mapped",
+ [
+ 243
+ ]
+ ],
+ [
+ [
+ 212,
+ 212
+ ],
+ "mapped",
+ [
+ 244
+ ]
+ ],
+ [
+ [
+ 213,
+ 213
+ ],
+ "mapped",
+ [
+ 245
+ ]
+ ],
+ [
+ [
+ 214,
+ 214
+ ],
+ "mapped",
+ [
+ 246
+ ]
+ ],
+ [
+ [
+ 215,
+ 215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 216,
+ 216
+ ],
+ "mapped",
+ [
+ 248
+ ]
+ ],
+ [
+ [
+ 217,
+ 217
+ ],
+ "mapped",
+ [
+ 249
+ ]
+ ],
+ [
+ [
+ 218,
+ 218
+ ],
+ "mapped",
+ [
+ 250
+ ]
+ ],
+ [
+ [
+ 219,
+ 219
+ ],
+ "mapped",
+ [
+ 251
+ ]
+ ],
+ [
+ [
+ 220,
+ 220
+ ],
+ "mapped",
+ [
+ 252
+ ]
+ ],
+ [
+ [
+ 221,
+ 221
+ ],
+ "mapped",
+ [
+ 253
+ ]
+ ],
+ [
+ [
+ 222,
+ 222
+ ],
+ "mapped",
+ [
+ 254
+ ]
+ ],
+ [
+ [
+ 223,
+ 223
+ ],
+ "deviation",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 224,
+ 246
+ ],
+ "valid"
+ ],
+ [
+ [
+ 247,
+ 247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 248,
+ 255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 256,
+ 256
+ ],
+ "mapped",
+ [
+ 257
+ ]
+ ],
+ [
+ [
+ 257,
+ 257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 258,
+ 258
+ ],
+ "mapped",
+ [
+ 259
+ ]
+ ],
+ [
+ [
+ 259,
+ 259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 260,
+ 260
+ ],
+ "mapped",
+ [
+ 261
+ ]
+ ],
+ [
+ [
+ 261,
+ 261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 262,
+ 262
+ ],
+ "mapped",
+ [
+ 263
+ ]
+ ],
+ [
+ [
+ 263,
+ 263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 264,
+ 264
+ ],
+ "mapped",
+ [
+ 265
+ ]
+ ],
+ [
+ [
+ 265,
+ 265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 266,
+ 266
+ ],
+ "mapped",
+ [
+ 267
+ ]
+ ],
+ [
+ [
+ 267,
+ 267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 268,
+ 268
+ ],
+ "mapped",
+ [
+ 269
+ ]
+ ],
+ [
+ [
+ 269,
+ 269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 270,
+ 270
+ ],
+ "mapped",
+ [
+ 271
+ ]
+ ],
+ [
+ [
+ 271,
+ 271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 272,
+ 272
+ ],
+ "mapped",
+ [
+ 273
+ ]
+ ],
+ [
+ [
+ 273,
+ 273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 274,
+ 274
+ ],
+ "mapped",
+ [
+ 275
+ ]
+ ],
+ [
+ [
+ 275,
+ 275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 276,
+ 276
+ ],
+ "mapped",
+ [
+ 277
+ ]
+ ],
+ [
+ [
+ 277,
+ 277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 278,
+ 278
+ ],
+ "mapped",
+ [
+ 279
+ ]
+ ],
+ [
+ [
+ 279,
+ 279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 280,
+ 280
+ ],
+ "mapped",
+ [
+ 281
+ ]
+ ],
+ [
+ [
+ 281,
+ 281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 282,
+ 282
+ ],
+ "mapped",
+ [
+ 283
+ ]
+ ],
+ [
+ [
+ 283,
+ 283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 284,
+ 284
+ ],
+ "mapped",
+ [
+ 285
+ ]
+ ],
+ [
+ [
+ 285,
+ 285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 286,
+ 286
+ ],
+ "mapped",
+ [
+ 287
+ ]
+ ],
+ [
+ [
+ 287,
+ 287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 288,
+ 288
+ ],
+ "mapped",
+ [
+ 289
+ ]
+ ],
+ [
+ [
+ 289,
+ 289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 290,
+ 290
+ ],
+ "mapped",
+ [
+ 291
+ ]
+ ],
+ [
+ [
+ 291,
+ 291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 292,
+ 292
+ ],
+ "mapped",
+ [
+ 293
+ ]
+ ],
+ [
+ [
+ 293,
+ 293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 294,
+ 294
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 295,
+ 295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 296,
+ 296
+ ],
+ "mapped",
+ [
+ 297
+ ]
+ ],
+ [
+ [
+ 297,
+ 297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 298,
+ 298
+ ],
+ "mapped",
+ [
+ 299
+ ]
+ ],
+ [
+ [
+ 299,
+ 299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 300,
+ 300
+ ],
+ "mapped",
+ [
+ 301
+ ]
+ ],
+ [
+ [
+ 301,
+ 301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 302,
+ 302
+ ],
+ "mapped",
+ [
+ 303
+ ]
+ ],
+ [
+ [
+ 303,
+ 303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 304,
+ 304
+ ],
+ "mapped",
+ [
+ 105,
+ 775
+ ]
+ ],
+ [
+ [
+ 305,
+ 305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 306,
+ 307
+ ],
+ "mapped",
+ [
+ 105,
+ 106
+ ]
+ ],
+ [
+ [
+ 308,
+ 308
+ ],
+ "mapped",
+ [
+ 309
+ ]
+ ],
+ [
+ [
+ 309,
+ 309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 310,
+ 310
+ ],
+ "mapped",
+ [
+ 311
+ ]
+ ],
+ [
+ [
+ 311,
+ 312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 313,
+ 313
+ ],
+ "mapped",
+ [
+ 314
+ ]
+ ],
+ [
+ [
+ 314,
+ 314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 315,
+ 315
+ ],
+ "mapped",
+ [
+ 316
+ ]
+ ],
+ [
+ [
+ 316,
+ 316
+ ],
+ "valid"
+ ],
+ [
+ [
+ 317,
+ 317
+ ],
+ "mapped",
+ [
+ 318
+ ]
+ ],
+ [
+ [
+ 318,
+ 318
+ ],
+ "valid"
+ ],
+ [
+ [
+ 319,
+ 320
+ ],
+ "mapped",
+ [
+ 108,
+ 183
+ ]
+ ],
+ [
+ [
+ 321,
+ 321
+ ],
+ "mapped",
+ [
+ 322
+ ]
+ ],
+ [
+ [
+ 322,
+ 322
+ ],
+ "valid"
+ ],
+ [
+ [
+ 323,
+ 323
+ ],
+ "mapped",
+ [
+ 324
+ ]
+ ],
+ [
+ [
+ 324,
+ 324
+ ],
+ "valid"
+ ],
+ [
+ [
+ 325,
+ 325
+ ],
+ "mapped",
+ [
+ 326
+ ]
+ ],
+ [
+ [
+ 326,
+ 326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 327,
+ 327
+ ],
+ "mapped",
+ [
+ 328
+ ]
+ ],
+ [
+ [
+ 328,
+ 328
+ ],
+ "valid"
+ ],
+ [
+ [
+ 329,
+ 329
+ ],
+ "mapped",
+ [
+ 700,
+ 110
+ ]
+ ],
+ [
+ [
+ 330,
+ 330
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 331,
+ 331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 332,
+ 332
+ ],
+ "mapped",
+ [
+ 333
+ ]
+ ],
+ [
+ [
+ 333,
+ 333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 334,
+ 334
+ ],
+ "mapped",
+ [
+ 335
+ ]
+ ],
+ [
+ [
+ 335,
+ 335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 336,
+ 336
+ ],
+ "mapped",
+ [
+ 337
+ ]
+ ],
+ [
+ [
+ 337,
+ 337
+ ],
+ "valid"
+ ],
+ [
+ [
+ 338,
+ 338
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 339,
+ 339
+ ],
+ "valid"
+ ],
+ [
+ [
+ 340,
+ 340
+ ],
+ "mapped",
+ [
+ 341
+ ]
+ ],
+ [
+ [
+ 341,
+ 341
+ ],
+ "valid"
+ ],
+ [
+ [
+ 342,
+ 342
+ ],
+ "mapped",
+ [
+ 343
+ ]
+ ],
+ [
+ [
+ 343,
+ 343
+ ],
+ "valid"
+ ],
+ [
+ [
+ 344,
+ 344
+ ],
+ "mapped",
+ [
+ 345
+ ]
+ ],
+ [
+ [
+ 345,
+ 345
+ ],
+ "valid"
+ ],
+ [
+ [
+ 346,
+ 346
+ ],
+ "mapped",
+ [
+ 347
+ ]
+ ],
+ [
+ [
+ 347,
+ 347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 348,
+ 348
+ ],
+ "mapped",
+ [
+ 349
+ ]
+ ],
+ [
+ [
+ 349,
+ 349
+ ],
+ "valid"
+ ],
+ [
+ [
+ 350,
+ 350
+ ],
+ "mapped",
+ [
+ 351
+ ]
+ ],
+ [
+ [
+ 351,
+ 351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 352,
+ 352
+ ],
+ "mapped",
+ [
+ 353
+ ]
+ ],
+ [
+ [
+ 353,
+ 353
+ ],
+ "valid"
+ ],
+ [
+ [
+ 354,
+ 354
+ ],
+ "mapped",
+ [
+ 355
+ ]
+ ],
+ [
+ [
+ 355,
+ 355
+ ],
+ "valid"
+ ],
+ [
+ [
+ 356,
+ 356
+ ],
+ "mapped",
+ [
+ 357
+ ]
+ ],
+ [
+ [
+ 357,
+ 357
+ ],
+ "valid"
+ ],
+ [
+ [
+ 358,
+ 358
+ ],
+ "mapped",
+ [
+ 359
+ ]
+ ],
+ [
+ [
+ 359,
+ 359
+ ],
+ "valid"
+ ],
+ [
+ [
+ 360,
+ 360
+ ],
+ "mapped",
+ [
+ 361
+ ]
+ ],
+ [
+ [
+ 361,
+ 361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 362,
+ 362
+ ],
+ "mapped",
+ [
+ 363
+ ]
+ ],
+ [
+ [
+ 363,
+ 363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 364,
+ 364
+ ],
+ "mapped",
+ [
+ 365
+ ]
+ ],
+ [
+ [
+ 365,
+ 365
+ ],
+ "valid"
+ ],
+ [
+ [
+ 366,
+ 366
+ ],
+ "mapped",
+ [
+ 367
+ ]
+ ],
+ [
+ [
+ 367,
+ 367
+ ],
+ "valid"
+ ],
+ [
+ [
+ 368,
+ 368
+ ],
+ "mapped",
+ [
+ 369
+ ]
+ ],
+ [
+ [
+ 369,
+ 369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 370,
+ 370
+ ],
+ "mapped",
+ [
+ 371
+ ]
+ ],
+ [
+ [
+ 371,
+ 371
+ ],
+ "valid"
+ ],
+ [
+ [
+ 372,
+ 372
+ ],
+ "mapped",
+ [
+ 373
+ ]
+ ],
+ [
+ [
+ 373,
+ 373
+ ],
+ "valid"
+ ],
+ [
+ [
+ 374,
+ 374
+ ],
+ "mapped",
+ [
+ 375
+ ]
+ ],
+ [
+ [
+ 375,
+ 375
+ ],
+ "valid"
+ ],
+ [
+ [
+ 376,
+ 376
+ ],
+ "mapped",
+ [
+ 255
+ ]
+ ],
+ [
+ [
+ 377,
+ 377
+ ],
+ "mapped",
+ [
+ 378
+ ]
+ ],
+ [
+ [
+ 378,
+ 378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 379,
+ 379
+ ],
+ "mapped",
+ [
+ 380
+ ]
+ ],
+ [
+ [
+ 380,
+ 380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 381,
+ 381
+ ],
+ "mapped",
+ [
+ 382
+ ]
+ ],
+ [
+ [
+ 382,
+ 382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 383,
+ 383
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 384,
+ 384
+ ],
+ "valid"
+ ],
+ [
+ [
+ 385,
+ 385
+ ],
+ "mapped",
+ [
+ 595
+ ]
+ ],
+ [
+ [
+ 386,
+ 386
+ ],
+ "mapped",
+ [
+ 387
+ ]
+ ],
+ [
+ [
+ 387,
+ 387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 388,
+ 388
+ ],
+ "mapped",
+ [
+ 389
+ ]
+ ],
+ [
+ [
+ 389,
+ 389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 390,
+ 390
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 391,
+ 391
+ ],
+ "mapped",
+ [
+ 392
+ ]
+ ],
+ [
+ [
+ 392,
+ 392
+ ],
+ "valid"
+ ],
+ [
+ [
+ 393,
+ 393
+ ],
+ "mapped",
+ [
+ 598
+ ]
+ ],
+ [
+ [
+ 394,
+ 394
+ ],
+ "mapped",
+ [
+ 599
+ ]
+ ],
+ [
+ [
+ 395,
+ 395
+ ],
+ "mapped",
+ [
+ 396
+ ]
+ ],
+ [
+ [
+ 396,
+ 397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 398,
+ 398
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 399,
+ 399
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 400,
+ 400
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 401,
+ 401
+ ],
+ "mapped",
+ [
+ 402
+ ]
+ ],
+ [
+ [
+ 402,
+ 402
+ ],
+ "valid"
+ ],
+ [
+ [
+ 403,
+ 403
+ ],
+ "mapped",
+ [
+ 608
+ ]
+ ],
+ [
+ [
+ 404,
+ 404
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 405,
+ 405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 406,
+ 406
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 407,
+ 407
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 408,
+ 408
+ ],
+ "mapped",
+ [
+ 409
+ ]
+ ],
+ [
+ [
+ 409,
+ 411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 412,
+ 412
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 413,
+ 413
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 414,
+ 414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 415,
+ 415
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 416,
+ 416
+ ],
+ "mapped",
+ [
+ 417
+ ]
+ ],
+ [
+ [
+ 417,
+ 417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 418,
+ 418
+ ],
+ "mapped",
+ [
+ 419
+ ]
+ ],
+ [
+ [
+ 419,
+ 419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 420,
+ 420
+ ],
+ "mapped",
+ [
+ 421
+ ]
+ ],
+ [
+ [
+ 421,
+ 421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 422,
+ 422
+ ],
+ "mapped",
+ [
+ 640
+ ]
+ ],
+ [
+ [
+ 423,
+ 423
+ ],
+ "mapped",
+ [
+ 424
+ ]
+ ],
+ [
+ [
+ 424,
+ 424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 425,
+ 425
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 426,
+ 427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 428,
+ 428
+ ],
+ "mapped",
+ [
+ 429
+ ]
+ ],
+ [
+ [
+ 429,
+ 429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 430,
+ 430
+ ],
+ "mapped",
+ [
+ 648
+ ]
+ ],
+ [
+ [
+ 431,
+ 431
+ ],
+ "mapped",
+ [
+ 432
+ ]
+ ],
+ [
+ [
+ 432,
+ 432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 433,
+ 433
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 434,
+ 434
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 435,
+ 435
+ ],
+ "mapped",
+ [
+ 436
+ ]
+ ],
+ [
+ [
+ 436,
+ 436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 437,
+ 437
+ ],
+ "mapped",
+ [
+ 438
+ ]
+ ],
+ [
+ [
+ 438,
+ 438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 439,
+ 439
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 440,
+ 440
+ ],
+ "mapped",
+ [
+ 441
+ ]
+ ],
+ [
+ [
+ 441,
+ 443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 444,
+ 444
+ ],
+ "mapped",
+ [
+ 445
+ ]
+ ],
+ [
+ [
+ 445,
+ 451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 452,
+ 454
+ ],
+ "mapped",
+ [
+ 100,
+ 382
+ ]
+ ],
+ [
+ [
+ 455,
+ 457
+ ],
+ "mapped",
+ [
+ 108,
+ 106
+ ]
+ ],
+ [
+ [
+ 458,
+ 460
+ ],
+ "mapped",
+ [
+ 110,
+ 106
+ ]
+ ],
+ [
+ [
+ 461,
+ 461
+ ],
+ "mapped",
+ [
+ 462
+ ]
+ ],
+ [
+ [
+ 462,
+ 462
+ ],
+ "valid"
+ ],
+ [
+ [
+ 463,
+ 463
+ ],
+ "mapped",
+ [
+ 464
+ ]
+ ],
+ [
+ [
+ 464,
+ 464
+ ],
+ "valid"
+ ],
+ [
+ [
+ 465,
+ 465
+ ],
+ "mapped",
+ [
+ 466
+ ]
+ ],
+ [
+ [
+ 466,
+ 466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 467,
+ 467
+ ],
+ "mapped",
+ [
+ 468
+ ]
+ ],
+ [
+ [
+ 468,
+ 468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 469,
+ 469
+ ],
+ "mapped",
+ [
+ 470
+ ]
+ ],
+ [
+ [
+ 470,
+ 470
+ ],
+ "valid"
+ ],
+ [
+ [
+ 471,
+ 471
+ ],
+ "mapped",
+ [
+ 472
+ ]
+ ],
+ [
+ [
+ 472,
+ 472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 473,
+ 473
+ ],
+ "mapped",
+ [
+ 474
+ ]
+ ],
+ [
+ [
+ 474,
+ 474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 475,
+ 475
+ ],
+ "mapped",
+ [
+ 476
+ ]
+ ],
+ [
+ [
+ 476,
+ 477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 478,
+ 478
+ ],
+ "mapped",
+ [
+ 479
+ ]
+ ],
+ [
+ [
+ 479,
+ 479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 480,
+ 480
+ ],
+ "mapped",
+ [
+ 481
+ ]
+ ],
+ [
+ [
+ 481,
+ 481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 482,
+ 482
+ ],
+ "mapped",
+ [
+ 483
+ ]
+ ],
+ [
+ [
+ 483,
+ 483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 484,
+ 484
+ ],
+ "mapped",
+ [
+ 485
+ ]
+ ],
+ [
+ [
+ 485,
+ 485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 486,
+ 486
+ ],
+ "mapped",
+ [
+ 487
+ ]
+ ],
+ [
+ [
+ 487,
+ 487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 488,
+ 488
+ ],
+ "mapped",
+ [
+ 489
+ ]
+ ],
+ [
+ [
+ 489,
+ 489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 490,
+ 490
+ ],
+ "mapped",
+ [
+ 491
+ ]
+ ],
+ [
+ [
+ 491,
+ 491
+ ],
+ "valid"
+ ],
+ [
+ [
+ 492,
+ 492
+ ],
+ "mapped",
+ [
+ 493
+ ]
+ ],
+ [
+ [
+ 493,
+ 493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 494,
+ 494
+ ],
+ "mapped",
+ [
+ 495
+ ]
+ ],
+ [
+ [
+ 495,
+ 496
+ ],
+ "valid"
+ ],
+ [
+ [
+ 497,
+ 499
+ ],
+ "mapped",
+ [
+ 100,
+ 122
+ ]
+ ],
+ [
+ [
+ 500,
+ 500
+ ],
+ "mapped",
+ [
+ 501
+ ]
+ ],
+ [
+ [
+ 501,
+ 501
+ ],
+ "valid"
+ ],
+ [
+ [
+ 502,
+ 502
+ ],
+ "mapped",
+ [
+ 405
+ ]
+ ],
+ [
+ [
+ 503,
+ 503
+ ],
+ "mapped",
+ [
+ 447
+ ]
+ ],
+ [
+ [
+ 504,
+ 504
+ ],
+ "mapped",
+ [
+ 505
+ ]
+ ],
+ [
+ [
+ 505,
+ 505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 506,
+ 506
+ ],
+ "mapped",
+ [
+ 507
+ ]
+ ],
+ [
+ [
+ 507,
+ 507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 508,
+ 508
+ ],
+ "mapped",
+ [
+ 509
+ ]
+ ],
+ [
+ [
+ 509,
+ 509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 510,
+ 510
+ ],
+ "mapped",
+ [
+ 511
+ ]
+ ],
+ [
+ [
+ 511,
+ 511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 512,
+ 512
+ ],
+ "mapped",
+ [
+ 513
+ ]
+ ],
+ [
+ [
+ 513,
+ 513
+ ],
+ "valid"
+ ],
+ [
+ [
+ 514,
+ 514
+ ],
+ "mapped",
+ [
+ 515
+ ]
+ ],
+ [
+ [
+ 515,
+ 515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 516,
+ 516
+ ],
+ "mapped",
+ [
+ 517
+ ]
+ ],
+ [
+ [
+ 517,
+ 517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 518,
+ 518
+ ],
+ "mapped",
+ [
+ 519
+ ]
+ ],
+ [
+ [
+ 519,
+ 519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 520,
+ 520
+ ],
+ "mapped",
+ [
+ 521
+ ]
+ ],
+ [
+ [
+ 521,
+ 521
+ ],
+ "valid"
+ ],
+ [
+ [
+ 522,
+ 522
+ ],
+ "mapped",
+ [
+ 523
+ ]
+ ],
+ [
+ [
+ 523,
+ 523
+ ],
+ "valid"
+ ],
+ [
+ [
+ 524,
+ 524
+ ],
+ "mapped",
+ [
+ 525
+ ]
+ ],
+ [
+ [
+ 525,
+ 525
+ ],
+ "valid"
+ ],
+ [
+ [
+ 526,
+ 526
+ ],
+ "mapped",
+ [
+ 527
+ ]
+ ],
+ [
+ [
+ 527,
+ 527
+ ],
+ "valid"
+ ],
+ [
+ [
+ 528,
+ 528
+ ],
+ "mapped",
+ [
+ 529
+ ]
+ ],
+ [
+ [
+ 529,
+ 529
+ ],
+ "valid"
+ ],
+ [
+ [
+ 530,
+ 530
+ ],
+ "mapped",
+ [
+ 531
+ ]
+ ],
+ [
+ [
+ 531,
+ 531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 532,
+ 532
+ ],
+ "mapped",
+ [
+ 533
+ ]
+ ],
+ [
+ [
+ 533,
+ 533
+ ],
+ "valid"
+ ],
+ [
+ [
+ 534,
+ 534
+ ],
+ "mapped",
+ [
+ 535
+ ]
+ ],
+ [
+ [
+ 535,
+ 535
+ ],
+ "valid"
+ ],
+ [
+ [
+ 536,
+ 536
+ ],
+ "mapped",
+ [
+ 537
+ ]
+ ],
+ [
+ [
+ 537,
+ 537
+ ],
+ "valid"
+ ],
+ [
+ [
+ 538,
+ 538
+ ],
+ "mapped",
+ [
+ 539
+ ]
+ ],
+ [
+ [
+ 539,
+ 539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 540,
+ 540
+ ],
+ "mapped",
+ [
+ 541
+ ]
+ ],
+ [
+ [
+ 541,
+ 541
+ ],
+ "valid"
+ ],
+ [
+ [
+ 542,
+ 542
+ ],
+ "mapped",
+ [
+ 543
+ ]
+ ],
+ [
+ [
+ 543,
+ 543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 544,
+ 544
+ ],
+ "mapped",
+ [
+ 414
+ ]
+ ],
+ [
+ [
+ 545,
+ 545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 546,
+ 546
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 547,
+ 547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 548,
+ 548
+ ],
+ "mapped",
+ [
+ 549
+ ]
+ ],
+ [
+ [
+ 549,
+ 549
+ ],
+ "valid"
+ ],
+ [
+ [
+ 550,
+ 550
+ ],
+ "mapped",
+ [
+ 551
+ ]
+ ],
+ [
+ [
+ 551,
+ 551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 552,
+ 552
+ ],
+ "mapped",
+ [
+ 553
+ ]
+ ],
+ [
+ [
+ 553,
+ 553
+ ],
+ "valid"
+ ],
+ [
+ [
+ 554,
+ 554
+ ],
+ "mapped",
+ [
+ 555
+ ]
+ ],
+ [
+ [
+ 555,
+ 555
+ ],
+ "valid"
+ ],
+ [
+ [
+ 556,
+ 556
+ ],
+ "mapped",
+ [
+ 557
+ ]
+ ],
+ [
+ [
+ 557,
+ 557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 558,
+ 558
+ ],
+ "mapped",
+ [
+ 559
+ ]
+ ],
+ [
+ [
+ 559,
+ 559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 560,
+ 560
+ ],
+ "mapped",
+ [
+ 561
+ ]
+ ],
+ [
+ [
+ 561,
+ 561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 562,
+ 562
+ ],
+ "mapped",
+ [
+ 563
+ ]
+ ],
+ [
+ [
+ 563,
+ 563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 564,
+ 566
+ ],
+ "valid"
+ ],
+ [
+ [
+ 567,
+ 569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 570,
+ 570
+ ],
+ "mapped",
+ [
+ 11365
+ ]
+ ],
+ [
+ [
+ 571,
+ 571
+ ],
+ "mapped",
+ [
+ 572
+ ]
+ ],
+ [
+ [
+ 572,
+ 572
+ ],
+ "valid"
+ ],
+ [
+ [
+ 573,
+ 573
+ ],
+ "mapped",
+ [
+ 410
+ ]
+ ],
+ [
+ [
+ 574,
+ 574
+ ],
+ "mapped",
+ [
+ 11366
+ ]
+ ],
+ [
+ [
+ 575,
+ 576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 577,
+ 577
+ ],
+ "mapped",
+ [
+ 578
+ ]
+ ],
+ [
+ [
+ 578,
+ 578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 579,
+ 579
+ ],
+ "mapped",
+ [
+ 384
+ ]
+ ],
+ [
+ [
+ 580,
+ 580
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 581,
+ 581
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 582,
+ 582
+ ],
+ "mapped",
+ [
+ 583
+ ]
+ ],
+ [
+ [
+ 583,
+ 583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 584,
+ 584
+ ],
+ "mapped",
+ [
+ 585
+ ]
+ ],
+ [
+ [
+ 585,
+ 585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 586,
+ 586
+ ],
+ "mapped",
+ [
+ 587
+ ]
+ ],
+ [
+ [
+ 587,
+ 587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 588,
+ 588
+ ],
+ "mapped",
+ [
+ 589
+ ]
+ ],
+ [
+ [
+ 589,
+ 589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 590,
+ 590
+ ],
+ "mapped",
+ [
+ 591
+ ]
+ ],
+ [
+ [
+ 591,
+ 591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 592,
+ 680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 681,
+ 685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 686,
+ 687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 688,
+ 688
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 689,
+ 689
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 690,
+ 690
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 691,
+ 691
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 692,
+ 692
+ ],
+ "mapped",
+ [
+ 633
+ ]
+ ],
+ [
+ [
+ 693,
+ 693
+ ],
+ "mapped",
+ [
+ 635
+ ]
+ ],
+ [
+ [
+ 694,
+ 694
+ ],
+ "mapped",
+ [
+ 641
+ ]
+ ],
+ [
+ [
+ 695,
+ 695
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 696,
+ 696
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 697,
+ 705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 706,
+ 709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 710,
+ 721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 722,
+ 727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 728,
+ 728
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 774
+ ]
+ ],
+ [
+ [
+ 729,
+ 729
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 775
+ ]
+ ],
+ [
+ [
+ 730,
+ 730
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 778
+ ]
+ ],
+ [
+ [
+ 731,
+ 731
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 808
+ ]
+ ],
+ [
+ [
+ 732,
+ 732
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 771
+ ]
+ ],
+ [
+ [
+ 733,
+ 733
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 779
+ ]
+ ],
+ [
+ [
+ 734,
+ 734
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 735,
+ 735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 736,
+ 736
+ ],
+ "mapped",
+ [
+ 611
+ ]
+ ],
+ [
+ [
+ 737,
+ 737
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 738,
+ 738
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 739,
+ 739
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 740,
+ 740
+ ],
+ "mapped",
+ [
+ 661
+ ]
+ ],
+ [
+ [
+ 741,
+ 745
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 746,
+ 747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 748,
+ 748
+ ],
+ "valid"
+ ],
+ [
+ [
+ 749,
+ 749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 750,
+ 750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 751,
+ 767
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 768,
+ 831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 832,
+ 832
+ ],
+ "mapped",
+ [
+ 768
+ ]
+ ],
+ [
+ [
+ 833,
+ 833
+ ],
+ "mapped",
+ [
+ 769
+ ]
+ ],
+ [
+ [
+ 834,
+ 834
+ ],
+ "valid"
+ ],
+ [
+ [
+ 835,
+ 835
+ ],
+ "mapped",
+ [
+ 787
+ ]
+ ],
+ [
+ [
+ 836,
+ 836
+ ],
+ "mapped",
+ [
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 837,
+ 837
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 838,
+ 846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 847,
+ 847
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 848,
+ 855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 856,
+ 860
+ ],
+ "valid"
+ ],
+ [
+ [
+ 861,
+ 863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 864,
+ 865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 866,
+ 866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 867,
+ 879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 880,
+ 880
+ ],
+ "mapped",
+ [
+ 881
+ ]
+ ],
+ [
+ [
+ 881,
+ 881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 882,
+ 882
+ ],
+ "mapped",
+ [
+ 883
+ ]
+ ],
+ [
+ [
+ 883,
+ 883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 884,
+ 884
+ ],
+ "mapped",
+ [
+ 697
+ ]
+ ],
+ [
+ [
+ 885,
+ 885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 886,
+ 886
+ ],
+ "mapped",
+ [
+ 887
+ ]
+ ],
+ [
+ [
+ 887,
+ 887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 888,
+ 889
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 890,
+ 890
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 953
+ ]
+ ],
+ [
+ [
+ 891,
+ 893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 894,
+ 894
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 895,
+ 895
+ ],
+ "mapped",
+ [
+ 1011
+ ]
+ ],
+ [
+ [
+ 896,
+ 899
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 900,
+ 900
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 901,
+ 901
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 902,
+ 902
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 903,
+ 903
+ ],
+ "mapped",
+ [
+ 183
+ ]
+ ],
+ [
+ [
+ 904,
+ 904
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 905,
+ 905
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 906,
+ 906
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 907,
+ 907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 908,
+ 908
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 909,
+ 909
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 910,
+ 910
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 911,
+ 911
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 912,
+ 912
+ ],
+ "valid"
+ ],
+ [
+ [
+ 913,
+ 913
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 914,
+ 914
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 915,
+ 915
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 916,
+ 916
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 917,
+ 917
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 918,
+ 918
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 919,
+ 919
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 920,
+ 920
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 921,
+ 921
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 922,
+ 922
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 923,
+ 923
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 924,
+ 924
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 925,
+ 925
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 926,
+ 926
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 927,
+ 927
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 928,
+ 928
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 929,
+ 929
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 930,
+ 930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 931,
+ 931
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 932,
+ 932
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 933,
+ 933
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 934,
+ 934
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 935,
+ 935
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 936,
+ 936
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 937,
+ 937
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 938,
+ 938
+ ],
+ "mapped",
+ [
+ 970
+ ]
+ ],
+ [
+ [
+ 939,
+ 939
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 940,
+ 961
+ ],
+ "valid"
+ ],
+ [
+ [
+ 962,
+ 962
+ ],
+ "deviation",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 963,
+ 974
+ ],
+ "valid"
+ ],
+ [
+ [
+ 975,
+ 975
+ ],
+ "mapped",
+ [
+ 983
+ ]
+ ],
+ [
+ [
+ 976,
+ 976
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 977,
+ 977
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 978,
+ 978
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 979,
+ 979
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 980,
+ 980
+ ],
+ "mapped",
+ [
+ 971
+ ]
+ ],
+ [
+ [
+ 981,
+ 981
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 982,
+ 982
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 983,
+ 983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 984,
+ 984
+ ],
+ "mapped",
+ [
+ 985
+ ]
+ ],
+ [
+ [
+ 985,
+ 985
+ ],
+ "valid"
+ ],
+ [
+ [
+ 986,
+ 986
+ ],
+ "mapped",
+ [
+ 987
+ ]
+ ],
+ [
+ [
+ 987,
+ 987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 988,
+ 988
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 989,
+ 989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 990,
+ 990
+ ],
+ "mapped",
+ [
+ 991
+ ]
+ ],
+ [
+ [
+ 991,
+ 991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 992,
+ 992
+ ],
+ "mapped",
+ [
+ 993
+ ]
+ ],
+ [
+ [
+ 993,
+ 993
+ ],
+ "valid"
+ ],
+ [
+ [
+ 994,
+ 994
+ ],
+ "mapped",
+ [
+ 995
+ ]
+ ],
+ [
+ [
+ 995,
+ 995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 996,
+ 996
+ ],
+ "mapped",
+ [
+ 997
+ ]
+ ],
+ [
+ [
+ 997,
+ 997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 998,
+ 998
+ ],
+ "mapped",
+ [
+ 999
+ ]
+ ],
+ [
+ [
+ 999,
+ 999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1000,
+ 1000
+ ],
+ "mapped",
+ [
+ 1001
+ ]
+ ],
+ [
+ [
+ 1001,
+ 1001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1002,
+ 1002
+ ],
+ "mapped",
+ [
+ 1003
+ ]
+ ],
+ [
+ [
+ 1003,
+ 1003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1004,
+ 1004
+ ],
+ "mapped",
+ [
+ 1005
+ ]
+ ],
+ [
+ [
+ 1005,
+ 1005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1006,
+ 1006
+ ],
+ "mapped",
+ [
+ 1007
+ ]
+ ],
+ [
+ [
+ 1007,
+ 1007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1008,
+ 1008
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 1009,
+ 1009
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 1010,
+ 1010
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1011,
+ 1011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1012,
+ 1012
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 1013,
+ 1013
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 1014,
+ 1014
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1015,
+ 1015
+ ],
+ "mapped",
+ [
+ 1016
+ ]
+ ],
+ [
+ [
+ 1016,
+ 1016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1017,
+ 1017
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 1018,
+ 1018
+ ],
+ "mapped",
+ [
+ 1019
+ ]
+ ],
+ [
+ [
+ 1019,
+ 1019
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1020,
+ 1020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1021,
+ 1021
+ ],
+ "mapped",
+ [
+ 891
+ ]
+ ],
+ [
+ [
+ 1022,
+ 1022
+ ],
+ "mapped",
+ [
+ 892
+ ]
+ ],
+ [
+ [
+ 1023,
+ 1023
+ ],
+ "mapped",
+ [
+ 893
+ ]
+ ],
+ [
+ [
+ 1024,
+ 1024
+ ],
+ "mapped",
+ [
+ 1104
+ ]
+ ],
+ [
+ [
+ 1025,
+ 1025
+ ],
+ "mapped",
+ [
+ 1105
+ ]
+ ],
+ [
+ [
+ 1026,
+ 1026
+ ],
+ "mapped",
+ [
+ 1106
+ ]
+ ],
+ [
+ [
+ 1027,
+ 1027
+ ],
+ "mapped",
+ [
+ 1107
+ ]
+ ],
+ [
+ [
+ 1028,
+ 1028
+ ],
+ "mapped",
+ [
+ 1108
+ ]
+ ],
+ [
+ [
+ 1029,
+ 1029
+ ],
+ "mapped",
+ [
+ 1109
+ ]
+ ],
+ [
+ [
+ 1030,
+ 1030
+ ],
+ "mapped",
+ [
+ 1110
+ ]
+ ],
+ [
+ [
+ 1031,
+ 1031
+ ],
+ "mapped",
+ [
+ 1111
+ ]
+ ],
+ [
+ [
+ 1032,
+ 1032
+ ],
+ "mapped",
+ [
+ 1112
+ ]
+ ],
+ [
+ [
+ 1033,
+ 1033
+ ],
+ "mapped",
+ [
+ 1113
+ ]
+ ],
+ [
+ [
+ 1034,
+ 1034
+ ],
+ "mapped",
+ [
+ 1114
+ ]
+ ],
+ [
+ [
+ 1035,
+ 1035
+ ],
+ "mapped",
+ [
+ 1115
+ ]
+ ],
+ [
+ [
+ 1036,
+ 1036
+ ],
+ "mapped",
+ [
+ 1116
+ ]
+ ],
+ [
+ [
+ 1037,
+ 1037
+ ],
+ "mapped",
+ [
+ 1117
+ ]
+ ],
+ [
+ [
+ 1038,
+ 1038
+ ],
+ "mapped",
+ [
+ 1118
+ ]
+ ],
+ [
+ [
+ 1039,
+ 1039
+ ],
+ "mapped",
+ [
+ 1119
+ ]
+ ],
+ [
+ [
+ 1040,
+ 1040
+ ],
+ "mapped",
+ [
+ 1072
+ ]
+ ],
+ [
+ [
+ 1041,
+ 1041
+ ],
+ "mapped",
+ [
+ 1073
+ ]
+ ],
+ [
+ [
+ 1042,
+ 1042
+ ],
+ "mapped",
+ [
+ 1074
+ ]
+ ],
+ [
+ [
+ 1043,
+ 1043
+ ],
+ "mapped",
+ [
+ 1075
+ ]
+ ],
+ [
+ [
+ 1044,
+ 1044
+ ],
+ "mapped",
+ [
+ 1076
+ ]
+ ],
+ [
+ [
+ 1045,
+ 1045
+ ],
+ "mapped",
+ [
+ 1077
+ ]
+ ],
+ [
+ [
+ 1046,
+ 1046
+ ],
+ "mapped",
+ [
+ 1078
+ ]
+ ],
+ [
+ [
+ 1047,
+ 1047
+ ],
+ "mapped",
+ [
+ 1079
+ ]
+ ],
+ [
+ [
+ 1048,
+ 1048
+ ],
+ "mapped",
+ [
+ 1080
+ ]
+ ],
+ [
+ [
+ 1049,
+ 1049
+ ],
+ "mapped",
+ [
+ 1081
+ ]
+ ],
+ [
+ [
+ 1050,
+ 1050
+ ],
+ "mapped",
+ [
+ 1082
+ ]
+ ],
+ [
+ [
+ 1051,
+ 1051
+ ],
+ "mapped",
+ [
+ 1083
+ ]
+ ],
+ [
+ [
+ 1052,
+ 1052
+ ],
+ "mapped",
+ [
+ 1084
+ ]
+ ],
+ [
+ [
+ 1053,
+ 1053
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 1054,
+ 1054
+ ],
+ "mapped",
+ [
+ 1086
+ ]
+ ],
+ [
+ [
+ 1055,
+ 1055
+ ],
+ "mapped",
+ [
+ 1087
+ ]
+ ],
+ [
+ [
+ 1056,
+ 1056
+ ],
+ "mapped",
+ [
+ 1088
+ ]
+ ],
+ [
+ [
+ 1057,
+ 1057
+ ],
+ "mapped",
+ [
+ 1089
+ ]
+ ],
+ [
+ [
+ 1058,
+ 1058
+ ],
+ "mapped",
+ [
+ 1090
+ ]
+ ],
+ [
+ [
+ 1059,
+ 1059
+ ],
+ "mapped",
+ [
+ 1091
+ ]
+ ],
+ [
+ [
+ 1060,
+ 1060
+ ],
+ "mapped",
+ [
+ 1092
+ ]
+ ],
+ [
+ [
+ 1061,
+ 1061
+ ],
+ "mapped",
+ [
+ 1093
+ ]
+ ],
+ [
+ [
+ 1062,
+ 1062
+ ],
+ "mapped",
+ [
+ 1094
+ ]
+ ],
+ [
+ [
+ 1063,
+ 1063
+ ],
+ "mapped",
+ [
+ 1095
+ ]
+ ],
+ [
+ [
+ 1064,
+ 1064
+ ],
+ "mapped",
+ [
+ 1096
+ ]
+ ],
+ [
+ [
+ 1065,
+ 1065
+ ],
+ "mapped",
+ [
+ 1097
+ ]
+ ],
+ [
+ [
+ 1066,
+ 1066
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 1067,
+ 1067
+ ],
+ "mapped",
+ [
+ 1099
+ ]
+ ],
+ [
+ [
+ 1068,
+ 1068
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 1069,
+ 1069
+ ],
+ "mapped",
+ [
+ 1101
+ ]
+ ],
+ [
+ [
+ 1070,
+ 1070
+ ],
+ "mapped",
+ [
+ 1102
+ ]
+ ],
+ [
+ [
+ 1071,
+ 1071
+ ],
+ "mapped",
+ [
+ 1103
+ ]
+ ],
+ [
+ [
+ 1072,
+ 1103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1104,
+ 1104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1105,
+ 1116
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1117,
+ 1117
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1118,
+ 1119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1120,
+ 1120
+ ],
+ "mapped",
+ [
+ 1121
+ ]
+ ],
+ [
+ [
+ 1121,
+ 1121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1122,
+ 1122
+ ],
+ "mapped",
+ [
+ 1123
+ ]
+ ],
+ [
+ [
+ 1123,
+ 1123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1124,
+ 1124
+ ],
+ "mapped",
+ [
+ 1125
+ ]
+ ],
+ [
+ [
+ 1125,
+ 1125
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1126,
+ 1126
+ ],
+ "mapped",
+ [
+ 1127
+ ]
+ ],
+ [
+ [
+ 1127,
+ 1127
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1128,
+ 1128
+ ],
+ "mapped",
+ [
+ 1129
+ ]
+ ],
+ [
+ [
+ 1129,
+ 1129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1130,
+ 1130
+ ],
+ "mapped",
+ [
+ 1131
+ ]
+ ],
+ [
+ [
+ 1131,
+ 1131
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1132,
+ 1132
+ ],
+ "mapped",
+ [
+ 1133
+ ]
+ ],
+ [
+ [
+ 1133,
+ 1133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1134,
+ 1134
+ ],
+ "mapped",
+ [
+ 1135
+ ]
+ ],
+ [
+ [
+ 1135,
+ 1135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1136,
+ 1136
+ ],
+ "mapped",
+ [
+ 1137
+ ]
+ ],
+ [
+ [
+ 1137,
+ 1137
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1138,
+ 1138
+ ],
+ "mapped",
+ [
+ 1139
+ ]
+ ],
+ [
+ [
+ 1139,
+ 1139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1140,
+ 1140
+ ],
+ "mapped",
+ [
+ 1141
+ ]
+ ],
+ [
+ [
+ 1141,
+ 1141
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1142,
+ 1142
+ ],
+ "mapped",
+ [
+ 1143
+ ]
+ ],
+ [
+ [
+ 1143,
+ 1143
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1144,
+ 1144
+ ],
+ "mapped",
+ [
+ 1145
+ ]
+ ],
+ [
+ [
+ 1145,
+ 1145
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1146,
+ 1146
+ ],
+ "mapped",
+ [
+ 1147
+ ]
+ ],
+ [
+ [
+ 1147,
+ 1147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1148,
+ 1148
+ ],
+ "mapped",
+ [
+ 1149
+ ]
+ ],
+ [
+ [
+ 1149,
+ 1149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1150,
+ 1150
+ ],
+ "mapped",
+ [
+ 1151
+ ]
+ ],
+ [
+ [
+ 1151,
+ 1151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1152,
+ 1152
+ ],
+ "mapped",
+ [
+ 1153
+ ]
+ ],
+ [
+ [
+ 1153,
+ 1153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1154,
+ 1154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1155,
+ 1158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1159,
+ 1159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1160,
+ 1161
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1162,
+ 1162
+ ],
+ "mapped",
+ [
+ 1163
+ ]
+ ],
+ [
+ [
+ 1163,
+ 1163
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1164,
+ 1164
+ ],
+ "mapped",
+ [
+ 1165
+ ]
+ ],
+ [
+ [
+ 1165,
+ 1165
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1166,
+ 1166
+ ],
+ "mapped",
+ [
+ 1167
+ ]
+ ],
+ [
+ [
+ 1167,
+ 1167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1168,
+ 1168
+ ],
+ "mapped",
+ [
+ 1169
+ ]
+ ],
+ [
+ [
+ 1169,
+ 1169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1170,
+ 1170
+ ],
+ "mapped",
+ [
+ 1171
+ ]
+ ],
+ [
+ [
+ 1171,
+ 1171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1172,
+ 1172
+ ],
+ "mapped",
+ [
+ 1173
+ ]
+ ],
+ [
+ [
+ 1173,
+ 1173
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1174,
+ 1174
+ ],
+ "mapped",
+ [
+ 1175
+ ]
+ ],
+ [
+ [
+ 1175,
+ 1175
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1176,
+ 1176
+ ],
+ "mapped",
+ [
+ 1177
+ ]
+ ],
+ [
+ [
+ 1177,
+ 1177
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1178,
+ 1178
+ ],
+ "mapped",
+ [
+ 1179
+ ]
+ ],
+ [
+ [
+ 1179,
+ 1179
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1180,
+ 1180
+ ],
+ "mapped",
+ [
+ 1181
+ ]
+ ],
+ [
+ [
+ 1181,
+ 1181
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1182,
+ 1182
+ ],
+ "mapped",
+ [
+ 1183
+ ]
+ ],
+ [
+ [
+ 1183,
+ 1183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1184,
+ 1184
+ ],
+ "mapped",
+ [
+ 1185
+ ]
+ ],
+ [
+ [
+ 1185,
+ 1185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1186,
+ 1186
+ ],
+ "mapped",
+ [
+ 1187
+ ]
+ ],
+ [
+ [
+ 1187,
+ 1187
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1188,
+ 1188
+ ],
+ "mapped",
+ [
+ 1189
+ ]
+ ],
+ [
+ [
+ 1189,
+ 1189
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1190,
+ 1190
+ ],
+ "mapped",
+ [
+ 1191
+ ]
+ ],
+ [
+ [
+ 1191,
+ 1191
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1192,
+ 1192
+ ],
+ "mapped",
+ [
+ 1193
+ ]
+ ],
+ [
+ [
+ 1193,
+ 1193
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1194,
+ 1194
+ ],
+ "mapped",
+ [
+ 1195
+ ]
+ ],
+ [
+ [
+ 1195,
+ 1195
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1196,
+ 1196
+ ],
+ "mapped",
+ [
+ 1197
+ ]
+ ],
+ [
+ [
+ 1197,
+ 1197
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1198,
+ 1198
+ ],
+ "mapped",
+ [
+ 1199
+ ]
+ ],
+ [
+ [
+ 1199,
+ 1199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1200,
+ 1200
+ ],
+ "mapped",
+ [
+ 1201
+ ]
+ ],
+ [
+ [
+ 1201,
+ 1201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1202,
+ 1202
+ ],
+ "mapped",
+ [
+ 1203
+ ]
+ ],
+ [
+ [
+ 1203,
+ 1203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1204,
+ 1204
+ ],
+ "mapped",
+ [
+ 1205
+ ]
+ ],
+ [
+ [
+ 1205,
+ 1205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1206,
+ 1206
+ ],
+ "mapped",
+ [
+ 1207
+ ]
+ ],
+ [
+ [
+ 1207,
+ 1207
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1208,
+ 1208
+ ],
+ "mapped",
+ [
+ 1209
+ ]
+ ],
+ [
+ [
+ 1209,
+ 1209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1210,
+ 1210
+ ],
+ "mapped",
+ [
+ 1211
+ ]
+ ],
+ [
+ [
+ 1211,
+ 1211
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1212,
+ 1212
+ ],
+ "mapped",
+ [
+ 1213
+ ]
+ ],
+ [
+ [
+ 1213,
+ 1213
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1214,
+ 1214
+ ],
+ "mapped",
+ [
+ 1215
+ ]
+ ],
+ [
+ [
+ 1215,
+ 1215
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1216,
+ 1216
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1217,
+ 1217
+ ],
+ "mapped",
+ [
+ 1218
+ ]
+ ],
+ [
+ [
+ 1218,
+ 1218
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1219,
+ 1219
+ ],
+ "mapped",
+ [
+ 1220
+ ]
+ ],
+ [
+ [
+ 1220,
+ 1220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1221,
+ 1221
+ ],
+ "mapped",
+ [
+ 1222
+ ]
+ ],
+ [
+ [
+ 1222,
+ 1222
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1223,
+ 1223
+ ],
+ "mapped",
+ [
+ 1224
+ ]
+ ],
+ [
+ [
+ 1224,
+ 1224
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1225,
+ 1225
+ ],
+ "mapped",
+ [
+ 1226
+ ]
+ ],
+ [
+ [
+ 1226,
+ 1226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1227,
+ 1227
+ ],
+ "mapped",
+ [
+ 1228
+ ]
+ ],
+ [
+ [
+ 1228,
+ 1228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1229,
+ 1229
+ ],
+ "mapped",
+ [
+ 1230
+ ]
+ ],
+ [
+ [
+ 1230,
+ 1230
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1231,
+ 1231
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1232,
+ 1232
+ ],
+ "mapped",
+ [
+ 1233
+ ]
+ ],
+ [
+ [
+ 1233,
+ 1233
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1234,
+ 1234
+ ],
+ "mapped",
+ [
+ 1235
+ ]
+ ],
+ [
+ [
+ 1235,
+ 1235
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1236,
+ 1236
+ ],
+ "mapped",
+ [
+ 1237
+ ]
+ ],
+ [
+ [
+ 1237,
+ 1237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1238,
+ 1238
+ ],
+ "mapped",
+ [
+ 1239
+ ]
+ ],
+ [
+ [
+ 1239,
+ 1239
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1240,
+ 1240
+ ],
+ "mapped",
+ [
+ 1241
+ ]
+ ],
+ [
+ [
+ 1241,
+ 1241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1242,
+ 1242
+ ],
+ "mapped",
+ [
+ 1243
+ ]
+ ],
+ [
+ [
+ 1243,
+ 1243
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1244,
+ 1244
+ ],
+ "mapped",
+ [
+ 1245
+ ]
+ ],
+ [
+ [
+ 1245,
+ 1245
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1246,
+ 1246
+ ],
+ "mapped",
+ [
+ 1247
+ ]
+ ],
+ [
+ [
+ 1247,
+ 1247
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1248,
+ 1248
+ ],
+ "mapped",
+ [
+ 1249
+ ]
+ ],
+ [
+ [
+ 1249,
+ 1249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1250,
+ 1250
+ ],
+ "mapped",
+ [
+ 1251
+ ]
+ ],
+ [
+ [
+ 1251,
+ 1251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1252,
+ 1252
+ ],
+ "mapped",
+ [
+ 1253
+ ]
+ ],
+ [
+ [
+ 1253,
+ 1253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1254,
+ 1254
+ ],
+ "mapped",
+ [
+ 1255
+ ]
+ ],
+ [
+ [
+ 1255,
+ 1255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1256,
+ 1256
+ ],
+ "mapped",
+ [
+ 1257
+ ]
+ ],
+ [
+ [
+ 1257,
+ 1257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1258,
+ 1258
+ ],
+ "mapped",
+ [
+ 1259
+ ]
+ ],
+ [
+ [
+ 1259,
+ 1259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1260,
+ 1260
+ ],
+ "mapped",
+ [
+ 1261
+ ]
+ ],
+ [
+ [
+ 1261,
+ 1261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1262,
+ 1262
+ ],
+ "mapped",
+ [
+ 1263
+ ]
+ ],
+ [
+ [
+ 1263,
+ 1263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1264,
+ 1264
+ ],
+ "mapped",
+ [
+ 1265
+ ]
+ ],
+ [
+ [
+ 1265,
+ 1265
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1266,
+ 1266
+ ],
+ "mapped",
+ [
+ 1267
+ ]
+ ],
+ [
+ [
+ 1267,
+ 1267
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1268,
+ 1268
+ ],
+ "mapped",
+ [
+ 1269
+ ]
+ ],
+ [
+ [
+ 1269,
+ 1269
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1270,
+ 1270
+ ],
+ "mapped",
+ [
+ 1271
+ ]
+ ],
+ [
+ [
+ 1271,
+ 1271
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1272,
+ 1272
+ ],
+ "mapped",
+ [
+ 1273
+ ]
+ ],
+ [
+ [
+ 1273,
+ 1273
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1274,
+ 1274
+ ],
+ "mapped",
+ [
+ 1275
+ ]
+ ],
+ [
+ [
+ 1275,
+ 1275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1276,
+ 1276
+ ],
+ "mapped",
+ [
+ 1277
+ ]
+ ],
+ [
+ [
+ 1277,
+ 1277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1278,
+ 1278
+ ],
+ "mapped",
+ [
+ 1279
+ ]
+ ],
+ [
+ [
+ 1279,
+ 1279
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1280,
+ 1280
+ ],
+ "mapped",
+ [
+ 1281
+ ]
+ ],
+ [
+ [
+ 1281,
+ 1281
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1282,
+ 1282
+ ],
+ "mapped",
+ [
+ 1283
+ ]
+ ],
+ [
+ [
+ 1283,
+ 1283
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1284,
+ 1284
+ ],
+ "mapped",
+ [
+ 1285
+ ]
+ ],
+ [
+ [
+ 1285,
+ 1285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1286,
+ 1286
+ ],
+ "mapped",
+ [
+ 1287
+ ]
+ ],
+ [
+ [
+ 1287,
+ 1287
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1288,
+ 1288
+ ],
+ "mapped",
+ [
+ 1289
+ ]
+ ],
+ [
+ [
+ 1289,
+ 1289
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1290,
+ 1290
+ ],
+ "mapped",
+ [
+ 1291
+ ]
+ ],
+ [
+ [
+ 1291,
+ 1291
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1292,
+ 1292
+ ],
+ "mapped",
+ [
+ 1293
+ ]
+ ],
+ [
+ [
+ 1293,
+ 1293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1294,
+ 1294
+ ],
+ "mapped",
+ [
+ 1295
+ ]
+ ],
+ [
+ [
+ 1295,
+ 1295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1296,
+ 1296
+ ],
+ "mapped",
+ [
+ 1297
+ ]
+ ],
+ [
+ [
+ 1297,
+ 1297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1298,
+ 1298
+ ],
+ "mapped",
+ [
+ 1299
+ ]
+ ],
+ [
+ [
+ 1299,
+ 1299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1300,
+ 1300
+ ],
+ "mapped",
+ [
+ 1301
+ ]
+ ],
+ [
+ [
+ 1301,
+ 1301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1302,
+ 1302
+ ],
+ "mapped",
+ [
+ 1303
+ ]
+ ],
+ [
+ [
+ 1303,
+ 1303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1304,
+ 1304
+ ],
+ "mapped",
+ [
+ 1305
+ ]
+ ],
+ [
+ [
+ 1305,
+ 1305
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1306,
+ 1306
+ ],
+ "mapped",
+ [
+ 1307
+ ]
+ ],
+ [
+ [
+ 1307,
+ 1307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1308,
+ 1308
+ ],
+ "mapped",
+ [
+ 1309
+ ]
+ ],
+ [
+ [
+ 1309,
+ 1309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1310,
+ 1310
+ ],
+ "mapped",
+ [
+ 1311
+ ]
+ ],
+ [
+ [
+ 1311,
+ 1311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1312,
+ 1312
+ ],
+ "mapped",
+ [
+ 1313
+ ]
+ ],
+ [
+ [
+ 1313,
+ 1313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1314,
+ 1314
+ ],
+ "mapped",
+ [
+ 1315
+ ]
+ ],
+ [
+ [
+ 1315,
+ 1315
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1316,
+ 1316
+ ],
+ "mapped",
+ [
+ 1317
+ ]
+ ],
+ [
+ [
+ 1317,
+ 1317
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1318,
+ 1318
+ ],
+ "mapped",
+ [
+ 1319
+ ]
+ ],
+ [
+ [
+ 1319,
+ 1319
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1320,
+ 1320
+ ],
+ "mapped",
+ [
+ 1321
+ ]
+ ],
+ [
+ [
+ 1321,
+ 1321
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1322,
+ 1322
+ ],
+ "mapped",
+ [
+ 1323
+ ]
+ ],
+ [
+ [
+ 1323,
+ 1323
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1324,
+ 1324
+ ],
+ "mapped",
+ [
+ 1325
+ ]
+ ],
+ [
+ [
+ 1325,
+ 1325
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1326,
+ 1326
+ ],
+ "mapped",
+ [
+ 1327
+ ]
+ ],
+ [
+ [
+ 1327,
+ 1327
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1328,
+ 1328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1329,
+ 1329
+ ],
+ "mapped",
+ [
+ 1377
+ ]
+ ],
+ [
+ [
+ 1330,
+ 1330
+ ],
+ "mapped",
+ [
+ 1378
+ ]
+ ],
+ [
+ [
+ 1331,
+ 1331
+ ],
+ "mapped",
+ [
+ 1379
+ ]
+ ],
+ [
+ [
+ 1332,
+ 1332
+ ],
+ "mapped",
+ [
+ 1380
+ ]
+ ],
+ [
+ [
+ 1333,
+ 1333
+ ],
+ "mapped",
+ [
+ 1381
+ ]
+ ],
+ [
+ [
+ 1334,
+ 1334
+ ],
+ "mapped",
+ [
+ 1382
+ ]
+ ],
+ [
+ [
+ 1335,
+ 1335
+ ],
+ "mapped",
+ [
+ 1383
+ ]
+ ],
+ [
+ [
+ 1336,
+ 1336
+ ],
+ "mapped",
+ [
+ 1384
+ ]
+ ],
+ [
+ [
+ 1337,
+ 1337
+ ],
+ "mapped",
+ [
+ 1385
+ ]
+ ],
+ [
+ [
+ 1338,
+ 1338
+ ],
+ "mapped",
+ [
+ 1386
+ ]
+ ],
+ [
+ [
+ 1339,
+ 1339
+ ],
+ "mapped",
+ [
+ 1387
+ ]
+ ],
+ [
+ [
+ 1340,
+ 1340
+ ],
+ "mapped",
+ [
+ 1388
+ ]
+ ],
+ [
+ [
+ 1341,
+ 1341
+ ],
+ "mapped",
+ [
+ 1389
+ ]
+ ],
+ [
+ [
+ 1342,
+ 1342
+ ],
+ "mapped",
+ [
+ 1390
+ ]
+ ],
+ [
+ [
+ 1343,
+ 1343
+ ],
+ "mapped",
+ [
+ 1391
+ ]
+ ],
+ [
+ [
+ 1344,
+ 1344
+ ],
+ "mapped",
+ [
+ 1392
+ ]
+ ],
+ [
+ [
+ 1345,
+ 1345
+ ],
+ "mapped",
+ [
+ 1393
+ ]
+ ],
+ [
+ [
+ 1346,
+ 1346
+ ],
+ "mapped",
+ [
+ 1394
+ ]
+ ],
+ [
+ [
+ 1347,
+ 1347
+ ],
+ "mapped",
+ [
+ 1395
+ ]
+ ],
+ [
+ [
+ 1348,
+ 1348
+ ],
+ "mapped",
+ [
+ 1396
+ ]
+ ],
+ [
+ [
+ 1349,
+ 1349
+ ],
+ "mapped",
+ [
+ 1397
+ ]
+ ],
+ [
+ [
+ 1350,
+ 1350
+ ],
+ "mapped",
+ [
+ 1398
+ ]
+ ],
+ [
+ [
+ 1351,
+ 1351
+ ],
+ "mapped",
+ [
+ 1399
+ ]
+ ],
+ [
+ [
+ 1352,
+ 1352
+ ],
+ "mapped",
+ [
+ 1400
+ ]
+ ],
+ [
+ [
+ 1353,
+ 1353
+ ],
+ "mapped",
+ [
+ 1401
+ ]
+ ],
+ [
+ [
+ 1354,
+ 1354
+ ],
+ "mapped",
+ [
+ 1402
+ ]
+ ],
+ [
+ [
+ 1355,
+ 1355
+ ],
+ "mapped",
+ [
+ 1403
+ ]
+ ],
+ [
+ [
+ 1356,
+ 1356
+ ],
+ "mapped",
+ [
+ 1404
+ ]
+ ],
+ [
+ [
+ 1357,
+ 1357
+ ],
+ "mapped",
+ [
+ 1405
+ ]
+ ],
+ [
+ [
+ 1358,
+ 1358
+ ],
+ "mapped",
+ [
+ 1406
+ ]
+ ],
+ [
+ [
+ 1359,
+ 1359
+ ],
+ "mapped",
+ [
+ 1407
+ ]
+ ],
+ [
+ [
+ 1360,
+ 1360
+ ],
+ "mapped",
+ [
+ 1408
+ ]
+ ],
+ [
+ [
+ 1361,
+ 1361
+ ],
+ "mapped",
+ [
+ 1409
+ ]
+ ],
+ [
+ [
+ 1362,
+ 1362
+ ],
+ "mapped",
+ [
+ 1410
+ ]
+ ],
+ [
+ [
+ 1363,
+ 1363
+ ],
+ "mapped",
+ [
+ 1411
+ ]
+ ],
+ [
+ [
+ 1364,
+ 1364
+ ],
+ "mapped",
+ [
+ 1412
+ ]
+ ],
+ [
+ [
+ 1365,
+ 1365
+ ],
+ "mapped",
+ [
+ 1413
+ ]
+ ],
+ [
+ [
+ 1366,
+ 1366
+ ],
+ "mapped",
+ [
+ 1414
+ ]
+ ],
+ [
+ [
+ 1367,
+ 1368
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1369,
+ 1369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1370,
+ 1375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1376,
+ 1376
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1377,
+ 1414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1415,
+ 1415
+ ],
+ "mapped",
+ [
+ 1381,
+ 1410
+ ]
+ ],
+ [
+ [
+ 1416,
+ 1416
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1417,
+ 1417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1418,
+ 1418
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1419,
+ 1420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1421,
+ 1422
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1423,
+ 1423
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1424,
+ 1424
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1425,
+ 1441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1442,
+ 1442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1443,
+ 1455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1456,
+ 1465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1466,
+ 1466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1467,
+ 1469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1470,
+ 1470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1471,
+ 1471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1472,
+ 1472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1473,
+ 1474
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1475,
+ 1475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1476,
+ 1476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1477,
+ 1477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1478,
+ 1478
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1479,
+ 1479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1480,
+ 1487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1488,
+ 1514
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1515,
+ 1519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1520,
+ 1524
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1525,
+ 1535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1536,
+ 1539
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1540,
+ 1540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1541,
+ 1541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1542,
+ 1546
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1547,
+ 1547
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1548,
+ 1548
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1549,
+ 1551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1552,
+ 1557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1558,
+ 1562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1563,
+ 1563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1564,
+ 1564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1565,
+ 1565
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1566,
+ 1566
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1567,
+ 1567
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1568,
+ 1568
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1569,
+ 1594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1595,
+ 1599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1600,
+ 1600
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1601,
+ 1618
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1619,
+ 1621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1622,
+ 1624
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1625,
+ 1630
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1631,
+ 1631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1632,
+ 1641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1642,
+ 1645
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1646,
+ 1647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1648,
+ 1652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1653,
+ 1653
+ ],
+ "mapped",
+ [
+ 1575,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1654,
+ 1654
+ ],
+ "mapped",
+ [
+ 1608,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1655,
+ 1655
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1656,
+ 1656
+ ],
+ "mapped",
+ [
+ 1610,
+ 1652
+ ]
+ ],
+ [
+ [
+ 1657,
+ 1719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1720,
+ 1721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1722,
+ 1726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1727,
+ 1727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1728,
+ 1742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1743,
+ 1743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1744,
+ 1747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1748,
+ 1748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1749,
+ 1756
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1757,
+ 1757
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1758,
+ 1758
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1759,
+ 1768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1769,
+ 1769
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1770,
+ 1773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1774,
+ 1775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1776,
+ 1785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1786,
+ 1790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1791,
+ 1791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1792,
+ 1805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 1806,
+ 1806
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1807,
+ 1807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1808,
+ 1836
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1837,
+ 1839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1840,
+ 1866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1867,
+ 1868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1869,
+ 1871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1872,
+ 1901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1902,
+ 1919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1920,
+ 1968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1969,
+ 1969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 1970,
+ 1983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1984,
+ 2037
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2038,
+ 2042
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2043,
+ 2047
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2048,
+ 2093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2094,
+ 2095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2096,
+ 2110
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2111,
+ 2111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2112,
+ 2139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2140,
+ 2141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2142,
+ 2142
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2143,
+ 2207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2208,
+ 2208
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2209,
+ 2209
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2210,
+ 2220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2221,
+ 2226
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2227,
+ 2228
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2229,
+ 2274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2275,
+ 2275
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2276,
+ 2302
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2303,
+ 2303
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2304,
+ 2304
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2305,
+ 2307
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2308,
+ 2308
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2309,
+ 2361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2362,
+ 2363
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2364,
+ 2381
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2382,
+ 2382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2383,
+ 2383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2384,
+ 2388
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2389,
+ 2389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2390,
+ 2391
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2392,
+ 2392
+ ],
+ "mapped",
+ [
+ 2325,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2393,
+ 2393
+ ],
+ "mapped",
+ [
+ 2326,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2394,
+ 2394
+ ],
+ "mapped",
+ [
+ 2327,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2395,
+ 2395
+ ],
+ "mapped",
+ [
+ 2332,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2396,
+ 2396
+ ],
+ "mapped",
+ [
+ 2337,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2397,
+ 2397
+ ],
+ "mapped",
+ [
+ 2338,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2398,
+ 2398
+ ],
+ "mapped",
+ [
+ 2347,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2399,
+ 2399
+ ],
+ "mapped",
+ [
+ 2351,
+ 2364
+ ]
+ ],
+ [
+ [
+ 2400,
+ 2403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2404,
+ 2405
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2406,
+ 2415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2416,
+ 2416
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2417,
+ 2418
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2419,
+ 2423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2424,
+ 2424
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2425,
+ 2426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2427,
+ 2428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2429,
+ 2429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2430,
+ 2431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2432,
+ 2432
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2433,
+ 2435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2436,
+ 2436
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2437,
+ 2444
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2445,
+ 2446
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2447,
+ 2448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2449,
+ 2450
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2451,
+ 2472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2473,
+ 2473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2474,
+ 2480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2481,
+ 2481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2482,
+ 2482
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2483,
+ 2485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2486,
+ 2489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2490,
+ 2491
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2492,
+ 2492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2493,
+ 2493
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2494,
+ 2500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2501,
+ 2502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2503,
+ 2504
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2505,
+ 2506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2507,
+ 2509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2510,
+ 2510
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2511,
+ 2518
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2519,
+ 2519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2520,
+ 2523
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2524,
+ 2524
+ ],
+ "mapped",
+ [
+ 2465,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2525,
+ 2525
+ ],
+ "mapped",
+ [
+ 2466,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2526,
+ 2526
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2527,
+ 2527
+ ],
+ "mapped",
+ [
+ 2479,
+ 2492
+ ]
+ ],
+ [
+ [
+ 2528,
+ 2531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2532,
+ 2533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2534,
+ 2545
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2546,
+ 2554
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2555,
+ 2555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2556,
+ 2560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2561,
+ 2561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2562,
+ 2562
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2563,
+ 2563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2564,
+ 2564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2565,
+ 2570
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2571,
+ 2574
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2575,
+ 2576
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2577,
+ 2578
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2579,
+ 2600
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2601,
+ 2601
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2602,
+ 2608
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2609,
+ 2609
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2610,
+ 2610
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2611,
+ 2611
+ ],
+ "mapped",
+ [
+ 2610,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2612,
+ 2612
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2613,
+ 2613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2614,
+ 2614
+ ],
+ "mapped",
+ [
+ 2616,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2615,
+ 2615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2616,
+ 2617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2618,
+ 2619
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2620,
+ 2620
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2621,
+ 2621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2622,
+ 2626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2627,
+ 2630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2631,
+ 2632
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2633,
+ 2634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2635,
+ 2637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2638,
+ 2640
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2641,
+ 2641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2642,
+ 2648
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2649,
+ 2649
+ ],
+ "mapped",
+ [
+ 2582,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2650,
+ 2650
+ ],
+ "mapped",
+ [
+ 2583,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2651,
+ 2651
+ ],
+ "mapped",
+ [
+ 2588,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2652,
+ 2652
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2653,
+ 2653
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2654,
+ 2654
+ ],
+ "mapped",
+ [
+ 2603,
+ 2620
+ ]
+ ],
+ [
+ [
+ 2655,
+ 2661
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2662,
+ 2676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2677,
+ 2677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2678,
+ 2688
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2689,
+ 2691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2692,
+ 2692
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2693,
+ 2699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2700,
+ 2700
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2701,
+ 2701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2702,
+ 2702
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2703,
+ 2705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2706,
+ 2706
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2707,
+ 2728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2729,
+ 2729
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2730,
+ 2736
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2737,
+ 2737
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2738,
+ 2739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2740,
+ 2740
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2741,
+ 2745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2746,
+ 2747
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2748,
+ 2757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2758,
+ 2758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2759,
+ 2761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2762,
+ 2762
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2763,
+ 2765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2766,
+ 2767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2768,
+ 2768
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2769,
+ 2783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2784,
+ 2784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2785,
+ 2787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2788,
+ 2789
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2790,
+ 2799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2800,
+ 2800
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2801,
+ 2801
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2802,
+ 2808
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2809,
+ 2809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2810,
+ 2816
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2817,
+ 2819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2820,
+ 2820
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2821,
+ 2828
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2829,
+ 2830
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2831,
+ 2832
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2833,
+ 2834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2835,
+ 2856
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2857,
+ 2857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2858,
+ 2864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2865,
+ 2865
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2866,
+ 2867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2868,
+ 2868
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2869,
+ 2869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2870,
+ 2873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2874,
+ 2875
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2876,
+ 2883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2884,
+ 2884
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2885,
+ 2886
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2887,
+ 2888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2889,
+ 2890
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2891,
+ 2893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2894,
+ 2901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2902,
+ 2903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2904,
+ 2907
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2908,
+ 2908
+ ],
+ "mapped",
+ [
+ 2849,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2909,
+ 2909
+ ],
+ "mapped",
+ [
+ 2850,
+ 2876
+ ]
+ ],
+ [
+ [
+ 2910,
+ 2910
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2911,
+ 2913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2914,
+ 2915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2916,
+ 2917
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2918,
+ 2927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2928,
+ 2928
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2929,
+ 2929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2930,
+ 2935
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 2936,
+ 2945
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2946,
+ 2947
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2948,
+ 2948
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2949,
+ 2954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2955,
+ 2957
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2958,
+ 2960
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2961,
+ 2961
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2962,
+ 2965
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2966,
+ 2968
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2969,
+ 2970
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2971,
+ 2971
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2972,
+ 2972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2973,
+ 2973
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2974,
+ 2975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2976,
+ 2978
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2979,
+ 2980
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2981,
+ 2983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2984,
+ 2986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2987,
+ 2989
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 2990,
+ 2997
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2998,
+ 2998
+ ],
+ "valid"
+ ],
+ [
+ [
+ 2999,
+ 3001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3002,
+ 3005
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3006,
+ 3010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3011,
+ 3013
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3014,
+ 3016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3017,
+ 3017
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3018,
+ 3021
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3022,
+ 3023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3024,
+ 3024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3025,
+ 3030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3031,
+ 3031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3032,
+ 3045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3046,
+ 3046
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3047,
+ 3055
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3056,
+ 3058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3059,
+ 3066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3067,
+ 3071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3072,
+ 3072
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3073,
+ 3075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3076,
+ 3076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3077,
+ 3084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3085,
+ 3085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3086,
+ 3088
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3089,
+ 3089
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3090,
+ 3112
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3113,
+ 3113
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3114,
+ 3123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3124,
+ 3124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3125,
+ 3129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3130,
+ 3132
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3133,
+ 3133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3134,
+ 3140
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3141,
+ 3141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3142,
+ 3144
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3145,
+ 3145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3146,
+ 3149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3150,
+ 3156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3157,
+ 3158
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3159,
+ 3159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3160,
+ 3161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3162,
+ 3162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3163,
+ 3167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3168,
+ 3169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3170,
+ 3171
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3172,
+ 3173
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3174,
+ 3183
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3184,
+ 3191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3192,
+ 3199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3200,
+ 3200
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3201,
+ 3201
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3202,
+ 3203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3204,
+ 3204
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3205,
+ 3212
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3213,
+ 3213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3214,
+ 3216
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3217,
+ 3217
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3218,
+ 3240
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3241,
+ 3241
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3242,
+ 3251
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3252,
+ 3252
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3253,
+ 3257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3258,
+ 3259
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3260,
+ 3261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3262,
+ 3268
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3269,
+ 3269
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3270,
+ 3272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3273,
+ 3273
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3274,
+ 3277
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3278,
+ 3284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3285,
+ 3286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3287,
+ 3293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3294,
+ 3294
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3295,
+ 3295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3296,
+ 3297
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3298,
+ 3299
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3300,
+ 3301
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3302,
+ 3311
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3312,
+ 3312
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3313,
+ 3314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3315,
+ 3328
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3329,
+ 3329
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3330,
+ 3331
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3332,
+ 3332
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3333,
+ 3340
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3341,
+ 3341
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3342,
+ 3344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3345,
+ 3345
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3346,
+ 3368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3369,
+ 3369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3370,
+ 3385
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3386,
+ 3386
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3387,
+ 3388
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3389,
+ 3389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3390,
+ 3395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3396,
+ 3396
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3397,
+ 3397
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3398,
+ 3400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3401,
+ 3401
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3402,
+ 3405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3406,
+ 3406
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3407,
+ 3414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3415,
+ 3415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3416,
+ 3422
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3423,
+ 3423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3424,
+ 3425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3426,
+ 3427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3428,
+ 3429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3430,
+ 3439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3440,
+ 3445
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3446,
+ 3448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3449,
+ 3449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3450,
+ 3455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3456,
+ 3457
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3458,
+ 3459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3460,
+ 3460
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3461,
+ 3478
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3479,
+ 3481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3482,
+ 3505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3506,
+ 3506
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3507,
+ 3515
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3516,
+ 3516
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3517,
+ 3517
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3518,
+ 3519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3520,
+ 3526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3527,
+ 3529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3530,
+ 3530
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3531,
+ 3534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3535,
+ 3540
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3541,
+ 3541
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3542,
+ 3542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3543,
+ 3543
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3544,
+ 3551
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3552,
+ 3557
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3558,
+ 3567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3568,
+ 3569
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3570,
+ 3571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3572,
+ 3572
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3573,
+ 3584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3585,
+ 3634
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3635,
+ 3635
+ ],
+ "mapped",
+ [
+ 3661,
+ 3634
+ ]
+ ],
+ [
+ [
+ 3636,
+ 3642
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3643,
+ 3646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3647,
+ 3647
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3648,
+ 3662
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3663,
+ 3663
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3664,
+ 3673
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3674,
+ 3675
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3676,
+ 3712
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3713,
+ 3714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3715,
+ 3715
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3716,
+ 3716
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3717,
+ 3718
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3719,
+ 3720
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3721,
+ 3721
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3722,
+ 3722
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3723,
+ 3724
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3725,
+ 3725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3726,
+ 3731
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3732,
+ 3735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3736,
+ 3736
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3737,
+ 3743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3744,
+ 3744
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3745,
+ 3747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3748,
+ 3748
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3749,
+ 3749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3750,
+ 3750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3751,
+ 3751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3752,
+ 3753
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3754,
+ 3755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3756,
+ 3756
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3757,
+ 3762
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3763,
+ 3763
+ ],
+ "mapped",
+ [
+ 3789,
+ 3762
+ ]
+ ],
+ [
+ [
+ 3764,
+ 3769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3770,
+ 3770
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3771,
+ 3773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3774,
+ 3775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3776,
+ 3780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3781,
+ 3781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3782,
+ 3782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3783,
+ 3783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3784,
+ 3789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3790,
+ 3791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3792,
+ 3801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3802,
+ 3803
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3804,
+ 3804
+ ],
+ "mapped",
+ [
+ 3755,
+ 3737
+ ]
+ ],
+ [
+ [
+ 3805,
+ 3805
+ ],
+ "mapped",
+ [
+ 3755,
+ 3745
+ ]
+ ],
+ [
+ [
+ 3806,
+ 3807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3808,
+ 3839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3840,
+ 3840
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3841,
+ 3850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3851,
+ 3851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3852,
+ 3852
+ ],
+ "mapped",
+ [
+ 3851
+ ]
+ ],
+ [
+ [
+ 3853,
+ 3863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3864,
+ 3865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3866,
+ 3871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3872,
+ 3881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3882,
+ 3892
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3893,
+ 3893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3894,
+ 3894
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3895,
+ 3895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3896,
+ 3896
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3897,
+ 3897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3898,
+ 3901
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3902,
+ 3906
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3907,
+ 3907
+ ],
+ "mapped",
+ [
+ 3906,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3908,
+ 3911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3912,
+ 3912
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3913,
+ 3916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3917,
+ 3917
+ ],
+ "mapped",
+ [
+ 3916,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3918,
+ 3921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3922,
+ 3922
+ ],
+ "mapped",
+ [
+ 3921,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3923,
+ 3926
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3927,
+ 3927
+ ],
+ "mapped",
+ [
+ 3926,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3928,
+ 3931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3932,
+ 3932
+ ],
+ "mapped",
+ [
+ 3931,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3933,
+ 3944
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3945,
+ 3945
+ ],
+ "mapped",
+ [
+ 3904,
+ 4021
+ ]
+ ],
+ [
+ [
+ 3946,
+ 3946
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3947,
+ 3948
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3949,
+ 3952
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3953,
+ 3954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3955,
+ 3955
+ ],
+ "mapped",
+ [
+ 3953,
+ 3954
+ ]
+ ],
+ [
+ [
+ 3956,
+ 3956
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3957,
+ 3957
+ ],
+ "mapped",
+ [
+ 3953,
+ 3956
+ ]
+ ],
+ [
+ [
+ 3958,
+ 3958
+ ],
+ "mapped",
+ [
+ 4018,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3959,
+ 3959
+ ],
+ "mapped",
+ [
+ 4018,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3960,
+ 3960
+ ],
+ "mapped",
+ [
+ 4019,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3961,
+ 3961
+ ],
+ "mapped",
+ [
+ 4019,
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3962,
+ 3968
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3969,
+ 3969
+ ],
+ "mapped",
+ [
+ 3953,
+ 3968
+ ]
+ ],
+ [
+ [
+ 3970,
+ 3972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3973,
+ 3973
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 3974,
+ 3979
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3980,
+ 3983
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3984,
+ 3986
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3987,
+ 3987
+ ],
+ "mapped",
+ [
+ 3986,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3988,
+ 3989
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3990,
+ 3990
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3991,
+ 3991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3992,
+ 3992
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 3993,
+ 3996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 3997,
+ 3997
+ ],
+ "mapped",
+ [
+ 3996,
+ 4023
+ ]
+ ],
+ [
+ [
+ 3998,
+ 4001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4002,
+ 4002
+ ],
+ "mapped",
+ [
+ 4001,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4003,
+ 4006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4007,
+ 4007
+ ],
+ "mapped",
+ [
+ 4006,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4008,
+ 4011
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4012,
+ 4012
+ ],
+ "mapped",
+ [
+ 4011,
+ 4023
+ ]
+ ],
+ [
+ [
+ 4013,
+ 4013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4014,
+ 4016
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4017,
+ 4023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4024,
+ 4024
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4025,
+ 4025
+ ],
+ "mapped",
+ [
+ 3984,
+ 4021
+ ]
+ ],
+ [
+ [
+ 4026,
+ 4028
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4029,
+ 4029
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4030,
+ 4037
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4038,
+ 4038
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4039,
+ 4044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4045,
+ 4045
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4046,
+ 4046
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4047,
+ 4047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4048,
+ 4049
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4050,
+ 4052
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4053,
+ 4056
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4057,
+ 4058
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4059,
+ 4095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4096,
+ 4129
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4130,
+ 4130
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4131,
+ 4135
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4136,
+ 4136
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4137,
+ 4138
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4139,
+ 4139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4140,
+ 4146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4147,
+ 4149
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4150,
+ 4153
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4154,
+ 4159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4160,
+ 4169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4170,
+ 4175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4176,
+ 4185
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4186,
+ 4249
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4250,
+ 4253
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4254,
+ 4255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4256,
+ 4293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4294,
+ 4294
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4295,
+ 4295
+ ],
+ "mapped",
+ [
+ 11559
+ ]
+ ],
+ [
+ [
+ 4296,
+ 4300
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4301,
+ 4301
+ ],
+ "mapped",
+ [
+ 11565
+ ]
+ ],
+ [
+ [
+ 4302,
+ 4303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4304,
+ 4342
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4343,
+ 4344
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4345,
+ 4346
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4347,
+ 4347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4348,
+ 4348
+ ],
+ "mapped",
+ [
+ 4316
+ ]
+ ],
+ [
+ [
+ 4349,
+ 4351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4352,
+ 4441
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4442,
+ 4446
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4447,
+ 4448
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4449,
+ 4514
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4515,
+ 4519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4520,
+ 4601
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4602,
+ 4607
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4608,
+ 4614
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4615,
+ 4615
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4616,
+ 4678
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4679,
+ 4679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4680,
+ 4680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4681,
+ 4681
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4682,
+ 4685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4686,
+ 4687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4688,
+ 4694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4695,
+ 4695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4696,
+ 4696
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4697,
+ 4697
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4698,
+ 4701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4702,
+ 4703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4704,
+ 4742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4743,
+ 4743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4744,
+ 4744
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4745,
+ 4745
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4746,
+ 4749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4750,
+ 4751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4752,
+ 4782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4783,
+ 4783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4784,
+ 4784
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4785,
+ 4785
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4786,
+ 4789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4790,
+ 4791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4792,
+ 4798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4799,
+ 4799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4800,
+ 4800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4801,
+ 4801
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4802,
+ 4805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4806,
+ 4807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4808,
+ 4814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4815,
+ 4815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4816,
+ 4822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4823,
+ 4823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4824,
+ 4846
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4847,
+ 4847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4848,
+ 4878
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4879,
+ 4879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4880,
+ 4880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4881,
+ 4881
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4882,
+ 4885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4886,
+ 4887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4888,
+ 4894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4895,
+ 4895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4896,
+ 4934
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4935,
+ 4935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4936,
+ 4954
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4955,
+ 4956
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4957,
+ 4958
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4959,
+ 4959
+ ],
+ "valid"
+ ],
+ [
+ [
+ 4960,
+ 4960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4961,
+ 4988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 4989,
+ 4991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 4992,
+ 5007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5008,
+ 5017
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5018,
+ 5023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5024,
+ 5108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5109,
+ 5109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5110,
+ 5111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5112,
+ 5112
+ ],
+ "mapped",
+ [
+ 5104
+ ]
+ ],
+ [
+ [
+ 5113,
+ 5113
+ ],
+ "mapped",
+ [
+ 5105
+ ]
+ ],
+ [
+ [
+ 5114,
+ 5114
+ ],
+ "mapped",
+ [
+ 5106
+ ]
+ ],
+ [
+ [
+ 5115,
+ 5115
+ ],
+ "mapped",
+ [
+ 5107
+ ]
+ ],
+ [
+ [
+ 5116,
+ 5116
+ ],
+ "mapped",
+ [
+ 5108
+ ]
+ ],
+ [
+ [
+ 5117,
+ 5117
+ ],
+ "mapped",
+ [
+ 5109
+ ]
+ ],
+ [
+ [
+ 5118,
+ 5119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5120,
+ 5120
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5121,
+ 5740
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5741,
+ 5742
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5743,
+ 5750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5751,
+ 5759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5760,
+ 5760
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5761,
+ 5786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5787,
+ 5788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5789,
+ 5791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5792,
+ 5866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5867,
+ 5872
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5873,
+ 5880
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5881,
+ 5887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5888,
+ 5900
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5901,
+ 5901
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5902,
+ 5908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5909,
+ 5919
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5920,
+ 5940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5941,
+ 5942
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 5943,
+ 5951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5952,
+ 5971
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5972,
+ 5983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5984,
+ 5996
+ ],
+ "valid"
+ ],
+ [
+ [
+ 5997,
+ 5997
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 5998,
+ 6000
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6001,
+ 6001
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6002,
+ 6003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6004,
+ 6015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6016,
+ 6067
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6068,
+ 6069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6070,
+ 6099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6100,
+ 6102
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6103,
+ 6103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6104,
+ 6107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6108,
+ 6108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6109,
+ 6109
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6110,
+ 6111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6112,
+ 6121
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6122,
+ 6127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6128,
+ 6137
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6138,
+ 6143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6144,
+ 6149
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6150,
+ 6150
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6151,
+ 6154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6155,
+ 6157
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 6158,
+ 6158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6159,
+ 6159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6160,
+ 6169
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6170,
+ 6175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6176,
+ 6263
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6264,
+ 6271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6272,
+ 6313
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6314,
+ 6314
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6315,
+ 6319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6320,
+ 6389
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6390,
+ 6399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6400,
+ 6428
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6429,
+ 6430
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6431,
+ 6431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6432,
+ 6443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6444,
+ 6447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6448,
+ 6459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6460,
+ 6463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6464,
+ 6464
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6465,
+ 6467
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6468,
+ 6469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6470,
+ 6509
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6510,
+ 6511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6512,
+ 6516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6517,
+ 6527
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6528,
+ 6569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6570,
+ 6571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6572,
+ 6575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6576,
+ 6601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6602,
+ 6607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6608,
+ 6617
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6618,
+ 6618
+ ],
+ "valid",
+ [
+ ],
+ "XV8"
+ ],
+ [
+ [
+ 6619,
+ 6621
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6622,
+ 6623
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6624,
+ 6655
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6656,
+ 6683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6684,
+ 6685
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6686,
+ 6687
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6688,
+ 6750
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6751,
+ 6751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6752,
+ 6780
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6781,
+ 6782
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6783,
+ 6793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6794,
+ 6799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6800,
+ 6809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6810,
+ 6815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6816,
+ 6822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6823,
+ 6823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6824,
+ 6829
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6830,
+ 6831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6832,
+ 6845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6846,
+ 6846
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 6847,
+ 6911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6912,
+ 6987
+ ],
+ "valid"
+ ],
+ [
+ [
+ 6988,
+ 6991
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 6992,
+ 7001
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7002,
+ 7018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7019,
+ 7027
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7028,
+ 7036
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7037,
+ 7039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7040,
+ 7082
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7083,
+ 7085
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7086,
+ 7097
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7098,
+ 7103
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7104,
+ 7155
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7156,
+ 7163
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7164,
+ 7167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7168,
+ 7223
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7224,
+ 7226
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7227,
+ 7231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7232,
+ 7241
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7242,
+ 7244
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7245,
+ 7293
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7294,
+ 7295
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7296,
+ 7359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7360,
+ 7367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7368,
+ 7375
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7376,
+ 7378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7379,
+ 7379
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 7380,
+ 7410
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7411,
+ 7414
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7415,
+ 7415
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7416,
+ 7417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7418,
+ 7423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7424,
+ 7467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7468,
+ 7468
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7469,
+ 7469
+ ],
+ "mapped",
+ [
+ 230
+ ]
+ ],
+ [
+ [
+ 7470,
+ 7470
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7471,
+ 7471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7472,
+ 7472
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7473,
+ 7473
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7474,
+ 7474
+ ],
+ "mapped",
+ [
+ 477
+ ]
+ ],
+ [
+ [
+ 7475,
+ 7475
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7476,
+ 7476
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 7477,
+ 7477
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7478,
+ 7478
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 7479,
+ 7479
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7480,
+ 7480
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 7481,
+ 7481
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7482,
+ 7482
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 7483,
+ 7483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7484,
+ 7484
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7485,
+ 7485
+ ],
+ "mapped",
+ [
+ 547
+ ]
+ ],
+ [
+ [
+ 7486,
+ 7486
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7487,
+ 7487
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7488,
+ 7488
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7489,
+ 7489
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7490,
+ 7490
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 7491,
+ 7491
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 7492,
+ 7492
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 7493,
+ 7493
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 7494,
+ 7494
+ ],
+ "mapped",
+ [
+ 7426
+ ]
+ ],
+ [
+ [
+ 7495,
+ 7495
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 7496,
+ 7496
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 7497,
+ 7497
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 7498,
+ 7498
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 7499,
+ 7499
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 7500,
+ 7500
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7501,
+ 7501
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 7502,
+ 7502
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7503,
+ 7503
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 7504,
+ 7504
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 7505,
+ 7505
+ ],
+ "mapped",
+ [
+ 331
+ ]
+ ],
+ [
+ [
+ 7506,
+ 7506
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 7507,
+ 7507
+ ],
+ "mapped",
+ [
+ 596
+ ]
+ ],
+ [
+ [
+ 7508,
+ 7508
+ ],
+ "mapped",
+ [
+ 7446
+ ]
+ ],
+ [
+ [
+ 7509,
+ 7509
+ ],
+ "mapped",
+ [
+ 7447
+ ]
+ ],
+ [
+ [
+ 7510,
+ 7510
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 7511,
+ 7511
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 7512,
+ 7512
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7513,
+ 7513
+ ],
+ "mapped",
+ [
+ 7453
+ ]
+ ],
+ [
+ [
+ 7514,
+ 7514
+ ],
+ "mapped",
+ [
+ 623
+ ]
+ ],
+ [
+ [
+ 7515,
+ 7515
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7516,
+ 7516
+ ],
+ "mapped",
+ [
+ 7461
+ ]
+ ],
+ [
+ [
+ 7517,
+ 7517
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7518,
+ 7518
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7519,
+ 7519
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 7520,
+ 7520
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7521,
+ 7521
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7522,
+ 7522
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 7523,
+ 7523
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 7524,
+ 7524
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 7525,
+ 7525
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 7526,
+ 7526
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 7527,
+ 7527
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 7528,
+ 7528
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 7529,
+ 7529
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 7530,
+ 7530
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 7531,
+ 7531
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7532,
+ 7543
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7544,
+ 7544
+ ],
+ "mapped",
+ [
+ 1085
+ ]
+ ],
+ [
+ [
+ 7545,
+ 7578
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7579,
+ 7579
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 7580,
+ 7580
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 7581,
+ 7581
+ ],
+ "mapped",
+ [
+ 597
+ ]
+ ],
+ [
+ [
+ 7582,
+ 7582
+ ],
+ "mapped",
+ [
+ 240
+ ]
+ ],
+ [
+ [
+ 7583,
+ 7583
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 7584,
+ 7584
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 7585,
+ 7585
+ ],
+ "mapped",
+ [
+ 607
+ ]
+ ],
+ [
+ [
+ 7586,
+ 7586
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 7587,
+ 7587
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 7588,
+ 7588
+ ],
+ "mapped",
+ [
+ 616
+ ]
+ ],
+ [
+ [
+ 7589,
+ 7589
+ ],
+ "mapped",
+ [
+ 617
+ ]
+ ],
+ [
+ [
+ 7590,
+ 7590
+ ],
+ "mapped",
+ [
+ 618
+ ]
+ ],
+ [
+ [
+ 7591,
+ 7591
+ ],
+ "mapped",
+ [
+ 7547
+ ]
+ ],
+ [
+ [
+ 7592,
+ 7592
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 7593,
+ 7593
+ ],
+ "mapped",
+ [
+ 621
+ ]
+ ],
+ [
+ [
+ 7594,
+ 7594
+ ],
+ "mapped",
+ [
+ 7557
+ ]
+ ],
+ [
+ [
+ 7595,
+ 7595
+ ],
+ "mapped",
+ [
+ 671
+ ]
+ ],
+ [
+ [
+ 7596,
+ 7596
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 7597,
+ 7597
+ ],
+ "mapped",
+ [
+ 624
+ ]
+ ],
+ [
+ [
+ 7598,
+ 7598
+ ],
+ "mapped",
+ [
+ 626
+ ]
+ ],
+ [
+ [
+ 7599,
+ 7599
+ ],
+ "mapped",
+ [
+ 627
+ ]
+ ],
+ [
+ [
+ 7600,
+ 7600
+ ],
+ "mapped",
+ [
+ 628
+ ]
+ ],
+ [
+ [
+ 7601,
+ 7601
+ ],
+ "mapped",
+ [
+ 629
+ ]
+ ],
+ [
+ [
+ 7602,
+ 7602
+ ],
+ "mapped",
+ [
+ 632
+ ]
+ ],
+ [
+ [
+ 7603,
+ 7603
+ ],
+ "mapped",
+ [
+ 642
+ ]
+ ],
+ [
+ [
+ 7604,
+ 7604
+ ],
+ "mapped",
+ [
+ 643
+ ]
+ ],
+ [
+ [
+ 7605,
+ 7605
+ ],
+ "mapped",
+ [
+ 427
+ ]
+ ],
+ [
+ [
+ 7606,
+ 7606
+ ],
+ "mapped",
+ [
+ 649
+ ]
+ ],
+ [
+ [
+ 7607,
+ 7607
+ ],
+ "mapped",
+ [
+ 650
+ ]
+ ],
+ [
+ [
+ 7608,
+ 7608
+ ],
+ "mapped",
+ [
+ 7452
+ ]
+ ],
+ [
+ [
+ 7609,
+ 7609
+ ],
+ "mapped",
+ [
+ 651
+ ]
+ ],
+ [
+ [
+ 7610,
+ 7610
+ ],
+ "mapped",
+ [
+ 652
+ ]
+ ],
+ [
+ [
+ 7611,
+ 7611
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 7612,
+ 7612
+ ],
+ "mapped",
+ [
+ 656
+ ]
+ ],
+ [
+ [
+ 7613,
+ 7613
+ ],
+ "mapped",
+ [
+ 657
+ ]
+ ],
+ [
+ [
+ 7614,
+ 7614
+ ],
+ "mapped",
+ [
+ 658
+ ]
+ ],
+ [
+ [
+ 7615,
+ 7615
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 7616,
+ 7619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7620,
+ 7626
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7627,
+ 7654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7655,
+ 7669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7670,
+ 7675
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7676,
+ 7676
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7677,
+ 7677
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7678,
+ 7679
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7680,
+ 7680
+ ],
+ "mapped",
+ [
+ 7681
+ ]
+ ],
+ [
+ [
+ 7681,
+ 7681
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7682,
+ 7682
+ ],
+ "mapped",
+ [
+ 7683
+ ]
+ ],
+ [
+ [
+ 7683,
+ 7683
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7684,
+ 7684
+ ],
+ "mapped",
+ [
+ 7685
+ ]
+ ],
+ [
+ [
+ 7685,
+ 7685
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7686,
+ 7686
+ ],
+ "mapped",
+ [
+ 7687
+ ]
+ ],
+ [
+ [
+ 7687,
+ 7687
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7688,
+ 7688
+ ],
+ "mapped",
+ [
+ 7689
+ ]
+ ],
+ [
+ [
+ 7689,
+ 7689
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7690,
+ 7690
+ ],
+ "mapped",
+ [
+ 7691
+ ]
+ ],
+ [
+ [
+ 7691,
+ 7691
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7692,
+ 7692
+ ],
+ "mapped",
+ [
+ 7693
+ ]
+ ],
+ [
+ [
+ 7693,
+ 7693
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7694,
+ 7694
+ ],
+ "mapped",
+ [
+ 7695
+ ]
+ ],
+ [
+ [
+ 7695,
+ 7695
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7696,
+ 7696
+ ],
+ "mapped",
+ [
+ 7697
+ ]
+ ],
+ [
+ [
+ 7697,
+ 7697
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7698,
+ 7698
+ ],
+ "mapped",
+ [
+ 7699
+ ]
+ ],
+ [
+ [
+ 7699,
+ 7699
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7700,
+ 7700
+ ],
+ "mapped",
+ [
+ 7701
+ ]
+ ],
+ [
+ [
+ 7701,
+ 7701
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7702,
+ 7702
+ ],
+ "mapped",
+ [
+ 7703
+ ]
+ ],
+ [
+ [
+ 7703,
+ 7703
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7704,
+ 7704
+ ],
+ "mapped",
+ [
+ 7705
+ ]
+ ],
+ [
+ [
+ 7705,
+ 7705
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7706,
+ 7706
+ ],
+ "mapped",
+ [
+ 7707
+ ]
+ ],
+ [
+ [
+ 7707,
+ 7707
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7708,
+ 7708
+ ],
+ "mapped",
+ [
+ 7709
+ ]
+ ],
+ [
+ [
+ 7709,
+ 7709
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7710,
+ 7710
+ ],
+ "mapped",
+ [
+ 7711
+ ]
+ ],
+ [
+ [
+ 7711,
+ 7711
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7712,
+ 7712
+ ],
+ "mapped",
+ [
+ 7713
+ ]
+ ],
+ [
+ [
+ 7713,
+ 7713
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7714,
+ 7714
+ ],
+ "mapped",
+ [
+ 7715
+ ]
+ ],
+ [
+ [
+ 7715,
+ 7715
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7716,
+ 7716
+ ],
+ "mapped",
+ [
+ 7717
+ ]
+ ],
+ [
+ [
+ 7717,
+ 7717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7718,
+ 7718
+ ],
+ "mapped",
+ [
+ 7719
+ ]
+ ],
+ [
+ [
+ 7719,
+ 7719
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7720,
+ 7720
+ ],
+ "mapped",
+ [
+ 7721
+ ]
+ ],
+ [
+ [
+ 7721,
+ 7721
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7722,
+ 7722
+ ],
+ "mapped",
+ [
+ 7723
+ ]
+ ],
+ [
+ [
+ 7723,
+ 7723
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7724,
+ 7724
+ ],
+ "mapped",
+ [
+ 7725
+ ]
+ ],
+ [
+ [
+ 7725,
+ 7725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7726,
+ 7726
+ ],
+ "mapped",
+ [
+ 7727
+ ]
+ ],
+ [
+ [
+ 7727,
+ 7727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7728,
+ 7728
+ ],
+ "mapped",
+ [
+ 7729
+ ]
+ ],
+ [
+ [
+ 7729,
+ 7729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7730,
+ 7730
+ ],
+ "mapped",
+ [
+ 7731
+ ]
+ ],
+ [
+ [
+ 7731,
+ 7731
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7732,
+ 7732
+ ],
+ "mapped",
+ [
+ 7733
+ ]
+ ],
+ [
+ [
+ 7733,
+ 7733
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7734,
+ 7734
+ ],
+ "mapped",
+ [
+ 7735
+ ]
+ ],
+ [
+ [
+ 7735,
+ 7735
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7736,
+ 7736
+ ],
+ "mapped",
+ [
+ 7737
+ ]
+ ],
+ [
+ [
+ 7737,
+ 7737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7738,
+ 7738
+ ],
+ "mapped",
+ [
+ 7739
+ ]
+ ],
+ [
+ [
+ 7739,
+ 7739
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7740,
+ 7740
+ ],
+ "mapped",
+ [
+ 7741
+ ]
+ ],
+ [
+ [
+ 7741,
+ 7741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7742,
+ 7742
+ ],
+ "mapped",
+ [
+ 7743
+ ]
+ ],
+ [
+ [
+ 7743,
+ 7743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7744,
+ 7744
+ ],
+ "mapped",
+ [
+ 7745
+ ]
+ ],
+ [
+ [
+ 7745,
+ 7745
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7746,
+ 7746
+ ],
+ "mapped",
+ [
+ 7747
+ ]
+ ],
+ [
+ [
+ 7747,
+ 7747
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7748,
+ 7748
+ ],
+ "mapped",
+ [
+ 7749
+ ]
+ ],
+ [
+ [
+ 7749,
+ 7749
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7750,
+ 7750
+ ],
+ "mapped",
+ [
+ 7751
+ ]
+ ],
+ [
+ [
+ 7751,
+ 7751
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7752,
+ 7752
+ ],
+ "mapped",
+ [
+ 7753
+ ]
+ ],
+ [
+ [
+ 7753,
+ 7753
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7754,
+ 7754
+ ],
+ "mapped",
+ [
+ 7755
+ ]
+ ],
+ [
+ [
+ 7755,
+ 7755
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7756,
+ 7756
+ ],
+ "mapped",
+ [
+ 7757
+ ]
+ ],
+ [
+ [
+ 7757,
+ 7757
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7758,
+ 7758
+ ],
+ "mapped",
+ [
+ 7759
+ ]
+ ],
+ [
+ [
+ 7759,
+ 7759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7760,
+ 7760
+ ],
+ "mapped",
+ [
+ 7761
+ ]
+ ],
+ [
+ [
+ 7761,
+ 7761
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7762,
+ 7762
+ ],
+ "mapped",
+ [
+ 7763
+ ]
+ ],
+ [
+ [
+ 7763,
+ 7763
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7764,
+ 7764
+ ],
+ "mapped",
+ [
+ 7765
+ ]
+ ],
+ [
+ [
+ 7765,
+ 7765
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7766,
+ 7766
+ ],
+ "mapped",
+ [
+ 7767
+ ]
+ ],
+ [
+ [
+ 7767,
+ 7767
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7768,
+ 7768
+ ],
+ "mapped",
+ [
+ 7769
+ ]
+ ],
+ [
+ [
+ 7769,
+ 7769
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7770,
+ 7770
+ ],
+ "mapped",
+ [
+ 7771
+ ]
+ ],
+ [
+ [
+ 7771,
+ 7771
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7772,
+ 7772
+ ],
+ "mapped",
+ [
+ 7773
+ ]
+ ],
+ [
+ [
+ 7773,
+ 7773
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7774,
+ 7774
+ ],
+ "mapped",
+ [
+ 7775
+ ]
+ ],
+ [
+ [
+ 7775,
+ 7775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7776,
+ 7776
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7777,
+ 7777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7778,
+ 7778
+ ],
+ "mapped",
+ [
+ 7779
+ ]
+ ],
+ [
+ [
+ 7779,
+ 7779
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7780,
+ 7780
+ ],
+ "mapped",
+ [
+ 7781
+ ]
+ ],
+ [
+ [
+ 7781,
+ 7781
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7782,
+ 7782
+ ],
+ "mapped",
+ [
+ 7783
+ ]
+ ],
+ [
+ [
+ 7783,
+ 7783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7784,
+ 7784
+ ],
+ "mapped",
+ [
+ 7785
+ ]
+ ],
+ [
+ [
+ 7785,
+ 7785
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7786,
+ 7786
+ ],
+ "mapped",
+ [
+ 7787
+ ]
+ ],
+ [
+ [
+ 7787,
+ 7787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7788,
+ 7788
+ ],
+ "mapped",
+ [
+ 7789
+ ]
+ ],
+ [
+ [
+ 7789,
+ 7789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7790,
+ 7790
+ ],
+ "mapped",
+ [
+ 7791
+ ]
+ ],
+ [
+ [
+ 7791,
+ 7791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7792,
+ 7792
+ ],
+ "mapped",
+ [
+ 7793
+ ]
+ ],
+ [
+ [
+ 7793,
+ 7793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7794,
+ 7794
+ ],
+ "mapped",
+ [
+ 7795
+ ]
+ ],
+ [
+ [
+ 7795,
+ 7795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7796,
+ 7796
+ ],
+ "mapped",
+ [
+ 7797
+ ]
+ ],
+ [
+ [
+ 7797,
+ 7797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7798,
+ 7798
+ ],
+ "mapped",
+ [
+ 7799
+ ]
+ ],
+ [
+ [
+ 7799,
+ 7799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7800,
+ 7800
+ ],
+ "mapped",
+ [
+ 7801
+ ]
+ ],
+ [
+ [
+ 7801,
+ 7801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7802,
+ 7802
+ ],
+ "mapped",
+ [
+ 7803
+ ]
+ ],
+ [
+ [
+ 7803,
+ 7803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7804,
+ 7804
+ ],
+ "mapped",
+ [
+ 7805
+ ]
+ ],
+ [
+ [
+ 7805,
+ 7805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7806,
+ 7806
+ ],
+ "mapped",
+ [
+ 7807
+ ]
+ ],
+ [
+ [
+ 7807,
+ 7807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7808,
+ 7808
+ ],
+ "mapped",
+ [
+ 7809
+ ]
+ ],
+ [
+ [
+ 7809,
+ 7809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7810,
+ 7810
+ ],
+ "mapped",
+ [
+ 7811
+ ]
+ ],
+ [
+ [
+ 7811,
+ 7811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7812,
+ 7812
+ ],
+ "mapped",
+ [
+ 7813
+ ]
+ ],
+ [
+ [
+ 7813,
+ 7813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7814,
+ 7814
+ ],
+ "mapped",
+ [
+ 7815
+ ]
+ ],
+ [
+ [
+ 7815,
+ 7815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7816,
+ 7816
+ ],
+ "mapped",
+ [
+ 7817
+ ]
+ ],
+ [
+ [
+ 7817,
+ 7817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7818,
+ 7818
+ ],
+ "mapped",
+ [
+ 7819
+ ]
+ ],
+ [
+ [
+ 7819,
+ 7819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7820,
+ 7820
+ ],
+ "mapped",
+ [
+ 7821
+ ]
+ ],
+ [
+ [
+ 7821,
+ 7821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7822,
+ 7822
+ ],
+ "mapped",
+ [
+ 7823
+ ]
+ ],
+ [
+ [
+ 7823,
+ 7823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7824,
+ 7824
+ ],
+ "mapped",
+ [
+ 7825
+ ]
+ ],
+ [
+ [
+ 7825,
+ 7825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7826,
+ 7826
+ ],
+ "mapped",
+ [
+ 7827
+ ]
+ ],
+ [
+ [
+ 7827,
+ 7827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7828,
+ 7828
+ ],
+ "mapped",
+ [
+ 7829
+ ]
+ ],
+ [
+ [
+ 7829,
+ 7833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7834,
+ 7834
+ ],
+ "mapped",
+ [
+ 97,
+ 702
+ ]
+ ],
+ [
+ [
+ 7835,
+ 7835
+ ],
+ "mapped",
+ [
+ 7777
+ ]
+ ],
+ [
+ [
+ 7836,
+ 7837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7838,
+ 7838
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 7839,
+ 7839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7840,
+ 7840
+ ],
+ "mapped",
+ [
+ 7841
+ ]
+ ],
+ [
+ [
+ 7841,
+ 7841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7842,
+ 7842
+ ],
+ "mapped",
+ [
+ 7843
+ ]
+ ],
+ [
+ [
+ 7843,
+ 7843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7844,
+ 7844
+ ],
+ "mapped",
+ [
+ 7845
+ ]
+ ],
+ [
+ [
+ 7845,
+ 7845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7846,
+ 7846
+ ],
+ "mapped",
+ [
+ 7847
+ ]
+ ],
+ [
+ [
+ 7847,
+ 7847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7848,
+ 7848
+ ],
+ "mapped",
+ [
+ 7849
+ ]
+ ],
+ [
+ [
+ 7849,
+ 7849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7850,
+ 7850
+ ],
+ "mapped",
+ [
+ 7851
+ ]
+ ],
+ [
+ [
+ 7851,
+ 7851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7852,
+ 7852
+ ],
+ "mapped",
+ [
+ 7853
+ ]
+ ],
+ [
+ [
+ 7853,
+ 7853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7854,
+ 7854
+ ],
+ "mapped",
+ [
+ 7855
+ ]
+ ],
+ [
+ [
+ 7855,
+ 7855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7856,
+ 7856
+ ],
+ "mapped",
+ [
+ 7857
+ ]
+ ],
+ [
+ [
+ 7857,
+ 7857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7858,
+ 7858
+ ],
+ "mapped",
+ [
+ 7859
+ ]
+ ],
+ [
+ [
+ 7859,
+ 7859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7860,
+ 7860
+ ],
+ "mapped",
+ [
+ 7861
+ ]
+ ],
+ [
+ [
+ 7861,
+ 7861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7862,
+ 7862
+ ],
+ "mapped",
+ [
+ 7863
+ ]
+ ],
+ [
+ [
+ 7863,
+ 7863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7864,
+ 7864
+ ],
+ "mapped",
+ [
+ 7865
+ ]
+ ],
+ [
+ [
+ 7865,
+ 7865
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7866,
+ 7866
+ ],
+ "mapped",
+ [
+ 7867
+ ]
+ ],
+ [
+ [
+ 7867,
+ 7867
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7868,
+ 7868
+ ],
+ "mapped",
+ [
+ 7869
+ ]
+ ],
+ [
+ [
+ 7869,
+ 7869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7870,
+ 7870
+ ],
+ "mapped",
+ [
+ 7871
+ ]
+ ],
+ [
+ [
+ 7871,
+ 7871
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7872,
+ 7872
+ ],
+ "mapped",
+ [
+ 7873
+ ]
+ ],
+ [
+ [
+ 7873,
+ 7873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7874,
+ 7874
+ ],
+ "mapped",
+ [
+ 7875
+ ]
+ ],
+ [
+ [
+ 7875,
+ 7875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7876,
+ 7876
+ ],
+ "mapped",
+ [
+ 7877
+ ]
+ ],
+ [
+ [
+ 7877,
+ 7877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7878,
+ 7878
+ ],
+ "mapped",
+ [
+ 7879
+ ]
+ ],
+ [
+ [
+ 7879,
+ 7879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7880,
+ 7880
+ ],
+ "mapped",
+ [
+ 7881
+ ]
+ ],
+ [
+ [
+ 7881,
+ 7881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7882,
+ 7882
+ ],
+ "mapped",
+ [
+ 7883
+ ]
+ ],
+ [
+ [
+ 7883,
+ 7883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7884,
+ 7884
+ ],
+ "mapped",
+ [
+ 7885
+ ]
+ ],
+ [
+ [
+ 7885,
+ 7885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7886,
+ 7886
+ ],
+ "mapped",
+ [
+ 7887
+ ]
+ ],
+ [
+ [
+ 7887,
+ 7887
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7888,
+ 7888
+ ],
+ "mapped",
+ [
+ 7889
+ ]
+ ],
+ [
+ [
+ 7889,
+ 7889
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7890,
+ 7890
+ ],
+ "mapped",
+ [
+ 7891
+ ]
+ ],
+ [
+ [
+ 7891,
+ 7891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7892,
+ 7892
+ ],
+ "mapped",
+ [
+ 7893
+ ]
+ ],
+ [
+ [
+ 7893,
+ 7893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7894,
+ 7894
+ ],
+ "mapped",
+ [
+ 7895
+ ]
+ ],
+ [
+ [
+ 7895,
+ 7895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7896,
+ 7896
+ ],
+ "mapped",
+ [
+ 7897
+ ]
+ ],
+ [
+ [
+ 7897,
+ 7897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7898,
+ 7898
+ ],
+ "mapped",
+ [
+ 7899
+ ]
+ ],
+ [
+ [
+ 7899,
+ 7899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7900,
+ 7900
+ ],
+ "mapped",
+ [
+ 7901
+ ]
+ ],
+ [
+ [
+ 7901,
+ 7901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7902,
+ 7902
+ ],
+ "mapped",
+ [
+ 7903
+ ]
+ ],
+ [
+ [
+ 7903,
+ 7903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7904,
+ 7904
+ ],
+ "mapped",
+ [
+ 7905
+ ]
+ ],
+ [
+ [
+ 7905,
+ 7905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7906,
+ 7906
+ ],
+ "mapped",
+ [
+ 7907
+ ]
+ ],
+ [
+ [
+ 7907,
+ 7907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7908,
+ 7908
+ ],
+ "mapped",
+ [
+ 7909
+ ]
+ ],
+ [
+ [
+ 7909,
+ 7909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7910,
+ 7910
+ ],
+ "mapped",
+ [
+ 7911
+ ]
+ ],
+ [
+ [
+ 7911,
+ 7911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7912,
+ 7912
+ ],
+ "mapped",
+ [
+ 7913
+ ]
+ ],
+ [
+ [
+ 7913,
+ 7913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7914,
+ 7914
+ ],
+ "mapped",
+ [
+ 7915
+ ]
+ ],
+ [
+ [
+ 7915,
+ 7915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7916,
+ 7916
+ ],
+ "mapped",
+ [
+ 7917
+ ]
+ ],
+ [
+ [
+ 7917,
+ 7917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7918,
+ 7918
+ ],
+ "mapped",
+ [
+ 7919
+ ]
+ ],
+ [
+ [
+ 7919,
+ 7919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7920,
+ 7920
+ ],
+ "mapped",
+ [
+ 7921
+ ]
+ ],
+ [
+ [
+ 7921,
+ 7921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7922,
+ 7922
+ ],
+ "mapped",
+ [
+ 7923
+ ]
+ ],
+ [
+ [
+ 7923,
+ 7923
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7924,
+ 7924
+ ],
+ "mapped",
+ [
+ 7925
+ ]
+ ],
+ [
+ [
+ 7925,
+ 7925
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7926,
+ 7926
+ ],
+ "mapped",
+ [
+ 7927
+ ]
+ ],
+ [
+ [
+ 7927,
+ 7927
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7928,
+ 7928
+ ],
+ "mapped",
+ [
+ 7929
+ ]
+ ],
+ [
+ [
+ 7929,
+ 7929
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7930,
+ 7930
+ ],
+ "mapped",
+ [
+ 7931
+ ]
+ ],
+ [
+ [
+ 7931,
+ 7931
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7932,
+ 7932
+ ],
+ "mapped",
+ [
+ 7933
+ ]
+ ],
+ [
+ [
+ 7933,
+ 7933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7934,
+ 7934
+ ],
+ "mapped",
+ [
+ 7935
+ ]
+ ],
+ [
+ [
+ 7935,
+ 7935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7936,
+ 7943
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7944,
+ 7944
+ ],
+ "mapped",
+ [
+ 7936
+ ]
+ ],
+ [
+ [
+ 7945,
+ 7945
+ ],
+ "mapped",
+ [
+ 7937
+ ]
+ ],
+ [
+ [
+ 7946,
+ 7946
+ ],
+ "mapped",
+ [
+ 7938
+ ]
+ ],
+ [
+ [
+ 7947,
+ 7947
+ ],
+ "mapped",
+ [
+ 7939
+ ]
+ ],
+ [
+ [
+ 7948,
+ 7948
+ ],
+ "mapped",
+ [
+ 7940
+ ]
+ ],
+ [
+ [
+ 7949,
+ 7949
+ ],
+ "mapped",
+ [
+ 7941
+ ]
+ ],
+ [
+ [
+ 7950,
+ 7950
+ ],
+ "mapped",
+ [
+ 7942
+ ]
+ ],
+ [
+ [
+ 7951,
+ 7951
+ ],
+ "mapped",
+ [
+ 7943
+ ]
+ ],
+ [
+ [
+ 7952,
+ 7957
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7958,
+ 7959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7960,
+ 7960
+ ],
+ "mapped",
+ [
+ 7952
+ ]
+ ],
+ [
+ [
+ 7961,
+ 7961
+ ],
+ "mapped",
+ [
+ 7953
+ ]
+ ],
+ [
+ [
+ 7962,
+ 7962
+ ],
+ "mapped",
+ [
+ 7954
+ ]
+ ],
+ [
+ [
+ 7963,
+ 7963
+ ],
+ "mapped",
+ [
+ 7955
+ ]
+ ],
+ [
+ [
+ 7964,
+ 7964
+ ],
+ "mapped",
+ [
+ 7956
+ ]
+ ],
+ [
+ [
+ 7965,
+ 7965
+ ],
+ "mapped",
+ [
+ 7957
+ ]
+ ],
+ [
+ [
+ 7966,
+ 7967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 7968,
+ 7975
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7976,
+ 7976
+ ],
+ "mapped",
+ [
+ 7968
+ ]
+ ],
+ [
+ [
+ 7977,
+ 7977
+ ],
+ "mapped",
+ [
+ 7969
+ ]
+ ],
+ [
+ [
+ 7978,
+ 7978
+ ],
+ "mapped",
+ [
+ 7970
+ ]
+ ],
+ [
+ [
+ 7979,
+ 7979
+ ],
+ "mapped",
+ [
+ 7971
+ ]
+ ],
+ [
+ [
+ 7980,
+ 7980
+ ],
+ "mapped",
+ [
+ 7972
+ ]
+ ],
+ [
+ [
+ 7981,
+ 7981
+ ],
+ "mapped",
+ [
+ 7973
+ ]
+ ],
+ [
+ [
+ 7982,
+ 7982
+ ],
+ "mapped",
+ [
+ 7974
+ ]
+ ],
+ [
+ [
+ 7983,
+ 7983
+ ],
+ "mapped",
+ [
+ 7975
+ ]
+ ],
+ [
+ [
+ 7984,
+ 7991
+ ],
+ "valid"
+ ],
+ [
+ [
+ 7992,
+ 7992
+ ],
+ "mapped",
+ [
+ 7984
+ ]
+ ],
+ [
+ [
+ 7993,
+ 7993
+ ],
+ "mapped",
+ [
+ 7985
+ ]
+ ],
+ [
+ [
+ 7994,
+ 7994
+ ],
+ "mapped",
+ [
+ 7986
+ ]
+ ],
+ [
+ [
+ 7995,
+ 7995
+ ],
+ "mapped",
+ [
+ 7987
+ ]
+ ],
+ [
+ [
+ 7996,
+ 7996
+ ],
+ "mapped",
+ [
+ 7988
+ ]
+ ],
+ [
+ [
+ 7997,
+ 7997
+ ],
+ "mapped",
+ [
+ 7989
+ ]
+ ],
+ [
+ [
+ 7998,
+ 7998
+ ],
+ "mapped",
+ [
+ 7990
+ ]
+ ],
+ [
+ [
+ 7999,
+ 7999
+ ],
+ "mapped",
+ [
+ 7991
+ ]
+ ],
+ [
+ [
+ 8000,
+ 8005
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8006,
+ 8007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8008,
+ 8008
+ ],
+ "mapped",
+ [
+ 8000
+ ]
+ ],
+ [
+ [
+ 8009,
+ 8009
+ ],
+ "mapped",
+ [
+ 8001
+ ]
+ ],
+ [
+ [
+ 8010,
+ 8010
+ ],
+ "mapped",
+ [
+ 8002
+ ]
+ ],
+ [
+ [
+ 8011,
+ 8011
+ ],
+ "mapped",
+ [
+ 8003
+ ]
+ ],
+ [
+ [
+ 8012,
+ 8012
+ ],
+ "mapped",
+ [
+ 8004
+ ]
+ ],
+ [
+ [
+ 8013,
+ 8013
+ ],
+ "mapped",
+ [
+ 8005
+ ]
+ ],
+ [
+ [
+ 8014,
+ 8015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8016,
+ 8023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8024,
+ 8024
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8025,
+ 8025
+ ],
+ "mapped",
+ [
+ 8017
+ ]
+ ],
+ [
+ [
+ 8026,
+ 8026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8027,
+ 8027
+ ],
+ "mapped",
+ [
+ 8019
+ ]
+ ],
+ [
+ [
+ 8028,
+ 8028
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8029,
+ 8029
+ ],
+ "mapped",
+ [
+ 8021
+ ]
+ ],
+ [
+ [
+ 8030,
+ 8030
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8031,
+ 8031
+ ],
+ "mapped",
+ [
+ 8023
+ ]
+ ],
+ [
+ [
+ 8032,
+ 8039
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8040,
+ 8040
+ ],
+ "mapped",
+ [
+ 8032
+ ]
+ ],
+ [
+ [
+ 8041,
+ 8041
+ ],
+ "mapped",
+ [
+ 8033
+ ]
+ ],
+ [
+ [
+ 8042,
+ 8042
+ ],
+ "mapped",
+ [
+ 8034
+ ]
+ ],
+ [
+ [
+ 8043,
+ 8043
+ ],
+ "mapped",
+ [
+ 8035
+ ]
+ ],
+ [
+ [
+ 8044,
+ 8044
+ ],
+ "mapped",
+ [
+ 8036
+ ]
+ ],
+ [
+ [
+ 8045,
+ 8045
+ ],
+ "mapped",
+ [
+ 8037
+ ]
+ ],
+ [
+ [
+ 8046,
+ 8046
+ ],
+ "mapped",
+ [
+ 8038
+ ]
+ ],
+ [
+ [
+ 8047,
+ 8047
+ ],
+ "mapped",
+ [
+ 8039
+ ]
+ ],
+ [
+ [
+ 8048,
+ 8048
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8049,
+ 8049
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8050,
+ 8050
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8051,
+ 8051
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8052,
+ 8052
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8053,
+ 8053
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8054,
+ 8054
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8055,
+ 8055
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8056,
+ 8056
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8057,
+ 8057
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8058,
+ 8058
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8059,
+ 8059
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8060,
+ 8060
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8061,
+ 8061
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8062,
+ 8063
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8064,
+ 8064
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8065,
+ 8065
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8066,
+ 8066
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8067,
+ 8067
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8068,
+ 8068
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8069,
+ 8069
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8070,
+ 8070
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8071,
+ 8071
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8072,
+ 8072
+ ],
+ "mapped",
+ [
+ 7936,
+ 953
+ ]
+ ],
+ [
+ [
+ 8073,
+ 8073
+ ],
+ "mapped",
+ [
+ 7937,
+ 953
+ ]
+ ],
+ [
+ [
+ 8074,
+ 8074
+ ],
+ "mapped",
+ [
+ 7938,
+ 953
+ ]
+ ],
+ [
+ [
+ 8075,
+ 8075
+ ],
+ "mapped",
+ [
+ 7939,
+ 953
+ ]
+ ],
+ [
+ [
+ 8076,
+ 8076
+ ],
+ "mapped",
+ [
+ 7940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8077,
+ 8077
+ ],
+ "mapped",
+ [
+ 7941,
+ 953
+ ]
+ ],
+ [
+ [
+ 8078,
+ 8078
+ ],
+ "mapped",
+ [
+ 7942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8079,
+ 8079
+ ],
+ "mapped",
+ [
+ 7943,
+ 953
+ ]
+ ],
+ [
+ [
+ 8080,
+ 8080
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8081,
+ 8081
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8082,
+ 8082
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8083,
+ 8083
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8084,
+ 8084
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8085,
+ 8085
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8086,
+ 8086
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8087,
+ 8087
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8088,
+ 8088
+ ],
+ "mapped",
+ [
+ 7968,
+ 953
+ ]
+ ],
+ [
+ [
+ 8089,
+ 8089
+ ],
+ "mapped",
+ [
+ 7969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8090,
+ 8090
+ ],
+ "mapped",
+ [
+ 7970,
+ 953
+ ]
+ ],
+ [
+ [
+ 8091,
+ 8091
+ ],
+ "mapped",
+ [
+ 7971,
+ 953
+ ]
+ ],
+ [
+ [
+ 8092,
+ 8092
+ ],
+ "mapped",
+ [
+ 7972,
+ 953
+ ]
+ ],
+ [
+ [
+ 8093,
+ 8093
+ ],
+ "mapped",
+ [
+ 7973,
+ 953
+ ]
+ ],
+ [
+ [
+ 8094,
+ 8094
+ ],
+ "mapped",
+ [
+ 7974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8095,
+ 8095
+ ],
+ "mapped",
+ [
+ 7975,
+ 953
+ ]
+ ],
+ [
+ [
+ 8096,
+ 8096
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8097,
+ 8097
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8098,
+ 8098
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8099,
+ 8099
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8100,
+ 8100
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8101,
+ 8101
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8102,
+ 8102
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8103,
+ 8103
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8104,
+ 8104
+ ],
+ "mapped",
+ [
+ 8032,
+ 953
+ ]
+ ],
+ [
+ [
+ 8105,
+ 8105
+ ],
+ "mapped",
+ [
+ 8033,
+ 953
+ ]
+ ],
+ [
+ [
+ 8106,
+ 8106
+ ],
+ "mapped",
+ [
+ 8034,
+ 953
+ ]
+ ],
+ [
+ [
+ 8107,
+ 8107
+ ],
+ "mapped",
+ [
+ 8035,
+ 953
+ ]
+ ],
+ [
+ [
+ 8108,
+ 8108
+ ],
+ "mapped",
+ [
+ 8036,
+ 953
+ ]
+ ],
+ [
+ [
+ 8109,
+ 8109
+ ],
+ "mapped",
+ [
+ 8037,
+ 953
+ ]
+ ],
+ [
+ [
+ 8110,
+ 8110
+ ],
+ "mapped",
+ [
+ 8038,
+ 953
+ ]
+ ],
+ [
+ [
+ 8111,
+ 8111
+ ],
+ "mapped",
+ [
+ 8039,
+ 953
+ ]
+ ],
+ [
+ [
+ 8112,
+ 8113
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8114,
+ 8114
+ ],
+ "mapped",
+ [
+ 8048,
+ 953
+ ]
+ ],
+ [
+ [
+ 8115,
+ 8115
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8116,
+ 8116
+ ],
+ "mapped",
+ [
+ 940,
+ 953
+ ]
+ ],
+ [
+ [
+ 8117,
+ 8117
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8118,
+ 8118
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8119,
+ 8119
+ ],
+ "mapped",
+ [
+ 8118,
+ 953
+ ]
+ ],
+ [
+ [
+ 8120,
+ 8120
+ ],
+ "mapped",
+ [
+ 8112
+ ]
+ ],
+ [
+ [
+ 8121,
+ 8121
+ ],
+ "mapped",
+ [
+ 8113
+ ]
+ ],
+ [
+ [
+ 8122,
+ 8122
+ ],
+ "mapped",
+ [
+ 8048
+ ]
+ ],
+ [
+ [
+ 8123,
+ 8123
+ ],
+ "mapped",
+ [
+ 940
+ ]
+ ],
+ [
+ [
+ 8124,
+ 8124
+ ],
+ "mapped",
+ [
+ 945,
+ 953
+ ]
+ ],
+ [
+ [
+ 8125,
+ 8125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8126,
+ 8126
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 8127,
+ 8127
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787
+ ]
+ ],
+ [
+ [
+ 8128,
+ 8128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 834
+ ]
+ ],
+ [
+ [
+ 8129,
+ 8129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 834
+ ]
+ ],
+ [
+ [
+ 8130,
+ 8130
+ ],
+ "mapped",
+ [
+ 8052,
+ 953
+ ]
+ ],
+ [
+ [
+ 8131,
+ 8131
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8132,
+ 8132
+ ],
+ "mapped",
+ [
+ 942,
+ 953
+ ]
+ ],
+ [
+ [
+ 8133,
+ 8133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8134,
+ 8134
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8135,
+ 8135
+ ],
+ "mapped",
+ [
+ 8134,
+ 953
+ ]
+ ],
+ [
+ [
+ 8136,
+ 8136
+ ],
+ "mapped",
+ [
+ 8050
+ ]
+ ],
+ [
+ [
+ 8137,
+ 8137
+ ],
+ "mapped",
+ [
+ 941
+ ]
+ ],
+ [
+ [
+ 8138,
+ 8138
+ ],
+ "mapped",
+ [
+ 8052
+ ]
+ ],
+ [
+ [
+ 8139,
+ 8139
+ ],
+ "mapped",
+ [
+ 942
+ ]
+ ],
+ [
+ [
+ 8140,
+ 8140
+ ],
+ "mapped",
+ [
+ 951,
+ 953
+ ]
+ ],
+ [
+ [
+ 8141,
+ 8141
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 768
+ ]
+ ],
+ [
+ [
+ 8142,
+ 8142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 769
+ ]
+ ],
+ [
+ [
+ 8143,
+ 8143
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 787,
+ 834
+ ]
+ ],
+ [
+ [
+ 8144,
+ 8146
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8147,
+ 8147
+ ],
+ "mapped",
+ [
+ 912
+ ]
+ ],
+ [
+ [
+ 8148,
+ 8149
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8150,
+ 8151
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8152,
+ 8152
+ ],
+ "mapped",
+ [
+ 8144
+ ]
+ ],
+ [
+ [
+ 8153,
+ 8153
+ ],
+ "mapped",
+ [
+ 8145
+ ]
+ ],
+ [
+ [
+ 8154,
+ 8154
+ ],
+ "mapped",
+ [
+ 8054
+ ]
+ ],
+ [
+ [
+ 8155,
+ 8155
+ ],
+ "mapped",
+ [
+ 943
+ ]
+ ],
+ [
+ [
+ 8156,
+ 8156
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8157,
+ 8157
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 768
+ ]
+ ],
+ [
+ [
+ 8158,
+ 8158
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 769
+ ]
+ ],
+ [
+ [
+ 8159,
+ 8159
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788,
+ 834
+ ]
+ ],
+ [
+ [
+ 8160,
+ 8162
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8163,
+ 8163
+ ],
+ "mapped",
+ [
+ 944
+ ]
+ ],
+ [
+ [
+ 8164,
+ 8167
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8168,
+ 8168
+ ],
+ "mapped",
+ [
+ 8160
+ ]
+ ],
+ [
+ [
+ 8169,
+ 8169
+ ],
+ "mapped",
+ [
+ 8161
+ ]
+ ],
+ [
+ [
+ 8170,
+ 8170
+ ],
+ "mapped",
+ [
+ 8058
+ ]
+ ],
+ [
+ [
+ 8171,
+ 8171
+ ],
+ "mapped",
+ [
+ 973
+ ]
+ ],
+ [
+ [
+ 8172,
+ 8172
+ ],
+ "mapped",
+ [
+ 8165
+ ]
+ ],
+ [
+ [
+ 8173,
+ 8173
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 768
+ ]
+ ],
+ [
+ [
+ 8174,
+ 8174
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 776,
+ 769
+ ]
+ ],
+ [
+ [
+ 8175,
+ 8175
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 8176,
+ 8177
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8178,
+ 8178
+ ],
+ "mapped",
+ [
+ 8060,
+ 953
+ ]
+ ],
+ [
+ [
+ 8179,
+ 8179
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8180,
+ 8180
+ ],
+ "mapped",
+ [
+ 974,
+ 953
+ ]
+ ],
+ [
+ [
+ 8181,
+ 8181
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8182,
+ 8182
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8183,
+ 8183
+ ],
+ "mapped",
+ [
+ 8182,
+ 953
+ ]
+ ],
+ [
+ [
+ 8184,
+ 8184
+ ],
+ "mapped",
+ [
+ 8056
+ ]
+ ],
+ [
+ [
+ 8185,
+ 8185
+ ],
+ "mapped",
+ [
+ 972
+ ]
+ ],
+ [
+ [
+ 8186,
+ 8186
+ ],
+ "mapped",
+ [
+ 8060
+ ]
+ ],
+ [
+ [
+ 8187,
+ 8187
+ ],
+ "mapped",
+ [
+ 974
+ ]
+ ],
+ [
+ [
+ 8188,
+ 8188
+ ],
+ "mapped",
+ [
+ 969,
+ 953
+ ]
+ ],
+ [
+ [
+ 8189,
+ 8189
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 769
+ ]
+ ],
+ [
+ [
+ 8190,
+ 8190
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 788
+ ]
+ ],
+ [
+ [
+ 8191,
+ 8191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8192,
+ 8202
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8203,
+ 8203
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8204,
+ 8205
+ ],
+ "deviation",
+ [
+ ]
+ ],
+ [
+ [
+ 8206,
+ 8207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8208,
+ 8208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8209,
+ 8209
+ ],
+ "mapped",
+ [
+ 8208
+ ]
+ ],
+ [
+ [
+ 8210,
+ 8214
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8215,
+ 8215
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 819
+ ]
+ ],
+ [
+ [
+ 8216,
+ 8227
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8228,
+ 8230
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8231,
+ 8231
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8232,
+ 8238
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8239,
+ 8239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8240,
+ 8242
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8243,
+ 8243
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8244,
+ 8244
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8245,
+ 8245
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8246,
+ 8246
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8247,
+ 8247
+ ],
+ "mapped",
+ [
+ 8245,
+ 8245,
+ 8245
+ ]
+ ],
+ [
+ [
+ 8248,
+ 8251
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8252,
+ 8252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 33
+ ]
+ ],
+ [
+ [
+ 8253,
+ 8253
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8254,
+ 8254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 8255,
+ 8262
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8263,
+ 8263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 63
+ ]
+ ],
+ [
+ [
+ 8264,
+ 8264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63,
+ 33
+ ]
+ ],
+ [
+ [
+ 8265,
+ 8265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33,
+ 63
+ ]
+ ],
+ [
+ [
+ 8266,
+ 8269
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8270,
+ 8274
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8275,
+ 8276
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8277,
+ 8278
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8279,
+ 8279
+ ],
+ "mapped",
+ [
+ 8242,
+ 8242,
+ 8242,
+ 8242
+ ]
+ ],
+ [
+ [
+ 8280,
+ 8286
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8287,
+ 8287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 8288,
+ 8288
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8289,
+ 8291
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8292,
+ 8292
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 8293,
+ 8293
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8294,
+ 8297
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8298,
+ 8303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8304,
+ 8304
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8305,
+ 8305
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8306,
+ 8307
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8308,
+ 8308
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8309,
+ 8309
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8310,
+ 8310
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8311,
+ 8311
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8312,
+ 8312
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8313,
+ 8313
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8314,
+ 8314
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8315,
+ 8315
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8316,
+ 8316
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8317,
+ 8317
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8318,
+ 8318
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8319,
+ 8319
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8320,
+ 8320
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 8321,
+ 8321
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 8322,
+ 8322
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 8323,
+ 8323
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 8324,
+ 8324
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 8325,
+ 8325
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 8326,
+ 8326
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 8327,
+ 8327
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 8328,
+ 8328
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 8329,
+ 8329
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 8330,
+ 8330
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 8331,
+ 8331
+ ],
+ "mapped",
+ [
+ 8722
+ ]
+ ],
+ [
+ [
+ 8332,
+ 8332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 8333,
+ 8333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 8334,
+ 8334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 8335,
+ 8335
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8336,
+ 8336
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 8337,
+ 8337
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8338,
+ 8338
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8339,
+ 8339
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8340,
+ 8340
+ ],
+ "mapped",
+ [
+ 601
+ ]
+ ],
+ [
+ [
+ 8341,
+ 8341
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8342,
+ 8342
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8343,
+ 8343
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8344,
+ 8344
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8345,
+ 8345
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8346,
+ 8346
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8347,
+ 8347
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 8348,
+ 8348
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 8349,
+ 8351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8352,
+ 8359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8360,
+ 8360
+ ],
+ "mapped",
+ [
+ 114,
+ 115
+ ]
+ ],
+ [
+ [
+ 8361,
+ 8362
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8363,
+ 8363
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8364,
+ 8364
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8365,
+ 8367
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8368,
+ 8369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8370,
+ 8373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8374,
+ 8376
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8377,
+ 8377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8378,
+ 8378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8379,
+ 8381
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8382,
+ 8382
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8383,
+ 8399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8400,
+ 8417
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8418,
+ 8419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8420,
+ 8426
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8427,
+ 8427
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8428,
+ 8431
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8432,
+ 8432
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8433,
+ 8447
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8448,
+ 8448
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 99
+ ]
+ ],
+ [
+ [
+ 8449,
+ 8449
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 97,
+ 47,
+ 115
+ ]
+ ],
+ [
+ [
+ 8450,
+ 8450
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8451,
+ 8451
+ ],
+ "mapped",
+ [
+ 176,
+ 99
+ ]
+ ],
+ [
+ [
+ 8452,
+ 8452
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8453,
+ 8453
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 111
+ ]
+ ],
+ [
+ [
+ 8454,
+ 8454
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 99,
+ 47,
+ 117
+ ]
+ ],
+ [
+ [
+ 8455,
+ 8455
+ ],
+ "mapped",
+ [
+ 603
+ ]
+ ],
+ [
+ [
+ 8456,
+ 8456
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8457,
+ 8457
+ ],
+ "mapped",
+ [
+ 176,
+ 102
+ ]
+ ],
+ [
+ [
+ 8458,
+ 8458
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 8459,
+ 8462
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 8463,
+ 8463
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 8464,
+ 8465
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8466,
+ 8467
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8468,
+ 8468
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8469,
+ 8469
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 8470,
+ 8470
+ ],
+ "mapped",
+ [
+ 110,
+ 111
+ ]
+ ],
+ [
+ [
+ 8471,
+ 8472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8473,
+ 8473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 8474,
+ 8474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 8475,
+ 8477
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 8478,
+ 8479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8480,
+ 8480
+ ],
+ "mapped",
+ [
+ 115,
+ 109
+ ]
+ ],
+ [
+ [
+ 8481,
+ 8481
+ ],
+ "mapped",
+ [
+ 116,
+ 101,
+ 108
+ ]
+ ],
+ [
+ [
+ 8482,
+ 8482
+ ],
+ "mapped",
+ [
+ 116,
+ 109
+ ]
+ ],
+ [
+ [
+ 8483,
+ 8483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8484,
+ 8484
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8485,
+ 8485
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8486,
+ 8486
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 8487,
+ 8487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8488,
+ 8488
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 8489,
+ 8489
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8490,
+ 8490
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 8491,
+ 8491
+ ],
+ "mapped",
+ [
+ 229
+ ]
+ ],
+ [
+ [
+ 8492,
+ 8492
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 8493,
+ 8493
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8494,
+ 8494
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8495,
+ 8496
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8497,
+ 8497
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 8498,
+ 8498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8499,
+ 8499
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8500,
+ 8500
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 8501,
+ 8501
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 8502,
+ 8502
+ ],
+ "mapped",
+ [
+ 1489
+ ]
+ ],
+ [
+ [
+ 8503,
+ 8503
+ ],
+ "mapped",
+ [
+ 1490
+ ]
+ ],
+ [
+ [
+ 8504,
+ 8504
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 8505,
+ 8505
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8506,
+ 8506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8507,
+ 8507
+ ],
+ "mapped",
+ [
+ 102,
+ 97,
+ 120
+ ]
+ ],
+ [
+ [
+ 8508,
+ 8508
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8509,
+ 8510
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 8511,
+ 8511
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 8512,
+ 8512
+ ],
+ "mapped",
+ [
+ 8721
+ ]
+ ],
+ [
+ [
+ 8513,
+ 8516
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8517,
+ 8518
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8519,
+ 8519
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 8520,
+ 8520
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8521,
+ 8521
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 8522,
+ 8523
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8524,
+ 8524
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8525,
+ 8525
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8526,
+ 8526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8527,
+ 8527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8528,
+ 8528
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 55
+ ]
+ ],
+ [
+ [
+ 8529,
+ 8529
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 57
+ ]
+ ],
+ [
+ [
+ 8530,
+ 8530
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 8531,
+ 8531
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8532,
+ 8532
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8533,
+ 8533
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8534,
+ 8534
+ ],
+ "mapped",
+ [
+ 50,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8535,
+ 8535
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8536,
+ 8536
+ ],
+ "mapped",
+ [
+ 52,
+ 8260,
+ 53
+ ]
+ ],
+ [
+ [
+ 8537,
+ 8537
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8538,
+ 8538
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 54
+ ]
+ ],
+ [
+ [
+ 8539,
+ 8539
+ ],
+ "mapped",
+ [
+ 49,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8540,
+ 8540
+ ],
+ "mapped",
+ [
+ 51,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8541,
+ 8541
+ ],
+ "mapped",
+ [
+ 53,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8542,
+ 8542
+ ],
+ "mapped",
+ [
+ 55,
+ 8260,
+ 56
+ ]
+ ],
+ [
+ [
+ 8543,
+ 8543
+ ],
+ "mapped",
+ [
+ 49,
+ 8260
+ ]
+ ],
+ [
+ [
+ 8544,
+ 8544
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8545,
+ 8545
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8546,
+ 8546
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8547,
+ 8547
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8548,
+ 8548
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8549,
+ 8549
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8550,
+ 8550
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8551,
+ 8551
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8552,
+ 8552
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8553,
+ 8553
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8554,
+ 8554
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8555,
+ 8555
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8556,
+ 8556
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8557,
+ 8557
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8558,
+ 8558
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8559,
+ 8559
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8560,
+ 8560
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 8561,
+ 8561
+ ],
+ "mapped",
+ [
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8562,
+ 8562
+ ],
+ "mapped",
+ [
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8563,
+ 8563
+ ],
+ "mapped",
+ [
+ 105,
+ 118
+ ]
+ ],
+ [
+ [
+ 8564,
+ 8564
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 8565,
+ 8565
+ ],
+ "mapped",
+ [
+ 118,
+ 105
+ ]
+ ],
+ [
+ [
+ 8566,
+ 8566
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8567,
+ 8567
+ ],
+ "mapped",
+ [
+ 118,
+ 105,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8568,
+ 8568
+ ],
+ "mapped",
+ [
+ 105,
+ 120
+ ]
+ ],
+ [
+ [
+ 8569,
+ 8569
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 8570,
+ 8570
+ ],
+ "mapped",
+ [
+ 120,
+ 105
+ ]
+ ],
+ [
+ [
+ 8571,
+ 8571
+ ],
+ "mapped",
+ [
+ 120,
+ 105,
+ 105
+ ]
+ ],
+ [
+ [
+ 8572,
+ 8572
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 8573,
+ 8573
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 8574,
+ 8574
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 8575,
+ 8575
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 8576,
+ 8578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8579,
+ 8579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8580,
+ 8580
+ ],
+ "valid"
+ ],
+ [
+ [
+ 8581,
+ 8584
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8585,
+ 8585
+ ],
+ "mapped",
+ [
+ 48,
+ 8260,
+ 51
+ ]
+ ],
+ [
+ [
+ 8586,
+ 8587
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8588,
+ 8591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 8592,
+ 8682
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8683,
+ 8691
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8692,
+ 8703
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8704,
+ 8747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8748,
+ 8748
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8749,
+ 8749
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 8750,
+ 8750
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8751,
+ 8751
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8752,
+ 8752
+ ],
+ "mapped",
+ [
+ 8750,
+ 8750,
+ 8750
+ ]
+ ],
+ [
+ [
+ 8753,
+ 8799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8800,
+ 8800
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8801,
+ 8813
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8814,
+ 8815
+ ],
+ "disallowed_STD3_valid"
+ ],
+ [
+ [
+ 8816,
+ 8945
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8946,
+ 8959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8960,
+ 8960
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8961,
+ 8961
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 8962,
+ 9000
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9001,
+ 9001
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 9002,
+ 9002
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 9003,
+ 9082
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9083,
+ 9083
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9084,
+ 9084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9085,
+ 9114
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9115,
+ 9166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9167,
+ 9168
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9169,
+ 9179
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9180,
+ 9191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9192,
+ 9192
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9193,
+ 9203
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9204,
+ 9210
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9211,
+ 9215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9216,
+ 9252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9253,
+ 9254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9255,
+ 9279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9280,
+ 9290
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9291,
+ 9311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9312,
+ 9312
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 9313,
+ 9313
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 9314,
+ 9314
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 9315,
+ 9315
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 9316,
+ 9316
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 9317,
+ 9317
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 9318,
+ 9318
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 9319,
+ 9319
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 9320,
+ 9320
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 9321,
+ 9321
+ ],
+ "mapped",
+ [
+ 49,
+ 48
+ ]
+ ],
+ [
+ [
+ 9322,
+ 9322
+ ],
+ "mapped",
+ [
+ 49,
+ 49
+ ]
+ ],
+ [
+ [
+ 9323,
+ 9323
+ ],
+ "mapped",
+ [
+ 49,
+ 50
+ ]
+ ],
+ [
+ [
+ 9324,
+ 9324
+ ],
+ "mapped",
+ [
+ 49,
+ 51
+ ]
+ ],
+ [
+ [
+ 9325,
+ 9325
+ ],
+ "mapped",
+ [
+ 49,
+ 52
+ ]
+ ],
+ [
+ [
+ 9326,
+ 9326
+ ],
+ "mapped",
+ [
+ 49,
+ 53
+ ]
+ ],
+ [
+ [
+ 9327,
+ 9327
+ ],
+ "mapped",
+ [
+ 49,
+ 54
+ ]
+ ],
+ [
+ [
+ 9328,
+ 9328
+ ],
+ "mapped",
+ [
+ 49,
+ 55
+ ]
+ ],
+ [
+ [
+ 9329,
+ 9329
+ ],
+ "mapped",
+ [
+ 49,
+ 56
+ ]
+ ],
+ [
+ [
+ 9330,
+ 9330
+ ],
+ "mapped",
+ [
+ 49,
+ 57
+ ]
+ ],
+ [
+ [
+ 9331,
+ 9331
+ ],
+ "mapped",
+ [
+ 50,
+ 48
+ ]
+ ],
+ [
+ [
+ 9332,
+ 9332
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9333,
+ 9333
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9334,
+ 9334
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9335,
+ 9335
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9336,
+ 9336
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9337,
+ 9337
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9338,
+ 9338
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9339,
+ 9339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9340,
+ 9340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9341,
+ 9341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9342,
+ 9342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 49,
+ 41
+ ]
+ ],
+ [
+ [
+ 9343,
+ 9343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 50,
+ 41
+ ]
+ ],
+ [
+ [
+ 9344,
+ 9344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 51,
+ 41
+ ]
+ ],
+ [
+ [
+ 9345,
+ 9345
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 52,
+ 41
+ ]
+ ],
+ [
+ [
+ 9346,
+ 9346
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 53,
+ 41
+ ]
+ ],
+ [
+ [
+ 9347,
+ 9347
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 54,
+ 41
+ ]
+ ],
+ [
+ [
+ 9348,
+ 9348
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 55,
+ 41
+ ]
+ ],
+ [
+ [
+ 9349,
+ 9349
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 56,
+ 41
+ ]
+ ],
+ [
+ [
+ 9350,
+ 9350
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49,
+ 57,
+ 41
+ ]
+ ],
+ [
+ [
+ 9351,
+ 9351
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50,
+ 48,
+ 41
+ ]
+ ],
+ [
+ [
+ 9352,
+ 9371
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 9372,
+ 9372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 9373,
+ 9373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 9374,
+ 9374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 9375,
+ 9375
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 9376,
+ 9376
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 9377,
+ 9377
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 9378,
+ 9378
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 9379,
+ 9379
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 9380,
+ 9380
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 9381,
+ 9381
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 9382,
+ 9382
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 9383,
+ 9383
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 9384,
+ 9384
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 9385,
+ 9385
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 9386,
+ 9386
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 9387,
+ 9387
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 9388,
+ 9388
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 9389,
+ 9389
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 9390,
+ 9390
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 9391,
+ 9391
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 9392,
+ 9392
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 9393,
+ 9393
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 9394,
+ 9394
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 9395,
+ 9395
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 9396,
+ 9396
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 9397,
+ 9397
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 9398,
+ 9398
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9399,
+ 9399
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9400,
+ 9400
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9401,
+ 9401
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9402,
+ 9402
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9403,
+ 9403
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9404,
+ 9404
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9405,
+ 9405
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9406,
+ 9406
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9407,
+ 9407
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9408,
+ 9408
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9409,
+ 9409
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9410,
+ 9410
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9411,
+ 9411
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9412,
+ 9412
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9413,
+ 9413
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9414,
+ 9414
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9415,
+ 9415
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9416,
+ 9416
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9417,
+ 9417
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9418,
+ 9418
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9419,
+ 9419
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9420,
+ 9420
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9421,
+ 9421
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9422,
+ 9422
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9423,
+ 9423
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9424,
+ 9424
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 9425,
+ 9425
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 9426,
+ 9426
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 9427,
+ 9427
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 9428,
+ 9428
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 9429,
+ 9429
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 9430,
+ 9430
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 9431,
+ 9431
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 9432,
+ 9432
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 9433,
+ 9433
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 9434,
+ 9434
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 9435,
+ 9435
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 9436,
+ 9436
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 9437,
+ 9437
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 9438,
+ 9438
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 9439,
+ 9439
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 9440,
+ 9440
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 9441,
+ 9441
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 9442,
+ 9442
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 9443,
+ 9443
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 9444,
+ 9444
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 9445,
+ 9445
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 9446,
+ 9446
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 9447,
+ 9447
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 9448,
+ 9448
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 9449,
+ 9449
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 9450,
+ 9450
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 9451,
+ 9470
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9471,
+ 9471
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9472,
+ 9621
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9622,
+ 9631
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9632,
+ 9711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9712,
+ 9719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9720,
+ 9727
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9728,
+ 9747
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9748,
+ 9749
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9750,
+ 9751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9752,
+ 9752
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9753,
+ 9753
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9754,
+ 9839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9840,
+ 9841
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9842,
+ 9853
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9854,
+ 9855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9856,
+ 9865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9866,
+ 9873
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9874,
+ 9884
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9885,
+ 9885
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9886,
+ 9887
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9888,
+ 9889
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9890,
+ 9905
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9906,
+ 9906
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9907,
+ 9916
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9917,
+ 9919
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9920,
+ 9923
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9924,
+ 9933
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9934,
+ 9934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9935,
+ 9953
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9954,
+ 9954
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9955,
+ 9955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9956,
+ 9959
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9960,
+ 9983
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9984,
+ 9984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9985,
+ 9988
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9989,
+ 9989
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9990,
+ 9993
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9994,
+ 9995
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 9996,
+ 10023
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10024,
+ 10024
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10025,
+ 10059
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10060,
+ 10060
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10061,
+ 10061
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10062,
+ 10062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10063,
+ 10066
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10067,
+ 10069
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10070,
+ 10070
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10071,
+ 10071
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10072,
+ 10078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10079,
+ 10080
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10081,
+ 10087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10088,
+ 10101
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10102,
+ 10132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10133,
+ 10135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10136,
+ 10159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10160,
+ 10160
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10161,
+ 10174
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10175,
+ 10175
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10176,
+ 10182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10183,
+ 10186
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10187,
+ 10187
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10188,
+ 10188
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10189,
+ 10189
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10190,
+ 10191
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10192,
+ 10219
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10220,
+ 10223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10224,
+ 10239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10240,
+ 10495
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10496,
+ 10763
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10764,
+ 10764
+ ],
+ "mapped",
+ [
+ 8747,
+ 8747,
+ 8747,
+ 8747
+ ]
+ ],
+ [
+ [
+ 10765,
+ 10867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10868,
+ 10868
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58,
+ 58,
+ 61
+ ]
+ ],
+ [
+ [
+ 10869,
+ 10869
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10870,
+ 10870
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61,
+ 61,
+ 61
+ ]
+ ],
+ [
+ [
+ 10871,
+ 10971
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 10972,
+ 10972
+ ],
+ "mapped",
+ [
+ 10973,
+ 824
+ ]
+ ],
+ [
+ [
+ 10973,
+ 11007
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11008,
+ 11021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11022,
+ 11027
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11028,
+ 11034
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11035,
+ 11039
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11040,
+ 11043
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11044,
+ 11084
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11085,
+ 11087
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11088,
+ 11092
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11093,
+ 11097
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11098,
+ 11123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11124,
+ 11125
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11126,
+ 11157
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11158,
+ 11159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11160,
+ 11193
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11194,
+ 11196
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11197,
+ 11208
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11209,
+ 11209
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11210,
+ 11217
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11218,
+ 11243
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11244,
+ 11247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11248,
+ 11263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11264,
+ 11264
+ ],
+ "mapped",
+ [
+ 11312
+ ]
+ ],
+ [
+ [
+ 11265,
+ 11265
+ ],
+ "mapped",
+ [
+ 11313
+ ]
+ ],
+ [
+ [
+ 11266,
+ 11266
+ ],
+ "mapped",
+ [
+ 11314
+ ]
+ ],
+ [
+ [
+ 11267,
+ 11267
+ ],
+ "mapped",
+ [
+ 11315
+ ]
+ ],
+ [
+ [
+ 11268,
+ 11268
+ ],
+ "mapped",
+ [
+ 11316
+ ]
+ ],
+ [
+ [
+ 11269,
+ 11269
+ ],
+ "mapped",
+ [
+ 11317
+ ]
+ ],
+ [
+ [
+ 11270,
+ 11270
+ ],
+ "mapped",
+ [
+ 11318
+ ]
+ ],
+ [
+ [
+ 11271,
+ 11271
+ ],
+ "mapped",
+ [
+ 11319
+ ]
+ ],
+ [
+ [
+ 11272,
+ 11272
+ ],
+ "mapped",
+ [
+ 11320
+ ]
+ ],
+ [
+ [
+ 11273,
+ 11273
+ ],
+ "mapped",
+ [
+ 11321
+ ]
+ ],
+ [
+ [
+ 11274,
+ 11274
+ ],
+ "mapped",
+ [
+ 11322
+ ]
+ ],
+ [
+ [
+ 11275,
+ 11275
+ ],
+ "mapped",
+ [
+ 11323
+ ]
+ ],
+ [
+ [
+ 11276,
+ 11276
+ ],
+ "mapped",
+ [
+ 11324
+ ]
+ ],
+ [
+ [
+ 11277,
+ 11277
+ ],
+ "mapped",
+ [
+ 11325
+ ]
+ ],
+ [
+ [
+ 11278,
+ 11278
+ ],
+ "mapped",
+ [
+ 11326
+ ]
+ ],
+ [
+ [
+ 11279,
+ 11279
+ ],
+ "mapped",
+ [
+ 11327
+ ]
+ ],
+ [
+ [
+ 11280,
+ 11280
+ ],
+ "mapped",
+ [
+ 11328
+ ]
+ ],
+ [
+ [
+ 11281,
+ 11281
+ ],
+ "mapped",
+ [
+ 11329
+ ]
+ ],
+ [
+ [
+ 11282,
+ 11282
+ ],
+ "mapped",
+ [
+ 11330
+ ]
+ ],
+ [
+ [
+ 11283,
+ 11283
+ ],
+ "mapped",
+ [
+ 11331
+ ]
+ ],
+ [
+ [
+ 11284,
+ 11284
+ ],
+ "mapped",
+ [
+ 11332
+ ]
+ ],
+ [
+ [
+ 11285,
+ 11285
+ ],
+ "mapped",
+ [
+ 11333
+ ]
+ ],
+ [
+ [
+ 11286,
+ 11286
+ ],
+ "mapped",
+ [
+ 11334
+ ]
+ ],
+ [
+ [
+ 11287,
+ 11287
+ ],
+ "mapped",
+ [
+ 11335
+ ]
+ ],
+ [
+ [
+ 11288,
+ 11288
+ ],
+ "mapped",
+ [
+ 11336
+ ]
+ ],
+ [
+ [
+ 11289,
+ 11289
+ ],
+ "mapped",
+ [
+ 11337
+ ]
+ ],
+ [
+ [
+ 11290,
+ 11290
+ ],
+ "mapped",
+ [
+ 11338
+ ]
+ ],
+ [
+ [
+ 11291,
+ 11291
+ ],
+ "mapped",
+ [
+ 11339
+ ]
+ ],
+ [
+ [
+ 11292,
+ 11292
+ ],
+ "mapped",
+ [
+ 11340
+ ]
+ ],
+ [
+ [
+ 11293,
+ 11293
+ ],
+ "mapped",
+ [
+ 11341
+ ]
+ ],
+ [
+ [
+ 11294,
+ 11294
+ ],
+ "mapped",
+ [
+ 11342
+ ]
+ ],
+ [
+ [
+ 11295,
+ 11295
+ ],
+ "mapped",
+ [
+ 11343
+ ]
+ ],
+ [
+ [
+ 11296,
+ 11296
+ ],
+ "mapped",
+ [
+ 11344
+ ]
+ ],
+ [
+ [
+ 11297,
+ 11297
+ ],
+ "mapped",
+ [
+ 11345
+ ]
+ ],
+ [
+ [
+ 11298,
+ 11298
+ ],
+ "mapped",
+ [
+ 11346
+ ]
+ ],
+ [
+ [
+ 11299,
+ 11299
+ ],
+ "mapped",
+ [
+ 11347
+ ]
+ ],
+ [
+ [
+ 11300,
+ 11300
+ ],
+ "mapped",
+ [
+ 11348
+ ]
+ ],
+ [
+ [
+ 11301,
+ 11301
+ ],
+ "mapped",
+ [
+ 11349
+ ]
+ ],
+ [
+ [
+ 11302,
+ 11302
+ ],
+ "mapped",
+ [
+ 11350
+ ]
+ ],
+ [
+ [
+ 11303,
+ 11303
+ ],
+ "mapped",
+ [
+ 11351
+ ]
+ ],
+ [
+ [
+ 11304,
+ 11304
+ ],
+ "mapped",
+ [
+ 11352
+ ]
+ ],
+ [
+ [
+ 11305,
+ 11305
+ ],
+ "mapped",
+ [
+ 11353
+ ]
+ ],
+ [
+ [
+ 11306,
+ 11306
+ ],
+ "mapped",
+ [
+ 11354
+ ]
+ ],
+ [
+ [
+ 11307,
+ 11307
+ ],
+ "mapped",
+ [
+ 11355
+ ]
+ ],
+ [
+ [
+ 11308,
+ 11308
+ ],
+ "mapped",
+ [
+ 11356
+ ]
+ ],
+ [
+ [
+ 11309,
+ 11309
+ ],
+ "mapped",
+ [
+ 11357
+ ]
+ ],
+ [
+ [
+ 11310,
+ 11310
+ ],
+ "mapped",
+ [
+ 11358
+ ]
+ ],
+ [
+ [
+ 11311,
+ 11311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11312,
+ 11358
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11359,
+ 11359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11360,
+ 11360
+ ],
+ "mapped",
+ [
+ 11361
+ ]
+ ],
+ [
+ [
+ 11361,
+ 11361
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11362,
+ 11362
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 11363,
+ 11363
+ ],
+ "mapped",
+ [
+ 7549
+ ]
+ ],
+ [
+ [
+ 11364,
+ 11364
+ ],
+ "mapped",
+ [
+ 637
+ ]
+ ],
+ [
+ [
+ 11365,
+ 11366
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11367,
+ 11367
+ ],
+ "mapped",
+ [
+ 11368
+ ]
+ ],
+ [
+ [
+ 11368,
+ 11368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11369,
+ 11369
+ ],
+ "mapped",
+ [
+ 11370
+ ]
+ ],
+ [
+ [
+ 11370,
+ 11370
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11371,
+ 11371
+ ],
+ "mapped",
+ [
+ 11372
+ ]
+ ],
+ [
+ [
+ 11372,
+ 11372
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11373,
+ 11373
+ ],
+ "mapped",
+ [
+ 593
+ ]
+ ],
+ [
+ [
+ 11374,
+ 11374
+ ],
+ "mapped",
+ [
+ 625
+ ]
+ ],
+ [
+ [
+ 11375,
+ 11375
+ ],
+ "mapped",
+ [
+ 592
+ ]
+ ],
+ [
+ [
+ 11376,
+ 11376
+ ],
+ "mapped",
+ [
+ 594
+ ]
+ ],
+ [
+ [
+ 11377,
+ 11377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11378,
+ 11378
+ ],
+ "mapped",
+ [
+ 11379
+ ]
+ ],
+ [
+ [
+ 11379,
+ 11379
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11380,
+ 11380
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11381,
+ 11381
+ ],
+ "mapped",
+ [
+ 11382
+ ]
+ ],
+ [
+ [
+ 11382,
+ 11383
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11384,
+ 11387
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11388,
+ 11388
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 11389,
+ 11389
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 11390,
+ 11390
+ ],
+ "mapped",
+ [
+ 575
+ ]
+ ],
+ [
+ [
+ 11391,
+ 11391
+ ],
+ "mapped",
+ [
+ 576
+ ]
+ ],
+ [
+ [
+ 11392,
+ 11392
+ ],
+ "mapped",
+ [
+ 11393
+ ]
+ ],
+ [
+ [
+ 11393,
+ 11393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11394,
+ 11394
+ ],
+ "mapped",
+ [
+ 11395
+ ]
+ ],
+ [
+ [
+ 11395,
+ 11395
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11396,
+ 11396
+ ],
+ "mapped",
+ [
+ 11397
+ ]
+ ],
+ [
+ [
+ 11397,
+ 11397
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11398,
+ 11398
+ ],
+ "mapped",
+ [
+ 11399
+ ]
+ ],
+ [
+ [
+ 11399,
+ 11399
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11400,
+ 11400
+ ],
+ "mapped",
+ [
+ 11401
+ ]
+ ],
+ [
+ [
+ 11401,
+ 11401
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11402,
+ 11402
+ ],
+ "mapped",
+ [
+ 11403
+ ]
+ ],
+ [
+ [
+ 11403,
+ 11403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11404,
+ 11404
+ ],
+ "mapped",
+ [
+ 11405
+ ]
+ ],
+ [
+ [
+ 11405,
+ 11405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11406,
+ 11406
+ ],
+ "mapped",
+ [
+ 11407
+ ]
+ ],
+ [
+ [
+ 11407,
+ 11407
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11408,
+ 11408
+ ],
+ "mapped",
+ [
+ 11409
+ ]
+ ],
+ [
+ [
+ 11409,
+ 11409
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11410,
+ 11410
+ ],
+ "mapped",
+ [
+ 11411
+ ]
+ ],
+ [
+ [
+ 11411,
+ 11411
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11412,
+ 11412
+ ],
+ "mapped",
+ [
+ 11413
+ ]
+ ],
+ [
+ [
+ 11413,
+ 11413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11414,
+ 11414
+ ],
+ "mapped",
+ [
+ 11415
+ ]
+ ],
+ [
+ [
+ 11415,
+ 11415
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11416,
+ 11416
+ ],
+ "mapped",
+ [
+ 11417
+ ]
+ ],
+ [
+ [
+ 11417,
+ 11417
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11418,
+ 11418
+ ],
+ "mapped",
+ [
+ 11419
+ ]
+ ],
+ [
+ [
+ 11419,
+ 11419
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11420,
+ 11420
+ ],
+ "mapped",
+ [
+ 11421
+ ]
+ ],
+ [
+ [
+ 11421,
+ 11421
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11422,
+ 11422
+ ],
+ "mapped",
+ [
+ 11423
+ ]
+ ],
+ [
+ [
+ 11423,
+ 11423
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11424,
+ 11424
+ ],
+ "mapped",
+ [
+ 11425
+ ]
+ ],
+ [
+ [
+ 11425,
+ 11425
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11426,
+ 11426
+ ],
+ "mapped",
+ [
+ 11427
+ ]
+ ],
+ [
+ [
+ 11427,
+ 11427
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11428,
+ 11428
+ ],
+ "mapped",
+ [
+ 11429
+ ]
+ ],
+ [
+ [
+ 11429,
+ 11429
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11430,
+ 11430
+ ],
+ "mapped",
+ [
+ 11431
+ ]
+ ],
+ [
+ [
+ 11431,
+ 11431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11432,
+ 11432
+ ],
+ "mapped",
+ [
+ 11433
+ ]
+ ],
+ [
+ [
+ 11433,
+ 11433
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11434,
+ 11434
+ ],
+ "mapped",
+ [
+ 11435
+ ]
+ ],
+ [
+ [
+ 11435,
+ 11435
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11436,
+ 11436
+ ],
+ "mapped",
+ [
+ 11437
+ ]
+ ],
+ [
+ [
+ 11437,
+ 11437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11438,
+ 11438
+ ],
+ "mapped",
+ [
+ 11439
+ ]
+ ],
+ [
+ [
+ 11439,
+ 11439
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11440,
+ 11440
+ ],
+ "mapped",
+ [
+ 11441
+ ]
+ ],
+ [
+ [
+ 11441,
+ 11441
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11442,
+ 11442
+ ],
+ "mapped",
+ [
+ 11443
+ ]
+ ],
+ [
+ [
+ 11443,
+ 11443
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11444,
+ 11444
+ ],
+ "mapped",
+ [
+ 11445
+ ]
+ ],
+ [
+ [
+ 11445,
+ 11445
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11446,
+ 11446
+ ],
+ "mapped",
+ [
+ 11447
+ ]
+ ],
+ [
+ [
+ 11447,
+ 11447
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11448,
+ 11448
+ ],
+ "mapped",
+ [
+ 11449
+ ]
+ ],
+ [
+ [
+ 11449,
+ 11449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11450,
+ 11450
+ ],
+ "mapped",
+ [
+ 11451
+ ]
+ ],
+ [
+ [
+ 11451,
+ 11451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11452,
+ 11452
+ ],
+ "mapped",
+ [
+ 11453
+ ]
+ ],
+ [
+ [
+ 11453,
+ 11453
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11454,
+ 11454
+ ],
+ "mapped",
+ [
+ 11455
+ ]
+ ],
+ [
+ [
+ 11455,
+ 11455
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11456,
+ 11456
+ ],
+ "mapped",
+ [
+ 11457
+ ]
+ ],
+ [
+ [
+ 11457,
+ 11457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11458,
+ 11458
+ ],
+ "mapped",
+ [
+ 11459
+ ]
+ ],
+ [
+ [
+ 11459,
+ 11459
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11460,
+ 11460
+ ],
+ "mapped",
+ [
+ 11461
+ ]
+ ],
+ [
+ [
+ 11461,
+ 11461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11462,
+ 11462
+ ],
+ "mapped",
+ [
+ 11463
+ ]
+ ],
+ [
+ [
+ 11463,
+ 11463
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11464,
+ 11464
+ ],
+ "mapped",
+ [
+ 11465
+ ]
+ ],
+ [
+ [
+ 11465,
+ 11465
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11466,
+ 11466
+ ],
+ "mapped",
+ [
+ 11467
+ ]
+ ],
+ [
+ [
+ 11467,
+ 11467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11468,
+ 11468
+ ],
+ "mapped",
+ [
+ 11469
+ ]
+ ],
+ [
+ [
+ 11469,
+ 11469
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11470,
+ 11470
+ ],
+ "mapped",
+ [
+ 11471
+ ]
+ ],
+ [
+ [
+ 11471,
+ 11471
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11472,
+ 11472
+ ],
+ "mapped",
+ [
+ 11473
+ ]
+ ],
+ [
+ [
+ 11473,
+ 11473
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11474,
+ 11474
+ ],
+ "mapped",
+ [
+ 11475
+ ]
+ ],
+ [
+ [
+ 11475,
+ 11475
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11476,
+ 11476
+ ],
+ "mapped",
+ [
+ 11477
+ ]
+ ],
+ [
+ [
+ 11477,
+ 11477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11478,
+ 11478
+ ],
+ "mapped",
+ [
+ 11479
+ ]
+ ],
+ [
+ [
+ 11479,
+ 11479
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11480,
+ 11480
+ ],
+ "mapped",
+ [
+ 11481
+ ]
+ ],
+ [
+ [
+ 11481,
+ 11481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11482,
+ 11482
+ ],
+ "mapped",
+ [
+ 11483
+ ]
+ ],
+ [
+ [
+ 11483,
+ 11483
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11484,
+ 11484
+ ],
+ "mapped",
+ [
+ 11485
+ ]
+ ],
+ [
+ [
+ 11485,
+ 11485
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11486,
+ 11486
+ ],
+ "mapped",
+ [
+ 11487
+ ]
+ ],
+ [
+ [
+ 11487,
+ 11487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11488,
+ 11488
+ ],
+ "mapped",
+ [
+ 11489
+ ]
+ ],
+ [
+ [
+ 11489,
+ 11489
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11490,
+ 11490
+ ],
+ "mapped",
+ [
+ 11491
+ ]
+ ],
+ [
+ [
+ 11491,
+ 11492
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11493,
+ 11498
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11499,
+ 11499
+ ],
+ "mapped",
+ [
+ 11500
+ ]
+ ],
+ [
+ [
+ 11500,
+ 11500
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11501,
+ 11501
+ ],
+ "mapped",
+ [
+ 11502
+ ]
+ ],
+ [
+ [
+ 11502,
+ 11505
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11506,
+ 11506
+ ],
+ "mapped",
+ [
+ 11507
+ ]
+ ],
+ [
+ [
+ 11507,
+ 11507
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11508,
+ 11512
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11513,
+ 11519
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11520,
+ 11557
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11558,
+ 11558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11559,
+ 11559
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11560,
+ 11564
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11565,
+ 11565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11566,
+ 11567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11568,
+ 11621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11622,
+ 11623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11624,
+ 11630
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11631,
+ 11631
+ ],
+ "mapped",
+ [
+ 11617
+ ]
+ ],
+ [
+ [
+ 11632,
+ 11632
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11633,
+ 11646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11647,
+ 11647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11648,
+ 11670
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11671,
+ 11679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11680,
+ 11686
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11687,
+ 11687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11688,
+ 11694
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11695,
+ 11695
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11696,
+ 11702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11703,
+ 11703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11704,
+ 11710
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11711,
+ 11711
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11712,
+ 11718
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11719,
+ 11719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11720,
+ 11726
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11727,
+ 11727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11728,
+ 11734
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11735,
+ 11735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11736,
+ 11742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11743,
+ 11743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11744,
+ 11775
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11776,
+ 11799
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11800,
+ 11803
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11804,
+ 11805
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11806,
+ 11822
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11823,
+ 11823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 11824,
+ 11824
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11825,
+ 11825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11826,
+ 11835
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11836,
+ 11842
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11843,
+ 11903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11904,
+ 11929
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11930,
+ 11930
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 11931,
+ 11934
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 11935,
+ 11935
+ ],
+ "mapped",
+ [
+ 27597
+ ]
+ ],
+ [
+ [
+ 11936,
+ 12018
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12019,
+ 12019
+ ],
+ "mapped",
+ [
+ 40863
+ ]
+ ],
+ [
+ [
+ 12020,
+ 12031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12032,
+ 12032
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12033,
+ 12033
+ ],
+ "mapped",
+ [
+ 20008
+ ]
+ ],
+ [
+ [
+ 12034,
+ 12034
+ ],
+ "mapped",
+ [
+ 20022
+ ]
+ ],
+ [
+ [
+ 12035,
+ 12035
+ ],
+ "mapped",
+ [
+ 20031
+ ]
+ ],
+ [
+ [
+ 12036,
+ 12036
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12037,
+ 12037
+ ],
+ "mapped",
+ [
+ 20101
+ ]
+ ],
+ [
+ [
+ 12038,
+ 12038
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12039,
+ 12039
+ ],
+ "mapped",
+ [
+ 20128
+ ]
+ ],
+ [
+ [
+ 12040,
+ 12040
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12041,
+ 12041
+ ],
+ "mapped",
+ [
+ 20799
+ ]
+ ],
+ [
+ [
+ 12042,
+ 12042
+ ],
+ "mapped",
+ [
+ 20837
+ ]
+ ],
+ [
+ [
+ 12043,
+ 12043
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12044,
+ 12044
+ ],
+ "mapped",
+ [
+ 20866
+ ]
+ ],
+ [
+ [
+ 12045,
+ 12045
+ ],
+ "mapped",
+ [
+ 20886
+ ]
+ ],
+ [
+ [
+ 12046,
+ 12046
+ ],
+ "mapped",
+ [
+ 20907
+ ]
+ ],
+ [
+ [
+ 12047,
+ 12047
+ ],
+ "mapped",
+ [
+ 20960
+ ]
+ ],
+ [
+ [
+ 12048,
+ 12048
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 12049,
+ 12049
+ ],
+ "mapped",
+ [
+ 20992
+ ]
+ ],
+ [
+ [
+ 12050,
+ 12050
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 12051,
+ 12051
+ ],
+ "mapped",
+ [
+ 21241
+ ]
+ ],
+ [
+ [
+ 12052,
+ 12052
+ ],
+ "mapped",
+ [
+ 21269
+ ]
+ ],
+ [
+ [
+ 12053,
+ 12053
+ ],
+ "mapped",
+ [
+ 21274
+ ]
+ ],
+ [
+ [
+ 12054,
+ 12054
+ ],
+ "mapped",
+ [
+ 21304
+ ]
+ ],
+ [
+ [
+ 12055,
+ 12055
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12056,
+ 12056
+ ],
+ "mapped",
+ [
+ 21340
+ ]
+ ],
+ [
+ [
+ 12057,
+ 12057
+ ],
+ "mapped",
+ [
+ 21353
+ ]
+ ],
+ [
+ [
+ 12058,
+ 12058
+ ],
+ "mapped",
+ [
+ 21378
+ ]
+ ],
+ [
+ [
+ 12059,
+ 12059
+ ],
+ "mapped",
+ [
+ 21430
+ ]
+ ],
+ [
+ [
+ 12060,
+ 12060
+ ],
+ "mapped",
+ [
+ 21448
+ ]
+ ],
+ [
+ [
+ 12061,
+ 12061
+ ],
+ "mapped",
+ [
+ 21475
+ ]
+ ],
+ [
+ [
+ 12062,
+ 12062
+ ],
+ "mapped",
+ [
+ 22231
+ ]
+ ],
+ [
+ [
+ 12063,
+ 12063
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12064,
+ 12064
+ ],
+ "mapped",
+ [
+ 22763
+ ]
+ ],
+ [
+ [
+ 12065,
+ 12065
+ ],
+ "mapped",
+ [
+ 22786
+ ]
+ ],
+ [
+ [
+ 12066,
+ 12066
+ ],
+ "mapped",
+ [
+ 22794
+ ]
+ ],
+ [
+ [
+ 12067,
+ 12067
+ ],
+ "mapped",
+ [
+ 22805
+ ]
+ ],
+ [
+ [
+ 12068,
+ 12068
+ ],
+ "mapped",
+ [
+ 22823
+ ]
+ ],
+ [
+ [
+ 12069,
+ 12069
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12070,
+ 12070
+ ],
+ "mapped",
+ [
+ 23376
+ ]
+ ],
+ [
+ [
+ 12071,
+ 12071
+ ],
+ "mapped",
+ [
+ 23424
+ ]
+ ],
+ [
+ [
+ 12072,
+ 12072
+ ],
+ "mapped",
+ [
+ 23544
+ ]
+ ],
+ [
+ [
+ 12073,
+ 12073
+ ],
+ "mapped",
+ [
+ 23567
+ ]
+ ],
+ [
+ [
+ 12074,
+ 12074
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 12075,
+ 12075
+ ],
+ "mapped",
+ [
+ 23608
+ ]
+ ],
+ [
+ [
+ 12076,
+ 12076
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 12077,
+ 12077
+ ],
+ "mapped",
+ [
+ 23665
+ ]
+ ],
+ [
+ [
+ 12078,
+ 12078
+ ],
+ "mapped",
+ [
+ 24027
+ ]
+ ],
+ [
+ [
+ 12079,
+ 12079
+ ],
+ "mapped",
+ [
+ 24037
+ ]
+ ],
+ [
+ [
+ 12080,
+ 12080
+ ],
+ "mapped",
+ [
+ 24049
+ ]
+ ],
+ [
+ [
+ 12081,
+ 12081
+ ],
+ "mapped",
+ [
+ 24062
+ ]
+ ],
+ [
+ [
+ 12082,
+ 12082
+ ],
+ "mapped",
+ [
+ 24178
+ ]
+ ],
+ [
+ [
+ 12083,
+ 12083
+ ],
+ "mapped",
+ [
+ 24186
+ ]
+ ],
+ [
+ [
+ 12084,
+ 12084
+ ],
+ "mapped",
+ [
+ 24191
+ ]
+ ],
+ [
+ [
+ 12085,
+ 12085
+ ],
+ "mapped",
+ [
+ 24308
+ ]
+ ],
+ [
+ [
+ 12086,
+ 12086
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 12087,
+ 12087
+ ],
+ "mapped",
+ [
+ 24331
+ ]
+ ],
+ [
+ [
+ 12088,
+ 12088
+ ],
+ "mapped",
+ [
+ 24339
+ ]
+ ],
+ [
+ [
+ 12089,
+ 12089
+ ],
+ "mapped",
+ [
+ 24400
+ ]
+ ],
+ [
+ [
+ 12090,
+ 12090
+ ],
+ "mapped",
+ [
+ 24417
+ ]
+ ],
+ [
+ [
+ 12091,
+ 12091
+ ],
+ "mapped",
+ [
+ 24435
+ ]
+ ],
+ [
+ [
+ 12092,
+ 12092
+ ],
+ "mapped",
+ [
+ 24515
+ ]
+ ],
+ [
+ [
+ 12093,
+ 12093
+ ],
+ "mapped",
+ [
+ 25096
+ ]
+ ],
+ [
+ [
+ 12094,
+ 12094
+ ],
+ "mapped",
+ [
+ 25142
+ ]
+ ],
+ [
+ [
+ 12095,
+ 12095
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 12096,
+ 12096
+ ],
+ "mapped",
+ [
+ 25903
+ ]
+ ],
+ [
+ [
+ 12097,
+ 12097
+ ],
+ "mapped",
+ [
+ 25908
+ ]
+ ],
+ [
+ [
+ 12098,
+ 12098
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12099,
+ 12099
+ ],
+ "mapped",
+ [
+ 26007
+ ]
+ ],
+ [
+ [
+ 12100,
+ 12100
+ ],
+ "mapped",
+ [
+ 26020
+ ]
+ ],
+ [
+ [
+ 12101,
+ 12101
+ ],
+ "mapped",
+ [
+ 26041
+ ]
+ ],
+ [
+ [
+ 12102,
+ 12102
+ ],
+ "mapped",
+ [
+ 26080
+ ]
+ ],
+ [
+ [
+ 12103,
+ 12103
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12104,
+ 12104
+ ],
+ "mapped",
+ [
+ 26352
+ ]
+ ],
+ [
+ [
+ 12105,
+ 12105
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12106,
+ 12106
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12107,
+ 12107
+ ],
+ "mapped",
+ [
+ 27424
+ ]
+ ],
+ [
+ [
+ 12108,
+ 12108
+ ],
+ "mapped",
+ [
+ 27490
+ ]
+ ],
+ [
+ [
+ 12109,
+ 12109
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 12110,
+ 12110
+ ],
+ "mapped",
+ [
+ 27571
+ ]
+ ],
+ [
+ [
+ 12111,
+ 12111
+ ],
+ "mapped",
+ [
+ 27595
+ ]
+ ],
+ [
+ [
+ 12112,
+ 12112
+ ],
+ "mapped",
+ [
+ 27604
+ ]
+ ],
+ [
+ [
+ 12113,
+ 12113
+ ],
+ "mapped",
+ [
+ 27611
+ ]
+ ],
+ [
+ [
+ 12114,
+ 12114
+ ],
+ "mapped",
+ [
+ 27663
+ ]
+ ],
+ [
+ [
+ 12115,
+ 12115
+ ],
+ "mapped",
+ [
+ 27668
+ ]
+ ],
+ [
+ [
+ 12116,
+ 12116
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12117,
+ 12117
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12118,
+ 12118
+ ],
+ "mapped",
+ [
+ 29226
+ ]
+ ],
+ [
+ [
+ 12119,
+ 12119
+ ],
+ "mapped",
+ [
+ 29238
+ ]
+ ],
+ [
+ [
+ 12120,
+ 12120
+ ],
+ "mapped",
+ [
+ 29243
+ ]
+ ],
+ [
+ [
+ 12121,
+ 12121
+ ],
+ "mapped",
+ [
+ 29247
+ ]
+ ],
+ [
+ [
+ 12122,
+ 12122
+ ],
+ "mapped",
+ [
+ 29255
+ ]
+ ],
+ [
+ [
+ 12123,
+ 12123
+ ],
+ "mapped",
+ [
+ 29273
+ ]
+ ],
+ [
+ [
+ 12124,
+ 12124
+ ],
+ "mapped",
+ [
+ 29275
+ ]
+ ],
+ [
+ [
+ 12125,
+ 12125
+ ],
+ "mapped",
+ [
+ 29356
+ ]
+ ],
+ [
+ [
+ 12126,
+ 12126
+ ],
+ "mapped",
+ [
+ 29572
+ ]
+ ],
+ [
+ [
+ 12127,
+ 12127
+ ],
+ "mapped",
+ [
+ 29577
+ ]
+ ],
+ [
+ [
+ 12128,
+ 12128
+ ],
+ "mapped",
+ [
+ 29916
+ ]
+ ],
+ [
+ [
+ 12129,
+ 12129
+ ],
+ "mapped",
+ [
+ 29926
+ ]
+ ],
+ [
+ [
+ 12130,
+ 12130
+ ],
+ "mapped",
+ [
+ 29976
+ ]
+ ],
+ [
+ [
+ 12131,
+ 12131
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 12132,
+ 12132
+ ],
+ "mapped",
+ [
+ 29992
+ ]
+ ],
+ [
+ [
+ 12133,
+ 12133
+ ],
+ "mapped",
+ [
+ 30000
+ ]
+ ],
+ [
+ [
+ 12134,
+ 12134
+ ],
+ "mapped",
+ [
+ 30091
+ ]
+ ],
+ [
+ [
+ 12135,
+ 12135
+ ],
+ "mapped",
+ [
+ 30098
+ ]
+ ],
+ [
+ [
+ 12136,
+ 12136
+ ],
+ "mapped",
+ [
+ 30326
+ ]
+ ],
+ [
+ [
+ 12137,
+ 12137
+ ],
+ "mapped",
+ [
+ 30333
+ ]
+ ],
+ [
+ [
+ 12138,
+ 12138
+ ],
+ "mapped",
+ [
+ 30382
+ ]
+ ],
+ [
+ [
+ 12139,
+ 12139
+ ],
+ "mapped",
+ [
+ 30399
+ ]
+ ],
+ [
+ [
+ 12140,
+ 12140
+ ],
+ "mapped",
+ [
+ 30446
+ ]
+ ],
+ [
+ [
+ 12141,
+ 12141
+ ],
+ "mapped",
+ [
+ 30683
+ ]
+ ],
+ [
+ [
+ 12142,
+ 12142
+ ],
+ "mapped",
+ [
+ 30690
+ ]
+ ],
+ [
+ [
+ 12143,
+ 12143
+ ],
+ "mapped",
+ [
+ 30707
+ ]
+ ],
+ [
+ [
+ 12144,
+ 12144
+ ],
+ "mapped",
+ [
+ 31034
+ ]
+ ],
+ [
+ [
+ 12145,
+ 12145
+ ],
+ "mapped",
+ [
+ 31160
+ ]
+ ],
+ [
+ [
+ 12146,
+ 12146
+ ],
+ "mapped",
+ [
+ 31166
+ ]
+ ],
+ [
+ [
+ 12147,
+ 12147
+ ],
+ "mapped",
+ [
+ 31348
+ ]
+ ],
+ [
+ [
+ 12148,
+ 12148
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 12149,
+ 12149
+ ],
+ "mapped",
+ [
+ 31481
+ ]
+ ],
+ [
+ [
+ 12150,
+ 12150
+ ],
+ "mapped",
+ [
+ 31859
+ ]
+ ],
+ [
+ [
+ 12151,
+ 12151
+ ],
+ "mapped",
+ [
+ 31992
+ ]
+ ],
+ [
+ [
+ 12152,
+ 12152
+ ],
+ "mapped",
+ [
+ 32566
+ ]
+ ],
+ [
+ [
+ 12153,
+ 12153
+ ],
+ "mapped",
+ [
+ 32593
+ ]
+ ],
+ [
+ [
+ 12154,
+ 12154
+ ],
+ "mapped",
+ [
+ 32650
+ ]
+ ],
+ [
+ [
+ 12155,
+ 12155
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 12156,
+ 12156
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 12157,
+ 12157
+ ],
+ "mapped",
+ [
+ 32780
+ ]
+ ],
+ [
+ [
+ 12158,
+ 12158
+ ],
+ "mapped",
+ [
+ 32786
+ ]
+ ],
+ [
+ [
+ 12159,
+ 12159
+ ],
+ "mapped",
+ [
+ 32819
+ ]
+ ],
+ [
+ [
+ 12160,
+ 12160
+ ],
+ "mapped",
+ [
+ 32895
+ ]
+ ],
+ [
+ [
+ 12161,
+ 12161
+ ],
+ "mapped",
+ [
+ 32905
+ ]
+ ],
+ [
+ [
+ 12162,
+ 12162
+ ],
+ "mapped",
+ [
+ 33251
+ ]
+ ],
+ [
+ [
+ 12163,
+ 12163
+ ],
+ "mapped",
+ [
+ 33258
+ ]
+ ],
+ [
+ [
+ 12164,
+ 12164
+ ],
+ "mapped",
+ [
+ 33267
+ ]
+ ],
+ [
+ [
+ 12165,
+ 12165
+ ],
+ "mapped",
+ [
+ 33276
+ ]
+ ],
+ [
+ [
+ 12166,
+ 12166
+ ],
+ "mapped",
+ [
+ 33292
+ ]
+ ],
+ [
+ [
+ 12167,
+ 12167
+ ],
+ "mapped",
+ [
+ 33307
+ ]
+ ],
+ [
+ [
+ 12168,
+ 12168
+ ],
+ "mapped",
+ [
+ 33311
+ ]
+ ],
+ [
+ [
+ 12169,
+ 12169
+ ],
+ "mapped",
+ [
+ 33390
+ ]
+ ],
+ [
+ [
+ 12170,
+ 12170
+ ],
+ "mapped",
+ [
+ 33394
+ ]
+ ],
+ [
+ [
+ 12171,
+ 12171
+ ],
+ "mapped",
+ [
+ 33400
+ ]
+ ],
+ [
+ [
+ 12172,
+ 12172
+ ],
+ "mapped",
+ [
+ 34381
+ ]
+ ],
+ [
+ [
+ 12173,
+ 12173
+ ],
+ "mapped",
+ [
+ 34411
+ ]
+ ],
+ [
+ [
+ 12174,
+ 12174
+ ],
+ "mapped",
+ [
+ 34880
+ ]
+ ],
+ [
+ [
+ 12175,
+ 12175
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 12176,
+ 12176
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 12177,
+ 12177
+ ],
+ "mapped",
+ [
+ 35198
+ ]
+ ],
+ [
+ [
+ 12178,
+ 12178
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 12179,
+ 12179
+ ],
+ "mapped",
+ [
+ 35282
+ ]
+ ],
+ [
+ [
+ 12180,
+ 12180
+ ],
+ "mapped",
+ [
+ 35328
+ ]
+ ],
+ [
+ [
+ 12181,
+ 12181
+ ],
+ "mapped",
+ [
+ 35895
+ ]
+ ],
+ [
+ [
+ 12182,
+ 12182
+ ],
+ "mapped",
+ [
+ 35910
+ ]
+ ],
+ [
+ [
+ 12183,
+ 12183
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 12184,
+ 12184
+ ],
+ "mapped",
+ [
+ 35960
+ ]
+ ],
+ [
+ [
+ 12185,
+ 12185
+ ],
+ "mapped",
+ [
+ 35997
+ ]
+ ],
+ [
+ [
+ 12186,
+ 12186
+ ],
+ "mapped",
+ [
+ 36196
+ ]
+ ],
+ [
+ [
+ 12187,
+ 12187
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 12188,
+ 12188
+ ],
+ "mapped",
+ [
+ 36275
+ ]
+ ],
+ [
+ [
+ 12189,
+ 12189
+ ],
+ "mapped",
+ [
+ 36523
+ ]
+ ],
+ [
+ [
+ 12190,
+ 12190
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 12191,
+ 12191
+ ],
+ "mapped",
+ [
+ 36763
+ ]
+ ],
+ [
+ [
+ 12192,
+ 12192
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 12193,
+ 12193
+ ],
+ "mapped",
+ [
+ 36789
+ ]
+ ],
+ [
+ [
+ 12194,
+ 12194
+ ],
+ "mapped",
+ [
+ 37009
+ ]
+ ],
+ [
+ [
+ 12195,
+ 12195
+ ],
+ "mapped",
+ [
+ 37193
+ ]
+ ],
+ [
+ [
+ 12196,
+ 12196
+ ],
+ "mapped",
+ [
+ 37318
+ ]
+ ],
+ [
+ [
+ 12197,
+ 12197
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 12198,
+ 12198
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12199,
+ 12199
+ ],
+ "mapped",
+ [
+ 38263
+ ]
+ ],
+ [
+ [
+ 12200,
+ 12200
+ ],
+ "mapped",
+ [
+ 38272
+ ]
+ ],
+ [
+ [
+ 12201,
+ 12201
+ ],
+ "mapped",
+ [
+ 38428
+ ]
+ ],
+ [
+ [
+ 12202,
+ 12202
+ ],
+ "mapped",
+ [
+ 38582
+ ]
+ ],
+ [
+ [
+ 12203,
+ 12203
+ ],
+ "mapped",
+ [
+ 38585
+ ]
+ ],
+ [
+ [
+ 12204,
+ 12204
+ ],
+ "mapped",
+ [
+ 38632
+ ]
+ ],
+ [
+ [
+ 12205,
+ 12205
+ ],
+ "mapped",
+ [
+ 38737
+ ]
+ ],
+ [
+ [
+ 12206,
+ 12206
+ ],
+ "mapped",
+ [
+ 38750
+ ]
+ ],
+ [
+ [
+ 12207,
+ 12207
+ ],
+ "mapped",
+ [
+ 38754
+ ]
+ ],
+ [
+ [
+ 12208,
+ 12208
+ ],
+ "mapped",
+ [
+ 38761
+ ]
+ ],
+ [
+ [
+ 12209,
+ 12209
+ ],
+ "mapped",
+ [
+ 38859
+ ]
+ ],
+ [
+ [
+ 12210,
+ 12210
+ ],
+ "mapped",
+ [
+ 38893
+ ]
+ ],
+ [
+ [
+ 12211,
+ 12211
+ ],
+ "mapped",
+ [
+ 38899
+ ]
+ ],
+ [
+ [
+ 12212,
+ 12212
+ ],
+ "mapped",
+ [
+ 38913
+ ]
+ ],
+ [
+ [
+ 12213,
+ 12213
+ ],
+ "mapped",
+ [
+ 39080
+ ]
+ ],
+ [
+ [
+ 12214,
+ 12214
+ ],
+ "mapped",
+ [
+ 39131
+ ]
+ ],
+ [
+ [
+ 12215,
+ 12215
+ ],
+ "mapped",
+ [
+ 39135
+ ]
+ ],
+ [
+ [
+ 12216,
+ 12216
+ ],
+ "mapped",
+ [
+ 39318
+ ]
+ ],
+ [
+ [
+ 12217,
+ 12217
+ ],
+ "mapped",
+ [
+ 39321
+ ]
+ ],
+ [
+ [
+ 12218,
+ 12218
+ ],
+ "mapped",
+ [
+ 39340
+ ]
+ ],
+ [
+ [
+ 12219,
+ 12219
+ ],
+ "mapped",
+ [
+ 39592
+ ]
+ ],
+ [
+ [
+ 12220,
+ 12220
+ ],
+ "mapped",
+ [
+ 39640
+ ]
+ ],
+ [
+ [
+ 12221,
+ 12221
+ ],
+ "mapped",
+ [
+ 39647
+ ]
+ ],
+ [
+ [
+ 12222,
+ 12222
+ ],
+ "mapped",
+ [
+ 39717
+ ]
+ ],
+ [
+ [
+ 12223,
+ 12223
+ ],
+ "mapped",
+ [
+ 39727
+ ]
+ ],
+ [
+ [
+ 12224,
+ 12224
+ ],
+ "mapped",
+ [
+ 39730
+ ]
+ ],
+ [
+ [
+ 12225,
+ 12225
+ ],
+ "mapped",
+ [
+ 39740
+ ]
+ ],
+ [
+ [
+ 12226,
+ 12226
+ ],
+ "mapped",
+ [
+ 39770
+ ]
+ ],
+ [
+ [
+ 12227,
+ 12227
+ ],
+ "mapped",
+ [
+ 40165
+ ]
+ ],
+ [
+ [
+ 12228,
+ 12228
+ ],
+ "mapped",
+ [
+ 40565
+ ]
+ ],
+ [
+ [
+ 12229,
+ 12229
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 12230,
+ 12230
+ ],
+ "mapped",
+ [
+ 40613
+ ]
+ ],
+ [
+ [
+ 12231,
+ 12231
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 12232,
+ 12232
+ ],
+ "mapped",
+ [
+ 40643
+ ]
+ ],
+ [
+ [
+ 12233,
+ 12233
+ ],
+ "mapped",
+ [
+ 40653
+ ]
+ ],
+ [
+ [
+ 12234,
+ 12234
+ ],
+ "mapped",
+ [
+ 40657
+ ]
+ ],
+ [
+ [
+ 12235,
+ 12235
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 12236,
+ 12236
+ ],
+ "mapped",
+ [
+ 40701
+ ]
+ ],
+ [
+ [
+ 12237,
+ 12237
+ ],
+ "mapped",
+ [
+ 40718
+ ]
+ ],
+ [
+ [
+ 12238,
+ 12238
+ ],
+ "mapped",
+ [
+ 40723
+ ]
+ ],
+ [
+ [
+ 12239,
+ 12239
+ ],
+ "mapped",
+ [
+ 40736
+ ]
+ ],
+ [
+ [
+ 12240,
+ 12240
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 12241,
+ 12241
+ ],
+ "mapped",
+ [
+ 40778
+ ]
+ ],
+ [
+ [
+ 12242,
+ 12242
+ ],
+ "mapped",
+ [
+ 40786
+ ]
+ ],
+ [
+ [
+ 12243,
+ 12243
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 12244,
+ 12244
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 12245,
+ 12245
+ ],
+ "mapped",
+ [
+ 40864
+ ]
+ ],
+ [
+ [
+ 12246,
+ 12271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12272,
+ 12283
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12284,
+ 12287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12288,
+ 12288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32
+ ]
+ ],
+ [
+ [
+ 12289,
+ 12289
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12290,
+ 12290
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 12291,
+ 12292
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12293,
+ 12295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12296,
+ 12329
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12330,
+ 12333
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12334,
+ 12341
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12342,
+ 12342
+ ],
+ "mapped",
+ [
+ 12306
+ ]
+ ],
+ [
+ [
+ 12343,
+ 12343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12344,
+ 12344
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12345,
+ 12345
+ ],
+ "mapped",
+ [
+ 21316
+ ]
+ ],
+ [
+ [
+ 12346,
+ 12346
+ ],
+ "mapped",
+ [
+ 21317
+ ]
+ ],
+ [
+ [
+ 12347,
+ 12347
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12348,
+ 12348
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12349,
+ 12349
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12350,
+ 12350
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12351,
+ 12351
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12352,
+ 12352
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12353,
+ 12436
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12437,
+ 12438
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12439,
+ 12440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12441,
+ 12442
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12443,
+ 12443
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12441
+ ]
+ ],
+ [
+ [
+ 12444,
+ 12444
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 12442
+ ]
+ ],
+ [
+ [
+ 12445,
+ 12446
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12447,
+ 12447
+ ],
+ "mapped",
+ [
+ 12424,
+ 12426
+ ]
+ ],
+ [
+ [
+ 12448,
+ 12448
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12449,
+ 12542
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12543,
+ 12543
+ ],
+ "mapped",
+ [
+ 12467,
+ 12488
+ ]
+ ],
+ [
+ [
+ 12544,
+ 12548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12549,
+ 12588
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12589,
+ 12589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12590,
+ 12592
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12593,
+ 12593
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12594,
+ 12594
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 12595,
+ 12595
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 12596,
+ 12596
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12597,
+ 12597
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 12598,
+ 12598
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 12599,
+ 12599
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12600,
+ 12600
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 12601,
+ 12601
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12602,
+ 12602
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 12603,
+ 12603
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 12604,
+ 12604
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 12605,
+ 12605
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 12606,
+ 12606
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 12607,
+ 12607
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 12608,
+ 12608
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 12609,
+ 12609
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12610,
+ 12610
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12611,
+ 12611
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 12612,
+ 12612
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 12613,
+ 12613
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12614,
+ 12614
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 12615,
+ 12615
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12616,
+ 12616
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12617,
+ 12617
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 12618,
+ 12618
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12619,
+ 12619
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12620,
+ 12620
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12621,
+ 12621
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12622,
+ 12622
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12623,
+ 12623
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 12624,
+ 12624
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 12625,
+ 12625
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 12626,
+ 12626
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 12627,
+ 12627
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 12628,
+ 12628
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 12629,
+ 12629
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 12630,
+ 12630
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 12631,
+ 12631
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 12632,
+ 12632
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 12633,
+ 12633
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 12634,
+ 12634
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 12635,
+ 12635
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 12636,
+ 12636
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 12637,
+ 12637
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 12638,
+ 12638
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 12639,
+ 12639
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 12640,
+ 12640
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 12641,
+ 12641
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 12642,
+ 12642
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 12643,
+ 12643
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 12644,
+ 12644
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12645,
+ 12645
+ ],
+ "mapped",
+ [
+ 4372
+ ]
+ ],
+ [
+ [
+ 12646,
+ 12646
+ ],
+ "mapped",
+ [
+ 4373
+ ]
+ ],
+ [
+ [
+ 12647,
+ 12647
+ ],
+ "mapped",
+ [
+ 4551
+ ]
+ ],
+ [
+ [
+ 12648,
+ 12648
+ ],
+ "mapped",
+ [
+ 4552
+ ]
+ ],
+ [
+ [
+ 12649,
+ 12649
+ ],
+ "mapped",
+ [
+ 4556
+ ]
+ ],
+ [
+ [
+ 12650,
+ 12650
+ ],
+ "mapped",
+ [
+ 4558
+ ]
+ ],
+ [
+ [
+ 12651,
+ 12651
+ ],
+ "mapped",
+ [
+ 4563
+ ]
+ ],
+ [
+ [
+ 12652,
+ 12652
+ ],
+ "mapped",
+ [
+ 4567
+ ]
+ ],
+ [
+ [
+ 12653,
+ 12653
+ ],
+ "mapped",
+ [
+ 4569
+ ]
+ ],
+ [
+ [
+ 12654,
+ 12654
+ ],
+ "mapped",
+ [
+ 4380
+ ]
+ ],
+ [
+ [
+ 12655,
+ 12655
+ ],
+ "mapped",
+ [
+ 4573
+ ]
+ ],
+ [
+ [
+ 12656,
+ 12656
+ ],
+ "mapped",
+ [
+ 4575
+ ]
+ ],
+ [
+ [
+ 12657,
+ 12657
+ ],
+ "mapped",
+ [
+ 4381
+ ]
+ ],
+ [
+ [
+ 12658,
+ 12658
+ ],
+ "mapped",
+ [
+ 4382
+ ]
+ ],
+ [
+ [
+ 12659,
+ 12659
+ ],
+ "mapped",
+ [
+ 4384
+ ]
+ ],
+ [
+ [
+ 12660,
+ 12660
+ ],
+ "mapped",
+ [
+ 4386
+ ]
+ ],
+ [
+ [
+ 12661,
+ 12661
+ ],
+ "mapped",
+ [
+ 4387
+ ]
+ ],
+ [
+ [
+ 12662,
+ 12662
+ ],
+ "mapped",
+ [
+ 4391
+ ]
+ ],
+ [
+ [
+ 12663,
+ 12663
+ ],
+ "mapped",
+ [
+ 4393
+ ]
+ ],
+ [
+ [
+ 12664,
+ 12664
+ ],
+ "mapped",
+ [
+ 4395
+ ]
+ ],
+ [
+ [
+ 12665,
+ 12665
+ ],
+ "mapped",
+ [
+ 4396
+ ]
+ ],
+ [
+ [
+ 12666,
+ 12666
+ ],
+ "mapped",
+ [
+ 4397
+ ]
+ ],
+ [
+ [
+ 12667,
+ 12667
+ ],
+ "mapped",
+ [
+ 4398
+ ]
+ ],
+ [
+ [
+ 12668,
+ 12668
+ ],
+ "mapped",
+ [
+ 4399
+ ]
+ ],
+ [
+ [
+ 12669,
+ 12669
+ ],
+ "mapped",
+ [
+ 4402
+ ]
+ ],
+ [
+ [
+ 12670,
+ 12670
+ ],
+ "mapped",
+ [
+ 4406
+ ]
+ ],
+ [
+ [
+ 12671,
+ 12671
+ ],
+ "mapped",
+ [
+ 4416
+ ]
+ ],
+ [
+ [
+ 12672,
+ 12672
+ ],
+ "mapped",
+ [
+ 4423
+ ]
+ ],
+ [
+ [
+ 12673,
+ 12673
+ ],
+ "mapped",
+ [
+ 4428
+ ]
+ ],
+ [
+ [
+ 12674,
+ 12674
+ ],
+ "mapped",
+ [
+ 4593
+ ]
+ ],
+ [
+ [
+ 12675,
+ 12675
+ ],
+ "mapped",
+ [
+ 4594
+ ]
+ ],
+ [
+ [
+ 12676,
+ 12676
+ ],
+ "mapped",
+ [
+ 4439
+ ]
+ ],
+ [
+ [
+ 12677,
+ 12677
+ ],
+ "mapped",
+ [
+ 4440
+ ]
+ ],
+ [
+ [
+ 12678,
+ 12678
+ ],
+ "mapped",
+ [
+ 4441
+ ]
+ ],
+ [
+ [
+ 12679,
+ 12679
+ ],
+ "mapped",
+ [
+ 4484
+ ]
+ ],
+ [
+ [
+ 12680,
+ 12680
+ ],
+ "mapped",
+ [
+ 4485
+ ]
+ ],
+ [
+ [
+ 12681,
+ 12681
+ ],
+ "mapped",
+ [
+ 4488
+ ]
+ ],
+ [
+ [
+ 12682,
+ 12682
+ ],
+ "mapped",
+ [
+ 4497
+ ]
+ ],
+ [
+ [
+ 12683,
+ 12683
+ ],
+ "mapped",
+ [
+ 4498
+ ]
+ ],
+ [
+ [
+ 12684,
+ 12684
+ ],
+ "mapped",
+ [
+ 4500
+ ]
+ ],
+ [
+ [
+ 12685,
+ 12685
+ ],
+ "mapped",
+ [
+ 4510
+ ]
+ ],
+ [
+ [
+ 12686,
+ 12686
+ ],
+ "mapped",
+ [
+ 4513
+ ]
+ ],
+ [
+ [
+ 12687,
+ 12687
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12688,
+ 12689
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12690,
+ 12690
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12691,
+ 12691
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12692,
+ 12692
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12693,
+ 12693
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12694,
+ 12694
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12695,
+ 12695
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12696,
+ 12696
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12697,
+ 12697
+ ],
+ "mapped",
+ [
+ 30002
+ ]
+ ],
+ [
+ [
+ 12698,
+ 12698
+ ],
+ "mapped",
+ [
+ 20057
+ ]
+ ],
+ [
+ [
+ 12699,
+ 12699
+ ],
+ "mapped",
+ [
+ 19993
+ ]
+ ],
+ [
+ [
+ 12700,
+ 12700
+ ],
+ "mapped",
+ [
+ 19969
+ ]
+ ],
+ [
+ [
+ 12701,
+ 12701
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 12702,
+ 12702
+ ],
+ "mapped",
+ [
+ 22320
+ ]
+ ],
+ [
+ [
+ 12703,
+ 12703
+ ],
+ "mapped",
+ [
+ 20154
+ ]
+ ],
+ [
+ [
+ 12704,
+ 12727
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12728,
+ 12730
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12731,
+ 12735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12736,
+ 12751
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12752,
+ 12771
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12772,
+ 12783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12784,
+ 12799
+ ],
+ "valid"
+ ],
+ [
+ [
+ 12800,
+ 12800
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4352,
+ 41
+ ]
+ ],
+ [
+ [
+ 12801,
+ 12801
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4354,
+ 41
+ ]
+ ],
+ [
+ [
+ 12802,
+ 12802
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4355,
+ 41
+ ]
+ ],
+ [
+ [
+ 12803,
+ 12803
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4357,
+ 41
+ ]
+ ],
+ [
+ [
+ 12804,
+ 12804
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4358,
+ 41
+ ]
+ ],
+ [
+ [
+ 12805,
+ 12805
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4359,
+ 41
+ ]
+ ],
+ [
+ [
+ 12806,
+ 12806
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4361,
+ 41
+ ]
+ ],
+ [
+ [
+ 12807,
+ 12807
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4363,
+ 41
+ ]
+ ],
+ [
+ [
+ 12808,
+ 12808
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4364,
+ 41
+ ]
+ ],
+ [
+ [
+ 12809,
+ 12809
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4366,
+ 41
+ ]
+ ],
+ [
+ [
+ 12810,
+ 12810
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4367,
+ 41
+ ]
+ ],
+ [
+ [
+ 12811,
+ 12811
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4368,
+ 41
+ ]
+ ],
+ [
+ [
+ 12812,
+ 12812
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4369,
+ 41
+ ]
+ ],
+ [
+ [
+ 12813,
+ 12813
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 4370,
+ 41
+ ]
+ ],
+ [
+ [
+ 12814,
+ 12814
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 44032,
+ 41
+ ]
+ ],
+ [
+ [
+ 12815,
+ 12815
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45208,
+ 41
+ ]
+ ],
+ [
+ [
+ 12816,
+ 12816
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 45796,
+ 41
+ ]
+ ],
+ [
+ [
+ 12817,
+ 12817
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 46972,
+ 41
+ ]
+ ],
+ [
+ [
+ 12818,
+ 12818
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 47560,
+ 41
+ ]
+ ],
+ [
+ [
+ 12819,
+ 12819
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 48148,
+ 41
+ ]
+ ],
+ [
+ [
+ 12820,
+ 12820
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 49324,
+ 41
+ ]
+ ],
+ [
+ [
+ 12821,
+ 12821
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50500,
+ 41
+ ]
+ ],
+ [
+ [
+ 12822,
+ 12822
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51088,
+ 41
+ ]
+ ],
+ [
+ [
+ 12823,
+ 12823
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52264,
+ 41
+ ]
+ ],
+ [
+ [
+ 12824,
+ 12824
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 52852,
+ 41
+ ]
+ ],
+ [
+ [
+ 12825,
+ 12825
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 53440,
+ 41
+ ]
+ ],
+ [
+ [
+ 12826,
+ 12826
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54028,
+ 41
+ ]
+ ],
+ [
+ [
+ 12827,
+ 12827
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 54616,
+ 41
+ ]
+ ],
+ [
+ [
+ 12828,
+ 12828
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 51452,
+ 41
+ ]
+ ],
+ [
+ [
+ 12829,
+ 12829
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 51204,
+ 41
+ ]
+ ],
+ [
+ [
+ 12830,
+ 12830
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 50724,
+ 54980,
+ 41
+ ]
+ ],
+ [
+ [
+ 12831,
+ 12831
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 12832,
+ 12832
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19968,
+ 41
+ ]
+ ],
+ [
+ [
+ 12833,
+ 12833
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20108,
+ 41
+ ]
+ ],
+ [
+ [
+ 12834,
+ 12834
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19977,
+ 41
+ ]
+ ],
+ [
+ [
+ 12835,
+ 12835
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22235,
+ 41
+ ]
+ ],
+ [
+ [
+ 12836,
+ 12836
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20116,
+ 41
+ ]
+ ],
+ [
+ [
+ 12837,
+ 12837
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20845,
+ 41
+ ]
+ ],
+ [
+ [
+ 12838,
+ 12838
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 19971,
+ 41
+ ]
+ ],
+ [
+ [
+ 12839,
+ 12839
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20843,
+ 41
+ ]
+ ],
+ [
+ [
+ 12840,
+ 12840
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20061,
+ 41
+ ]
+ ],
+ [
+ [
+ 12841,
+ 12841
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21313,
+ 41
+ ]
+ ],
+ [
+ [
+ 12842,
+ 12842
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26376,
+ 41
+ ]
+ ],
+ [
+ [
+ 12843,
+ 12843
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 28779,
+ 41
+ ]
+ ],
+ [
+ [
+ 12844,
+ 12844
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 27700,
+ 41
+ ]
+ ],
+ [
+ [
+ 12845,
+ 12845
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26408,
+ 41
+ ]
+ ],
+ [
+ [
+ 12846,
+ 12846
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 37329,
+ 41
+ ]
+ ],
+ [
+ [
+ 12847,
+ 12847
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 22303,
+ 41
+ ]
+ ],
+ [
+ [
+ 12848,
+ 12848
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12849,
+ 12849
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26666,
+ 41
+ ]
+ ],
+ [
+ [
+ 12850,
+ 12850
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 26377,
+ 41
+ ]
+ ],
+ [
+ [
+ 12851,
+ 12851
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31038,
+ 41
+ ]
+ ],
+ [
+ [
+ 12852,
+ 12852
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21517,
+ 41
+ ]
+ ],
+ [
+ [
+ 12853,
+ 12853
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 29305,
+ 41
+ ]
+ ],
+ [
+ [
+ 12854,
+ 12854
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36001,
+ 41
+ ]
+ ],
+ [
+ [
+ 12855,
+ 12855
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31069,
+ 41
+ ]
+ ],
+ [
+ [
+ 12856,
+ 12856
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21172,
+ 41
+ ]
+ ],
+ [
+ [
+ 12857,
+ 12857
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20195,
+ 41
+ ]
+ ],
+ [
+ [
+ 12858,
+ 12858
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21628,
+ 41
+ ]
+ ],
+ [
+ [
+ 12859,
+ 12859
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 23398,
+ 41
+ ]
+ ],
+ [
+ [
+ 12860,
+ 12860
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 30435,
+ 41
+ ]
+ ],
+ [
+ [
+ 12861,
+ 12861
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20225,
+ 41
+ ]
+ ],
+ [
+ [
+ 12862,
+ 12862
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 36039,
+ 41
+ ]
+ ],
+ [
+ [
+ 12863,
+ 12863
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 21332,
+ 41
+ ]
+ ],
+ [
+ [
+ 12864,
+ 12864
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 31085,
+ 41
+ ]
+ ],
+ [
+ [
+ 12865,
+ 12865
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 20241,
+ 41
+ ]
+ ],
+ [
+ [
+ 12866,
+ 12866
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33258,
+ 41
+ ]
+ ],
+ [
+ [
+ 12867,
+ 12867
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 33267,
+ 41
+ ]
+ ],
+ [
+ [
+ 12868,
+ 12868
+ ],
+ "mapped",
+ [
+ 21839
+ ]
+ ],
+ [
+ [
+ 12869,
+ 12869
+ ],
+ "mapped",
+ [
+ 24188
+ ]
+ ],
+ [
+ [
+ 12870,
+ 12870
+ ],
+ "mapped",
+ [
+ 25991
+ ]
+ ],
+ [
+ [
+ 12871,
+ 12871
+ ],
+ "mapped",
+ [
+ 31631
+ ]
+ ],
+ [
+ [
+ 12872,
+ 12879
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12880,
+ 12880
+ ],
+ "mapped",
+ [
+ 112,
+ 116,
+ 101
+ ]
+ ],
+ [
+ [
+ 12881,
+ 12881
+ ],
+ "mapped",
+ [
+ 50,
+ 49
+ ]
+ ],
+ [
+ [
+ 12882,
+ 12882
+ ],
+ "mapped",
+ [
+ 50,
+ 50
+ ]
+ ],
+ [
+ [
+ 12883,
+ 12883
+ ],
+ "mapped",
+ [
+ 50,
+ 51
+ ]
+ ],
+ [
+ [
+ 12884,
+ 12884
+ ],
+ "mapped",
+ [
+ 50,
+ 52
+ ]
+ ],
+ [
+ [
+ 12885,
+ 12885
+ ],
+ "mapped",
+ [
+ 50,
+ 53
+ ]
+ ],
+ [
+ [
+ 12886,
+ 12886
+ ],
+ "mapped",
+ [
+ 50,
+ 54
+ ]
+ ],
+ [
+ [
+ 12887,
+ 12887
+ ],
+ "mapped",
+ [
+ 50,
+ 55
+ ]
+ ],
+ [
+ [
+ 12888,
+ 12888
+ ],
+ "mapped",
+ [
+ 50,
+ 56
+ ]
+ ],
+ [
+ [
+ 12889,
+ 12889
+ ],
+ "mapped",
+ [
+ 50,
+ 57
+ ]
+ ],
+ [
+ [
+ 12890,
+ 12890
+ ],
+ "mapped",
+ [
+ 51,
+ 48
+ ]
+ ],
+ [
+ [
+ 12891,
+ 12891
+ ],
+ "mapped",
+ [
+ 51,
+ 49
+ ]
+ ],
+ [
+ [
+ 12892,
+ 12892
+ ],
+ "mapped",
+ [
+ 51,
+ 50
+ ]
+ ],
+ [
+ [
+ 12893,
+ 12893
+ ],
+ "mapped",
+ [
+ 51,
+ 51
+ ]
+ ],
+ [
+ [
+ 12894,
+ 12894
+ ],
+ "mapped",
+ [
+ 51,
+ 52
+ ]
+ ],
+ [
+ [
+ 12895,
+ 12895
+ ],
+ "mapped",
+ [
+ 51,
+ 53
+ ]
+ ],
+ [
+ [
+ 12896,
+ 12896
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 12897,
+ 12897
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 12898,
+ 12898
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 12899,
+ 12899
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 12900,
+ 12900
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 12901,
+ 12901
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 12902,
+ 12902
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 12903,
+ 12903
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 12904,
+ 12904
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 12905,
+ 12905
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 12906,
+ 12906
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 12907,
+ 12907
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 12908,
+ 12908
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 12909,
+ 12909
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 12910,
+ 12910
+ ],
+ "mapped",
+ [
+ 44032
+ ]
+ ],
+ [
+ [
+ 12911,
+ 12911
+ ],
+ "mapped",
+ [
+ 45208
+ ]
+ ],
+ [
+ [
+ 12912,
+ 12912
+ ],
+ "mapped",
+ [
+ 45796
+ ]
+ ],
+ [
+ [
+ 12913,
+ 12913
+ ],
+ "mapped",
+ [
+ 46972
+ ]
+ ],
+ [
+ [
+ 12914,
+ 12914
+ ],
+ "mapped",
+ [
+ 47560
+ ]
+ ],
+ [
+ [
+ 12915,
+ 12915
+ ],
+ "mapped",
+ [
+ 48148
+ ]
+ ],
+ [
+ [
+ 12916,
+ 12916
+ ],
+ "mapped",
+ [
+ 49324
+ ]
+ ],
+ [
+ [
+ 12917,
+ 12917
+ ],
+ "mapped",
+ [
+ 50500
+ ]
+ ],
+ [
+ [
+ 12918,
+ 12918
+ ],
+ "mapped",
+ [
+ 51088
+ ]
+ ],
+ [
+ [
+ 12919,
+ 12919
+ ],
+ "mapped",
+ [
+ 52264
+ ]
+ ],
+ [
+ [
+ 12920,
+ 12920
+ ],
+ "mapped",
+ [
+ 52852
+ ]
+ ],
+ [
+ [
+ 12921,
+ 12921
+ ],
+ "mapped",
+ [
+ 53440
+ ]
+ ],
+ [
+ [
+ 12922,
+ 12922
+ ],
+ "mapped",
+ [
+ 54028
+ ]
+ ],
+ [
+ [
+ 12923,
+ 12923
+ ],
+ "mapped",
+ [
+ 54616
+ ]
+ ],
+ [
+ [
+ 12924,
+ 12924
+ ],
+ "mapped",
+ [
+ 52280,
+ 44256
+ ]
+ ],
+ [
+ [
+ 12925,
+ 12925
+ ],
+ "mapped",
+ [
+ 51452,
+ 51032
+ ]
+ ],
+ [
+ [
+ 12926,
+ 12926
+ ],
+ "mapped",
+ [
+ 50864
+ ]
+ ],
+ [
+ [
+ 12927,
+ 12927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 12928,
+ 12928
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 12929,
+ 12929
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 12930,
+ 12930
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 12931,
+ 12931
+ ],
+ "mapped",
+ [
+ 22235
+ ]
+ ],
+ [
+ [
+ 12932,
+ 12932
+ ],
+ "mapped",
+ [
+ 20116
+ ]
+ ],
+ [
+ [
+ 12933,
+ 12933
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 12934,
+ 12934
+ ],
+ "mapped",
+ [
+ 19971
+ ]
+ ],
+ [
+ [
+ 12935,
+ 12935
+ ],
+ "mapped",
+ [
+ 20843
+ ]
+ ],
+ [
+ [
+ 12936,
+ 12936
+ ],
+ "mapped",
+ [
+ 20061
+ ]
+ ],
+ [
+ [
+ 12937,
+ 12937
+ ],
+ "mapped",
+ [
+ 21313
+ ]
+ ],
+ [
+ [
+ 12938,
+ 12938
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 12939,
+ 12939
+ ],
+ "mapped",
+ [
+ 28779
+ ]
+ ],
+ [
+ [
+ 12940,
+ 12940
+ ],
+ "mapped",
+ [
+ 27700
+ ]
+ ],
+ [
+ [
+ 12941,
+ 12941
+ ],
+ "mapped",
+ [
+ 26408
+ ]
+ ],
+ [
+ [
+ 12942,
+ 12942
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 12943,
+ 12943
+ ],
+ "mapped",
+ [
+ 22303
+ ]
+ ],
+ [
+ [
+ 12944,
+ 12944
+ ],
+ "mapped",
+ [
+ 26085
+ ]
+ ],
+ [
+ [
+ 12945,
+ 12945
+ ],
+ "mapped",
+ [
+ 26666
+ ]
+ ],
+ [
+ [
+ 12946,
+ 12946
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 12947,
+ 12947
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 12948,
+ 12948
+ ],
+ "mapped",
+ [
+ 21517
+ ]
+ ],
+ [
+ [
+ 12949,
+ 12949
+ ],
+ "mapped",
+ [
+ 29305
+ ]
+ ],
+ [
+ [
+ 12950,
+ 12950
+ ],
+ "mapped",
+ [
+ 36001
+ ]
+ ],
+ [
+ [
+ 12951,
+ 12951
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 12952,
+ 12952
+ ],
+ "mapped",
+ [
+ 21172
+ ]
+ ],
+ [
+ [
+ 12953,
+ 12953
+ ],
+ "mapped",
+ [
+ 31192
+ ]
+ ],
+ [
+ [
+ 12954,
+ 12954
+ ],
+ "mapped",
+ [
+ 30007
+ ]
+ ],
+ [
+ [
+ 12955,
+ 12955
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 12956,
+ 12956
+ ],
+ "mapped",
+ [
+ 36969
+ ]
+ ],
+ [
+ [
+ 12957,
+ 12957
+ ],
+ "mapped",
+ [
+ 20778
+ ]
+ ],
+ [
+ [
+ 12958,
+ 12958
+ ],
+ "mapped",
+ [
+ 21360
+ ]
+ ],
+ [
+ [
+ 12959,
+ 12959
+ ],
+ "mapped",
+ [
+ 27880
+ ]
+ ],
+ [
+ [
+ 12960,
+ 12960
+ ],
+ "mapped",
+ [
+ 38917
+ ]
+ ],
+ [
+ [
+ 12961,
+ 12961
+ ],
+ "mapped",
+ [
+ 20241
+ ]
+ ],
+ [
+ [
+ 12962,
+ 12962
+ ],
+ "mapped",
+ [
+ 20889
+ ]
+ ],
+ [
+ [
+ 12963,
+ 12963
+ ],
+ "mapped",
+ [
+ 27491
+ ]
+ ],
+ [
+ [
+ 12964,
+ 12964
+ ],
+ "mapped",
+ [
+ 19978
+ ]
+ ],
+ [
+ [
+ 12965,
+ 12965
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 12966,
+ 12966
+ ],
+ "mapped",
+ [
+ 19979
+ ]
+ ],
+ [
+ [
+ 12967,
+ 12967
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 12968,
+ 12968
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 12969,
+ 12969
+ ],
+ "mapped",
+ [
+ 21307
+ ]
+ ],
+ [
+ [
+ 12970,
+ 12970
+ ],
+ "mapped",
+ [
+ 23447
+ ]
+ ],
+ [
+ [
+ 12971,
+ 12971
+ ],
+ "mapped",
+ [
+ 23398
+ ]
+ ],
+ [
+ [
+ 12972,
+ 12972
+ ],
+ "mapped",
+ [
+ 30435
+ ]
+ ],
+ [
+ [
+ 12973,
+ 12973
+ ],
+ "mapped",
+ [
+ 20225
+ ]
+ ],
+ [
+ [
+ 12974,
+ 12974
+ ],
+ "mapped",
+ [
+ 36039
+ ]
+ ],
+ [
+ [
+ 12975,
+ 12975
+ ],
+ "mapped",
+ [
+ 21332
+ ]
+ ],
+ [
+ [
+ 12976,
+ 12976
+ ],
+ "mapped",
+ [
+ 22812
+ ]
+ ],
+ [
+ [
+ 12977,
+ 12977
+ ],
+ "mapped",
+ [
+ 51,
+ 54
+ ]
+ ],
+ [
+ [
+ 12978,
+ 12978
+ ],
+ "mapped",
+ [
+ 51,
+ 55
+ ]
+ ],
+ [
+ [
+ 12979,
+ 12979
+ ],
+ "mapped",
+ [
+ 51,
+ 56
+ ]
+ ],
+ [
+ [
+ 12980,
+ 12980
+ ],
+ "mapped",
+ [
+ 51,
+ 57
+ ]
+ ],
+ [
+ [
+ 12981,
+ 12981
+ ],
+ "mapped",
+ [
+ 52,
+ 48
+ ]
+ ],
+ [
+ [
+ 12982,
+ 12982
+ ],
+ "mapped",
+ [
+ 52,
+ 49
+ ]
+ ],
+ [
+ [
+ 12983,
+ 12983
+ ],
+ "mapped",
+ [
+ 52,
+ 50
+ ]
+ ],
+ [
+ [
+ 12984,
+ 12984
+ ],
+ "mapped",
+ [
+ 52,
+ 51
+ ]
+ ],
+ [
+ [
+ 12985,
+ 12985
+ ],
+ "mapped",
+ [
+ 52,
+ 52
+ ]
+ ],
+ [
+ [
+ 12986,
+ 12986
+ ],
+ "mapped",
+ [
+ 52,
+ 53
+ ]
+ ],
+ [
+ [
+ 12987,
+ 12987
+ ],
+ "mapped",
+ [
+ 52,
+ 54
+ ]
+ ],
+ [
+ [
+ 12988,
+ 12988
+ ],
+ "mapped",
+ [
+ 52,
+ 55
+ ]
+ ],
+ [
+ [
+ 12989,
+ 12989
+ ],
+ "mapped",
+ [
+ 52,
+ 56
+ ]
+ ],
+ [
+ [
+ 12990,
+ 12990
+ ],
+ "mapped",
+ [
+ 52,
+ 57
+ ]
+ ],
+ [
+ [
+ 12991,
+ 12991
+ ],
+ "mapped",
+ [
+ 53,
+ 48
+ ]
+ ],
+ [
+ [
+ 12992,
+ 12992
+ ],
+ "mapped",
+ [
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12993,
+ 12993
+ ],
+ "mapped",
+ [
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12994,
+ 12994
+ ],
+ "mapped",
+ [
+ 51,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12995,
+ 12995
+ ],
+ "mapped",
+ [
+ 52,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12996,
+ 12996
+ ],
+ "mapped",
+ [
+ 53,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12997,
+ 12997
+ ],
+ "mapped",
+ [
+ 54,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12998,
+ 12998
+ ],
+ "mapped",
+ [
+ 55,
+ 26376
+ ]
+ ],
+ [
+ [
+ 12999,
+ 12999
+ ],
+ "mapped",
+ [
+ 56,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13000,
+ 13000
+ ],
+ "mapped",
+ [
+ 57,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13001,
+ 13001
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13002,
+ 13002
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13003,
+ 13003
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26376
+ ]
+ ],
+ [
+ [
+ 13004,
+ 13004
+ ],
+ "mapped",
+ [
+ 104,
+ 103
+ ]
+ ],
+ [
+ [
+ 13005,
+ 13005
+ ],
+ "mapped",
+ [
+ 101,
+ 114,
+ 103
+ ]
+ ],
+ [
+ [
+ 13006,
+ 13006
+ ],
+ "mapped",
+ [
+ 101,
+ 118
+ ]
+ ],
+ [
+ [
+ 13007,
+ 13007
+ ],
+ "mapped",
+ [
+ 108,
+ 116,
+ 100
+ ]
+ ],
+ [
+ [
+ 13008,
+ 13008
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 13009,
+ 13009
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 13010,
+ 13010
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 13011,
+ 13011
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 13012,
+ 13012
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 13013,
+ 13013
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 13014,
+ 13014
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 13015,
+ 13015
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 13016,
+ 13016
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 13017,
+ 13017
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 13018,
+ 13018
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 13019,
+ 13019
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 13020,
+ 13020
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 13021,
+ 13021
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 13022,
+ 13022
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 13023,
+ 13023
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 13024,
+ 13024
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 13025,
+ 13025
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 13026,
+ 13026
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 13027,
+ 13027
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 13028,
+ 13028
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 13029,
+ 13029
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 13030,
+ 13030
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 13031,
+ 13031
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 13032,
+ 13032
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 13033,
+ 13033
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 13034,
+ 13034
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 13035,
+ 13035
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 13036,
+ 13036
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 13037,
+ 13037
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 13038,
+ 13038
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 13039,
+ 13039
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 13040,
+ 13040
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 13041,
+ 13041
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 13042,
+ 13042
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 13043,
+ 13043
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 13044,
+ 13044
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 13045,
+ 13045
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 13046,
+ 13046
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 13047,
+ 13047
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 13048,
+ 13048
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 13049,
+ 13049
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 13050,
+ 13050
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 13051,
+ 13051
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 13052,
+ 13052
+ ],
+ "mapped",
+ [
+ 12528
+ ]
+ ],
+ [
+ [
+ 13053,
+ 13053
+ ],
+ "mapped",
+ [
+ 12529
+ ]
+ ],
+ [
+ [
+ 13054,
+ 13054
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 13055,
+ 13055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13056,
+ 13056
+ ],
+ "mapped",
+ [
+ 12450,
+ 12497,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13057,
+ 13057
+ ],
+ "mapped",
+ [
+ 12450,
+ 12523,
+ 12501,
+ 12449
+ ]
+ ],
+ [
+ [
+ 13058,
+ 13058
+ ],
+ "mapped",
+ [
+ 12450,
+ 12531,
+ 12506,
+ 12450
+ ]
+ ],
+ [
+ [
+ 13059,
+ 13059
+ ],
+ "mapped",
+ [
+ 12450,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13060,
+ 13060
+ ],
+ "mapped",
+ [
+ 12452,
+ 12491,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13061,
+ 13061
+ ],
+ "mapped",
+ [
+ 12452,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13062,
+ 13062
+ ],
+ "mapped",
+ [
+ 12454,
+ 12457,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13063,
+ 13063
+ ],
+ "mapped",
+ [
+ 12456,
+ 12473,
+ 12463,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13064,
+ 13064
+ ],
+ "mapped",
+ [
+ 12456,
+ 12540,
+ 12459,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13065,
+ 13065
+ ],
+ "mapped",
+ [
+ 12458,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13066,
+ 13066
+ ],
+ "mapped",
+ [
+ 12458,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13067,
+ 13067
+ ],
+ "mapped",
+ [
+ 12459,
+ 12452,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13068,
+ 13068
+ ],
+ "mapped",
+ [
+ 12459,
+ 12521,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13069,
+ 13069
+ ],
+ "mapped",
+ [
+ 12459,
+ 12525,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13070,
+ 13070
+ ],
+ "mapped",
+ [
+ 12460,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13071,
+ 13071
+ ],
+ "mapped",
+ [
+ 12460,
+ 12531,
+ 12510
+ ]
+ ],
+ [
+ [
+ 13072,
+ 13072
+ ],
+ "mapped",
+ [
+ 12462,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13073,
+ 13073
+ ],
+ "mapped",
+ [
+ 12462,
+ 12491,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13074,
+ 13074
+ ],
+ "mapped",
+ [
+ 12461,
+ 12517,
+ 12522,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13075,
+ 13075
+ ],
+ "mapped",
+ [
+ 12462,
+ 12523,
+ 12480,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13076,
+ 13076
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13077,
+ 13077
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13078,
+ 13078
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13079,
+ 13079
+ ],
+ "mapped",
+ [
+ 12461,
+ 12525,
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13080,
+ 13080
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13081,
+ 13081
+ ],
+ "mapped",
+ [
+ 12464,
+ 12521,
+ 12512,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13082,
+ 13082
+ ],
+ "mapped",
+ [
+ 12463,
+ 12523,
+ 12476,
+ 12452,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13083,
+ 13083
+ ],
+ "mapped",
+ [
+ 12463,
+ 12525,
+ 12540,
+ 12493
+ ]
+ ],
+ [
+ [
+ 13084,
+ 13084
+ ],
+ "mapped",
+ [
+ 12465,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13085,
+ 13085
+ ],
+ "mapped",
+ [
+ 12467,
+ 12523,
+ 12490
+ ]
+ ],
+ [
+ [
+ 13086,
+ 13086
+ ],
+ "mapped",
+ [
+ 12467,
+ 12540,
+ 12509
+ ]
+ ],
+ [
+ [
+ 13087,
+ 13087
+ ],
+ "mapped",
+ [
+ 12469,
+ 12452,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13088,
+ 13088
+ ],
+ "mapped",
+ [
+ 12469,
+ 12531,
+ 12481,
+ 12540,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13089,
+ 13089
+ ],
+ "mapped",
+ [
+ 12471,
+ 12522,
+ 12531,
+ 12464
+ ]
+ ],
+ [
+ [
+ 13090,
+ 13090
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12481
+ ]
+ ],
+ [
+ [
+ 13091,
+ 13091
+ ],
+ "mapped",
+ [
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13092,
+ 13092
+ ],
+ "mapped",
+ [
+ 12480,
+ 12540,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13093,
+ 13093
+ ],
+ "mapped",
+ [
+ 12487,
+ 12471
+ ]
+ ],
+ [
+ [
+ 13094,
+ 13094
+ ],
+ "mapped",
+ [
+ 12489,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13095,
+ 13095
+ ],
+ "mapped",
+ [
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13096,
+ 13096
+ ],
+ "mapped",
+ [
+ 12490,
+ 12494
+ ]
+ ],
+ [
+ [
+ 13097,
+ 13097
+ ],
+ "mapped",
+ [
+ 12494,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13098,
+ 13098
+ ],
+ "mapped",
+ [
+ 12495,
+ 12452,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13099,
+ 13099
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12475,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13100,
+ 13100
+ ],
+ "mapped",
+ [
+ 12497,
+ 12540,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13101,
+ 13101
+ ],
+ "mapped",
+ [
+ 12496,
+ 12540,
+ 12524,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13102,
+ 13102
+ ],
+ "mapped",
+ [
+ 12500,
+ 12450,
+ 12473,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13103,
+ 13103
+ ],
+ "mapped",
+ [
+ 12500,
+ 12463,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13104,
+ 13104
+ ],
+ "mapped",
+ [
+ 12500,
+ 12467
+ ]
+ ],
+ [
+ [
+ 13105,
+ 13105
+ ],
+ "mapped",
+ [
+ 12499,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13106,
+ 13106
+ ],
+ "mapped",
+ [
+ 12501,
+ 12449,
+ 12521,
+ 12483,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13107,
+ 13107
+ ],
+ "mapped",
+ [
+ 12501,
+ 12451,
+ 12540,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13108,
+ 13108
+ ],
+ "mapped",
+ [
+ 12502,
+ 12483,
+ 12471,
+ 12455,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13109,
+ 13109
+ ],
+ "mapped",
+ [
+ 12501,
+ 12521,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13110,
+ 13110
+ ],
+ "mapped",
+ [
+ 12504,
+ 12463,
+ 12479,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13111,
+ 13111
+ ],
+ "mapped",
+ [
+ 12506,
+ 12477
+ ]
+ ],
+ [
+ [
+ 13112,
+ 13112
+ ],
+ "mapped",
+ [
+ 12506,
+ 12491,
+ 12498
+ ]
+ ],
+ [
+ [
+ 13113,
+ 13113
+ ],
+ "mapped",
+ [
+ 12504,
+ 12523,
+ 12484
+ ]
+ ],
+ [
+ [
+ 13114,
+ 13114
+ ],
+ "mapped",
+ [
+ 12506,
+ 12531,
+ 12473
+ ]
+ ],
+ [
+ [
+ 13115,
+ 13115
+ ],
+ "mapped",
+ [
+ 12506,
+ 12540,
+ 12472
+ ]
+ ],
+ [
+ [
+ 13116,
+ 13116
+ ],
+ "mapped",
+ [
+ 12505,
+ 12540,
+ 12479
+ ]
+ ],
+ [
+ [
+ 13117,
+ 13117
+ ],
+ "mapped",
+ [
+ 12509,
+ 12452,
+ 12531,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13118,
+ 13118
+ ],
+ "mapped",
+ [
+ 12508,
+ 12523,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13119,
+ 13119
+ ],
+ "mapped",
+ [
+ 12507,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13120,
+ 13120
+ ],
+ "mapped",
+ [
+ 12509,
+ 12531,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13121,
+ 13121
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13122,
+ 13122
+ ],
+ "mapped",
+ [
+ 12507,
+ 12540,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13123,
+ 13123
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12463,
+ 12525
+ ]
+ ],
+ [
+ [
+ 13124,
+ 13124
+ ],
+ "mapped",
+ [
+ 12510,
+ 12452,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13125,
+ 13125
+ ],
+ "mapped",
+ [
+ 12510,
+ 12483,
+ 12495
+ ]
+ ],
+ [
+ [
+ 13126,
+ 13126
+ ],
+ "mapped",
+ [
+ 12510,
+ 12523,
+ 12463
+ ]
+ ],
+ [
+ [
+ 13127,
+ 13127
+ ],
+ "mapped",
+ [
+ 12510,
+ 12531,
+ 12471,
+ 12519,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13128,
+ 13128
+ ],
+ "mapped",
+ [
+ 12511,
+ 12463,
+ 12525,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13129,
+ 13129
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522
+ ]
+ ],
+ [
+ [
+ 13130,
+ 13130
+ ],
+ "mapped",
+ [
+ 12511,
+ 12522,
+ 12496,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13131,
+ 13131
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460
+ ]
+ ],
+ [
+ [
+ 13132,
+ 13132
+ ],
+ "mapped",
+ [
+ 12513,
+ 12460,
+ 12488,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13133,
+ 13133
+ ],
+ "mapped",
+ [
+ 12513,
+ 12540,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13134,
+ 13134
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12489
+ ]
+ ],
+ [
+ [
+ 13135,
+ 13135
+ ],
+ "mapped",
+ [
+ 12516,
+ 12540,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13136,
+ 13136
+ ],
+ "mapped",
+ [
+ 12518,
+ 12450,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13137,
+ 13137
+ ],
+ "mapped",
+ [
+ 12522,
+ 12483,
+ 12488,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13138,
+ 13138
+ ],
+ "mapped",
+ [
+ 12522,
+ 12521
+ ]
+ ],
+ [
+ [
+ 13139,
+ 13139
+ ],
+ "mapped",
+ [
+ 12523,
+ 12500,
+ 12540
+ ]
+ ],
+ [
+ [
+ 13140,
+ 13140
+ ],
+ "mapped",
+ [
+ 12523,
+ 12540,
+ 12502,
+ 12523
+ ]
+ ],
+ [
+ [
+ 13141,
+ 13141
+ ],
+ "mapped",
+ [
+ 12524,
+ 12512
+ ]
+ ],
+ [
+ [
+ 13142,
+ 13142
+ ],
+ "mapped",
+ [
+ 12524,
+ 12531,
+ 12488,
+ 12466,
+ 12531
+ ]
+ ],
+ [
+ [
+ 13143,
+ 13143
+ ],
+ "mapped",
+ [
+ 12527,
+ 12483,
+ 12488
+ ]
+ ],
+ [
+ [
+ 13144,
+ 13144
+ ],
+ "mapped",
+ [
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13145,
+ 13145
+ ],
+ "mapped",
+ [
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13146,
+ 13146
+ ],
+ "mapped",
+ [
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13147,
+ 13147
+ ],
+ "mapped",
+ [
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13148,
+ 13148
+ ],
+ "mapped",
+ [
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13149,
+ 13149
+ ],
+ "mapped",
+ [
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13150,
+ 13150
+ ],
+ "mapped",
+ [
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13151,
+ 13151
+ ],
+ "mapped",
+ [
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13152,
+ 13152
+ ],
+ "mapped",
+ [
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13153,
+ 13153
+ ],
+ "mapped",
+ [
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13154,
+ 13154
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13155,
+ 13155
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13156,
+ 13156
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13157,
+ 13157
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13158,
+ 13158
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13159,
+ 13159
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13160,
+ 13160
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13161,
+ 13161
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13162,
+ 13162
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13163,
+ 13163
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13164,
+ 13164
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13165,
+ 13165
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13166,
+ 13166
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13167,
+ 13167
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13168,
+ 13168
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 28857
+ ]
+ ],
+ [
+ [
+ 13169,
+ 13169
+ ],
+ "mapped",
+ [
+ 104,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13170,
+ 13170
+ ],
+ "mapped",
+ [
+ 100,
+ 97
+ ]
+ ],
+ [
+ [
+ 13171,
+ 13171
+ ],
+ "mapped",
+ [
+ 97,
+ 117
+ ]
+ ],
+ [
+ [
+ 13172,
+ 13172
+ ],
+ "mapped",
+ [
+ 98,
+ 97,
+ 114
+ ]
+ ],
+ [
+ [
+ 13173,
+ 13173
+ ],
+ "mapped",
+ [
+ 111,
+ 118
+ ]
+ ],
+ [
+ [
+ 13174,
+ 13174
+ ],
+ "mapped",
+ [
+ 112,
+ 99
+ ]
+ ],
+ [
+ [
+ 13175,
+ 13175
+ ],
+ "mapped",
+ [
+ 100,
+ 109
+ ]
+ ],
+ [
+ [
+ 13176,
+ 13176
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13177,
+ 13177
+ ],
+ "mapped",
+ [
+ 100,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13178,
+ 13178
+ ],
+ "mapped",
+ [
+ 105,
+ 117
+ ]
+ ],
+ [
+ [
+ 13179,
+ 13179
+ ],
+ "mapped",
+ [
+ 24179,
+ 25104
+ ]
+ ],
+ [
+ [
+ 13180,
+ 13180
+ ],
+ "mapped",
+ [
+ 26157,
+ 21644
+ ]
+ ],
+ [
+ [
+ 13181,
+ 13181
+ ],
+ "mapped",
+ [
+ 22823,
+ 27491
+ ]
+ ],
+ [
+ [
+ 13182,
+ 13182
+ ],
+ "mapped",
+ [
+ 26126,
+ 27835
+ ]
+ ],
+ [
+ [
+ 13183,
+ 13183
+ ],
+ "mapped",
+ [
+ 26666,
+ 24335,
+ 20250,
+ 31038
+ ]
+ ],
+ [
+ [
+ 13184,
+ 13184
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13185,
+ 13185
+ ],
+ "mapped",
+ [
+ 110,
+ 97
+ ]
+ ],
+ [
+ [
+ 13186,
+ 13186
+ ],
+ "mapped",
+ [
+ 956,
+ 97
+ ]
+ ],
+ [
+ [
+ 13187,
+ 13187
+ ],
+ "mapped",
+ [
+ 109,
+ 97
+ ]
+ ],
+ [
+ [
+ 13188,
+ 13188
+ ],
+ "mapped",
+ [
+ 107,
+ 97
+ ]
+ ],
+ [
+ [
+ 13189,
+ 13189
+ ],
+ "mapped",
+ [
+ 107,
+ 98
+ ]
+ ],
+ [
+ [
+ 13190,
+ 13190
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13191,
+ 13191
+ ],
+ "mapped",
+ [
+ 103,
+ 98
+ ]
+ ],
+ [
+ [
+ 13192,
+ 13192
+ ],
+ "mapped",
+ [
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13193,
+ 13193
+ ],
+ "mapped",
+ [
+ 107,
+ 99,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13194,
+ 13194
+ ],
+ "mapped",
+ [
+ 112,
+ 102
+ ]
+ ],
+ [
+ [
+ 13195,
+ 13195
+ ],
+ "mapped",
+ [
+ 110,
+ 102
+ ]
+ ],
+ [
+ [
+ 13196,
+ 13196
+ ],
+ "mapped",
+ [
+ 956,
+ 102
+ ]
+ ],
+ [
+ [
+ 13197,
+ 13197
+ ],
+ "mapped",
+ [
+ 956,
+ 103
+ ]
+ ],
+ [
+ [
+ 13198,
+ 13198
+ ],
+ "mapped",
+ [
+ 109,
+ 103
+ ]
+ ],
+ [
+ [
+ 13199,
+ 13199
+ ],
+ "mapped",
+ [
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13200,
+ 13200
+ ],
+ "mapped",
+ [
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13201,
+ 13201
+ ],
+ "mapped",
+ [
+ 107,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13202,
+ 13202
+ ],
+ "mapped",
+ [
+ 109,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13203,
+ 13203
+ ],
+ "mapped",
+ [
+ 103,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13204,
+ 13204
+ ],
+ "mapped",
+ [
+ 116,
+ 104,
+ 122
+ ]
+ ],
+ [
+ [
+ 13205,
+ 13205
+ ],
+ "mapped",
+ [
+ 956,
+ 108
+ ]
+ ],
+ [
+ [
+ 13206,
+ 13206
+ ],
+ "mapped",
+ [
+ 109,
+ 108
+ ]
+ ],
+ [
+ [
+ 13207,
+ 13207
+ ],
+ "mapped",
+ [
+ 100,
+ 108
+ ]
+ ],
+ [
+ [
+ 13208,
+ 13208
+ ],
+ "mapped",
+ [
+ 107,
+ 108
+ ]
+ ],
+ [
+ [
+ 13209,
+ 13209
+ ],
+ "mapped",
+ [
+ 102,
+ 109
+ ]
+ ],
+ [
+ [
+ 13210,
+ 13210
+ ],
+ "mapped",
+ [
+ 110,
+ 109
+ ]
+ ],
+ [
+ [
+ 13211,
+ 13211
+ ],
+ "mapped",
+ [
+ 956,
+ 109
+ ]
+ ],
+ [
+ [
+ 13212,
+ 13212
+ ],
+ "mapped",
+ [
+ 109,
+ 109
+ ]
+ ],
+ [
+ [
+ 13213,
+ 13213
+ ],
+ "mapped",
+ [
+ 99,
+ 109
+ ]
+ ],
+ [
+ [
+ 13214,
+ 13214
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13215,
+ 13215
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13216,
+ 13216
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13217,
+ 13217
+ ],
+ "mapped",
+ [
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13218,
+ 13218
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 50
+ ]
+ ],
+ [
+ [
+ 13219,
+ 13219
+ ],
+ "mapped",
+ [
+ 109,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13220,
+ 13220
+ ],
+ "mapped",
+ [
+ 99,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13221,
+ 13221
+ ],
+ "mapped",
+ [
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13222,
+ 13222
+ ],
+ "mapped",
+ [
+ 107,
+ 109,
+ 51
+ ]
+ ],
+ [
+ [
+ 13223,
+ 13223
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13224,
+ 13224
+ ],
+ "mapped",
+ [
+ 109,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13225,
+ 13225
+ ],
+ "mapped",
+ [
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13226,
+ 13226
+ ],
+ "mapped",
+ [
+ 107,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13227,
+ 13227
+ ],
+ "mapped",
+ [
+ 109,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13228,
+ 13228
+ ],
+ "mapped",
+ [
+ 103,
+ 112,
+ 97
+ ]
+ ],
+ [
+ [
+ 13229,
+ 13229
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100
+ ]
+ ],
+ [
+ [
+ 13230,
+ 13230
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115
+ ]
+ ],
+ [
+ [
+ 13231,
+ 13231
+ ],
+ "mapped",
+ [
+ 114,
+ 97,
+ 100,
+ 8725,
+ 115,
+ 50
+ ]
+ ],
+ [
+ [
+ 13232,
+ 13232
+ ],
+ "mapped",
+ [
+ 112,
+ 115
+ ]
+ ],
+ [
+ [
+ 13233,
+ 13233
+ ],
+ "mapped",
+ [
+ 110,
+ 115
+ ]
+ ],
+ [
+ [
+ 13234,
+ 13234
+ ],
+ "mapped",
+ [
+ 956,
+ 115
+ ]
+ ],
+ [
+ [
+ 13235,
+ 13235
+ ],
+ "mapped",
+ [
+ 109,
+ 115
+ ]
+ ],
+ [
+ [
+ 13236,
+ 13236
+ ],
+ "mapped",
+ [
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 13237,
+ 13237
+ ],
+ "mapped",
+ [
+ 110,
+ 118
+ ]
+ ],
+ [
+ [
+ 13238,
+ 13238
+ ],
+ "mapped",
+ [
+ 956,
+ 118
+ ]
+ ],
+ [
+ [
+ 13239,
+ 13239
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13240,
+ 13240
+ ],
+ "mapped",
+ [
+ 107,
+ 118
+ ]
+ ],
+ [
+ [
+ 13241,
+ 13241
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 13242,
+ 13242
+ ],
+ "mapped",
+ [
+ 112,
+ 119
+ ]
+ ],
+ [
+ [
+ 13243,
+ 13243
+ ],
+ "mapped",
+ [
+ 110,
+ 119
+ ]
+ ],
+ [
+ [
+ 13244,
+ 13244
+ ],
+ "mapped",
+ [
+ 956,
+ 119
+ ]
+ ],
+ [
+ [
+ 13245,
+ 13245
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13246,
+ 13246
+ ],
+ "mapped",
+ [
+ 107,
+ 119
+ ]
+ ],
+ [
+ [
+ 13247,
+ 13247
+ ],
+ "mapped",
+ [
+ 109,
+ 119
+ ]
+ ],
+ [
+ [
+ 13248,
+ 13248
+ ],
+ "mapped",
+ [
+ 107,
+ 969
+ ]
+ ],
+ [
+ [
+ 13249,
+ 13249
+ ],
+ "mapped",
+ [
+ 109,
+ 969
+ ]
+ ],
+ [
+ [
+ 13250,
+ 13250
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13251,
+ 13251
+ ],
+ "mapped",
+ [
+ 98,
+ 113
+ ]
+ ],
+ [
+ [
+ 13252,
+ 13252
+ ],
+ "mapped",
+ [
+ 99,
+ 99
+ ]
+ ],
+ [
+ [
+ 13253,
+ 13253
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 13254,
+ 13254
+ ],
+ "mapped",
+ [
+ 99,
+ 8725,
+ 107,
+ 103
+ ]
+ ],
+ [
+ [
+ 13255,
+ 13255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13256,
+ 13256
+ ],
+ "mapped",
+ [
+ 100,
+ 98
+ ]
+ ],
+ [
+ [
+ 13257,
+ 13257
+ ],
+ "mapped",
+ [
+ 103,
+ 121
+ ]
+ ],
+ [
+ [
+ 13258,
+ 13258
+ ],
+ "mapped",
+ [
+ 104,
+ 97
+ ]
+ ],
+ [
+ [
+ 13259,
+ 13259
+ ],
+ "mapped",
+ [
+ 104,
+ 112
+ ]
+ ],
+ [
+ [
+ 13260,
+ 13260
+ ],
+ "mapped",
+ [
+ 105,
+ 110
+ ]
+ ],
+ [
+ [
+ 13261,
+ 13261
+ ],
+ "mapped",
+ [
+ 107,
+ 107
+ ]
+ ],
+ [
+ [
+ 13262,
+ 13262
+ ],
+ "mapped",
+ [
+ 107,
+ 109
+ ]
+ ],
+ [
+ [
+ 13263,
+ 13263
+ ],
+ "mapped",
+ [
+ 107,
+ 116
+ ]
+ ],
+ [
+ [
+ 13264,
+ 13264
+ ],
+ "mapped",
+ [
+ 108,
+ 109
+ ]
+ ],
+ [
+ [
+ 13265,
+ 13265
+ ],
+ "mapped",
+ [
+ 108,
+ 110
+ ]
+ ],
+ [
+ [
+ 13266,
+ 13266
+ ],
+ "mapped",
+ [
+ 108,
+ 111,
+ 103
+ ]
+ ],
+ [
+ [
+ 13267,
+ 13267
+ ],
+ "mapped",
+ [
+ 108,
+ 120
+ ]
+ ],
+ [
+ [
+ 13268,
+ 13268
+ ],
+ "mapped",
+ [
+ 109,
+ 98
+ ]
+ ],
+ [
+ [
+ 13269,
+ 13269
+ ],
+ "mapped",
+ [
+ 109,
+ 105,
+ 108
+ ]
+ ],
+ [
+ [
+ 13270,
+ 13270
+ ],
+ "mapped",
+ [
+ 109,
+ 111,
+ 108
+ ]
+ ],
+ [
+ [
+ 13271,
+ 13271
+ ],
+ "mapped",
+ [
+ 112,
+ 104
+ ]
+ ],
+ [
+ [
+ 13272,
+ 13272
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 13273,
+ 13273
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 109
+ ]
+ ],
+ [
+ [
+ 13274,
+ 13274
+ ],
+ "mapped",
+ [
+ 112,
+ 114
+ ]
+ ],
+ [
+ [
+ 13275,
+ 13275
+ ],
+ "mapped",
+ [
+ 115,
+ 114
+ ]
+ ],
+ [
+ [
+ 13276,
+ 13276
+ ],
+ "mapped",
+ [
+ 115,
+ 118
+ ]
+ ],
+ [
+ [
+ 13277,
+ 13277
+ ],
+ "mapped",
+ [
+ 119,
+ 98
+ ]
+ ],
+ [
+ [
+ 13278,
+ 13278
+ ],
+ "mapped",
+ [
+ 118,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13279,
+ 13279
+ ],
+ "mapped",
+ [
+ 97,
+ 8725,
+ 109
+ ]
+ ],
+ [
+ [
+ 13280,
+ 13280
+ ],
+ "mapped",
+ [
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13281,
+ 13281
+ ],
+ "mapped",
+ [
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13282,
+ 13282
+ ],
+ "mapped",
+ [
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13283,
+ 13283
+ ],
+ "mapped",
+ [
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13284,
+ 13284
+ ],
+ "mapped",
+ [
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13285,
+ 13285
+ ],
+ "mapped",
+ [
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13286,
+ 13286
+ ],
+ "mapped",
+ [
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13287,
+ 13287
+ ],
+ "mapped",
+ [
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13288,
+ 13288
+ ],
+ "mapped",
+ [
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13289,
+ 13289
+ ],
+ "mapped",
+ [
+ 49,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13290,
+ 13290
+ ],
+ "mapped",
+ [
+ 49,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13291,
+ 13291
+ ],
+ "mapped",
+ [
+ 49,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13292,
+ 13292
+ ],
+ "mapped",
+ [
+ 49,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13293,
+ 13293
+ ],
+ "mapped",
+ [
+ 49,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13294,
+ 13294
+ ],
+ "mapped",
+ [
+ 49,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13295,
+ 13295
+ ],
+ "mapped",
+ [
+ 49,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13296,
+ 13296
+ ],
+ "mapped",
+ [
+ 49,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13297,
+ 13297
+ ],
+ "mapped",
+ [
+ 49,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13298,
+ 13298
+ ],
+ "mapped",
+ [
+ 49,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13299,
+ 13299
+ ],
+ "mapped",
+ [
+ 50,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13300,
+ 13300
+ ],
+ "mapped",
+ [
+ 50,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13301,
+ 13301
+ ],
+ "mapped",
+ [
+ 50,
+ 50,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13302,
+ 13302
+ ],
+ "mapped",
+ [
+ 50,
+ 51,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13303,
+ 13303
+ ],
+ "mapped",
+ [
+ 50,
+ 52,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13304,
+ 13304
+ ],
+ "mapped",
+ [
+ 50,
+ 53,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13305,
+ 13305
+ ],
+ "mapped",
+ [
+ 50,
+ 54,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13306,
+ 13306
+ ],
+ "mapped",
+ [
+ 50,
+ 55,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13307,
+ 13307
+ ],
+ "mapped",
+ [
+ 50,
+ 56,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13308,
+ 13308
+ ],
+ "mapped",
+ [
+ 50,
+ 57,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13309,
+ 13309
+ ],
+ "mapped",
+ [
+ 51,
+ 48,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13310,
+ 13310
+ ],
+ "mapped",
+ [
+ 51,
+ 49,
+ 26085
+ ]
+ ],
+ [
+ [
+ 13311,
+ 13311
+ ],
+ "mapped",
+ [
+ 103,
+ 97,
+ 108
+ ]
+ ],
+ [
+ [
+ 13312,
+ 19893
+ ],
+ "valid"
+ ],
+ [
+ [
+ 19894,
+ 19903
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 19904,
+ 19967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 19968,
+ 40869
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40870,
+ 40891
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40892,
+ 40899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40900,
+ 40907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40908,
+ 40908
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40909,
+ 40917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 40918,
+ 40959
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 40960,
+ 42124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42125,
+ 42127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42128,
+ 42145
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42146,
+ 42147
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42148,
+ 42163
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42164,
+ 42164
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42165,
+ 42176
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42177,
+ 42177
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42178,
+ 42180
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42181,
+ 42181
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42182,
+ 42182
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42183,
+ 42191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42192,
+ 42237
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42238,
+ 42239
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42240,
+ 42508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42509,
+ 42511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42512,
+ 42539
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42540,
+ 42559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42560,
+ 42560
+ ],
+ "mapped",
+ [
+ 42561
+ ]
+ ],
+ [
+ [
+ 42561,
+ 42561
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42562,
+ 42562
+ ],
+ "mapped",
+ [
+ 42563
+ ]
+ ],
+ [
+ [
+ 42563,
+ 42563
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42564,
+ 42564
+ ],
+ "mapped",
+ [
+ 42565
+ ]
+ ],
+ [
+ [
+ 42565,
+ 42565
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42566,
+ 42566
+ ],
+ "mapped",
+ [
+ 42567
+ ]
+ ],
+ [
+ [
+ 42567,
+ 42567
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42568,
+ 42568
+ ],
+ "mapped",
+ [
+ 42569
+ ]
+ ],
+ [
+ [
+ 42569,
+ 42569
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42570,
+ 42570
+ ],
+ "mapped",
+ [
+ 42571
+ ]
+ ],
+ [
+ [
+ 42571,
+ 42571
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42572,
+ 42572
+ ],
+ "mapped",
+ [
+ 42573
+ ]
+ ],
+ [
+ [
+ 42573,
+ 42573
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42574,
+ 42574
+ ],
+ "mapped",
+ [
+ 42575
+ ]
+ ],
+ [
+ [
+ 42575,
+ 42575
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42576,
+ 42576
+ ],
+ "mapped",
+ [
+ 42577
+ ]
+ ],
+ [
+ [
+ 42577,
+ 42577
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42578,
+ 42578
+ ],
+ "mapped",
+ [
+ 42579
+ ]
+ ],
+ [
+ [
+ 42579,
+ 42579
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42580,
+ 42580
+ ],
+ "mapped",
+ [
+ 42581
+ ]
+ ],
+ [
+ [
+ 42581,
+ 42581
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42582,
+ 42582
+ ],
+ "mapped",
+ [
+ 42583
+ ]
+ ],
+ [
+ [
+ 42583,
+ 42583
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42584,
+ 42584
+ ],
+ "mapped",
+ [
+ 42585
+ ]
+ ],
+ [
+ [
+ 42585,
+ 42585
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42586,
+ 42586
+ ],
+ "mapped",
+ [
+ 42587
+ ]
+ ],
+ [
+ [
+ 42587,
+ 42587
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42588,
+ 42588
+ ],
+ "mapped",
+ [
+ 42589
+ ]
+ ],
+ [
+ [
+ 42589,
+ 42589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42590,
+ 42590
+ ],
+ "mapped",
+ [
+ 42591
+ ]
+ ],
+ [
+ [
+ 42591,
+ 42591
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42592,
+ 42592
+ ],
+ "mapped",
+ [
+ 42593
+ ]
+ ],
+ [
+ [
+ 42593,
+ 42593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42594,
+ 42594
+ ],
+ "mapped",
+ [
+ 42595
+ ]
+ ],
+ [
+ [
+ 42595,
+ 42595
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42596,
+ 42596
+ ],
+ "mapped",
+ [
+ 42597
+ ]
+ ],
+ [
+ [
+ 42597,
+ 42597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42598,
+ 42598
+ ],
+ "mapped",
+ [
+ 42599
+ ]
+ ],
+ [
+ [
+ 42599,
+ 42599
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42600,
+ 42600
+ ],
+ "mapped",
+ [
+ 42601
+ ]
+ ],
+ [
+ [
+ 42601,
+ 42601
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42602,
+ 42602
+ ],
+ "mapped",
+ [
+ 42603
+ ]
+ ],
+ [
+ [
+ 42603,
+ 42603
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42604,
+ 42604
+ ],
+ "mapped",
+ [
+ 42605
+ ]
+ ],
+ [
+ [
+ 42605,
+ 42607
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42608,
+ 42611
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42612,
+ 42619
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42620,
+ 42621
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42622,
+ 42622
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42623,
+ 42623
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42624,
+ 42624
+ ],
+ "mapped",
+ [
+ 42625
+ ]
+ ],
+ [
+ [
+ 42625,
+ 42625
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42626,
+ 42626
+ ],
+ "mapped",
+ [
+ 42627
+ ]
+ ],
+ [
+ [
+ 42627,
+ 42627
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42628,
+ 42628
+ ],
+ "mapped",
+ [
+ 42629
+ ]
+ ],
+ [
+ [
+ 42629,
+ 42629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42630,
+ 42630
+ ],
+ "mapped",
+ [
+ 42631
+ ]
+ ],
+ [
+ [
+ 42631,
+ 42631
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42632,
+ 42632
+ ],
+ "mapped",
+ [
+ 42633
+ ]
+ ],
+ [
+ [
+ 42633,
+ 42633
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42634,
+ 42634
+ ],
+ "mapped",
+ [
+ 42635
+ ]
+ ],
+ [
+ [
+ 42635,
+ 42635
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42636,
+ 42636
+ ],
+ "mapped",
+ [
+ 42637
+ ]
+ ],
+ [
+ [
+ 42637,
+ 42637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42638,
+ 42638
+ ],
+ "mapped",
+ [
+ 42639
+ ]
+ ],
+ [
+ [
+ 42639,
+ 42639
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42640,
+ 42640
+ ],
+ "mapped",
+ [
+ 42641
+ ]
+ ],
+ [
+ [
+ 42641,
+ 42641
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42642,
+ 42642
+ ],
+ "mapped",
+ [
+ 42643
+ ]
+ ],
+ [
+ [
+ 42643,
+ 42643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42644,
+ 42644
+ ],
+ "mapped",
+ [
+ 42645
+ ]
+ ],
+ [
+ [
+ 42645,
+ 42645
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42646,
+ 42646
+ ],
+ "mapped",
+ [
+ 42647
+ ]
+ ],
+ [
+ [
+ 42647,
+ 42647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42648,
+ 42648
+ ],
+ "mapped",
+ [
+ 42649
+ ]
+ ],
+ [
+ [
+ 42649,
+ 42649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42650,
+ 42650
+ ],
+ "mapped",
+ [
+ 42651
+ ]
+ ],
+ [
+ [
+ 42651,
+ 42651
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42652,
+ 42652
+ ],
+ "mapped",
+ [
+ 1098
+ ]
+ ],
+ [
+ [
+ 42653,
+ 42653
+ ],
+ "mapped",
+ [
+ 1100
+ ]
+ ],
+ [
+ [
+ 42654,
+ 42654
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42655,
+ 42655
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42656,
+ 42725
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42726,
+ 42735
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42736,
+ 42737
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42738,
+ 42743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42744,
+ 42751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42752,
+ 42774
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42775,
+ 42778
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42779,
+ 42783
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42784,
+ 42785
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42786,
+ 42786
+ ],
+ "mapped",
+ [
+ 42787
+ ]
+ ],
+ [
+ [
+ 42787,
+ 42787
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42788,
+ 42788
+ ],
+ "mapped",
+ [
+ 42789
+ ]
+ ],
+ [
+ [
+ 42789,
+ 42789
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42790,
+ 42790
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 42791,
+ 42791
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42792,
+ 42792
+ ],
+ "mapped",
+ [
+ 42793
+ ]
+ ],
+ [
+ [
+ 42793,
+ 42793
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42794,
+ 42794
+ ],
+ "mapped",
+ [
+ 42795
+ ]
+ ],
+ [
+ [
+ 42795,
+ 42795
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42796,
+ 42796
+ ],
+ "mapped",
+ [
+ 42797
+ ]
+ ],
+ [
+ [
+ 42797,
+ 42797
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42798,
+ 42798
+ ],
+ "mapped",
+ [
+ 42799
+ ]
+ ],
+ [
+ [
+ 42799,
+ 42801
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42802,
+ 42802
+ ],
+ "mapped",
+ [
+ 42803
+ ]
+ ],
+ [
+ [
+ 42803,
+ 42803
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42804,
+ 42804
+ ],
+ "mapped",
+ [
+ 42805
+ ]
+ ],
+ [
+ [
+ 42805,
+ 42805
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42806,
+ 42806
+ ],
+ "mapped",
+ [
+ 42807
+ ]
+ ],
+ [
+ [
+ 42807,
+ 42807
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42808,
+ 42808
+ ],
+ "mapped",
+ [
+ 42809
+ ]
+ ],
+ [
+ [
+ 42809,
+ 42809
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42810,
+ 42810
+ ],
+ "mapped",
+ [
+ 42811
+ ]
+ ],
+ [
+ [
+ 42811,
+ 42811
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42812,
+ 42812
+ ],
+ "mapped",
+ [
+ 42813
+ ]
+ ],
+ [
+ [
+ 42813,
+ 42813
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42814,
+ 42814
+ ],
+ "mapped",
+ [
+ 42815
+ ]
+ ],
+ [
+ [
+ 42815,
+ 42815
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42816,
+ 42816
+ ],
+ "mapped",
+ [
+ 42817
+ ]
+ ],
+ [
+ [
+ 42817,
+ 42817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42818,
+ 42818
+ ],
+ "mapped",
+ [
+ 42819
+ ]
+ ],
+ [
+ [
+ 42819,
+ 42819
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42820,
+ 42820
+ ],
+ "mapped",
+ [
+ 42821
+ ]
+ ],
+ [
+ [
+ 42821,
+ 42821
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42822,
+ 42822
+ ],
+ "mapped",
+ [
+ 42823
+ ]
+ ],
+ [
+ [
+ 42823,
+ 42823
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42824,
+ 42824
+ ],
+ "mapped",
+ [
+ 42825
+ ]
+ ],
+ [
+ [
+ 42825,
+ 42825
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42826,
+ 42826
+ ],
+ "mapped",
+ [
+ 42827
+ ]
+ ],
+ [
+ [
+ 42827,
+ 42827
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42828,
+ 42828
+ ],
+ "mapped",
+ [
+ 42829
+ ]
+ ],
+ [
+ [
+ 42829,
+ 42829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42830,
+ 42830
+ ],
+ "mapped",
+ [
+ 42831
+ ]
+ ],
+ [
+ [
+ 42831,
+ 42831
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42832,
+ 42832
+ ],
+ "mapped",
+ [
+ 42833
+ ]
+ ],
+ [
+ [
+ 42833,
+ 42833
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42834,
+ 42834
+ ],
+ "mapped",
+ [
+ 42835
+ ]
+ ],
+ [
+ [
+ 42835,
+ 42835
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42836,
+ 42836
+ ],
+ "mapped",
+ [
+ 42837
+ ]
+ ],
+ [
+ [
+ 42837,
+ 42837
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42838,
+ 42838
+ ],
+ "mapped",
+ [
+ 42839
+ ]
+ ],
+ [
+ [
+ 42839,
+ 42839
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42840,
+ 42840
+ ],
+ "mapped",
+ [
+ 42841
+ ]
+ ],
+ [
+ [
+ 42841,
+ 42841
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42842,
+ 42842
+ ],
+ "mapped",
+ [
+ 42843
+ ]
+ ],
+ [
+ [
+ 42843,
+ 42843
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42844,
+ 42844
+ ],
+ "mapped",
+ [
+ 42845
+ ]
+ ],
+ [
+ [
+ 42845,
+ 42845
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42846,
+ 42846
+ ],
+ "mapped",
+ [
+ 42847
+ ]
+ ],
+ [
+ [
+ 42847,
+ 42847
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42848,
+ 42848
+ ],
+ "mapped",
+ [
+ 42849
+ ]
+ ],
+ [
+ [
+ 42849,
+ 42849
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42850,
+ 42850
+ ],
+ "mapped",
+ [
+ 42851
+ ]
+ ],
+ [
+ [
+ 42851,
+ 42851
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42852,
+ 42852
+ ],
+ "mapped",
+ [
+ 42853
+ ]
+ ],
+ [
+ [
+ 42853,
+ 42853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42854,
+ 42854
+ ],
+ "mapped",
+ [
+ 42855
+ ]
+ ],
+ [
+ [
+ 42855,
+ 42855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42856,
+ 42856
+ ],
+ "mapped",
+ [
+ 42857
+ ]
+ ],
+ [
+ [
+ 42857,
+ 42857
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42858,
+ 42858
+ ],
+ "mapped",
+ [
+ 42859
+ ]
+ ],
+ [
+ [
+ 42859,
+ 42859
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42860,
+ 42860
+ ],
+ "mapped",
+ [
+ 42861
+ ]
+ ],
+ [
+ [
+ 42861,
+ 42861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42862,
+ 42862
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42863,
+ 42863
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42864,
+ 42864
+ ],
+ "mapped",
+ [
+ 42863
+ ]
+ ],
+ [
+ [
+ 42865,
+ 42872
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42873,
+ 42873
+ ],
+ "mapped",
+ [
+ 42874
+ ]
+ ],
+ [
+ [
+ 42874,
+ 42874
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42875,
+ 42875
+ ],
+ "mapped",
+ [
+ 42876
+ ]
+ ],
+ [
+ [
+ 42876,
+ 42876
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42877,
+ 42877
+ ],
+ "mapped",
+ [
+ 7545
+ ]
+ ],
+ [
+ [
+ 42878,
+ 42878
+ ],
+ "mapped",
+ [
+ 42879
+ ]
+ ],
+ [
+ [
+ 42879,
+ 42879
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42880,
+ 42880
+ ],
+ "mapped",
+ [
+ 42881
+ ]
+ ],
+ [
+ [
+ 42881,
+ 42881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42882,
+ 42882
+ ],
+ "mapped",
+ [
+ 42883
+ ]
+ ],
+ [
+ [
+ 42883,
+ 42883
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42884,
+ 42884
+ ],
+ "mapped",
+ [
+ 42885
+ ]
+ ],
+ [
+ [
+ 42885,
+ 42885
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42886,
+ 42886
+ ],
+ "mapped",
+ [
+ 42887
+ ]
+ ],
+ [
+ [
+ 42887,
+ 42888
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42889,
+ 42890
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 42891,
+ 42891
+ ],
+ "mapped",
+ [
+ 42892
+ ]
+ ],
+ [
+ [
+ 42892,
+ 42892
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42893,
+ 42893
+ ],
+ "mapped",
+ [
+ 613
+ ]
+ ],
+ [
+ [
+ 42894,
+ 42894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42895,
+ 42895
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42896,
+ 42896
+ ],
+ "mapped",
+ [
+ 42897
+ ]
+ ],
+ [
+ [
+ 42897,
+ 42897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42898,
+ 42898
+ ],
+ "mapped",
+ [
+ 42899
+ ]
+ ],
+ [
+ [
+ 42899,
+ 42899
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42900,
+ 42901
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42902,
+ 42902
+ ],
+ "mapped",
+ [
+ 42903
+ ]
+ ],
+ [
+ [
+ 42903,
+ 42903
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42904,
+ 42904
+ ],
+ "mapped",
+ [
+ 42905
+ ]
+ ],
+ [
+ [
+ 42905,
+ 42905
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42906,
+ 42906
+ ],
+ "mapped",
+ [
+ 42907
+ ]
+ ],
+ [
+ [
+ 42907,
+ 42907
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42908,
+ 42908
+ ],
+ "mapped",
+ [
+ 42909
+ ]
+ ],
+ [
+ [
+ 42909,
+ 42909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42910,
+ 42910
+ ],
+ "mapped",
+ [
+ 42911
+ ]
+ ],
+ [
+ [
+ 42911,
+ 42911
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42912,
+ 42912
+ ],
+ "mapped",
+ [
+ 42913
+ ]
+ ],
+ [
+ [
+ 42913,
+ 42913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42914,
+ 42914
+ ],
+ "mapped",
+ [
+ 42915
+ ]
+ ],
+ [
+ [
+ 42915,
+ 42915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42916,
+ 42916
+ ],
+ "mapped",
+ [
+ 42917
+ ]
+ ],
+ [
+ [
+ 42917,
+ 42917
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42918,
+ 42918
+ ],
+ "mapped",
+ [
+ 42919
+ ]
+ ],
+ [
+ [
+ 42919,
+ 42919
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42920,
+ 42920
+ ],
+ "mapped",
+ [
+ 42921
+ ]
+ ],
+ [
+ [
+ 42921,
+ 42921
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42922,
+ 42922
+ ],
+ "mapped",
+ [
+ 614
+ ]
+ ],
+ [
+ [
+ 42923,
+ 42923
+ ],
+ "mapped",
+ [
+ 604
+ ]
+ ],
+ [
+ [
+ 42924,
+ 42924
+ ],
+ "mapped",
+ [
+ 609
+ ]
+ ],
+ [
+ [
+ 42925,
+ 42925
+ ],
+ "mapped",
+ [
+ 620
+ ]
+ ],
+ [
+ [
+ 42926,
+ 42927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42928,
+ 42928
+ ],
+ "mapped",
+ [
+ 670
+ ]
+ ],
+ [
+ [
+ 42929,
+ 42929
+ ],
+ "mapped",
+ [
+ 647
+ ]
+ ],
+ [
+ [
+ 42930,
+ 42930
+ ],
+ "mapped",
+ [
+ 669
+ ]
+ ],
+ [
+ [
+ 42931,
+ 42931
+ ],
+ "mapped",
+ [
+ 43859
+ ]
+ ],
+ [
+ [
+ 42932,
+ 42932
+ ],
+ "mapped",
+ [
+ 42933
+ ]
+ ],
+ [
+ [
+ 42933,
+ 42933
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42934,
+ 42934
+ ],
+ "mapped",
+ [
+ 42935
+ ]
+ ],
+ [
+ [
+ 42935,
+ 42935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 42936,
+ 42998
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 42999,
+ 42999
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43000,
+ 43000
+ ],
+ "mapped",
+ [
+ 295
+ ]
+ ],
+ [
+ [
+ 43001,
+ 43001
+ ],
+ "mapped",
+ [
+ 339
+ ]
+ ],
+ [
+ [
+ 43002,
+ 43002
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43003,
+ 43007
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43008,
+ 43047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43048,
+ 43051
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43052,
+ 43055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43056,
+ 43065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43066,
+ 43071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43072,
+ 43123
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43124,
+ 43127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43128,
+ 43135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43136,
+ 43204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43205,
+ 43213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43214,
+ 43215
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43216,
+ 43225
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43226,
+ 43231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43232,
+ 43255
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43256,
+ 43258
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43259,
+ 43259
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43260,
+ 43260
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43261,
+ 43261
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43262,
+ 43263
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43264,
+ 43309
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43310,
+ 43311
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43312,
+ 43347
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43348,
+ 43358
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43359,
+ 43359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43360,
+ 43388
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43389,
+ 43391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43392,
+ 43456
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43457,
+ 43469
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43470,
+ 43470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43471,
+ 43481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43482,
+ 43485
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43486,
+ 43487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43488,
+ 43518
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43519,
+ 43519
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43520,
+ 43574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43575,
+ 43583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43584,
+ 43597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43598,
+ 43599
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43600,
+ 43609
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43610,
+ 43611
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43612,
+ 43615
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43616,
+ 43638
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43639,
+ 43641
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43642,
+ 43643
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43644,
+ 43647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43648,
+ 43714
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43715,
+ 43738
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43739,
+ 43741
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43742,
+ 43743
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43744,
+ 43759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43760,
+ 43761
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43762,
+ 43766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43767,
+ 43776
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43777,
+ 43782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43783,
+ 43784
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43785,
+ 43790
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43791,
+ 43792
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43793,
+ 43798
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43799,
+ 43807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43808,
+ 43814
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43815,
+ 43815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43816,
+ 43822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43823,
+ 43823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43824,
+ 43866
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43867,
+ 43867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 43868,
+ 43868
+ ],
+ "mapped",
+ [
+ 42791
+ ]
+ ],
+ [
+ [
+ 43869,
+ 43869
+ ],
+ "mapped",
+ [
+ 43831
+ ]
+ ],
+ [
+ [
+ 43870,
+ 43870
+ ],
+ "mapped",
+ [
+ 619
+ ]
+ ],
+ [
+ [
+ 43871,
+ 43871
+ ],
+ "mapped",
+ [
+ 43858
+ ]
+ ],
+ [
+ [
+ 43872,
+ 43875
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43876,
+ 43877
+ ],
+ "valid"
+ ],
+ [
+ [
+ 43878,
+ 43887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 43888,
+ 43888
+ ],
+ "mapped",
+ [
+ 5024
+ ]
+ ],
+ [
+ [
+ 43889,
+ 43889
+ ],
+ "mapped",
+ [
+ 5025
+ ]
+ ],
+ [
+ [
+ 43890,
+ 43890
+ ],
+ "mapped",
+ [
+ 5026
+ ]
+ ],
+ [
+ [
+ 43891,
+ 43891
+ ],
+ "mapped",
+ [
+ 5027
+ ]
+ ],
+ [
+ [
+ 43892,
+ 43892
+ ],
+ "mapped",
+ [
+ 5028
+ ]
+ ],
+ [
+ [
+ 43893,
+ 43893
+ ],
+ "mapped",
+ [
+ 5029
+ ]
+ ],
+ [
+ [
+ 43894,
+ 43894
+ ],
+ "mapped",
+ [
+ 5030
+ ]
+ ],
+ [
+ [
+ 43895,
+ 43895
+ ],
+ "mapped",
+ [
+ 5031
+ ]
+ ],
+ [
+ [
+ 43896,
+ 43896
+ ],
+ "mapped",
+ [
+ 5032
+ ]
+ ],
+ [
+ [
+ 43897,
+ 43897
+ ],
+ "mapped",
+ [
+ 5033
+ ]
+ ],
+ [
+ [
+ 43898,
+ 43898
+ ],
+ "mapped",
+ [
+ 5034
+ ]
+ ],
+ [
+ [
+ 43899,
+ 43899
+ ],
+ "mapped",
+ [
+ 5035
+ ]
+ ],
+ [
+ [
+ 43900,
+ 43900
+ ],
+ "mapped",
+ [
+ 5036
+ ]
+ ],
+ [
+ [
+ 43901,
+ 43901
+ ],
+ "mapped",
+ [
+ 5037
+ ]
+ ],
+ [
+ [
+ 43902,
+ 43902
+ ],
+ "mapped",
+ [
+ 5038
+ ]
+ ],
+ [
+ [
+ 43903,
+ 43903
+ ],
+ "mapped",
+ [
+ 5039
+ ]
+ ],
+ [
+ [
+ 43904,
+ 43904
+ ],
+ "mapped",
+ [
+ 5040
+ ]
+ ],
+ [
+ [
+ 43905,
+ 43905
+ ],
+ "mapped",
+ [
+ 5041
+ ]
+ ],
+ [
+ [
+ 43906,
+ 43906
+ ],
+ "mapped",
+ [
+ 5042
+ ]
+ ],
+ [
+ [
+ 43907,
+ 43907
+ ],
+ "mapped",
+ [
+ 5043
+ ]
+ ],
+ [
+ [
+ 43908,
+ 43908
+ ],
+ "mapped",
+ [
+ 5044
+ ]
+ ],
+ [
+ [
+ 43909,
+ 43909
+ ],
+ "mapped",
+ [
+ 5045
+ ]
+ ],
+ [
+ [
+ 43910,
+ 43910
+ ],
+ "mapped",
+ [
+ 5046
+ ]
+ ],
+ [
+ [
+ 43911,
+ 43911
+ ],
+ "mapped",
+ [
+ 5047
+ ]
+ ],
+ [
+ [
+ 43912,
+ 43912
+ ],
+ "mapped",
+ [
+ 5048
+ ]
+ ],
+ [
+ [
+ 43913,
+ 43913
+ ],
+ "mapped",
+ [
+ 5049
+ ]
+ ],
+ [
+ [
+ 43914,
+ 43914
+ ],
+ "mapped",
+ [
+ 5050
+ ]
+ ],
+ [
+ [
+ 43915,
+ 43915
+ ],
+ "mapped",
+ [
+ 5051
+ ]
+ ],
+ [
+ [
+ 43916,
+ 43916
+ ],
+ "mapped",
+ [
+ 5052
+ ]
+ ],
+ [
+ [
+ 43917,
+ 43917
+ ],
+ "mapped",
+ [
+ 5053
+ ]
+ ],
+ [
+ [
+ 43918,
+ 43918
+ ],
+ "mapped",
+ [
+ 5054
+ ]
+ ],
+ [
+ [
+ 43919,
+ 43919
+ ],
+ "mapped",
+ [
+ 5055
+ ]
+ ],
+ [
+ [
+ 43920,
+ 43920
+ ],
+ "mapped",
+ [
+ 5056
+ ]
+ ],
+ [
+ [
+ 43921,
+ 43921
+ ],
+ "mapped",
+ [
+ 5057
+ ]
+ ],
+ [
+ [
+ 43922,
+ 43922
+ ],
+ "mapped",
+ [
+ 5058
+ ]
+ ],
+ [
+ [
+ 43923,
+ 43923
+ ],
+ "mapped",
+ [
+ 5059
+ ]
+ ],
+ [
+ [
+ 43924,
+ 43924
+ ],
+ "mapped",
+ [
+ 5060
+ ]
+ ],
+ [
+ [
+ 43925,
+ 43925
+ ],
+ "mapped",
+ [
+ 5061
+ ]
+ ],
+ [
+ [
+ 43926,
+ 43926
+ ],
+ "mapped",
+ [
+ 5062
+ ]
+ ],
+ [
+ [
+ 43927,
+ 43927
+ ],
+ "mapped",
+ [
+ 5063
+ ]
+ ],
+ [
+ [
+ 43928,
+ 43928
+ ],
+ "mapped",
+ [
+ 5064
+ ]
+ ],
+ [
+ [
+ 43929,
+ 43929
+ ],
+ "mapped",
+ [
+ 5065
+ ]
+ ],
+ [
+ [
+ 43930,
+ 43930
+ ],
+ "mapped",
+ [
+ 5066
+ ]
+ ],
+ [
+ [
+ 43931,
+ 43931
+ ],
+ "mapped",
+ [
+ 5067
+ ]
+ ],
+ [
+ [
+ 43932,
+ 43932
+ ],
+ "mapped",
+ [
+ 5068
+ ]
+ ],
+ [
+ [
+ 43933,
+ 43933
+ ],
+ "mapped",
+ [
+ 5069
+ ]
+ ],
+ [
+ [
+ 43934,
+ 43934
+ ],
+ "mapped",
+ [
+ 5070
+ ]
+ ],
+ [
+ [
+ 43935,
+ 43935
+ ],
+ "mapped",
+ [
+ 5071
+ ]
+ ],
+ [
+ [
+ 43936,
+ 43936
+ ],
+ "mapped",
+ [
+ 5072
+ ]
+ ],
+ [
+ [
+ 43937,
+ 43937
+ ],
+ "mapped",
+ [
+ 5073
+ ]
+ ],
+ [
+ [
+ 43938,
+ 43938
+ ],
+ "mapped",
+ [
+ 5074
+ ]
+ ],
+ [
+ [
+ 43939,
+ 43939
+ ],
+ "mapped",
+ [
+ 5075
+ ]
+ ],
+ [
+ [
+ 43940,
+ 43940
+ ],
+ "mapped",
+ [
+ 5076
+ ]
+ ],
+ [
+ [
+ 43941,
+ 43941
+ ],
+ "mapped",
+ [
+ 5077
+ ]
+ ],
+ [
+ [
+ 43942,
+ 43942
+ ],
+ "mapped",
+ [
+ 5078
+ ]
+ ],
+ [
+ [
+ 43943,
+ 43943
+ ],
+ "mapped",
+ [
+ 5079
+ ]
+ ],
+ [
+ [
+ 43944,
+ 43944
+ ],
+ "mapped",
+ [
+ 5080
+ ]
+ ],
+ [
+ [
+ 43945,
+ 43945
+ ],
+ "mapped",
+ [
+ 5081
+ ]
+ ],
+ [
+ [
+ 43946,
+ 43946
+ ],
+ "mapped",
+ [
+ 5082
+ ]
+ ],
+ [
+ [
+ 43947,
+ 43947
+ ],
+ "mapped",
+ [
+ 5083
+ ]
+ ],
+ [
+ [
+ 43948,
+ 43948
+ ],
+ "mapped",
+ [
+ 5084
+ ]
+ ],
+ [
+ [
+ 43949,
+ 43949
+ ],
+ "mapped",
+ [
+ 5085
+ ]
+ ],
+ [
+ [
+ 43950,
+ 43950
+ ],
+ "mapped",
+ [
+ 5086
+ ]
+ ],
+ [
+ [
+ 43951,
+ 43951
+ ],
+ "mapped",
+ [
+ 5087
+ ]
+ ],
+ [
+ [
+ 43952,
+ 43952
+ ],
+ "mapped",
+ [
+ 5088
+ ]
+ ],
+ [
+ [
+ 43953,
+ 43953
+ ],
+ "mapped",
+ [
+ 5089
+ ]
+ ],
+ [
+ [
+ 43954,
+ 43954
+ ],
+ "mapped",
+ [
+ 5090
+ ]
+ ],
+ [
+ [
+ 43955,
+ 43955
+ ],
+ "mapped",
+ [
+ 5091
+ ]
+ ],
+ [
+ [
+ 43956,
+ 43956
+ ],
+ "mapped",
+ [
+ 5092
+ ]
+ ],
+ [
+ [
+ 43957,
+ 43957
+ ],
+ "mapped",
+ [
+ 5093
+ ]
+ ],
+ [
+ [
+ 43958,
+ 43958
+ ],
+ "mapped",
+ [
+ 5094
+ ]
+ ],
+ [
+ [
+ 43959,
+ 43959
+ ],
+ "mapped",
+ [
+ 5095
+ ]
+ ],
+ [
+ [
+ 43960,
+ 43960
+ ],
+ "mapped",
+ [
+ 5096
+ ]
+ ],
+ [
+ [
+ 43961,
+ 43961
+ ],
+ "mapped",
+ [
+ 5097
+ ]
+ ],
+ [
+ [
+ 43962,
+ 43962
+ ],
+ "mapped",
+ [
+ 5098
+ ]
+ ],
+ [
+ [
+ 43963,
+ 43963
+ ],
+ "mapped",
+ [
+ 5099
+ ]
+ ],
+ [
+ [
+ 43964,
+ 43964
+ ],
+ "mapped",
+ [
+ 5100
+ ]
+ ],
+ [
+ [
+ 43965,
+ 43965
+ ],
+ "mapped",
+ [
+ 5101
+ ]
+ ],
+ [
+ [
+ 43966,
+ 43966
+ ],
+ "mapped",
+ [
+ 5102
+ ]
+ ],
+ [
+ [
+ 43967,
+ 43967
+ ],
+ "mapped",
+ [
+ 5103
+ ]
+ ],
+ [
+ [
+ 43968,
+ 44010
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44011,
+ 44011
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 44012,
+ 44013
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44014,
+ 44015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44016,
+ 44025
+ ],
+ "valid"
+ ],
+ [
+ [
+ 44026,
+ 44031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 44032,
+ 55203
+ ],
+ "valid"
+ ],
+ [
+ [
+ 55204,
+ 55215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55216,
+ 55238
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55239,
+ 55242
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55243,
+ 55291
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 55292,
+ 55295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 55296,
+ 57343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 57344,
+ 63743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 63744,
+ 63744
+ ],
+ "mapped",
+ [
+ 35912
+ ]
+ ],
+ [
+ [
+ 63745,
+ 63745
+ ],
+ "mapped",
+ [
+ 26356
+ ]
+ ],
+ [
+ [
+ 63746,
+ 63746
+ ],
+ "mapped",
+ [
+ 36554
+ ]
+ ],
+ [
+ [
+ 63747,
+ 63747
+ ],
+ "mapped",
+ [
+ 36040
+ ]
+ ],
+ [
+ [
+ 63748,
+ 63748
+ ],
+ "mapped",
+ [
+ 28369
+ ]
+ ],
+ [
+ [
+ 63749,
+ 63749
+ ],
+ "mapped",
+ [
+ 20018
+ ]
+ ],
+ [
+ [
+ 63750,
+ 63750
+ ],
+ "mapped",
+ [
+ 21477
+ ]
+ ],
+ [
+ [
+ 63751,
+ 63752
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 63753,
+ 63753
+ ],
+ "mapped",
+ [
+ 22865
+ ]
+ ],
+ [
+ [
+ 63754,
+ 63754
+ ],
+ "mapped",
+ [
+ 37329
+ ]
+ ],
+ [
+ [
+ 63755,
+ 63755
+ ],
+ "mapped",
+ [
+ 21895
+ ]
+ ],
+ [
+ [
+ 63756,
+ 63756
+ ],
+ "mapped",
+ [
+ 22856
+ ]
+ ],
+ [
+ [
+ 63757,
+ 63757
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 63758,
+ 63758
+ ],
+ "mapped",
+ [
+ 30313
+ ]
+ ],
+ [
+ [
+ 63759,
+ 63759
+ ],
+ "mapped",
+ [
+ 32645
+ ]
+ ],
+ [
+ [
+ 63760,
+ 63760
+ ],
+ "mapped",
+ [
+ 34367
+ ]
+ ],
+ [
+ [
+ 63761,
+ 63761
+ ],
+ "mapped",
+ [
+ 34746
+ ]
+ ],
+ [
+ [
+ 63762,
+ 63762
+ ],
+ "mapped",
+ [
+ 35064
+ ]
+ ],
+ [
+ [
+ 63763,
+ 63763
+ ],
+ "mapped",
+ [
+ 37007
+ ]
+ ],
+ [
+ [
+ 63764,
+ 63764
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63765,
+ 63765
+ ],
+ "mapped",
+ [
+ 27931
+ ]
+ ],
+ [
+ [
+ 63766,
+ 63766
+ ],
+ "mapped",
+ [
+ 28889
+ ]
+ ],
+ [
+ [
+ 63767,
+ 63767
+ ],
+ "mapped",
+ [
+ 29662
+ ]
+ ],
+ [
+ [
+ 63768,
+ 63768
+ ],
+ "mapped",
+ [
+ 33853
+ ]
+ ],
+ [
+ [
+ 63769,
+ 63769
+ ],
+ "mapped",
+ [
+ 37226
+ ]
+ ],
+ [
+ [
+ 63770,
+ 63770
+ ],
+ "mapped",
+ [
+ 39409
+ ]
+ ],
+ [
+ [
+ 63771,
+ 63771
+ ],
+ "mapped",
+ [
+ 20098
+ ]
+ ],
+ [
+ [
+ 63772,
+ 63772
+ ],
+ "mapped",
+ [
+ 21365
+ ]
+ ],
+ [
+ [
+ 63773,
+ 63773
+ ],
+ "mapped",
+ [
+ 27396
+ ]
+ ],
+ [
+ [
+ 63774,
+ 63774
+ ],
+ "mapped",
+ [
+ 29211
+ ]
+ ],
+ [
+ [
+ 63775,
+ 63775
+ ],
+ "mapped",
+ [
+ 34349
+ ]
+ ],
+ [
+ [
+ 63776,
+ 63776
+ ],
+ "mapped",
+ [
+ 40478
+ ]
+ ],
+ [
+ [
+ 63777,
+ 63777
+ ],
+ "mapped",
+ [
+ 23888
+ ]
+ ],
+ [
+ [
+ 63778,
+ 63778
+ ],
+ "mapped",
+ [
+ 28651
+ ]
+ ],
+ [
+ [
+ 63779,
+ 63779
+ ],
+ "mapped",
+ [
+ 34253
+ ]
+ ],
+ [
+ [
+ 63780,
+ 63780
+ ],
+ "mapped",
+ [
+ 35172
+ ]
+ ],
+ [
+ [
+ 63781,
+ 63781
+ ],
+ "mapped",
+ [
+ 25289
+ ]
+ ],
+ [
+ [
+ 63782,
+ 63782
+ ],
+ "mapped",
+ [
+ 33240
+ ]
+ ],
+ [
+ [
+ 63783,
+ 63783
+ ],
+ "mapped",
+ [
+ 34847
+ ]
+ ],
+ [
+ [
+ 63784,
+ 63784
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 63785,
+ 63785
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 63786,
+ 63786
+ ],
+ "mapped",
+ [
+ 28010
+ ]
+ ],
+ [
+ [
+ 63787,
+ 63787
+ ],
+ "mapped",
+ [
+ 29436
+ ]
+ ],
+ [
+ [
+ 63788,
+ 63788
+ ],
+ "mapped",
+ [
+ 37070
+ ]
+ ],
+ [
+ [
+ 63789,
+ 63789
+ ],
+ "mapped",
+ [
+ 20358
+ ]
+ ],
+ [
+ [
+ 63790,
+ 63790
+ ],
+ "mapped",
+ [
+ 20919
+ ]
+ ],
+ [
+ [
+ 63791,
+ 63791
+ ],
+ "mapped",
+ [
+ 21214
+ ]
+ ],
+ [
+ [
+ 63792,
+ 63792
+ ],
+ "mapped",
+ [
+ 25796
+ ]
+ ],
+ [
+ [
+ 63793,
+ 63793
+ ],
+ "mapped",
+ [
+ 27347
+ ]
+ ],
+ [
+ [
+ 63794,
+ 63794
+ ],
+ "mapped",
+ [
+ 29200
+ ]
+ ],
+ [
+ [
+ 63795,
+ 63795
+ ],
+ "mapped",
+ [
+ 30439
+ ]
+ ],
+ [
+ [
+ 63796,
+ 63796
+ ],
+ "mapped",
+ [
+ 32769
+ ]
+ ],
+ [
+ [
+ 63797,
+ 63797
+ ],
+ "mapped",
+ [
+ 34310
+ ]
+ ],
+ [
+ [
+ 63798,
+ 63798
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 63799,
+ 63799
+ ],
+ "mapped",
+ [
+ 36335
+ ]
+ ],
+ [
+ [
+ 63800,
+ 63800
+ ],
+ "mapped",
+ [
+ 38706
+ ]
+ ],
+ [
+ [
+ 63801,
+ 63801
+ ],
+ "mapped",
+ [
+ 39791
+ ]
+ ],
+ [
+ [
+ 63802,
+ 63802
+ ],
+ "mapped",
+ [
+ 40442
+ ]
+ ],
+ [
+ [
+ 63803,
+ 63803
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 63804,
+ 63804
+ ],
+ "mapped",
+ [
+ 31103
+ ]
+ ],
+ [
+ [
+ 63805,
+ 63805
+ ],
+ "mapped",
+ [
+ 32160
+ ]
+ ],
+ [
+ [
+ 63806,
+ 63806
+ ],
+ "mapped",
+ [
+ 33737
+ ]
+ ],
+ [
+ [
+ 63807,
+ 63807
+ ],
+ "mapped",
+ [
+ 37636
+ ]
+ ],
+ [
+ [
+ 63808,
+ 63808
+ ],
+ "mapped",
+ [
+ 40575
+ ]
+ ],
+ [
+ [
+ 63809,
+ 63809
+ ],
+ "mapped",
+ [
+ 35542
+ ]
+ ],
+ [
+ [
+ 63810,
+ 63810
+ ],
+ "mapped",
+ [
+ 22751
+ ]
+ ],
+ [
+ [
+ 63811,
+ 63811
+ ],
+ "mapped",
+ [
+ 24324
+ ]
+ ],
+ [
+ [
+ 63812,
+ 63812
+ ],
+ "mapped",
+ [
+ 31840
+ ]
+ ],
+ [
+ [
+ 63813,
+ 63813
+ ],
+ "mapped",
+ [
+ 32894
+ ]
+ ],
+ [
+ [
+ 63814,
+ 63814
+ ],
+ "mapped",
+ [
+ 29282
+ ]
+ ],
+ [
+ [
+ 63815,
+ 63815
+ ],
+ "mapped",
+ [
+ 30922
+ ]
+ ],
+ [
+ [
+ 63816,
+ 63816
+ ],
+ "mapped",
+ [
+ 36034
+ ]
+ ],
+ [
+ [
+ 63817,
+ 63817
+ ],
+ "mapped",
+ [
+ 38647
+ ]
+ ],
+ [
+ [
+ 63818,
+ 63818
+ ],
+ "mapped",
+ [
+ 22744
+ ]
+ ],
+ [
+ [
+ 63819,
+ 63819
+ ],
+ "mapped",
+ [
+ 23650
+ ]
+ ],
+ [
+ [
+ 63820,
+ 63820
+ ],
+ "mapped",
+ [
+ 27155
+ ]
+ ],
+ [
+ [
+ 63821,
+ 63821
+ ],
+ "mapped",
+ [
+ 28122
+ ]
+ ],
+ [
+ [
+ 63822,
+ 63822
+ ],
+ "mapped",
+ [
+ 28431
+ ]
+ ],
+ [
+ [
+ 63823,
+ 63823
+ ],
+ "mapped",
+ [
+ 32047
+ ]
+ ],
+ [
+ [
+ 63824,
+ 63824
+ ],
+ "mapped",
+ [
+ 32311
+ ]
+ ],
+ [
+ [
+ 63825,
+ 63825
+ ],
+ "mapped",
+ [
+ 38475
+ ]
+ ],
+ [
+ [
+ 63826,
+ 63826
+ ],
+ "mapped",
+ [
+ 21202
+ ]
+ ],
+ [
+ [
+ 63827,
+ 63827
+ ],
+ "mapped",
+ [
+ 32907
+ ]
+ ],
+ [
+ [
+ 63828,
+ 63828
+ ],
+ "mapped",
+ [
+ 20956
+ ]
+ ],
+ [
+ [
+ 63829,
+ 63829
+ ],
+ "mapped",
+ [
+ 20940
+ ]
+ ],
+ [
+ [
+ 63830,
+ 63830
+ ],
+ "mapped",
+ [
+ 31260
+ ]
+ ],
+ [
+ [
+ 63831,
+ 63831
+ ],
+ "mapped",
+ [
+ 32190
+ ]
+ ],
+ [
+ [
+ 63832,
+ 63832
+ ],
+ "mapped",
+ [
+ 33777
+ ]
+ ],
+ [
+ [
+ 63833,
+ 63833
+ ],
+ "mapped",
+ [
+ 38517
+ ]
+ ],
+ [
+ [
+ 63834,
+ 63834
+ ],
+ "mapped",
+ [
+ 35712
+ ]
+ ],
+ [
+ [
+ 63835,
+ 63835
+ ],
+ "mapped",
+ [
+ 25295
+ ]
+ ],
+ [
+ [
+ 63836,
+ 63836
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63837,
+ 63837
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 63838,
+ 63838
+ ],
+ "mapped",
+ [
+ 20025
+ ]
+ ],
+ [
+ [
+ 63839,
+ 63839
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63840,
+ 63840
+ ],
+ "mapped",
+ [
+ 24594
+ ]
+ ],
+ [
+ [
+ 63841,
+ 63841
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63842,
+ 63842
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 63843,
+ 63843
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 63844,
+ 63844
+ ],
+ "mapped",
+ [
+ 30971
+ ]
+ ],
+ [
+ [
+ 63845,
+ 63845
+ ],
+ "mapped",
+ [
+ 20415
+ ]
+ ],
+ [
+ [
+ 63846,
+ 63846
+ ],
+ "mapped",
+ [
+ 24489
+ ]
+ ],
+ [
+ [
+ 63847,
+ 63847
+ ],
+ "mapped",
+ [
+ 19981
+ ]
+ ],
+ [
+ [
+ 63848,
+ 63848
+ ],
+ "mapped",
+ [
+ 27852
+ ]
+ ],
+ [
+ [
+ 63849,
+ 63849
+ ],
+ "mapped",
+ [
+ 25976
+ ]
+ ],
+ [
+ [
+ 63850,
+ 63850
+ ],
+ "mapped",
+ [
+ 32034
+ ]
+ ],
+ [
+ [
+ 63851,
+ 63851
+ ],
+ "mapped",
+ [
+ 21443
+ ]
+ ],
+ [
+ [
+ 63852,
+ 63852
+ ],
+ "mapped",
+ [
+ 22622
+ ]
+ ],
+ [
+ [
+ 63853,
+ 63853
+ ],
+ "mapped",
+ [
+ 30465
+ ]
+ ],
+ [
+ [
+ 63854,
+ 63854
+ ],
+ "mapped",
+ [
+ 33865
+ ]
+ ],
+ [
+ [
+ 63855,
+ 63855
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63856,
+ 63856
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 63857,
+ 63857
+ ],
+ "mapped",
+ [
+ 36784
+ ]
+ ],
+ [
+ [
+ 63858,
+ 63858
+ ],
+ "mapped",
+ [
+ 27784
+ ]
+ ],
+ [
+ [
+ 63859,
+ 63859
+ ],
+ "mapped",
+ [
+ 25342
+ ]
+ ],
+ [
+ [
+ 63860,
+ 63860
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 63861,
+ 63861
+ ],
+ "mapped",
+ [
+ 25504
+ ]
+ ],
+ [
+ [
+ 63862,
+ 63862
+ ],
+ "mapped",
+ [
+ 30053
+ ]
+ ],
+ [
+ [
+ 63863,
+ 63863
+ ],
+ "mapped",
+ [
+ 20142
+ ]
+ ],
+ [
+ [
+ 63864,
+ 63864
+ ],
+ "mapped",
+ [
+ 20841
+ ]
+ ],
+ [
+ [
+ 63865,
+ 63865
+ ],
+ "mapped",
+ [
+ 20937
+ ]
+ ],
+ [
+ [
+ 63866,
+ 63866
+ ],
+ "mapped",
+ [
+ 26753
+ ]
+ ],
+ [
+ [
+ 63867,
+ 63867
+ ],
+ "mapped",
+ [
+ 31975
+ ]
+ ],
+ [
+ [
+ 63868,
+ 63868
+ ],
+ "mapped",
+ [
+ 33391
+ ]
+ ],
+ [
+ [
+ 63869,
+ 63869
+ ],
+ "mapped",
+ [
+ 35538
+ ]
+ ],
+ [
+ [
+ 63870,
+ 63870
+ ],
+ "mapped",
+ [
+ 37327
+ ]
+ ],
+ [
+ [
+ 63871,
+ 63871
+ ],
+ "mapped",
+ [
+ 21237
+ ]
+ ],
+ [
+ [
+ 63872,
+ 63872
+ ],
+ "mapped",
+ [
+ 21570
+ ]
+ ],
+ [
+ [
+ 63873,
+ 63873
+ ],
+ "mapped",
+ [
+ 22899
+ ]
+ ],
+ [
+ [
+ 63874,
+ 63874
+ ],
+ "mapped",
+ [
+ 24300
+ ]
+ ],
+ [
+ [
+ 63875,
+ 63875
+ ],
+ "mapped",
+ [
+ 26053
+ ]
+ ],
+ [
+ [
+ 63876,
+ 63876
+ ],
+ "mapped",
+ [
+ 28670
+ ]
+ ],
+ [
+ [
+ 63877,
+ 63877
+ ],
+ "mapped",
+ [
+ 31018
+ ]
+ ],
+ [
+ [
+ 63878,
+ 63878
+ ],
+ "mapped",
+ [
+ 38317
+ ]
+ ],
+ [
+ [
+ 63879,
+ 63879
+ ],
+ "mapped",
+ [
+ 39530
+ ]
+ ],
+ [
+ [
+ 63880,
+ 63880
+ ],
+ "mapped",
+ [
+ 40599
+ ]
+ ],
+ [
+ [
+ 63881,
+ 63881
+ ],
+ "mapped",
+ [
+ 40654
+ ]
+ ],
+ [
+ [
+ 63882,
+ 63882
+ ],
+ "mapped",
+ [
+ 21147
+ ]
+ ],
+ [
+ [
+ 63883,
+ 63883
+ ],
+ "mapped",
+ [
+ 26310
+ ]
+ ],
+ [
+ [
+ 63884,
+ 63884
+ ],
+ "mapped",
+ [
+ 27511
+ ]
+ ],
+ [
+ [
+ 63885,
+ 63885
+ ],
+ "mapped",
+ [
+ 36706
+ ]
+ ],
+ [
+ [
+ 63886,
+ 63886
+ ],
+ "mapped",
+ [
+ 24180
+ ]
+ ],
+ [
+ [
+ 63887,
+ 63887
+ ],
+ "mapped",
+ [
+ 24976
+ ]
+ ],
+ [
+ [
+ 63888,
+ 63888
+ ],
+ "mapped",
+ [
+ 25088
+ ]
+ ],
+ [
+ [
+ 63889,
+ 63889
+ ],
+ "mapped",
+ [
+ 25754
+ ]
+ ],
+ [
+ [
+ 63890,
+ 63890
+ ],
+ "mapped",
+ [
+ 28451
+ ]
+ ],
+ [
+ [
+ 63891,
+ 63891
+ ],
+ "mapped",
+ [
+ 29001
+ ]
+ ],
+ [
+ [
+ 63892,
+ 63892
+ ],
+ "mapped",
+ [
+ 29833
+ ]
+ ],
+ [
+ [
+ 63893,
+ 63893
+ ],
+ "mapped",
+ [
+ 31178
+ ]
+ ],
+ [
+ [
+ 63894,
+ 63894
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 63895,
+ 63895
+ ],
+ "mapped",
+ [
+ 32879
+ ]
+ ],
+ [
+ [
+ 63896,
+ 63896
+ ],
+ "mapped",
+ [
+ 36646
+ ]
+ ],
+ [
+ [
+ 63897,
+ 63897
+ ],
+ "mapped",
+ [
+ 34030
+ ]
+ ],
+ [
+ [
+ 63898,
+ 63898
+ ],
+ "mapped",
+ [
+ 36899
+ ]
+ ],
+ [
+ [
+ 63899,
+ 63899
+ ],
+ "mapped",
+ [
+ 37706
+ ]
+ ],
+ [
+ [
+ 63900,
+ 63900
+ ],
+ "mapped",
+ [
+ 21015
+ ]
+ ],
+ [
+ [
+ 63901,
+ 63901
+ ],
+ "mapped",
+ [
+ 21155
+ ]
+ ],
+ [
+ [
+ 63902,
+ 63902
+ ],
+ "mapped",
+ [
+ 21693
+ ]
+ ],
+ [
+ [
+ 63903,
+ 63903
+ ],
+ "mapped",
+ [
+ 28872
+ ]
+ ],
+ [
+ [
+ 63904,
+ 63904
+ ],
+ "mapped",
+ [
+ 35010
+ ]
+ ],
+ [
+ [
+ 63905,
+ 63905
+ ],
+ "mapped",
+ [
+ 35498
+ ]
+ ],
+ [
+ [
+ 63906,
+ 63906
+ ],
+ "mapped",
+ [
+ 24265
+ ]
+ ],
+ [
+ [
+ 63907,
+ 63907
+ ],
+ "mapped",
+ [
+ 24565
+ ]
+ ],
+ [
+ [
+ 63908,
+ 63908
+ ],
+ "mapped",
+ [
+ 25467
+ ]
+ ],
+ [
+ [
+ 63909,
+ 63909
+ ],
+ "mapped",
+ [
+ 27566
+ ]
+ ],
+ [
+ [
+ 63910,
+ 63910
+ ],
+ "mapped",
+ [
+ 31806
+ ]
+ ],
+ [
+ [
+ 63911,
+ 63911
+ ],
+ "mapped",
+ [
+ 29557
+ ]
+ ],
+ [
+ [
+ 63912,
+ 63912
+ ],
+ "mapped",
+ [
+ 20196
+ ]
+ ],
+ [
+ [
+ 63913,
+ 63913
+ ],
+ "mapped",
+ [
+ 22265
+ ]
+ ],
+ [
+ [
+ 63914,
+ 63914
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 63915,
+ 63915
+ ],
+ "mapped",
+ [
+ 23994
+ ]
+ ],
+ [
+ [
+ 63916,
+ 63916
+ ],
+ "mapped",
+ [
+ 24604
+ ]
+ ],
+ [
+ [
+ 63917,
+ 63917
+ ],
+ "mapped",
+ [
+ 29618
+ ]
+ ],
+ [
+ [
+ 63918,
+ 63918
+ ],
+ "mapped",
+ [
+ 29801
+ ]
+ ],
+ [
+ [
+ 63919,
+ 63919
+ ],
+ "mapped",
+ [
+ 32666
+ ]
+ ],
+ [
+ [
+ 63920,
+ 63920
+ ],
+ "mapped",
+ [
+ 32838
+ ]
+ ],
+ [
+ [
+ 63921,
+ 63921
+ ],
+ "mapped",
+ [
+ 37428
+ ]
+ ],
+ [
+ [
+ 63922,
+ 63922
+ ],
+ "mapped",
+ [
+ 38646
+ ]
+ ],
+ [
+ [
+ 63923,
+ 63923
+ ],
+ "mapped",
+ [
+ 38728
+ ]
+ ],
+ [
+ [
+ 63924,
+ 63924
+ ],
+ "mapped",
+ [
+ 38936
+ ]
+ ],
+ [
+ [
+ 63925,
+ 63925
+ ],
+ "mapped",
+ [
+ 20363
+ ]
+ ],
+ [
+ [
+ 63926,
+ 63926
+ ],
+ "mapped",
+ [
+ 31150
+ ]
+ ],
+ [
+ [
+ 63927,
+ 63927
+ ],
+ "mapped",
+ [
+ 37300
+ ]
+ ],
+ [
+ [
+ 63928,
+ 63928
+ ],
+ "mapped",
+ [
+ 38584
+ ]
+ ],
+ [
+ [
+ 63929,
+ 63929
+ ],
+ "mapped",
+ [
+ 24801
+ ]
+ ],
+ [
+ [
+ 63930,
+ 63930
+ ],
+ "mapped",
+ [
+ 20102
+ ]
+ ],
+ [
+ [
+ 63931,
+ 63931
+ ],
+ "mapped",
+ [
+ 20698
+ ]
+ ],
+ [
+ [
+ 63932,
+ 63932
+ ],
+ "mapped",
+ [
+ 23534
+ ]
+ ],
+ [
+ [
+ 63933,
+ 63933
+ ],
+ "mapped",
+ [
+ 23615
+ ]
+ ],
+ [
+ [
+ 63934,
+ 63934
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 63935,
+ 63935
+ ],
+ "mapped",
+ [
+ 27138
+ ]
+ ],
+ [
+ [
+ 63936,
+ 63936
+ ],
+ "mapped",
+ [
+ 29134
+ ]
+ ],
+ [
+ [
+ 63937,
+ 63937
+ ],
+ "mapped",
+ [
+ 30274
+ ]
+ ],
+ [
+ [
+ 63938,
+ 63938
+ ],
+ "mapped",
+ [
+ 34044
+ ]
+ ],
+ [
+ [
+ 63939,
+ 63939
+ ],
+ "mapped",
+ [
+ 36988
+ ]
+ ],
+ [
+ [
+ 63940,
+ 63940
+ ],
+ "mapped",
+ [
+ 40845
+ ]
+ ],
+ [
+ [
+ 63941,
+ 63941
+ ],
+ "mapped",
+ [
+ 26248
+ ]
+ ],
+ [
+ [
+ 63942,
+ 63942
+ ],
+ "mapped",
+ [
+ 38446
+ ]
+ ],
+ [
+ [
+ 63943,
+ 63943
+ ],
+ "mapped",
+ [
+ 21129
+ ]
+ ],
+ [
+ [
+ 63944,
+ 63944
+ ],
+ "mapped",
+ [
+ 26491
+ ]
+ ],
+ [
+ [
+ 63945,
+ 63945
+ ],
+ "mapped",
+ [
+ 26611
+ ]
+ ],
+ [
+ [
+ 63946,
+ 63946
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 63947,
+ 63947
+ ],
+ "mapped",
+ [
+ 28316
+ ]
+ ],
+ [
+ [
+ 63948,
+ 63948
+ ],
+ "mapped",
+ [
+ 29705
+ ]
+ ],
+ [
+ [
+ 63949,
+ 63949
+ ],
+ "mapped",
+ [
+ 30041
+ ]
+ ],
+ [
+ [
+ 63950,
+ 63950
+ ],
+ "mapped",
+ [
+ 30827
+ ]
+ ],
+ [
+ [
+ 63951,
+ 63951
+ ],
+ "mapped",
+ [
+ 32016
+ ]
+ ],
+ [
+ [
+ 63952,
+ 63952
+ ],
+ "mapped",
+ [
+ 39006
+ ]
+ ],
+ [
+ [
+ 63953,
+ 63953
+ ],
+ "mapped",
+ [
+ 20845
+ ]
+ ],
+ [
+ [
+ 63954,
+ 63954
+ ],
+ "mapped",
+ [
+ 25134
+ ]
+ ],
+ [
+ [
+ 63955,
+ 63955
+ ],
+ "mapped",
+ [
+ 38520
+ ]
+ ],
+ [
+ [
+ 63956,
+ 63956
+ ],
+ "mapped",
+ [
+ 20523
+ ]
+ ],
+ [
+ [
+ 63957,
+ 63957
+ ],
+ "mapped",
+ [
+ 23833
+ ]
+ ],
+ [
+ [
+ 63958,
+ 63958
+ ],
+ "mapped",
+ [
+ 28138
+ ]
+ ],
+ [
+ [
+ 63959,
+ 63959
+ ],
+ "mapped",
+ [
+ 36650
+ ]
+ ],
+ [
+ [
+ 63960,
+ 63960
+ ],
+ "mapped",
+ [
+ 24459
+ ]
+ ],
+ [
+ [
+ 63961,
+ 63961
+ ],
+ "mapped",
+ [
+ 24900
+ ]
+ ],
+ [
+ [
+ 63962,
+ 63962
+ ],
+ "mapped",
+ [
+ 26647
+ ]
+ ],
+ [
+ [
+ 63963,
+ 63963
+ ],
+ "mapped",
+ [
+ 29575
+ ]
+ ],
+ [
+ [
+ 63964,
+ 63964
+ ],
+ "mapped",
+ [
+ 38534
+ ]
+ ],
+ [
+ [
+ 63965,
+ 63965
+ ],
+ "mapped",
+ [
+ 21033
+ ]
+ ],
+ [
+ [
+ 63966,
+ 63966
+ ],
+ "mapped",
+ [
+ 21519
+ ]
+ ],
+ [
+ [
+ 63967,
+ 63967
+ ],
+ "mapped",
+ [
+ 23653
+ ]
+ ],
+ [
+ [
+ 63968,
+ 63968
+ ],
+ "mapped",
+ [
+ 26131
+ ]
+ ],
+ [
+ [
+ 63969,
+ 63969
+ ],
+ "mapped",
+ [
+ 26446
+ ]
+ ],
+ [
+ [
+ 63970,
+ 63970
+ ],
+ "mapped",
+ [
+ 26792
+ ]
+ ],
+ [
+ [
+ 63971,
+ 63971
+ ],
+ "mapped",
+ [
+ 27877
+ ]
+ ],
+ [
+ [
+ 63972,
+ 63972
+ ],
+ "mapped",
+ [
+ 29702
+ ]
+ ],
+ [
+ [
+ 63973,
+ 63973
+ ],
+ "mapped",
+ [
+ 30178
+ ]
+ ],
+ [
+ [
+ 63974,
+ 63974
+ ],
+ "mapped",
+ [
+ 32633
+ ]
+ ],
+ [
+ [
+ 63975,
+ 63975
+ ],
+ "mapped",
+ [
+ 35023
+ ]
+ ],
+ [
+ [
+ 63976,
+ 63976
+ ],
+ "mapped",
+ [
+ 35041
+ ]
+ ],
+ [
+ [
+ 63977,
+ 63977
+ ],
+ "mapped",
+ [
+ 37324
+ ]
+ ],
+ [
+ [
+ 63978,
+ 63978
+ ],
+ "mapped",
+ [
+ 38626
+ ]
+ ],
+ [
+ [
+ 63979,
+ 63979
+ ],
+ "mapped",
+ [
+ 21311
+ ]
+ ],
+ [
+ [
+ 63980,
+ 63980
+ ],
+ "mapped",
+ [
+ 28346
+ ]
+ ],
+ [
+ [
+ 63981,
+ 63981
+ ],
+ "mapped",
+ [
+ 21533
+ ]
+ ],
+ [
+ [
+ 63982,
+ 63982
+ ],
+ "mapped",
+ [
+ 29136
+ ]
+ ],
+ [
+ [
+ 63983,
+ 63983
+ ],
+ "mapped",
+ [
+ 29848
+ ]
+ ],
+ [
+ [
+ 63984,
+ 63984
+ ],
+ "mapped",
+ [
+ 34298
+ ]
+ ],
+ [
+ [
+ 63985,
+ 63985
+ ],
+ "mapped",
+ [
+ 38563
+ ]
+ ],
+ [
+ [
+ 63986,
+ 63986
+ ],
+ "mapped",
+ [
+ 40023
+ ]
+ ],
+ [
+ [
+ 63987,
+ 63987
+ ],
+ "mapped",
+ [
+ 40607
+ ]
+ ],
+ [
+ [
+ 63988,
+ 63988
+ ],
+ "mapped",
+ [
+ 26519
+ ]
+ ],
+ [
+ [
+ 63989,
+ 63989
+ ],
+ "mapped",
+ [
+ 28107
+ ]
+ ],
+ [
+ [
+ 63990,
+ 63990
+ ],
+ "mapped",
+ [
+ 33256
+ ]
+ ],
+ [
+ [
+ 63991,
+ 63991
+ ],
+ "mapped",
+ [
+ 31435
+ ]
+ ],
+ [
+ [
+ 63992,
+ 63992
+ ],
+ "mapped",
+ [
+ 31520
+ ]
+ ],
+ [
+ [
+ 63993,
+ 63993
+ ],
+ "mapped",
+ [
+ 31890
+ ]
+ ],
+ [
+ [
+ 63994,
+ 63994
+ ],
+ "mapped",
+ [
+ 29376
+ ]
+ ],
+ [
+ [
+ 63995,
+ 63995
+ ],
+ "mapped",
+ [
+ 28825
+ ]
+ ],
+ [
+ [
+ 63996,
+ 63996
+ ],
+ "mapped",
+ [
+ 35672
+ ]
+ ],
+ [
+ [
+ 63997,
+ 63997
+ ],
+ "mapped",
+ [
+ 20160
+ ]
+ ],
+ [
+ [
+ 63998,
+ 63998
+ ],
+ "mapped",
+ [
+ 33590
+ ]
+ ],
+ [
+ [
+ 63999,
+ 63999
+ ],
+ "mapped",
+ [
+ 21050
+ ]
+ ],
+ [
+ [
+ 64000,
+ 64000
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 64001,
+ 64001
+ ],
+ "mapped",
+ [
+ 24230
+ ]
+ ],
+ [
+ [
+ 64002,
+ 64002
+ ],
+ "mapped",
+ [
+ 25299
+ ]
+ ],
+ [
+ [
+ 64003,
+ 64003
+ ],
+ "mapped",
+ [
+ 31958
+ ]
+ ],
+ [
+ [
+ 64004,
+ 64004
+ ],
+ "mapped",
+ [
+ 23429
+ ]
+ ],
+ [
+ [
+ 64005,
+ 64005
+ ],
+ "mapped",
+ [
+ 27934
+ ]
+ ],
+ [
+ [
+ 64006,
+ 64006
+ ],
+ "mapped",
+ [
+ 26292
+ ]
+ ],
+ [
+ [
+ 64007,
+ 64007
+ ],
+ "mapped",
+ [
+ 36667
+ ]
+ ],
+ [
+ [
+ 64008,
+ 64008
+ ],
+ "mapped",
+ [
+ 34892
+ ]
+ ],
+ [
+ [
+ 64009,
+ 64009
+ ],
+ "mapped",
+ [
+ 38477
+ ]
+ ],
+ [
+ [
+ 64010,
+ 64010
+ ],
+ "mapped",
+ [
+ 35211
+ ]
+ ],
+ [
+ [
+ 64011,
+ 64011
+ ],
+ "mapped",
+ [
+ 24275
+ ]
+ ],
+ [
+ [
+ 64012,
+ 64012
+ ],
+ "mapped",
+ [
+ 20800
+ ]
+ ],
+ [
+ [
+ 64013,
+ 64013
+ ],
+ "mapped",
+ [
+ 21952
+ ]
+ ],
+ [
+ [
+ 64014,
+ 64015
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64016,
+ 64016
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64017,
+ 64017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64018,
+ 64018
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64019,
+ 64020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64021,
+ 64021
+ ],
+ "mapped",
+ [
+ 20958
+ ]
+ ],
+ [
+ [
+ 64022,
+ 64022
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64023,
+ 64023
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64024,
+ 64024
+ ],
+ "mapped",
+ [
+ 31036
+ ]
+ ],
+ [
+ [
+ 64025,
+ 64025
+ ],
+ "mapped",
+ [
+ 31070
+ ]
+ ],
+ [
+ [
+ 64026,
+ 64026
+ ],
+ "mapped",
+ [
+ 31077
+ ]
+ ],
+ [
+ [
+ 64027,
+ 64027
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 64028,
+ 64028
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64029,
+ 64029
+ ],
+ "mapped",
+ [
+ 31934
+ ]
+ ],
+ [
+ [
+ 64030,
+ 64030
+ ],
+ "mapped",
+ [
+ 32701
+ ]
+ ],
+ [
+ [
+ 64031,
+ 64031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64032,
+ 64032
+ ],
+ "mapped",
+ [
+ 34322
+ ]
+ ],
+ [
+ [
+ 64033,
+ 64033
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64034,
+ 64034
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64035,
+ 64036
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64037,
+ 64037
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64038,
+ 64038
+ ],
+ "mapped",
+ [
+ 37117
+ ]
+ ],
+ [
+ [
+ 64039,
+ 64041
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64042,
+ 64042
+ ],
+ "mapped",
+ [
+ 39151
+ ]
+ ],
+ [
+ [
+ 64043,
+ 64043
+ ],
+ "mapped",
+ [
+ 39164
+ ]
+ ],
+ [
+ [
+ 64044,
+ 64044
+ ],
+ "mapped",
+ [
+ 39208
+ ]
+ ],
+ [
+ [
+ 64045,
+ 64045
+ ],
+ "mapped",
+ [
+ 40372
+ ]
+ ],
+ [
+ [
+ 64046,
+ 64046
+ ],
+ "mapped",
+ [
+ 37086
+ ]
+ ],
+ [
+ [
+ 64047,
+ 64047
+ ],
+ "mapped",
+ [
+ 38583
+ ]
+ ],
+ [
+ [
+ 64048,
+ 64048
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 64049,
+ 64049
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 64050,
+ 64050
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 64051,
+ 64051
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 64052,
+ 64052
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 64053,
+ 64053
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 64054,
+ 64054
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64055,
+ 64055
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 64056,
+ 64056
+ ],
+ "mapped",
+ [
+ 22120
+ ]
+ ],
+ [
+ [
+ 64057,
+ 64057
+ ],
+ "mapped",
+ [
+ 22592
+ ]
+ ],
+ [
+ [
+ 64058,
+ 64058
+ ],
+ "mapped",
+ [
+ 22696
+ ]
+ ],
+ [
+ [
+ 64059,
+ 64059
+ ],
+ "mapped",
+ [
+ 23652
+ ]
+ ],
+ [
+ [
+ 64060,
+ 64060
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 64061,
+ 64061
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 64062,
+ 64062
+ ],
+ "mapped",
+ [
+ 24936
+ ]
+ ],
+ [
+ [
+ 64063,
+ 64063
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64064,
+ 64064
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64065,
+ 64065
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 64066,
+ 64066
+ ],
+ "mapped",
+ [
+ 26082
+ ]
+ ],
+ [
+ [
+ 64067,
+ 64067
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 64068,
+ 64068
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 64069,
+ 64069
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 64070,
+ 64070
+ ],
+ "mapped",
+ [
+ 28186
+ ]
+ ],
+ [
+ [
+ 64071,
+ 64071
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64072,
+ 64072
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64073,
+ 64073
+ ],
+ "mapped",
+ [
+ 29227
+ ]
+ ],
+ [
+ [
+ 64074,
+ 64074
+ ],
+ "mapped",
+ [
+ 29730
+ ]
+ ],
+ [
+ [
+ 64075,
+ 64075
+ ],
+ "mapped",
+ [
+ 30865
+ ]
+ ],
+ [
+ [
+ 64076,
+ 64076
+ ],
+ "mapped",
+ [
+ 31038
+ ]
+ ],
+ [
+ [
+ 64077,
+ 64077
+ ],
+ "mapped",
+ [
+ 31049
+ ]
+ ],
+ [
+ [
+ 64078,
+ 64078
+ ],
+ "mapped",
+ [
+ 31048
+ ]
+ ],
+ [
+ [
+ 64079,
+ 64079
+ ],
+ "mapped",
+ [
+ 31056
+ ]
+ ],
+ [
+ [
+ 64080,
+ 64080
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 64081,
+ 64081
+ ],
+ "mapped",
+ [
+ 31069
+ ]
+ ],
+ [
+ [
+ 64082,
+ 64082
+ ],
+ "mapped",
+ [
+ 31117
+ ]
+ ],
+ [
+ [
+ 64083,
+ 64083
+ ],
+ "mapped",
+ [
+ 31118
+ ]
+ ],
+ [
+ [
+ 64084,
+ 64084
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 64085,
+ 64085
+ ],
+ "mapped",
+ [
+ 31361
+ ]
+ ],
+ [
+ [
+ 64086,
+ 64086
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64087,
+ 64087
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64088,
+ 64088
+ ],
+ "mapped",
+ [
+ 32265
+ ]
+ ],
+ [
+ [
+ 64089,
+ 64089
+ ],
+ "mapped",
+ [
+ 32321
+ ]
+ ],
+ [
+ [
+ 64090,
+ 64090
+ ],
+ "mapped",
+ [
+ 32626
+ ]
+ ],
+ [
+ [
+ 64091,
+ 64091
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64092,
+ 64092
+ ],
+ "mapped",
+ [
+ 33261
+ ]
+ ],
+ [
+ [
+ 64093,
+ 64094
+ ],
+ "mapped",
+ [
+ 33401
+ ]
+ ],
+ [
+ [
+ 64095,
+ 64095
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 64096,
+ 64096
+ ],
+ "mapped",
+ [
+ 35088
+ ]
+ ],
+ [
+ [
+ 64097,
+ 64097
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64098,
+ 64098
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64099,
+ 64099
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64100,
+ 64100
+ ],
+ "mapped",
+ [
+ 36051
+ ]
+ ],
+ [
+ [
+ 64101,
+ 64101
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64102,
+ 64102
+ ],
+ "mapped",
+ [
+ 36790
+ ]
+ ],
+ [
+ [
+ 64103,
+ 64103
+ ],
+ "mapped",
+ [
+ 36920
+ ]
+ ],
+ [
+ [
+ 64104,
+ 64104
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64105,
+ 64105
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64106,
+ 64106
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64107,
+ 64107
+ ],
+ "mapped",
+ [
+ 24693
+ ]
+ ],
+ [
+ [
+ 64108,
+ 64108
+ ],
+ "mapped",
+ [
+ 148206
+ ]
+ ],
+ [
+ [
+ 64109,
+ 64109
+ ],
+ "mapped",
+ [
+ 33304
+ ]
+ ],
+ [
+ [
+ 64110,
+ 64111
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64112,
+ 64112
+ ],
+ "mapped",
+ [
+ 20006
+ ]
+ ],
+ [
+ [
+ 64113,
+ 64113
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 64114,
+ 64114
+ ],
+ "mapped",
+ [
+ 20840
+ ]
+ ],
+ [
+ [
+ 64115,
+ 64115
+ ],
+ "mapped",
+ [
+ 20352
+ ]
+ ],
+ [
+ [
+ 64116,
+ 64116
+ ],
+ "mapped",
+ [
+ 20805
+ ]
+ ],
+ [
+ [
+ 64117,
+ 64117
+ ],
+ "mapped",
+ [
+ 20864
+ ]
+ ],
+ [
+ [
+ 64118,
+ 64118
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 64119,
+ 64119
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 64120,
+ 64120
+ ],
+ "mapped",
+ [
+ 21917
+ ]
+ ],
+ [
+ [
+ 64121,
+ 64121
+ ],
+ "mapped",
+ [
+ 21845
+ ]
+ ],
+ [
+ [
+ 64122,
+ 64122
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 64123,
+ 64123
+ ],
+ "mapped",
+ [
+ 21986
+ ]
+ ],
+ [
+ [
+ 64124,
+ 64124
+ ],
+ "mapped",
+ [
+ 22618
+ ]
+ ],
+ [
+ [
+ 64125,
+ 64125
+ ],
+ "mapped",
+ [
+ 22707
+ ]
+ ],
+ [
+ [
+ 64126,
+ 64126
+ ],
+ "mapped",
+ [
+ 22852
+ ]
+ ],
+ [
+ [
+ 64127,
+ 64127
+ ],
+ "mapped",
+ [
+ 22868
+ ]
+ ],
+ [
+ [
+ 64128,
+ 64128
+ ],
+ "mapped",
+ [
+ 23138
+ ]
+ ],
+ [
+ [
+ 64129,
+ 64129
+ ],
+ "mapped",
+ [
+ 23336
+ ]
+ ],
+ [
+ [
+ 64130,
+ 64130
+ ],
+ "mapped",
+ [
+ 24274
+ ]
+ ],
+ [
+ [
+ 64131,
+ 64131
+ ],
+ "mapped",
+ [
+ 24281
+ ]
+ ],
+ [
+ [
+ 64132,
+ 64132
+ ],
+ "mapped",
+ [
+ 24425
+ ]
+ ],
+ [
+ [
+ 64133,
+ 64133
+ ],
+ "mapped",
+ [
+ 24493
+ ]
+ ],
+ [
+ [
+ 64134,
+ 64134
+ ],
+ "mapped",
+ [
+ 24792
+ ]
+ ],
+ [
+ [
+ 64135,
+ 64135
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 64136,
+ 64136
+ ],
+ "mapped",
+ [
+ 24840
+ ]
+ ],
+ [
+ [
+ 64137,
+ 64137
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 64138,
+ 64138
+ ],
+ "mapped",
+ [
+ 24928
+ ]
+ ],
+ [
+ [
+ 64139,
+ 64139
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 64140,
+ 64140
+ ],
+ "mapped",
+ [
+ 25140
+ ]
+ ],
+ [
+ [
+ 64141,
+ 64141
+ ],
+ "mapped",
+ [
+ 25540
+ ]
+ ],
+ [
+ [
+ 64142,
+ 64142
+ ],
+ "mapped",
+ [
+ 25628
+ ]
+ ],
+ [
+ [
+ 64143,
+ 64143
+ ],
+ "mapped",
+ [
+ 25682
+ ]
+ ],
+ [
+ [
+ 64144,
+ 64144
+ ],
+ "mapped",
+ [
+ 25942
+ ]
+ ],
+ [
+ [
+ 64145,
+ 64145
+ ],
+ "mapped",
+ [
+ 26228
+ ]
+ ],
+ [
+ [
+ 64146,
+ 64146
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 64147,
+ 64147
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 64148,
+ 64148
+ ],
+ "mapped",
+ [
+ 26454
+ ]
+ ],
+ [
+ [
+ 64149,
+ 64149
+ ],
+ "mapped",
+ [
+ 27513
+ ]
+ ],
+ [
+ [
+ 64150,
+ 64150
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 64151,
+ 64151
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 64152,
+ 64152
+ ],
+ "mapped",
+ [
+ 28379
+ ]
+ ],
+ [
+ [
+ 64153,
+ 64153
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 64154,
+ 64154
+ ],
+ "mapped",
+ [
+ 28450
+ ]
+ ],
+ [
+ [
+ 64155,
+ 64155
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 64156,
+ 64156
+ ],
+ "mapped",
+ [
+ 29038
+ ]
+ ],
+ [
+ [
+ 64157,
+ 64157
+ ],
+ "mapped",
+ [
+ 30631
+ ]
+ ],
+ [
+ [
+ 64158,
+ 64158
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 64159,
+ 64159
+ ],
+ "mapped",
+ [
+ 29359
+ ]
+ ],
+ [
+ [
+ 64160,
+ 64160
+ ],
+ "mapped",
+ [
+ 29482
+ ]
+ ],
+ [
+ [
+ 64161,
+ 64161
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 64162,
+ 64162
+ ],
+ "mapped",
+ [
+ 29958
+ ]
+ ],
+ [
+ [
+ 64163,
+ 64163
+ ],
+ "mapped",
+ [
+ 30011
+ ]
+ ],
+ [
+ [
+ 64164,
+ 64164
+ ],
+ "mapped",
+ [
+ 30237
+ ]
+ ],
+ [
+ [
+ 64165,
+ 64165
+ ],
+ "mapped",
+ [
+ 30239
+ ]
+ ],
+ [
+ [
+ 64166,
+ 64166
+ ],
+ "mapped",
+ [
+ 30410
+ ]
+ ],
+ [
+ [
+ 64167,
+ 64167
+ ],
+ "mapped",
+ [
+ 30427
+ ]
+ ],
+ [
+ [
+ 64168,
+ 64168
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 64169,
+ 64169
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 64170,
+ 64170
+ ],
+ "mapped",
+ [
+ 30528
+ ]
+ ],
+ [
+ [
+ 64171,
+ 64171
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 64172,
+ 64172
+ ],
+ "mapped",
+ [
+ 31409
+ ]
+ ],
+ [
+ [
+ 64173,
+ 64173
+ ],
+ "mapped",
+ [
+ 31680
+ ]
+ ],
+ [
+ [
+ 64174,
+ 64174
+ ],
+ "mapped",
+ [
+ 31867
+ ]
+ ],
+ [
+ [
+ 64175,
+ 64175
+ ],
+ "mapped",
+ [
+ 32091
+ ]
+ ],
+ [
+ [
+ 64176,
+ 64176
+ ],
+ "mapped",
+ [
+ 32244
+ ]
+ ],
+ [
+ [
+ 64177,
+ 64177
+ ],
+ "mapped",
+ [
+ 32574
+ ]
+ ],
+ [
+ [
+ 64178,
+ 64178
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 64179,
+ 64179
+ ],
+ "mapped",
+ [
+ 33618
+ ]
+ ],
+ [
+ [
+ 64180,
+ 64180
+ ],
+ "mapped",
+ [
+ 33775
+ ]
+ ],
+ [
+ [
+ 64181,
+ 64181
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 64182,
+ 64182
+ ],
+ "mapped",
+ [
+ 35137
+ ]
+ ],
+ [
+ [
+ 64183,
+ 64183
+ ],
+ "mapped",
+ [
+ 35206
+ ]
+ ],
+ [
+ [
+ 64184,
+ 64184
+ ],
+ "mapped",
+ [
+ 35222
+ ]
+ ],
+ [
+ [
+ 64185,
+ 64185
+ ],
+ "mapped",
+ [
+ 35519
+ ]
+ ],
+ [
+ [
+ 64186,
+ 64186
+ ],
+ "mapped",
+ [
+ 35576
+ ]
+ ],
+ [
+ [
+ 64187,
+ 64187
+ ],
+ "mapped",
+ [
+ 35531
+ ]
+ ],
+ [
+ [
+ 64188,
+ 64188
+ ],
+ "mapped",
+ [
+ 35585
+ ]
+ ],
+ [
+ [
+ 64189,
+ 64189
+ ],
+ "mapped",
+ [
+ 35582
+ ]
+ ],
+ [
+ [
+ 64190,
+ 64190
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 64191,
+ 64191
+ ],
+ "mapped",
+ [
+ 35641
+ ]
+ ],
+ [
+ [
+ 64192,
+ 64192
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 64193,
+ 64193
+ ],
+ "mapped",
+ [
+ 36104
+ ]
+ ],
+ [
+ [
+ 64194,
+ 64194
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 64195,
+ 64195
+ ],
+ "mapped",
+ [
+ 36978
+ ]
+ ],
+ [
+ [
+ 64196,
+ 64196
+ ],
+ "mapped",
+ [
+ 37273
+ ]
+ ],
+ [
+ [
+ 64197,
+ 64197
+ ],
+ "mapped",
+ [
+ 37494
+ ]
+ ],
+ [
+ [
+ 64198,
+ 64198
+ ],
+ "mapped",
+ [
+ 38524
+ ]
+ ],
+ [
+ [
+ 64199,
+ 64199
+ ],
+ "mapped",
+ [
+ 38627
+ ]
+ ],
+ [
+ [
+ 64200,
+ 64200
+ ],
+ "mapped",
+ [
+ 38742
+ ]
+ ],
+ [
+ [
+ 64201,
+ 64201
+ ],
+ "mapped",
+ [
+ 38875
+ ]
+ ],
+ [
+ [
+ 64202,
+ 64202
+ ],
+ "mapped",
+ [
+ 38911
+ ]
+ ],
+ [
+ [
+ 64203,
+ 64203
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 64204,
+ 64204
+ ],
+ "mapped",
+ [
+ 38971
+ ]
+ ],
+ [
+ [
+ 64205,
+ 64205
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 64206,
+ 64206
+ ],
+ "mapped",
+ [
+ 40860
+ ]
+ ],
+ [
+ [
+ 64207,
+ 64207
+ ],
+ "mapped",
+ [
+ 141386
+ ]
+ ],
+ [
+ [
+ 64208,
+ 64208
+ ],
+ "mapped",
+ [
+ 141380
+ ]
+ ],
+ [
+ [
+ 64209,
+ 64209
+ ],
+ "mapped",
+ [
+ 144341
+ ]
+ ],
+ [
+ [
+ 64210,
+ 64210
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 64211,
+ 64211
+ ],
+ "mapped",
+ [
+ 16408
+ ]
+ ],
+ [
+ [
+ 64212,
+ 64212
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 64213,
+ 64213
+ ],
+ "mapped",
+ [
+ 152137
+ ]
+ ],
+ [
+ [
+ 64214,
+ 64214
+ ],
+ "mapped",
+ [
+ 154832
+ ]
+ ],
+ [
+ [
+ 64215,
+ 64215
+ ],
+ "mapped",
+ [
+ 163539
+ ]
+ ],
+ [
+ [
+ 64216,
+ 64216
+ ],
+ "mapped",
+ [
+ 40771
+ ]
+ ],
+ [
+ [
+ 64217,
+ 64217
+ ],
+ "mapped",
+ [
+ 40846
+ ]
+ ],
+ [
+ [
+ 64218,
+ 64255
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64256,
+ 64256
+ ],
+ "mapped",
+ [
+ 102,
+ 102
+ ]
+ ],
+ [
+ [
+ 64257,
+ 64257
+ ],
+ "mapped",
+ [
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64258,
+ 64258
+ ],
+ "mapped",
+ [
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64259,
+ 64259
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 105
+ ]
+ ],
+ [
+ [
+ 64260,
+ 64260
+ ],
+ "mapped",
+ [
+ 102,
+ 102,
+ 108
+ ]
+ ],
+ [
+ [
+ 64261,
+ 64262
+ ],
+ "mapped",
+ [
+ 115,
+ 116
+ ]
+ ],
+ [
+ [
+ 64263,
+ 64274
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64275,
+ 64275
+ ],
+ "mapped",
+ [
+ 1396,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64276,
+ 64276
+ ],
+ "mapped",
+ [
+ 1396,
+ 1381
+ ]
+ ],
+ [
+ [
+ 64277,
+ 64277
+ ],
+ "mapped",
+ [
+ 1396,
+ 1387
+ ]
+ ],
+ [
+ [
+ 64278,
+ 64278
+ ],
+ "mapped",
+ [
+ 1406,
+ 1398
+ ]
+ ],
+ [
+ [
+ 64279,
+ 64279
+ ],
+ "mapped",
+ [
+ 1396,
+ 1389
+ ]
+ ],
+ [
+ [
+ 64280,
+ 64284
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64285,
+ 64285
+ ],
+ "mapped",
+ [
+ 1497,
+ 1460
+ ]
+ ],
+ [
+ [
+ 64286,
+ 64286
+ ],
+ "valid"
+ ],
+ [
+ [
+ 64287,
+ 64287
+ ],
+ "mapped",
+ [
+ 1522,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64288,
+ 64288
+ ],
+ "mapped",
+ [
+ 1506
+ ]
+ ],
+ [
+ [
+ 64289,
+ 64289
+ ],
+ "mapped",
+ [
+ 1488
+ ]
+ ],
+ [
+ [
+ 64290,
+ 64290
+ ],
+ "mapped",
+ [
+ 1491
+ ]
+ ],
+ [
+ [
+ 64291,
+ 64291
+ ],
+ "mapped",
+ [
+ 1492
+ ]
+ ],
+ [
+ [
+ 64292,
+ 64292
+ ],
+ "mapped",
+ [
+ 1499
+ ]
+ ],
+ [
+ [
+ 64293,
+ 64293
+ ],
+ "mapped",
+ [
+ 1500
+ ]
+ ],
+ [
+ [
+ 64294,
+ 64294
+ ],
+ "mapped",
+ [
+ 1501
+ ]
+ ],
+ [
+ [
+ 64295,
+ 64295
+ ],
+ "mapped",
+ [
+ 1512
+ ]
+ ],
+ [
+ [
+ 64296,
+ 64296
+ ],
+ "mapped",
+ [
+ 1514
+ ]
+ ],
+ [
+ [
+ 64297,
+ 64297
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 64298,
+ 64298
+ ],
+ "mapped",
+ [
+ 1513,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64299,
+ 64299
+ ],
+ "mapped",
+ [
+ 1513,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64300,
+ 64300
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1473
+ ]
+ ],
+ [
+ [
+ 64301,
+ 64301
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468,
+ 1474
+ ]
+ ],
+ [
+ [
+ 64302,
+ 64302
+ ],
+ "mapped",
+ [
+ 1488,
+ 1463
+ ]
+ ],
+ [
+ [
+ 64303,
+ 64303
+ ],
+ "mapped",
+ [
+ 1488,
+ 1464
+ ]
+ ],
+ [
+ [
+ 64304,
+ 64304
+ ],
+ "mapped",
+ [
+ 1488,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64305,
+ 64305
+ ],
+ "mapped",
+ [
+ 1489,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64306,
+ 64306
+ ],
+ "mapped",
+ [
+ 1490,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64307,
+ 64307
+ ],
+ "mapped",
+ [
+ 1491,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64308,
+ 64308
+ ],
+ "mapped",
+ [
+ 1492,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64309,
+ 64309
+ ],
+ "mapped",
+ [
+ 1493,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64310,
+ 64310
+ ],
+ "mapped",
+ [
+ 1494,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64311,
+ 64311
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64312,
+ 64312
+ ],
+ "mapped",
+ [
+ 1496,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64313,
+ 64313
+ ],
+ "mapped",
+ [
+ 1497,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64314,
+ 64314
+ ],
+ "mapped",
+ [
+ 1498,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64315,
+ 64315
+ ],
+ "mapped",
+ [
+ 1499,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64316,
+ 64316
+ ],
+ "mapped",
+ [
+ 1500,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64317,
+ 64317
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64318,
+ 64318
+ ],
+ "mapped",
+ [
+ 1502,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64319,
+ 64319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64320,
+ 64320
+ ],
+ "mapped",
+ [
+ 1504,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64321,
+ 64321
+ ],
+ "mapped",
+ [
+ 1505,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64322,
+ 64322
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64323,
+ 64323
+ ],
+ "mapped",
+ [
+ 1507,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64324,
+ 64324
+ ],
+ "mapped",
+ [
+ 1508,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64325,
+ 64325
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64326,
+ 64326
+ ],
+ "mapped",
+ [
+ 1510,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64327,
+ 64327
+ ],
+ "mapped",
+ [
+ 1511,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64328,
+ 64328
+ ],
+ "mapped",
+ [
+ 1512,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64329,
+ 64329
+ ],
+ "mapped",
+ [
+ 1513,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64330,
+ 64330
+ ],
+ "mapped",
+ [
+ 1514,
+ 1468
+ ]
+ ],
+ [
+ [
+ 64331,
+ 64331
+ ],
+ "mapped",
+ [
+ 1493,
+ 1465
+ ]
+ ],
+ [
+ [
+ 64332,
+ 64332
+ ],
+ "mapped",
+ [
+ 1489,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64333,
+ 64333
+ ],
+ "mapped",
+ [
+ 1499,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64334,
+ 64334
+ ],
+ "mapped",
+ [
+ 1508,
+ 1471
+ ]
+ ],
+ [
+ [
+ 64335,
+ 64335
+ ],
+ "mapped",
+ [
+ 1488,
+ 1500
+ ]
+ ],
+ [
+ [
+ 64336,
+ 64337
+ ],
+ "mapped",
+ [
+ 1649
+ ]
+ ],
+ [
+ [
+ 64338,
+ 64341
+ ],
+ "mapped",
+ [
+ 1659
+ ]
+ ],
+ [
+ [
+ 64342,
+ 64345
+ ],
+ "mapped",
+ [
+ 1662
+ ]
+ ],
+ [
+ [
+ 64346,
+ 64349
+ ],
+ "mapped",
+ [
+ 1664
+ ]
+ ],
+ [
+ [
+ 64350,
+ 64353
+ ],
+ "mapped",
+ [
+ 1658
+ ]
+ ],
+ [
+ [
+ 64354,
+ 64357
+ ],
+ "mapped",
+ [
+ 1663
+ ]
+ ],
+ [
+ [
+ 64358,
+ 64361
+ ],
+ "mapped",
+ [
+ 1657
+ ]
+ ],
+ [
+ [
+ 64362,
+ 64365
+ ],
+ "mapped",
+ [
+ 1700
+ ]
+ ],
+ [
+ [
+ 64366,
+ 64369
+ ],
+ "mapped",
+ [
+ 1702
+ ]
+ ],
+ [
+ [
+ 64370,
+ 64373
+ ],
+ "mapped",
+ [
+ 1668
+ ]
+ ],
+ [
+ [
+ 64374,
+ 64377
+ ],
+ "mapped",
+ [
+ 1667
+ ]
+ ],
+ [
+ [
+ 64378,
+ 64381
+ ],
+ "mapped",
+ [
+ 1670
+ ]
+ ],
+ [
+ [
+ 64382,
+ 64385
+ ],
+ "mapped",
+ [
+ 1671
+ ]
+ ],
+ [
+ [
+ 64386,
+ 64387
+ ],
+ "mapped",
+ [
+ 1677
+ ]
+ ],
+ [
+ [
+ 64388,
+ 64389
+ ],
+ "mapped",
+ [
+ 1676
+ ]
+ ],
+ [
+ [
+ 64390,
+ 64391
+ ],
+ "mapped",
+ [
+ 1678
+ ]
+ ],
+ [
+ [
+ 64392,
+ 64393
+ ],
+ "mapped",
+ [
+ 1672
+ ]
+ ],
+ [
+ [
+ 64394,
+ 64395
+ ],
+ "mapped",
+ [
+ 1688
+ ]
+ ],
+ [
+ [
+ 64396,
+ 64397
+ ],
+ "mapped",
+ [
+ 1681
+ ]
+ ],
+ [
+ [
+ 64398,
+ 64401
+ ],
+ "mapped",
+ [
+ 1705
+ ]
+ ],
+ [
+ [
+ 64402,
+ 64405
+ ],
+ "mapped",
+ [
+ 1711
+ ]
+ ],
+ [
+ [
+ 64406,
+ 64409
+ ],
+ "mapped",
+ [
+ 1715
+ ]
+ ],
+ [
+ [
+ 64410,
+ 64413
+ ],
+ "mapped",
+ [
+ 1713
+ ]
+ ],
+ [
+ [
+ 64414,
+ 64415
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 64416,
+ 64419
+ ],
+ "mapped",
+ [
+ 1723
+ ]
+ ],
+ [
+ [
+ 64420,
+ 64421
+ ],
+ "mapped",
+ [
+ 1728
+ ]
+ ],
+ [
+ [
+ 64422,
+ 64425
+ ],
+ "mapped",
+ [
+ 1729
+ ]
+ ],
+ [
+ [
+ 64426,
+ 64429
+ ],
+ "mapped",
+ [
+ 1726
+ ]
+ ],
+ [
+ [
+ 64430,
+ 64431
+ ],
+ "mapped",
+ [
+ 1746
+ ]
+ ],
+ [
+ [
+ 64432,
+ 64433
+ ],
+ "mapped",
+ [
+ 1747
+ ]
+ ],
+ [
+ [
+ 64434,
+ 64449
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64450,
+ 64466
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64467,
+ 64470
+ ],
+ "mapped",
+ [
+ 1709
+ ]
+ ],
+ [
+ [
+ 64471,
+ 64472
+ ],
+ "mapped",
+ [
+ 1735
+ ]
+ ],
+ [
+ [
+ 64473,
+ 64474
+ ],
+ "mapped",
+ [
+ 1734
+ ]
+ ],
+ [
+ [
+ 64475,
+ 64476
+ ],
+ "mapped",
+ [
+ 1736
+ ]
+ ],
+ [
+ [
+ 64477,
+ 64477
+ ],
+ "mapped",
+ [
+ 1735,
+ 1652
+ ]
+ ],
+ [
+ [
+ 64478,
+ 64479
+ ],
+ "mapped",
+ [
+ 1739
+ ]
+ ],
+ [
+ [
+ 64480,
+ 64481
+ ],
+ "mapped",
+ [
+ 1733
+ ]
+ ],
+ [
+ [
+ 64482,
+ 64483
+ ],
+ "mapped",
+ [
+ 1737
+ ]
+ ],
+ [
+ [
+ 64484,
+ 64487
+ ],
+ "mapped",
+ [
+ 1744
+ ]
+ ],
+ [
+ [
+ 64488,
+ 64489
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 64490,
+ 64491
+ ],
+ "mapped",
+ [
+ 1574,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64492,
+ 64493
+ ],
+ "mapped",
+ [
+ 1574,
+ 1749
+ ]
+ ],
+ [
+ [
+ 64494,
+ 64495
+ ],
+ "mapped",
+ [
+ 1574,
+ 1608
+ ]
+ ],
+ [
+ [
+ 64496,
+ 64497
+ ],
+ "mapped",
+ [
+ 1574,
+ 1735
+ ]
+ ],
+ [
+ [
+ 64498,
+ 64499
+ ],
+ "mapped",
+ [
+ 1574,
+ 1734
+ ]
+ ],
+ [
+ [
+ 64500,
+ 64501
+ ],
+ "mapped",
+ [
+ 1574,
+ 1736
+ ]
+ ],
+ [
+ [
+ 64502,
+ 64504
+ ],
+ "mapped",
+ [
+ 1574,
+ 1744
+ ]
+ ],
+ [
+ [
+ 64505,
+ 64507
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64508,
+ 64511
+ ],
+ "mapped",
+ [
+ 1740
+ ]
+ ],
+ [
+ [
+ 64512,
+ 64512
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64513,
+ 64513
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64514,
+ 64514
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64515,
+ 64515
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64516,
+ 64516
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64517,
+ 64517
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64518,
+ 64518
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64519,
+ 64519
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64520,
+ 64520
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64521,
+ 64521
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64522,
+ 64522
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64523,
+ 64523
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64524,
+ 64524
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64525,
+ 64525
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64526,
+ 64526
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64527,
+ 64527
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64528,
+ 64528
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64529,
+ 64529
+ ],
+ "mapped",
+ [
+ 1579,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64530,
+ 64530
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64531,
+ 64531
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64532,
+ 64532
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64533,
+ 64533
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64534,
+ 64534
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64535,
+ 64535
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64536,
+ 64536
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64537,
+ 64537
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64538,
+ 64538
+ ],
+ "mapped",
+ [
+ 1582,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64539,
+ 64539
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64540,
+ 64540
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64541,
+ 64541
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64542,
+ 64542
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64543,
+ 64543
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64544,
+ 64544
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64545,
+ 64545
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64546,
+ 64546
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64547,
+ 64547
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64548,
+ 64548
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64549,
+ 64549
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64550,
+ 64550
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64551,
+ 64551
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64552,
+ 64552
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64553,
+ 64553
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64554,
+ 64554
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64555,
+ 64555
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64556,
+ 64556
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64557,
+ 64557
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64558,
+ 64558
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64559,
+ 64559
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64560,
+ 64560
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64561,
+ 64561
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64562,
+ 64562
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64563,
+ 64563
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64564,
+ 64564
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64565,
+ 64565
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64566,
+ 64566
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64567,
+ 64567
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64568,
+ 64568
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64569,
+ 64569
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64570,
+ 64570
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64571,
+ 64571
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64572,
+ 64572
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64573,
+ 64573
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64574,
+ 64574
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64575,
+ 64575
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64576,
+ 64576
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64577,
+ 64577
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64578,
+ 64578
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64579,
+ 64579
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64580,
+ 64580
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64581,
+ 64581
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64582,
+ 64582
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64583,
+ 64583
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64584,
+ 64584
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64585,
+ 64585
+ ],
+ "mapped",
+ [
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64586,
+ 64586
+ ],
+ "mapped",
+ [
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64587,
+ 64587
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64588,
+ 64588
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64589,
+ 64589
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64590,
+ 64590
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64591,
+ 64591
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64592,
+ 64592
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64593,
+ 64593
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64594,
+ 64594
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64595,
+ 64595
+ ],
+ "mapped",
+ [
+ 1607,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64596,
+ 64596
+ ],
+ "mapped",
+ [
+ 1607,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64597,
+ 64597
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64598,
+ 64598
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64599,
+ 64599
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64600,
+ 64600
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64601,
+ 64601
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64602,
+ 64602
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64603,
+ 64603
+ ],
+ "mapped",
+ [
+ 1584,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64604,
+ 64604
+ ],
+ "mapped",
+ [
+ 1585,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64605,
+ 64605
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64606,
+ 64606
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64607,
+ 64607
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64608,
+ 64608
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64609,
+ 64609
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64610,
+ 64610
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64611,
+ 64611
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64612,
+ 64612
+ ],
+ "mapped",
+ [
+ 1574,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64613,
+ 64613
+ ],
+ "mapped",
+ [
+ 1574,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64614,
+ 64614
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64615,
+ 64615
+ ],
+ "mapped",
+ [
+ 1574,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64616,
+ 64616
+ ],
+ "mapped",
+ [
+ 1574,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64617,
+ 64617
+ ],
+ "mapped",
+ [
+ 1574,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64618,
+ 64618
+ ],
+ "mapped",
+ [
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64619,
+ 64619
+ ],
+ "mapped",
+ [
+ 1576,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64620,
+ 64620
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64621,
+ 64621
+ ],
+ "mapped",
+ [
+ 1576,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64622,
+ 64622
+ ],
+ "mapped",
+ [
+ 1576,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64623,
+ 64623
+ ],
+ "mapped",
+ [
+ 1576,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64624,
+ 64624
+ ],
+ "mapped",
+ [
+ 1578,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64625,
+ 64625
+ ],
+ "mapped",
+ [
+ 1578,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64626,
+ 64626
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64627,
+ 64627
+ ],
+ "mapped",
+ [
+ 1578,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64628,
+ 64628
+ ],
+ "mapped",
+ [
+ 1578,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64629,
+ 64629
+ ],
+ "mapped",
+ [
+ 1578,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64630,
+ 64630
+ ],
+ "mapped",
+ [
+ 1579,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64631,
+ 64631
+ ],
+ "mapped",
+ [
+ 1579,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64632,
+ 64632
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64633,
+ 64633
+ ],
+ "mapped",
+ [
+ 1579,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64634,
+ 64634
+ ],
+ "mapped",
+ [
+ 1579,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64635,
+ 64635
+ ],
+ "mapped",
+ [
+ 1579,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64636,
+ 64636
+ ],
+ "mapped",
+ [
+ 1601,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64637,
+ 64637
+ ],
+ "mapped",
+ [
+ 1601,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64638,
+ 64638
+ ],
+ "mapped",
+ [
+ 1602,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64639,
+ 64639
+ ],
+ "mapped",
+ [
+ 1602,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64640,
+ 64640
+ ],
+ "mapped",
+ [
+ 1603,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64641,
+ 64641
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64642,
+ 64642
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64643,
+ 64643
+ ],
+ "mapped",
+ [
+ 1603,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64644,
+ 64644
+ ],
+ "mapped",
+ [
+ 1603,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64645,
+ 64645
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64646,
+ 64646
+ ],
+ "mapped",
+ [
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64647,
+ 64647
+ ],
+ "mapped",
+ [
+ 1604,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64648,
+ 64648
+ ],
+ "mapped",
+ [
+ 1605,
+ 1575
+ ]
+ ],
+ [
+ [
+ 64649,
+ 64649
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64650,
+ 64650
+ ],
+ "mapped",
+ [
+ 1606,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64651,
+ 64651
+ ],
+ "mapped",
+ [
+ 1606,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64652,
+ 64652
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64653,
+ 64653
+ ],
+ "mapped",
+ [
+ 1606,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64654,
+ 64654
+ ],
+ "mapped",
+ [
+ 1606,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64655,
+ 64655
+ ],
+ "mapped",
+ [
+ 1606,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64656,
+ 64656
+ ],
+ "mapped",
+ [
+ 1609,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64657,
+ 64657
+ ],
+ "mapped",
+ [
+ 1610,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64658,
+ 64658
+ ],
+ "mapped",
+ [
+ 1610,
+ 1586
+ ]
+ ],
+ [
+ [
+ 64659,
+ 64659
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64660,
+ 64660
+ ],
+ "mapped",
+ [
+ 1610,
+ 1606
+ ]
+ ],
+ [
+ [
+ 64661,
+ 64661
+ ],
+ "mapped",
+ [
+ 1610,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64662,
+ 64662
+ ],
+ "mapped",
+ [
+ 1610,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64663,
+ 64663
+ ],
+ "mapped",
+ [
+ 1574,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64664,
+ 64664
+ ],
+ "mapped",
+ [
+ 1574,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64665,
+ 64665
+ ],
+ "mapped",
+ [
+ 1574,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64666,
+ 64666
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64667,
+ 64667
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64668,
+ 64668
+ ],
+ "mapped",
+ [
+ 1576,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64669,
+ 64669
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64670,
+ 64670
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64671,
+ 64671
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64672,
+ 64672
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64673,
+ 64673
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64674,
+ 64674
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64675,
+ 64675
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64676,
+ 64676
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64677,
+ 64677
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64678,
+ 64678
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64679,
+ 64679
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64680,
+ 64680
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64681,
+ 64681
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64682,
+ 64682
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64683,
+ 64683
+ ],
+ "mapped",
+ [
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64684,
+ 64684
+ ],
+ "mapped",
+ [
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64685,
+ 64685
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64686,
+ 64686
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64687,
+ 64687
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64688,
+ 64688
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64689,
+ 64689
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64690,
+ 64690
+ ],
+ "mapped",
+ [
+ 1589,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64691,
+ 64691
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64692,
+ 64692
+ ],
+ "mapped",
+ [
+ 1590,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64693,
+ 64693
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64694,
+ 64694
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64695,
+ 64695
+ ],
+ "mapped",
+ [
+ 1590,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64696,
+ 64696
+ ],
+ "mapped",
+ [
+ 1591,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64697,
+ 64697
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64698,
+ 64698
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64699,
+ 64699
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64700,
+ 64700
+ ],
+ "mapped",
+ [
+ 1594,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64701,
+ 64701
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64702,
+ 64702
+ ],
+ "mapped",
+ [
+ 1601,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64703,
+ 64703
+ ],
+ "mapped",
+ [
+ 1601,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64704,
+ 64704
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64705,
+ 64705
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64706,
+ 64706
+ ],
+ "mapped",
+ [
+ 1602,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64707,
+ 64707
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64708,
+ 64708
+ ],
+ "mapped",
+ [
+ 1603,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64709,
+ 64709
+ ],
+ "mapped",
+ [
+ 1603,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64710,
+ 64710
+ ],
+ "mapped",
+ [
+ 1603,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64711,
+ 64711
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64712,
+ 64712
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64713,
+ 64713
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64714,
+ 64714
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64715,
+ 64715
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64716,
+ 64716
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64717,
+ 64717
+ ],
+ "mapped",
+ [
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64718,
+ 64718
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64719,
+ 64719
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64720,
+ 64720
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64721,
+ 64721
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64722,
+ 64722
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64723,
+ 64723
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64724,
+ 64724
+ ],
+ "mapped",
+ [
+ 1606,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64725,
+ 64725
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64726,
+ 64726
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64727,
+ 64727
+ ],
+ "mapped",
+ [
+ 1607,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64728,
+ 64728
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64729,
+ 64729
+ ],
+ "mapped",
+ [
+ 1607,
+ 1648
+ ]
+ ],
+ [
+ [
+ 64730,
+ 64730
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64731,
+ 64731
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64732,
+ 64732
+ ],
+ "mapped",
+ [
+ 1610,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64733,
+ 64733
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64734,
+ 64734
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64735,
+ 64735
+ ],
+ "mapped",
+ [
+ 1574,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64736,
+ 64736
+ ],
+ "mapped",
+ [
+ 1574,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64737,
+ 64737
+ ],
+ "mapped",
+ [
+ 1576,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64738,
+ 64738
+ ],
+ "mapped",
+ [
+ 1576,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64739,
+ 64739
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64740,
+ 64740
+ ],
+ "mapped",
+ [
+ 1578,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64741,
+ 64741
+ ],
+ "mapped",
+ [
+ 1579,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64742,
+ 64742
+ ],
+ "mapped",
+ [
+ 1579,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64743,
+ 64743
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64744,
+ 64744
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64745,
+ 64745
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64746,
+ 64746
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64747,
+ 64747
+ ],
+ "mapped",
+ [
+ 1603,
+ 1604
+ ]
+ ],
+ [
+ [
+ 64748,
+ 64748
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64749,
+ 64749
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64750,
+ 64750
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64751,
+ 64751
+ ],
+ "mapped",
+ [
+ 1606,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64752,
+ 64752
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64753,
+ 64753
+ ],
+ "mapped",
+ [
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64754,
+ 64754
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64755,
+ 64755
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64756,
+ 64756
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616,
+ 1617
+ ]
+ ],
+ [
+ [
+ 64757,
+ 64757
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64758,
+ 64758
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64759,
+ 64759
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64760,
+ 64760
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64761,
+ 64761
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64762,
+ 64762
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64763,
+ 64763
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64764,
+ 64764
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64765,
+ 64765
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64766,
+ 64766
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64767,
+ 64767
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64768,
+ 64768
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64769,
+ 64769
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64770,
+ 64770
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64771,
+ 64771
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64772,
+ 64772
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64773,
+ 64773
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64774,
+ 64774
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64775,
+ 64775
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64776,
+ 64776
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64777,
+ 64777
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64778,
+ 64778
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64779,
+ 64779
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64780,
+ 64780
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64781,
+ 64781
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64782,
+ 64782
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64783,
+ 64783
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64784,
+ 64784
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64785,
+ 64785
+ ],
+ "mapped",
+ [
+ 1591,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64786,
+ 64786
+ ],
+ "mapped",
+ [
+ 1591,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64787,
+ 64787
+ ],
+ "mapped",
+ [
+ 1593,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64788,
+ 64788
+ ],
+ "mapped",
+ [
+ 1593,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64789,
+ 64789
+ ],
+ "mapped",
+ [
+ 1594,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64790,
+ 64790
+ ],
+ "mapped",
+ [
+ 1594,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64791,
+ 64791
+ ],
+ "mapped",
+ [
+ 1587,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64792,
+ 64792
+ ],
+ "mapped",
+ [
+ 1587,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64793,
+ 64793
+ ],
+ "mapped",
+ [
+ 1588,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64794,
+ 64794
+ ],
+ "mapped",
+ [
+ 1588,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64795,
+ 64795
+ ],
+ "mapped",
+ [
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64796,
+ 64796
+ ],
+ "mapped",
+ [
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64797,
+ 64797
+ ],
+ "mapped",
+ [
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64798,
+ 64798
+ ],
+ "mapped",
+ [
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64799,
+ 64799
+ ],
+ "mapped",
+ [
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64800,
+ 64800
+ ],
+ "mapped",
+ [
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64801,
+ 64801
+ ],
+ "mapped",
+ [
+ 1589,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64802,
+ 64802
+ ],
+ "mapped",
+ [
+ 1589,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64803,
+ 64803
+ ],
+ "mapped",
+ [
+ 1590,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64804,
+ 64804
+ ],
+ "mapped",
+ [
+ 1590,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64805,
+ 64805
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64806,
+ 64806
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64807,
+ 64807
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64808,
+ 64808
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64809,
+ 64809
+ ],
+ "mapped",
+ [
+ 1588,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64810,
+ 64810
+ ],
+ "mapped",
+ [
+ 1587,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64811,
+ 64811
+ ],
+ "mapped",
+ [
+ 1589,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64812,
+ 64812
+ ],
+ "mapped",
+ [
+ 1590,
+ 1585
+ ]
+ ],
+ [
+ [
+ 64813,
+ 64813
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64814,
+ 64814
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64815,
+ 64815
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64816,
+ 64816
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64817,
+ 64817
+ ],
+ "mapped",
+ [
+ 1587,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64818,
+ 64818
+ ],
+ "mapped",
+ [
+ 1588,
+ 1607
+ ]
+ ],
+ [
+ [
+ 64819,
+ 64819
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64820,
+ 64820
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64821,
+ 64821
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64822,
+ 64822
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64823,
+ 64823
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64824,
+ 64824
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64825,
+ 64825
+ ],
+ "mapped",
+ [
+ 1588,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64826,
+ 64826
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64827,
+ 64827
+ ],
+ "mapped",
+ [
+ 1592,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64828,
+ 64829
+ ],
+ "mapped",
+ [
+ 1575,
+ 1611
+ ]
+ ],
+ [
+ [
+ 64830,
+ 64831
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 64832,
+ 64847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64848,
+ 64848
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64849,
+ 64850
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64851,
+ 64851
+ ],
+ "mapped",
+ [
+ 1578,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64852,
+ 64852
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64853,
+ 64853
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64854,
+ 64854
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64855,
+ 64855
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64856,
+ 64857
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64858,
+ 64858
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64859,
+ 64859
+ ],
+ "mapped",
+ [
+ 1581,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64860,
+ 64860
+ ],
+ "mapped",
+ [
+ 1587,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64861,
+ 64861
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64862,
+ 64862
+ ],
+ "mapped",
+ [
+ 1587,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64863,
+ 64864
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64865,
+ 64865
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64866,
+ 64867
+ ],
+ "mapped",
+ [
+ 1587,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64868,
+ 64869
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64870,
+ 64870
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64871,
+ 64872
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64873,
+ 64873
+ ],
+ "mapped",
+ [
+ 1588,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64874,
+ 64875
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64876,
+ 64877
+ ],
+ "mapped",
+ [
+ 1588,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64878,
+ 64878
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64879,
+ 64880
+ ],
+ "mapped",
+ [
+ 1590,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64881,
+ 64882
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64883,
+ 64883
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64884,
+ 64884
+ ],
+ "mapped",
+ [
+ 1591,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64885,
+ 64885
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64886,
+ 64887
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64888,
+ 64888
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64889,
+ 64889
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64890,
+ 64890
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64891,
+ 64891
+ ],
+ "mapped",
+ [
+ 1594,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64892,
+ 64893
+ ],
+ "mapped",
+ [
+ 1601,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64894,
+ 64894
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64895,
+ 64895
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64896,
+ 64896
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64897,
+ 64897
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64898,
+ 64898
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64899,
+ 64900
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64901,
+ 64902
+ ],
+ "mapped",
+ [
+ 1604,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64903,
+ 64904
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64905,
+ 64905
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64906,
+ 64906
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64907,
+ 64907
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64908,
+ 64908
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64909,
+ 64909
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64910,
+ 64910
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64911,
+ 64911
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64912,
+ 64913
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64914,
+ 64914
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1582
+ ]
+ ],
+ [
+ [
+ 64915,
+ 64915
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1580
+ ]
+ ],
+ [
+ [
+ 64916,
+ 64916
+ ],
+ "mapped",
+ [
+ 1607,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64917,
+ 64917
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64918,
+ 64918
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64919,
+ 64920
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64921,
+ 64921
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64922,
+ 64922
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64923,
+ 64923
+ ],
+ "mapped",
+ [
+ 1606,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64924,
+ 64925
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64926,
+ 64926
+ ],
+ "mapped",
+ [
+ 1576,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64927,
+ 64927
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64928,
+ 64928
+ ],
+ "mapped",
+ [
+ 1578,
+ 1580,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64929,
+ 64929
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64930,
+ 64930
+ ],
+ "mapped",
+ [
+ 1578,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64931,
+ 64931
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64932,
+ 64932
+ ],
+ "mapped",
+ [
+ 1578,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64933,
+ 64933
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64934,
+ 64934
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64935,
+ 64935
+ ],
+ "mapped",
+ [
+ 1580,
+ 1605,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64936,
+ 64936
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1609
+ ]
+ ],
+ [
+ [
+ 64937,
+ 64937
+ ],
+ "mapped",
+ [
+ 1589,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64938,
+ 64938
+ ],
+ "mapped",
+ [
+ 1588,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64939,
+ 64939
+ ],
+ "mapped",
+ [
+ 1590,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64940,
+ 64940
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64941,
+ 64941
+ ],
+ "mapped",
+ [
+ 1604,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64942,
+ 64942
+ ],
+ "mapped",
+ [
+ 1610,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64943,
+ 64943
+ ],
+ "mapped",
+ [
+ 1610,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64944,
+ 64944
+ ],
+ "mapped",
+ [
+ 1610,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64945,
+ 64945
+ ],
+ "mapped",
+ [
+ 1605,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64946,
+ 64946
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64947,
+ 64947
+ ],
+ "mapped",
+ [
+ 1606,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64948,
+ 64948
+ ],
+ "mapped",
+ [
+ 1602,
+ 1605,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64949,
+ 64949
+ ],
+ "mapped",
+ [
+ 1604,
+ 1581,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64950,
+ 64950
+ ],
+ "mapped",
+ [
+ 1593,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64951,
+ 64951
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64952,
+ 64952
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64953,
+ 64953
+ ],
+ "mapped",
+ [
+ 1605,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64954,
+ 64954
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64955,
+ 64955
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64956,
+ 64956
+ ],
+ "mapped",
+ [
+ 1604,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64957,
+ 64957
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1581
+ ]
+ ],
+ [
+ [
+ 64958,
+ 64958
+ ],
+ "mapped",
+ [
+ 1580,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64959,
+ 64959
+ ],
+ "mapped",
+ [
+ 1581,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64960,
+ 64960
+ ],
+ "mapped",
+ [
+ 1605,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64961,
+ 64961
+ ],
+ "mapped",
+ [
+ 1601,
+ 1605,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64962,
+ 64962
+ ],
+ "mapped",
+ [
+ 1576,
+ 1581,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64963,
+ 64963
+ ],
+ "mapped",
+ [
+ 1603,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64964,
+ 64964
+ ],
+ "mapped",
+ [
+ 1593,
+ 1580,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64965,
+ 64965
+ ],
+ "mapped",
+ [
+ 1589,
+ 1605,
+ 1605
+ ]
+ ],
+ [
+ [
+ 64966,
+ 64966
+ ],
+ "mapped",
+ [
+ 1587,
+ 1582,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64967,
+ 64967
+ ],
+ "mapped",
+ [
+ 1606,
+ 1580,
+ 1610
+ ]
+ ],
+ [
+ [
+ 64968,
+ 64975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 64976,
+ 65007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65008,
+ 65008
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65009,
+ 65009
+ ],
+ "mapped",
+ [
+ 1602,
+ 1604,
+ 1746
+ ]
+ ],
+ [
+ [
+ 65010,
+ 65010
+ ],
+ "mapped",
+ [
+ 1575,
+ 1604,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65011,
+ 65011
+ ],
+ "mapped",
+ [
+ 1575,
+ 1603,
+ 1576,
+ 1585
+ ]
+ ],
+ [
+ [
+ 65012,
+ 65012
+ ],
+ "mapped",
+ [
+ 1605,
+ 1581,
+ 1605,
+ 1583
+ ]
+ ],
+ [
+ [
+ 65013,
+ 65013
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1593,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65014,
+ 65014
+ ],
+ "mapped",
+ [
+ 1585,
+ 1587,
+ 1608,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65015,
+ 65015
+ ],
+ "mapped",
+ [
+ 1593,
+ 1604,
+ 1610,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65016,
+ 65016
+ ],
+ "mapped",
+ [
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65017,
+ 65017
+ ],
+ "mapped",
+ [
+ 1589,
+ 1604,
+ 1609
+ ]
+ ],
+ [
+ [
+ 65018,
+ 65018
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1589,
+ 1604,
+ 1609,
+ 32,
+ 1575,
+ 1604,
+ 1604,
+ 1607,
+ 32,
+ 1593,
+ 1604,
+ 1610,
+ 1607,
+ 32,
+ 1608,
+ 1587,
+ 1604,
+ 1605
+ ]
+ ],
+ [
+ [
+ 65019,
+ 65019
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 1580,
+ 1604,
+ 32,
+ 1580,
+ 1604,
+ 1575,
+ 1604,
+ 1607
+ ]
+ ],
+ [
+ [
+ 65020,
+ 65020
+ ],
+ "mapped",
+ [
+ 1585,
+ 1740,
+ 1575,
+ 1604
+ ]
+ ],
+ [
+ [
+ 65021,
+ 65021
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65022,
+ 65023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65024,
+ 65039
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65040,
+ 65040
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65041,
+ 65041
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65042,
+ 65042
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65043,
+ 65043
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65044,
+ 65044
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65045,
+ 65045
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65046,
+ 65046
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65047,
+ 65047
+ ],
+ "mapped",
+ [
+ 12310
+ ]
+ ],
+ [
+ [
+ 65048,
+ 65048
+ ],
+ "mapped",
+ [
+ 12311
+ ]
+ ],
+ [
+ [
+ 65049,
+ 65049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65050,
+ 65055
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65056,
+ 65059
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65060,
+ 65062
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65063,
+ 65069
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65070,
+ 65071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65072,
+ 65072
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65073,
+ 65073
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65074,
+ 65074
+ ],
+ "mapped",
+ [
+ 8211
+ ]
+ ],
+ [
+ [
+ 65075,
+ 65076
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65077,
+ 65077
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65078,
+ 65078
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65079,
+ 65079
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65080,
+ 65080
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65081,
+ 65081
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65082,
+ 65082
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65083,
+ 65083
+ ],
+ "mapped",
+ [
+ 12304
+ ]
+ ],
+ [
+ [
+ 65084,
+ 65084
+ ],
+ "mapped",
+ [
+ 12305
+ ]
+ ],
+ [
+ [
+ 65085,
+ 65085
+ ],
+ "mapped",
+ [
+ 12298
+ ]
+ ],
+ [
+ [
+ 65086,
+ 65086
+ ],
+ "mapped",
+ [
+ 12299
+ ]
+ ],
+ [
+ [
+ 65087,
+ 65087
+ ],
+ "mapped",
+ [
+ 12296
+ ]
+ ],
+ [
+ [
+ 65088,
+ 65088
+ ],
+ "mapped",
+ [
+ 12297
+ ]
+ ],
+ [
+ [
+ 65089,
+ 65089
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65090,
+ 65090
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65091,
+ 65091
+ ],
+ "mapped",
+ [
+ 12302
+ ]
+ ],
+ [
+ [
+ 65092,
+ 65092
+ ],
+ "mapped",
+ [
+ 12303
+ ]
+ ],
+ [
+ [
+ 65093,
+ 65094
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65095,
+ 65095
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65096,
+ 65096
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65097,
+ 65100
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 773
+ ]
+ ],
+ [
+ [
+ 65101,
+ 65103
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65104,
+ 65104
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65105,
+ 65105
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65106,
+ 65106
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65107,
+ 65107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65108,
+ 65108
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65109,
+ 65109
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65110,
+ 65110
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65111,
+ 65111
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65112,
+ 65112
+ ],
+ "mapped",
+ [
+ 8212
+ ]
+ ],
+ [
+ [
+ 65113,
+ 65113
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65114,
+ 65114
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65115,
+ 65115
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65116,
+ 65116
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65117,
+ 65117
+ ],
+ "mapped",
+ [
+ 12308
+ ]
+ ],
+ [
+ [
+ 65118,
+ 65118
+ ],
+ "mapped",
+ [
+ 12309
+ ]
+ ],
+ [
+ [
+ 65119,
+ 65119
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65120,
+ 65120
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65121,
+ 65121
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65122,
+ 65122
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65123,
+ 65123
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65124,
+ 65124
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65125,
+ 65125
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65126,
+ 65126
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65127,
+ 65127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65128,
+ 65128
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65129,
+ 65129
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65130,
+ 65130
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65131,
+ 65131
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65132,
+ 65135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65136,
+ 65136
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65137,
+ 65137
+ ],
+ "mapped",
+ [
+ 1600,
+ 1611
+ ]
+ ],
+ [
+ [
+ 65138,
+ 65138
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1612
+ ]
+ ],
+ [
+ [
+ 65139,
+ 65139
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65140,
+ 65140
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1613
+ ]
+ ],
+ [
+ [
+ 65141,
+ 65141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65142,
+ 65142
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65143,
+ 65143
+ ],
+ "mapped",
+ [
+ 1600,
+ 1614
+ ]
+ ],
+ [
+ [
+ 65144,
+ 65144
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65145,
+ 65145
+ ],
+ "mapped",
+ [
+ 1600,
+ 1615
+ ]
+ ],
+ [
+ [
+ 65146,
+ 65146
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65147,
+ 65147
+ ],
+ "mapped",
+ [
+ 1600,
+ 1616
+ ]
+ ],
+ [
+ [
+ 65148,
+ 65148
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65149,
+ 65149
+ ],
+ "mapped",
+ [
+ 1600,
+ 1617
+ ]
+ ],
+ [
+ [
+ 65150,
+ 65150
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65151,
+ 65151
+ ],
+ "mapped",
+ [
+ 1600,
+ 1618
+ ]
+ ],
+ [
+ [
+ 65152,
+ 65152
+ ],
+ "mapped",
+ [
+ 1569
+ ]
+ ],
+ [
+ [
+ 65153,
+ 65154
+ ],
+ "mapped",
+ [
+ 1570
+ ]
+ ],
+ [
+ [
+ 65155,
+ 65156
+ ],
+ "mapped",
+ [
+ 1571
+ ]
+ ],
+ [
+ [
+ 65157,
+ 65158
+ ],
+ "mapped",
+ [
+ 1572
+ ]
+ ],
+ [
+ [
+ 65159,
+ 65160
+ ],
+ "mapped",
+ [
+ 1573
+ ]
+ ],
+ [
+ [
+ 65161,
+ 65164
+ ],
+ "mapped",
+ [
+ 1574
+ ]
+ ],
+ [
+ [
+ 65165,
+ 65166
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 65167,
+ 65170
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 65171,
+ 65172
+ ],
+ "mapped",
+ [
+ 1577
+ ]
+ ],
+ [
+ [
+ 65173,
+ 65176
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 65177,
+ 65180
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 65181,
+ 65184
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 65185,
+ 65188
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 65189,
+ 65192
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 65193,
+ 65194
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 65195,
+ 65196
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 65197,
+ 65198
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 65199,
+ 65200
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 65201,
+ 65204
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 65205,
+ 65208
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 65209,
+ 65212
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 65213,
+ 65216
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 65217,
+ 65220
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 65221,
+ 65224
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 65225,
+ 65228
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 65229,
+ 65232
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 65233,
+ 65236
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 65237,
+ 65240
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 65241,
+ 65244
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 65245,
+ 65248
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 65249,
+ 65252
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 65253,
+ 65256
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 65257,
+ 65260
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 65261,
+ 65262
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 65263,
+ 65264
+ ],
+ "mapped",
+ [
+ 1609
+ ]
+ ],
+ [
+ [
+ 65265,
+ 65268
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 65269,
+ 65270
+ ],
+ "mapped",
+ [
+ 1604,
+ 1570
+ ]
+ ],
+ [
+ [
+ 65271,
+ 65272
+ ],
+ "mapped",
+ [
+ 1604,
+ 1571
+ ]
+ ],
+ [
+ [
+ 65273,
+ 65274
+ ],
+ "mapped",
+ [
+ 1604,
+ 1573
+ ]
+ ],
+ [
+ [
+ 65275,
+ 65276
+ ],
+ "mapped",
+ [
+ 1604,
+ 1575
+ ]
+ ],
+ [
+ [
+ 65277,
+ 65278
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65279,
+ 65279
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 65280,
+ 65280
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65281,
+ 65281
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 33
+ ]
+ ],
+ [
+ [
+ 65282,
+ 65282
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 34
+ ]
+ ],
+ [
+ [
+ 65283,
+ 65283
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 35
+ ]
+ ],
+ [
+ [
+ 65284,
+ 65284
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 36
+ ]
+ ],
+ [
+ [
+ 65285,
+ 65285
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 37
+ ]
+ ],
+ [
+ [
+ 65286,
+ 65286
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 38
+ ]
+ ],
+ [
+ [
+ 65287,
+ 65287
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 39
+ ]
+ ],
+ [
+ [
+ 65288,
+ 65288
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40
+ ]
+ ],
+ [
+ [
+ 65289,
+ 65289
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 41
+ ]
+ ],
+ [
+ [
+ 65290,
+ 65290
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 42
+ ]
+ ],
+ [
+ [
+ 65291,
+ 65291
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 43
+ ]
+ ],
+ [
+ [
+ 65292,
+ 65292
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 44
+ ]
+ ],
+ [
+ [
+ 65293,
+ 65293
+ ],
+ "mapped",
+ [
+ 45
+ ]
+ ],
+ [
+ [
+ 65294,
+ 65294
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65295,
+ 65295
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 47
+ ]
+ ],
+ [
+ [
+ 65296,
+ 65296
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 65297,
+ 65297
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 65298,
+ 65298
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 65299,
+ 65299
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 65300,
+ 65300
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 65301,
+ 65301
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 65302,
+ 65302
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 65303,
+ 65303
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 65304,
+ 65304
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 65305,
+ 65305
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 65306,
+ 65306
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 58
+ ]
+ ],
+ [
+ [
+ 65307,
+ 65307
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 59
+ ]
+ ],
+ [
+ [
+ 65308,
+ 65308
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 60
+ ]
+ ],
+ [
+ [
+ 65309,
+ 65309
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 61
+ ]
+ ],
+ [
+ [
+ 65310,
+ 65310
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 65311,
+ 65311
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 63
+ ]
+ ],
+ [
+ [
+ 65312,
+ 65312
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 64
+ ]
+ ],
+ [
+ [
+ 65313,
+ 65313
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65314,
+ 65314
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65315,
+ 65315
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65316,
+ 65316
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65317,
+ 65317
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65318,
+ 65318
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65319,
+ 65319
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65320,
+ 65320
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65321,
+ 65321
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65322,
+ 65322
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65323,
+ 65323
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65324,
+ 65324
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65325,
+ 65325
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65326,
+ 65326
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65327,
+ 65327
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65328,
+ 65328
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65329,
+ 65329
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65330,
+ 65330
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65331,
+ 65331
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65332,
+ 65332
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65333,
+ 65333
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65334,
+ 65334
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65335,
+ 65335
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65336,
+ 65336
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65337,
+ 65337
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65338,
+ 65338
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65339,
+ 65339
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 91
+ ]
+ ],
+ [
+ [
+ 65340,
+ 65340
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 92
+ ]
+ ],
+ [
+ [
+ 65341,
+ 65341
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 93
+ ]
+ ],
+ [
+ [
+ 65342,
+ 65342
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 94
+ ]
+ ],
+ [
+ [
+ 65343,
+ 65343
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 95
+ ]
+ ],
+ [
+ [
+ 65344,
+ 65344
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 96
+ ]
+ ],
+ [
+ [
+ 65345,
+ 65345
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 65346,
+ 65346
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 65347,
+ 65347
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 65348,
+ 65348
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 65349,
+ 65349
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 65350,
+ 65350
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 65351,
+ 65351
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 65352,
+ 65352
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 65353,
+ 65353
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 65354,
+ 65354
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 65355,
+ 65355
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 65356,
+ 65356
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 65357,
+ 65357
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 65358,
+ 65358
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 65359,
+ 65359
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 65360,
+ 65360
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 65361,
+ 65361
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 65362,
+ 65362
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 65363,
+ 65363
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 65364,
+ 65364
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 65365,
+ 65365
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 65366,
+ 65366
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 65367,
+ 65367
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 65368,
+ 65368
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 65369,
+ 65369
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 65370,
+ 65370
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 65371,
+ 65371
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 65372,
+ 65372
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 124
+ ]
+ ],
+ [
+ [
+ 65373,
+ 65373
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 65374,
+ 65374
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 126
+ ]
+ ],
+ [
+ [
+ 65375,
+ 65375
+ ],
+ "mapped",
+ [
+ 10629
+ ]
+ ],
+ [
+ [
+ 65376,
+ 65376
+ ],
+ "mapped",
+ [
+ 10630
+ ]
+ ],
+ [
+ [
+ 65377,
+ 65377
+ ],
+ "mapped",
+ [
+ 46
+ ]
+ ],
+ [
+ [
+ 65378,
+ 65378
+ ],
+ "mapped",
+ [
+ 12300
+ ]
+ ],
+ [
+ [
+ 65379,
+ 65379
+ ],
+ "mapped",
+ [
+ 12301
+ ]
+ ],
+ [
+ [
+ 65380,
+ 65380
+ ],
+ "mapped",
+ [
+ 12289
+ ]
+ ],
+ [
+ [
+ 65381,
+ 65381
+ ],
+ "mapped",
+ [
+ 12539
+ ]
+ ],
+ [
+ [
+ 65382,
+ 65382
+ ],
+ "mapped",
+ [
+ 12530
+ ]
+ ],
+ [
+ [
+ 65383,
+ 65383
+ ],
+ "mapped",
+ [
+ 12449
+ ]
+ ],
+ [
+ [
+ 65384,
+ 65384
+ ],
+ "mapped",
+ [
+ 12451
+ ]
+ ],
+ [
+ [
+ 65385,
+ 65385
+ ],
+ "mapped",
+ [
+ 12453
+ ]
+ ],
+ [
+ [
+ 65386,
+ 65386
+ ],
+ "mapped",
+ [
+ 12455
+ ]
+ ],
+ [
+ [
+ 65387,
+ 65387
+ ],
+ "mapped",
+ [
+ 12457
+ ]
+ ],
+ [
+ [
+ 65388,
+ 65388
+ ],
+ "mapped",
+ [
+ 12515
+ ]
+ ],
+ [
+ [
+ 65389,
+ 65389
+ ],
+ "mapped",
+ [
+ 12517
+ ]
+ ],
+ [
+ [
+ 65390,
+ 65390
+ ],
+ "mapped",
+ [
+ 12519
+ ]
+ ],
+ [
+ [
+ 65391,
+ 65391
+ ],
+ "mapped",
+ [
+ 12483
+ ]
+ ],
+ [
+ [
+ 65392,
+ 65392
+ ],
+ "mapped",
+ [
+ 12540
+ ]
+ ],
+ [
+ [
+ 65393,
+ 65393
+ ],
+ "mapped",
+ [
+ 12450
+ ]
+ ],
+ [
+ [
+ 65394,
+ 65394
+ ],
+ "mapped",
+ [
+ 12452
+ ]
+ ],
+ [
+ [
+ 65395,
+ 65395
+ ],
+ "mapped",
+ [
+ 12454
+ ]
+ ],
+ [
+ [
+ 65396,
+ 65396
+ ],
+ "mapped",
+ [
+ 12456
+ ]
+ ],
+ [
+ [
+ 65397,
+ 65397
+ ],
+ "mapped",
+ [
+ 12458
+ ]
+ ],
+ [
+ [
+ 65398,
+ 65398
+ ],
+ "mapped",
+ [
+ 12459
+ ]
+ ],
+ [
+ [
+ 65399,
+ 65399
+ ],
+ "mapped",
+ [
+ 12461
+ ]
+ ],
+ [
+ [
+ 65400,
+ 65400
+ ],
+ "mapped",
+ [
+ 12463
+ ]
+ ],
+ [
+ [
+ 65401,
+ 65401
+ ],
+ "mapped",
+ [
+ 12465
+ ]
+ ],
+ [
+ [
+ 65402,
+ 65402
+ ],
+ "mapped",
+ [
+ 12467
+ ]
+ ],
+ [
+ [
+ 65403,
+ 65403
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 65404,
+ 65404
+ ],
+ "mapped",
+ [
+ 12471
+ ]
+ ],
+ [
+ [
+ 65405,
+ 65405
+ ],
+ "mapped",
+ [
+ 12473
+ ]
+ ],
+ [
+ [
+ 65406,
+ 65406
+ ],
+ "mapped",
+ [
+ 12475
+ ]
+ ],
+ [
+ [
+ 65407,
+ 65407
+ ],
+ "mapped",
+ [
+ 12477
+ ]
+ ],
+ [
+ [
+ 65408,
+ 65408
+ ],
+ "mapped",
+ [
+ 12479
+ ]
+ ],
+ [
+ [
+ 65409,
+ 65409
+ ],
+ "mapped",
+ [
+ 12481
+ ]
+ ],
+ [
+ [
+ 65410,
+ 65410
+ ],
+ "mapped",
+ [
+ 12484
+ ]
+ ],
+ [
+ [
+ 65411,
+ 65411
+ ],
+ "mapped",
+ [
+ 12486
+ ]
+ ],
+ [
+ [
+ 65412,
+ 65412
+ ],
+ "mapped",
+ [
+ 12488
+ ]
+ ],
+ [
+ [
+ 65413,
+ 65413
+ ],
+ "mapped",
+ [
+ 12490
+ ]
+ ],
+ [
+ [
+ 65414,
+ 65414
+ ],
+ "mapped",
+ [
+ 12491
+ ]
+ ],
+ [
+ [
+ 65415,
+ 65415
+ ],
+ "mapped",
+ [
+ 12492
+ ]
+ ],
+ [
+ [
+ 65416,
+ 65416
+ ],
+ "mapped",
+ [
+ 12493
+ ]
+ ],
+ [
+ [
+ 65417,
+ 65417
+ ],
+ "mapped",
+ [
+ 12494
+ ]
+ ],
+ [
+ [
+ 65418,
+ 65418
+ ],
+ "mapped",
+ [
+ 12495
+ ]
+ ],
+ [
+ [
+ 65419,
+ 65419
+ ],
+ "mapped",
+ [
+ 12498
+ ]
+ ],
+ [
+ [
+ 65420,
+ 65420
+ ],
+ "mapped",
+ [
+ 12501
+ ]
+ ],
+ [
+ [
+ 65421,
+ 65421
+ ],
+ "mapped",
+ [
+ 12504
+ ]
+ ],
+ [
+ [
+ 65422,
+ 65422
+ ],
+ "mapped",
+ [
+ 12507
+ ]
+ ],
+ [
+ [
+ 65423,
+ 65423
+ ],
+ "mapped",
+ [
+ 12510
+ ]
+ ],
+ [
+ [
+ 65424,
+ 65424
+ ],
+ "mapped",
+ [
+ 12511
+ ]
+ ],
+ [
+ [
+ 65425,
+ 65425
+ ],
+ "mapped",
+ [
+ 12512
+ ]
+ ],
+ [
+ [
+ 65426,
+ 65426
+ ],
+ "mapped",
+ [
+ 12513
+ ]
+ ],
+ [
+ [
+ 65427,
+ 65427
+ ],
+ "mapped",
+ [
+ 12514
+ ]
+ ],
+ [
+ [
+ 65428,
+ 65428
+ ],
+ "mapped",
+ [
+ 12516
+ ]
+ ],
+ [
+ [
+ 65429,
+ 65429
+ ],
+ "mapped",
+ [
+ 12518
+ ]
+ ],
+ [
+ [
+ 65430,
+ 65430
+ ],
+ "mapped",
+ [
+ 12520
+ ]
+ ],
+ [
+ [
+ 65431,
+ 65431
+ ],
+ "mapped",
+ [
+ 12521
+ ]
+ ],
+ [
+ [
+ 65432,
+ 65432
+ ],
+ "mapped",
+ [
+ 12522
+ ]
+ ],
+ [
+ [
+ 65433,
+ 65433
+ ],
+ "mapped",
+ [
+ 12523
+ ]
+ ],
+ [
+ [
+ 65434,
+ 65434
+ ],
+ "mapped",
+ [
+ 12524
+ ]
+ ],
+ [
+ [
+ 65435,
+ 65435
+ ],
+ "mapped",
+ [
+ 12525
+ ]
+ ],
+ [
+ [
+ 65436,
+ 65436
+ ],
+ "mapped",
+ [
+ 12527
+ ]
+ ],
+ [
+ [
+ 65437,
+ 65437
+ ],
+ "mapped",
+ [
+ 12531
+ ]
+ ],
+ [
+ [
+ 65438,
+ 65438
+ ],
+ "mapped",
+ [
+ 12441
+ ]
+ ],
+ [
+ [
+ 65439,
+ 65439
+ ],
+ "mapped",
+ [
+ 12442
+ ]
+ ],
+ [
+ [
+ 65440,
+ 65440
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65441,
+ 65441
+ ],
+ "mapped",
+ [
+ 4352
+ ]
+ ],
+ [
+ [
+ 65442,
+ 65442
+ ],
+ "mapped",
+ [
+ 4353
+ ]
+ ],
+ [
+ [
+ 65443,
+ 65443
+ ],
+ "mapped",
+ [
+ 4522
+ ]
+ ],
+ [
+ [
+ 65444,
+ 65444
+ ],
+ "mapped",
+ [
+ 4354
+ ]
+ ],
+ [
+ [
+ 65445,
+ 65445
+ ],
+ "mapped",
+ [
+ 4524
+ ]
+ ],
+ [
+ [
+ 65446,
+ 65446
+ ],
+ "mapped",
+ [
+ 4525
+ ]
+ ],
+ [
+ [
+ 65447,
+ 65447
+ ],
+ "mapped",
+ [
+ 4355
+ ]
+ ],
+ [
+ [
+ 65448,
+ 65448
+ ],
+ "mapped",
+ [
+ 4356
+ ]
+ ],
+ [
+ [
+ 65449,
+ 65449
+ ],
+ "mapped",
+ [
+ 4357
+ ]
+ ],
+ [
+ [
+ 65450,
+ 65450
+ ],
+ "mapped",
+ [
+ 4528
+ ]
+ ],
+ [
+ [
+ 65451,
+ 65451
+ ],
+ "mapped",
+ [
+ 4529
+ ]
+ ],
+ [
+ [
+ 65452,
+ 65452
+ ],
+ "mapped",
+ [
+ 4530
+ ]
+ ],
+ [
+ [
+ 65453,
+ 65453
+ ],
+ "mapped",
+ [
+ 4531
+ ]
+ ],
+ [
+ [
+ 65454,
+ 65454
+ ],
+ "mapped",
+ [
+ 4532
+ ]
+ ],
+ [
+ [
+ 65455,
+ 65455
+ ],
+ "mapped",
+ [
+ 4533
+ ]
+ ],
+ [
+ [
+ 65456,
+ 65456
+ ],
+ "mapped",
+ [
+ 4378
+ ]
+ ],
+ [
+ [
+ 65457,
+ 65457
+ ],
+ "mapped",
+ [
+ 4358
+ ]
+ ],
+ [
+ [
+ 65458,
+ 65458
+ ],
+ "mapped",
+ [
+ 4359
+ ]
+ ],
+ [
+ [
+ 65459,
+ 65459
+ ],
+ "mapped",
+ [
+ 4360
+ ]
+ ],
+ [
+ [
+ 65460,
+ 65460
+ ],
+ "mapped",
+ [
+ 4385
+ ]
+ ],
+ [
+ [
+ 65461,
+ 65461
+ ],
+ "mapped",
+ [
+ 4361
+ ]
+ ],
+ [
+ [
+ 65462,
+ 65462
+ ],
+ "mapped",
+ [
+ 4362
+ ]
+ ],
+ [
+ [
+ 65463,
+ 65463
+ ],
+ "mapped",
+ [
+ 4363
+ ]
+ ],
+ [
+ [
+ 65464,
+ 65464
+ ],
+ "mapped",
+ [
+ 4364
+ ]
+ ],
+ [
+ [
+ 65465,
+ 65465
+ ],
+ "mapped",
+ [
+ 4365
+ ]
+ ],
+ [
+ [
+ 65466,
+ 65466
+ ],
+ "mapped",
+ [
+ 4366
+ ]
+ ],
+ [
+ [
+ 65467,
+ 65467
+ ],
+ "mapped",
+ [
+ 4367
+ ]
+ ],
+ [
+ [
+ 65468,
+ 65468
+ ],
+ "mapped",
+ [
+ 4368
+ ]
+ ],
+ [
+ [
+ 65469,
+ 65469
+ ],
+ "mapped",
+ [
+ 4369
+ ]
+ ],
+ [
+ [
+ 65470,
+ 65470
+ ],
+ "mapped",
+ [
+ 4370
+ ]
+ ],
+ [
+ [
+ 65471,
+ 65473
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65474,
+ 65474
+ ],
+ "mapped",
+ [
+ 4449
+ ]
+ ],
+ [
+ [
+ 65475,
+ 65475
+ ],
+ "mapped",
+ [
+ 4450
+ ]
+ ],
+ [
+ [
+ 65476,
+ 65476
+ ],
+ "mapped",
+ [
+ 4451
+ ]
+ ],
+ [
+ [
+ 65477,
+ 65477
+ ],
+ "mapped",
+ [
+ 4452
+ ]
+ ],
+ [
+ [
+ 65478,
+ 65478
+ ],
+ "mapped",
+ [
+ 4453
+ ]
+ ],
+ [
+ [
+ 65479,
+ 65479
+ ],
+ "mapped",
+ [
+ 4454
+ ]
+ ],
+ [
+ [
+ 65480,
+ 65481
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65482,
+ 65482
+ ],
+ "mapped",
+ [
+ 4455
+ ]
+ ],
+ [
+ [
+ 65483,
+ 65483
+ ],
+ "mapped",
+ [
+ 4456
+ ]
+ ],
+ [
+ [
+ 65484,
+ 65484
+ ],
+ "mapped",
+ [
+ 4457
+ ]
+ ],
+ [
+ [
+ 65485,
+ 65485
+ ],
+ "mapped",
+ [
+ 4458
+ ]
+ ],
+ [
+ [
+ 65486,
+ 65486
+ ],
+ "mapped",
+ [
+ 4459
+ ]
+ ],
+ [
+ [
+ 65487,
+ 65487
+ ],
+ "mapped",
+ [
+ 4460
+ ]
+ ],
+ [
+ [
+ 65488,
+ 65489
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65490,
+ 65490
+ ],
+ "mapped",
+ [
+ 4461
+ ]
+ ],
+ [
+ [
+ 65491,
+ 65491
+ ],
+ "mapped",
+ [
+ 4462
+ ]
+ ],
+ [
+ [
+ 65492,
+ 65492
+ ],
+ "mapped",
+ [
+ 4463
+ ]
+ ],
+ [
+ [
+ 65493,
+ 65493
+ ],
+ "mapped",
+ [
+ 4464
+ ]
+ ],
+ [
+ [
+ 65494,
+ 65494
+ ],
+ "mapped",
+ [
+ 4465
+ ]
+ ],
+ [
+ [
+ 65495,
+ 65495
+ ],
+ "mapped",
+ [
+ 4466
+ ]
+ ],
+ [
+ [
+ 65496,
+ 65497
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65498,
+ 65498
+ ],
+ "mapped",
+ [
+ 4467
+ ]
+ ],
+ [
+ [
+ 65499,
+ 65499
+ ],
+ "mapped",
+ [
+ 4468
+ ]
+ ],
+ [
+ [
+ 65500,
+ 65500
+ ],
+ "mapped",
+ [
+ 4469
+ ]
+ ],
+ [
+ [
+ 65501,
+ 65503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65504,
+ 65504
+ ],
+ "mapped",
+ [
+ 162
+ ]
+ ],
+ [
+ [
+ 65505,
+ 65505
+ ],
+ "mapped",
+ [
+ 163
+ ]
+ ],
+ [
+ [
+ 65506,
+ 65506
+ ],
+ "mapped",
+ [
+ 172
+ ]
+ ],
+ [
+ [
+ 65507,
+ 65507
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 32,
+ 772
+ ]
+ ],
+ [
+ [
+ 65508,
+ 65508
+ ],
+ "mapped",
+ [
+ 166
+ ]
+ ],
+ [
+ [
+ 65509,
+ 65509
+ ],
+ "mapped",
+ [
+ 165
+ ]
+ ],
+ [
+ [
+ 65510,
+ 65510
+ ],
+ "mapped",
+ [
+ 8361
+ ]
+ ],
+ [
+ [
+ 65511,
+ 65511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65512,
+ 65512
+ ],
+ "mapped",
+ [
+ 9474
+ ]
+ ],
+ [
+ [
+ 65513,
+ 65513
+ ],
+ "mapped",
+ [
+ 8592
+ ]
+ ],
+ [
+ [
+ 65514,
+ 65514
+ ],
+ "mapped",
+ [
+ 8593
+ ]
+ ],
+ [
+ [
+ 65515,
+ 65515
+ ],
+ "mapped",
+ [
+ 8594
+ ]
+ ],
+ [
+ [
+ 65516,
+ 65516
+ ],
+ "mapped",
+ [
+ 8595
+ ]
+ ],
+ [
+ [
+ 65517,
+ 65517
+ ],
+ "mapped",
+ [
+ 9632
+ ]
+ ],
+ [
+ [
+ 65518,
+ 65518
+ ],
+ "mapped",
+ [
+ 9675
+ ]
+ ],
+ [
+ [
+ 65519,
+ 65528
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65529,
+ 65531
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65532,
+ 65532
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65533,
+ 65533
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65534,
+ 65535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65536,
+ 65547
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65548,
+ 65548
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65549,
+ 65574
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65575,
+ 65575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65576,
+ 65594
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65595,
+ 65595
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65596,
+ 65597
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65598,
+ 65598
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65599,
+ 65613
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65614,
+ 65615
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65616,
+ 65629
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65630,
+ 65663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65664,
+ 65786
+ ],
+ "valid"
+ ],
+ [
+ [
+ 65787,
+ 65791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65792,
+ 65794
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65795,
+ 65798
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65799,
+ 65843
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65844,
+ 65846
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65847,
+ 65855
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65856,
+ 65930
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65931,
+ 65932
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65933,
+ 65935
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65936,
+ 65947
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65948,
+ 65951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 65952,
+ 65952
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 65953,
+ 65999
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66000,
+ 66044
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66045,
+ 66045
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66046,
+ 66175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66176,
+ 66204
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66205,
+ 66207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66208,
+ 66256
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66257,
+ 66271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66272,
+ 66272
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66273,
+ 66299
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66300,
+ 66303
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66304,
+ 66334
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66335,
+ 66335
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66336,
+ 66339
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66340,
+ 66351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66352,
+ 66368
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66369,
+ 66369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66370,
+ 66377
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66378,
+ 66378
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66379,
+ 66383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66384,
+ 66426
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66427,
+ 66431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66432,
+ 66461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66462,
+ 66462
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66463,
+ 66463
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66464,
+ 66499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66500,
+ 66503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66504,
+ 66511
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66512,
+ 66517
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66518,
+ 66559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66560,
+ 66560
+ ],
+ "mapped",
+ [
+ 66600
+ ]
+ ],
+ [
+ [
+ 66561,
+ 66561
+ ],
+ "mapped",
+ [
+ 66601
+ ]
+ ],
+ [
+ [
+ 66562,
+ 66562
+ ],
+ "mapped",
+ [
+ 66602
+ ]
+ ],
+ [
+ [
+ 66563,
+ 66563
+ ],
+ "mapped",
+ [
+ 66603
+ ]
+ ],
+ [
+ [
+ 66564,
+ 66564
+ ],
+ "mapped",
+ [
+ 66604
+ ]
+ ],
+ [
+ [
+ 66565,
+ 66565
+ ],
+ "mapped",
+ [
+ 66605
+ ]
+ ],
+ [
+ [
+ 66566,
+ 66566
+ ],
+ "mapped",
+ [
+ 66606
+ ]
+ ],
+ [
+ [
+ 66567,
+ 66567
+ ],
+ "mapped",
+ [
+ 66607
+ ]
+ ],
+ [
+ [
+ 66568,
+ 66568
+ ],
+ "mapped",
+ [
+ 66608
+ ]
+ ],
+ [
+ [
+ 66569,
+ 66569
+ ],
+ "mapped",
+ [
+ 66609
+ ]
+ ],
+ [
+ [
+ 66570,
+ 66570
+ ],
+ "mapped",
+ [
+ 66610
+ ]
+ ],
+ [
+ [
+ 66571,
+ 66571
+ ],
+ "mapped",
+ [
+ 66611
+ ]
+ ],
+ [
+ [
+ 66572,
+ 66572
+ ],
+ "mapped",
+ [
+ 66612
+ ]
+ ],
+ [
+ [
+ 66573,
+ 66573
+ ],
+ "mapped",
+ [
+ 66613
+ ]
+ ],
+ [
+ [
+ 66574,
+ 66574
+ ],
+ "mapped",
+ [
+ 66614
+ ]
+ ],
+ [
+ [
+ 66575,
+ 66575
+ ],
+ "mapped",
+ [
+ 66615
+ ]
+ ],
+ [
+ [
+ 66576,
+ 66576
+ ],
+ "mapped",
+ [
+ 66616
+ ]
+ ],
+ [
+ [
+ 66577,
+ 66577
+ ],
+ "mapped",
+ [
+ 66617
+ ]
+ ],
+ [
+ [
+ 66578,
+ 66578
+ ],
+ "mapped",
+ [
+ 66618
+ ]
+ ],
+ [
+ [
+ 66579,
+ 66579
+ ],
+ "mapped",
+ [
+ 66619
+ ]
+ ],
+ [
+ [
+ 66580,
+ 66580
+ ],
+ "mapped",
+ [
+ 66620
+ ]
+ ],
+ [
+ [
+ 66581,
+ 66581
+ ],
+ "mapped",
+ [
+ 66621
+ ]
+ ],
+ [
+ [
+ 66582,
+ 66582
+ ],
+ "mapped",
+ [
+ 66622
+ ]
+ ],
+ [
+ [
+ 66583,
+ 66583
+ ],
+ "mapped",
+ [
+ 66623
+ ]
+ ],
+ [
+ [
+ 66584,
+ 66584
+ ],
+ "mapped",
+ [
+ 66624
+ ]
+ ],
+ [
+ [
+ 66585,
+ 66585
+ ],
+ "mapped",
+ [
+ 66625
+ ]
+ ],
+ [
+ [
+ 66586,
+ 66586
+ ],
+ "mapped",
+ [
+ 66626
+ ]
+ ],
+ [
+ [
+ 66587,
+ 66587
+ ],
+ "mapped",
+ [
+ 66627
+ ]
+ ],
+ [
+ [
+ 66588,
+ 66588
+ ],
+ "mapped",
+ [
+ 66628
+ ]
+ ],
+ [
+ [
+ 66589,
+ 66589
+ ],
+ "mapped",
+ [
+ 66629
+ ]
+ ],
+ [
+ [
+ 66590,
+ 66590
+ ],
+ "mapped",
+ [
+ 66630
+ ]
+ ],
+ [
+ [
+ 66591,
+ 66591
+ ],
+ "mapped",
+ [
+ 66631
+ ]
+ ],
+ [
+ [
+ 66592,
+ 66592
+ ],
+ "mapped",
+ [
+ 66632
+ ]
+ ],
+ [
+ [
+ 66593,
+ 66593
+ ],
+ "mapped",
+ [
+ 66633
+ ]
+ ],
+ [
+ [
+ 66594,
+ 66594
+ ],
+ "mapped",
+ [
+ 66634
+ ]
+ ],
+ [
+ [
+ 66595,
+ 66595
+ ],
+ "mapped",
+ [
+ 66635
+ ]
+ ],
+ [
+ [
+ 66596,
+ 66596
+ ],
+ "mapped",
+ [
+ 66636
+ ]
+ ],
+ [
+ [
+ 66597,
+ 66597
+ ],
+ "mapped",
+ [
+ 66637
+ ]
+ ],
+ [
+ [
+ 66598,
+ 66598
+ ],
+ "mapped",
+ [
+ 66638
+ ]
+ ],
+ [
+ [
+ 66599,
+ 66599
+ ],
+ "mapped",
+ [
+ 66639
+ ]
+ ],
+ [
+ [
+ 66600,
+ 66637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66638,
+ 66717
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66718,
+ 66719
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66720,
+ 66729
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66730,
+ 66815
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66816,
+ 66855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66856,
+ 66863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66864,
+ 66915
+ ],
+ "valid"
+ ],
+ [
+ [
+ 66916,
+ 66926
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 66927,
+ 66927
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 66928,
+ 67071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67072,
+ 67382
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67383,
+ 67391
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67392,
+ 67413
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67414,
+ 67423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67424,
+ 67431
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67432,
+ 67583
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67584,
+ 67589
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67590,
+ 67591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67592,
+ 67592
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67593,
+ 67593
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67594,
+ 67637
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67638,
+ 67638
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67639,
+ 67640
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67641,
+ 67643
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67644,
+ 67644
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67645,
+ 67646
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67647,
+ 67647
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67648,
+ 67669
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67670,
+ 67670
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67671,
+ 67679
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67680,
+ 67702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67703,
+ 67711
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67712,
+ 67742
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67743,
+ 67750
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67751,
+ 67759
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67760,
+ 67807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67808,
+ 67826
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67827,
+ 67827
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67828,
+ 67829
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67830,
+ 67834
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67835,
+ 67839
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67840,
+ 67861
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67862,
+ 67865
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67866,
+ 67867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67868,
+ 67870
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67871,
+ 67871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67872,
+ 67897
+ ],
+ "valid"
+ ],
+ [
+ [
+ 67898,
+ 67902
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67903,
+ 67903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 67904,
+ 67967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 67968,
+ 68023
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68024,
+ 68027
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68028,
+ 68029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68030,
+ 68031
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68032,
+ 68047
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68048,
+ 68049
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68050,
+ 68095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68096,
+ 68099
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68100,
+ 68100
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68101,
+ 68102
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68103,
+ 68107
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68108,
+ 68115
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68116,
+ 68116
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68117,
+ 68119
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68120,
+ 68120
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68121,
+ 68147
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68148,
+ 68151
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68152,
+ 68154
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68155,
+ 68158
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68159,
+ 68159
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68160,
+ 68167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68168,
+ 68175
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68176,
+ 68184
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68185,
+ 68191
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68192,
+ 68220
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68221,
+ 68223
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68224,
+ 68252
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68253,
+ 68255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68256,
+ 68287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68288,
+ 68295
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68296,
+ 68296
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68297,
+ 68326
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68327,
+ 68330
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68331,
+ 68342
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68343,
+ 68351
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68352,
+ 68405
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68406,
+ 68408
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68409,
+ 68415
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68416,
+ 68437
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68438,
+ 68439
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68440,
+ 68447
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68448,
+ 68466
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68467,
+ 68471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68472,
+ 68479
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68480,
+ 68497
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68498,
+ 68504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68505,
+ 68508
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68509,
+ 68520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68521,
+ 68527
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68528,
+ 68607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68608,
+ 68680
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68681,
+ 68735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68736,
+ 68736
+ ],
+ "mapped",
+ [
+ 68800
+ ]
+ ],
+ [
+ [
+ 68737,
+ 68737
+ ],
+ "mapped",
+ [
+ 68801
+ ]
+ ],
+ [
+ [
+ 68738,
+ 68738
+ ],
+ "mapped",
+ [
+ 68802
+ ]
+ ],
+ [
+ [
+ 68739,
+ 68739
+ ],
+ "mapped",
+ [
+ 68803
+ ]
+ ],
+ [
+ [
+ 68740,
+ 68740
+ ],
+ "mapped",
+ [
+ 68804
+ ]
+ ],
+ [
+ [
+ 68741,
+ 68741
+ ],
+ "mapped",
+ [
+ 68805
+ ]
+ ],
+ [
+ [
+ 68742,
+ 68742
+ ],
+ "mapped",
+ [
+ 68806
+ ]
+ ],
+ [
+ [
+ 68743,
+ 68743
+ ],
+ "mapped",
+ [
+ 68807
+ ]
+ ],
+ [
+ [
+ 68744,
+ 68744
+ ],
+ "mapped",
+ [
+ 68808
+ ]
+ ],
+ [
+ [
+ 68745,
+ 68745
+ ],
+ "mapped",
+ [
+ 68809
+ ]
+ ],
+ [
+ [
+ 68746,
+ 68746
+ ],
+ "mapped",
+ [
+ 68810
+ ]
+ ],
+ [
+ [
+ 68747,
+ 68747
+ ],
+ "mapped",
+ [
+ 68811
+ ]
+ ],
+ [
+ [
+ 68748,
+ 68748
+ ],
+ "mapped",
+ [
+ 68812
+ ]
+ ],
+ [
+ [
+ 68749,
+ 68749
+ ],
+ "mapped",
+ [
+ 68813
+ ]
+ ],
+ [
+ [
+ 68750,
+ 68750
+ ],
+ "mapped",
+ [
+ 68814
+ ]
+ ],
+ [
+ [
+ 68751,
+ 68751
+ ],
+ "mapped",
+ [
+ 68815
+ ]
+ ],
+ [
+ [
+ 68752,
+ 68752
+ ],
+ "mapped",
+ [
+ 68816
+ ]
+ ],
+ [
+ [
+ 68753,
+ 68753
+ ],
+ "mapped",
+ [
+ 68817
+ ]
+ ],
+ [
+ [
+ 68754,
+ 68754
+ ],
+ "mapped",
+ [
+ 68818
+ ]
+ ],
+ [
+ [
+ 68755,
+ 68755
+ ],
+ "mapped",
+ [
+ 68819
+ ]
+ ],
+ [
+ [
+ 68756,
+ 68756
+ ],
+ "mapped",
+ [
+ 68820
+ ]
+ ],
+ [
+ [
+ 68757,
+ 68757
+ ],
+ "mapped",
+ [
+ 68821
+ ]
+ ],
+ [
+ [
+ 68758,
+ 68758
+ ],
+ "mapped",
+ [
+ 68822
+ ]
+ ],
+ [
+ [
+ 68759,
+ 68759
+ ],
+ "mapped",
+ [
+ 68823
+ ]
+ ],
+ [
+ [
+ 68760,
+ 68760
+ ],
+ "mapped",
+ [
+ 68824
+ ]
+ ],
+ [
+ [
+ 68761,
+ 68761
+ ],
+ "mapped",
+ [
+ 68825
+ ]
+ ],
+ [
+ [
+ 68762,
+ 68762
+ ],
+ "mapped",
+ [
+ 68826
+ ]
+ ],
+ [
+ [
+ 68763,
+ 68763
+ ],
+ "mapped",
+ [
+ 68827
+ ]
+ ],
+ [
+ [
+ 68764,
+ 68764
+ ],
+ "mapped",
+ [
+ 68828
+ ]
+ ],
+ [
+ [
+ 68765,
+ 68765
+ ],
+ "mapped",
+ [
+ 68829
+ ]
+ ],
+ [
+ [
+ 68766,
+ 68766
+ ],
+ "mapped",
+ [
+ 68830
+ ]
+ ],
+ [
+ [
+ 68767,
+ 68767
+ ],
+ "mapped",
+ [
+ 68831
+ ]
+ ],
+ [
+ [
+ 68768,
+ 68768
+ ],
+ "mapped",
+ [
+ 68832
+ ]
+ ],
+ [
+ [
+ 68769,
+ 68769
+ ],
+ "mapped",
+ [
+ 68833
+ ]
+ ],
+ [
+ [
+ 68770,
+ 68770
+ ],
+ "mapped",
+ [
+ 68834
+ ]
+ ],
+ [
+ [
+ 68771,
+ 68771
+ ],
+ "mapped",
+ [
+ 68835
+ ]
+ ],
+ [
+ [
+ 68772,
+ 68772
+ ],
+ "mapped",
+ [
+ 68836
+ ]
+ ],
+ [
+ [
+ 68773,
+ 68773
+ ],
+ "mapped",
+ [
+ 68837
+ ]
+ ],
+ [
+ [
+ 68774,
+ 68774
+ ],
+ "mapped",
+ [
+ 68838
+ ]
+ ],
+ [
+ [
+ 68775,
+ 68775
+ ],
+ "mapped",
+ [
+ 68839
+ ]
+ ],
+ [
+ [
+ 68776,
+ 68776
+ ],
+ "mapped",
+ [
+ 68840
+ ]
+ ],
+ [
+ [
+ 68777,
+ 68777
+ ],
+ "mapped",
+ [
+ 68841
+ ]
+ ],
+ [
+ [
+ 68778,
+ 68778
+ ],
+ "mapped",
+ [
+ 68842
+ ]
+ ],
+ [
+ [
+ 68779,
+ 68779
+ ],
+ "mapped",
+ [
+ 68843
+ ]
+ ],
+ [
+ [
+ 68780,
+ 68780
+ ],
+ "mapped",
+ [
+ 68844
+ ]
+ ],
+ [
+ [
+ 68781,
+ 68781
+ ],
+ "mapped",
+ [
+ 68845
+ ]
+ ],
+ [
+ [
+ 68782,
+ 68782
+ ],
+ "mapped",
+ [
+ 68846
+ ]
+ ],
+ [
+ [
+ 68783,
+ 68783
+ ],
+ "mapped",
+ [
+ 68847
+ ]
+ ],
+ [
+ [
+ 68784,
+ 68784
+ ],
+ "mapped",
+ [
+ 68848
+ ]
+ ],
+ [
+ [
+ 68785,
+ 68785
+ ],
+ "mapped",
+ [
+ 68849
+ ]
+ ],
+ [
+ [
+ 68786,
+ 68786
+ ],
+ "mapped",
+ [
+ 68850
+ ]
+ ],
+ [
+ [
+ 68787,
+ 68799
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68800,
+ 68850
+ ],
+ "valid"
+ ],
+ [
+ [
+ 68851,
+ 68857
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 68858,
+ 68863
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 68864,
+ 69215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69216,
+ 69246
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69247,
+ 69631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69632,
+ 69702
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69703,
+ 69709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69710,
+ 69713
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69714,
+ 69733
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69734,
+ 69743
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69744,
+ 69758
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69759,
+ 69759
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69760,
+ 69818
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69819,
+ 69820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69821,
+ 69821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69822,
+ 69825
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69826,
+ 69839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69840,
+ 69864
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69865,
+ 69871
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69872,
+ 69881
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69882,
+ 69887
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69888,
+ 69940
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69941,
+ 69941
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69942,
+ 69951
+ ],
+ "valid"
+ ],
+ [
+ [
+ 69952,
+ 69955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 69956,
+ 69967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 69968,
+ 70003
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70004,
+ 70005
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70006,
+ 70006
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70007,
+ 70015
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70016,
+ 70084
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70085,
+ 70088
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70089,
+ 70089
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70090,
+ 70092
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70093,
+ 70093
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70094,
+ 70095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70096,
+ 70105
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70106,
+ 70106
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70107,
+ 70107
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70108,
+ 70108
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70109,
+ 70111
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70112,
+ 70112
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70113,
+ 70132
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70133,
+ 70143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70144,
+ 70161
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70162,
+ 70162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70163,
+ 70199
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70200,
+ 70205
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70206,
+ 70271
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70272,
+ 70278
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70279,
+ 70279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70280,
+ 70280
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70281,
+ 70281
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70282,
+ 70285
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70286,
+ 70286
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70287,
+ 70301
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70302,
+ 70302
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70303,
+ 70312
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70313,
+ 70313
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70314,
+ 70319
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70320,
+ 70378
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70379,
+ 70383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70384,
+ 70393
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70394,
+ 70399
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70400,
+ 70400
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70401,
+ 70403
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70404,
+ 70404
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70405,
+ 70412
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70413,
+ 70414
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70415,
+ 70416
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70417,
+ 70418
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70419,
+ 70440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70441,
+ 70441
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70442,
+ 70448
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70449,
+ 70449
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70450,
+ 70451
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70452,
+ 70452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70453,
+ 70457
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70458,
+ 70459
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70460,
+ 70468
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70469,
+ 70470
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70471,
+ 70472
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70473,
+ 70474
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70475,
+ 70477
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70478,
+ 70479
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70480,
+ 70480
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70481,
+ 70486
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70487,
+ 70487
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70488,
+ 70492
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70493,
+ 70499
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70500,
+ 70501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70502,
+ 70508
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70509,
+ 70511
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70512,
+ 70516
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70517,
+ 70783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70784,
+ 70853
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70854,
+ 70854
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 70855,
+ 70855
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70856,
+ 70863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 70864,
+ 70873
+ ],
+ "valid"
+ ],
+ [
+ [
+ 70874,
+ 71039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71040,
+ 71093
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71094,
+ 71095
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71096,
+ 71104
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71105,
+ 71113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71114,
+ 71127
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71128,
+ 71133
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71134,
+ 71167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71168,
+ 71232
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71233,
+ 71235
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71236,
+ 71236
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71237,
+ 71247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71248,
+ 71257
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71258,
+ 71295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71296,
+ 71351
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71352,
+ 71359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71360,
+ 71369
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71370,
+ 71423
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71424,
+ 71449
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71450,
+ 71452
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71453,
+ 71467
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71468,
+ 71471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71472,
+ 71481
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71482,
+ 71487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71488,
+ 71839
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71840,
+ 71840
+ ],
+ "mapped",
+ [
+ 71872
+ ]
+ ],
+ [
+ [
+ 71841,
+ 71841
+ ],
+ "mapped",
+ [
+ 71873
+ ]
+ ],
+ [
+ [
+ 71842,
+ 71842
+ ],
+ "mapped",
+ [
+ 71874
+ ]
+ ],
+ [
+ [
+ 71843,
+ 71843
+ ],
+ "mapped",
+ [
+ 71875
+ ]
+ ],
+ [
+ [
+ 71844,
+ 71844
+ ],
+ "mapped",
+ [
+ 71876
+ ]
+ ],
+ [
+ [
+ 71845,
+ 71845
+ ],
+ "mapped",
+ [
+ 71877
+ ]
+ ],
+ [
+ [
+ 71846,
+ 71846
+ ],
+ "mapped",
+ [
+ 71878
+ ]
+ ],
+ [
+ [
+ 71847,
+ 71847
+ ],
+ "mapped",
+ [
+ 71879
+ ]
+ ],
+ [
+ [
+ 71848,
+ 71848
+ ],
+ "mapped",
+ [
+ 71880
+ ]
+ ],
+ [
+ [
+ 71849,
+ 71849
+ ],
+ "mapped",
+ [
+ 71881
+ ]
+ ],
+ [
+ [
+ 71850,
+ 71850
+ ],
+ "mapped",
+ [
+ 71882
+ ]
+ ],
+ [
+ [
+ 71851,
+ 71851
+ ],
+ "mapped",
+ [
+ 71883
+ ]
+ ],
+ [
+ [
+ 71852,
+ 71852
+ ],
+ "mapped",
+ [
+ 71884
+ ]
+ ],
+ [
+ [
+ 71853,
+ 71853
+ ],
+ "mapped",
+ [
+ 71885
+ ]
+ ],
+ [
+ [
+ 71854,
+ 71854
+ ],
+ "mapped",
+ [
+ 71886
+ ]
+ ],
+ [
+ [
+ 71855,
+ 71855
+ ],
+ "mapped",
+ [
+ 71887
+ ]
+ ],
+ [
+ [
+ 71856,
+ 71856
+ ],
+ "mapped",
+ [
+ 71888
+ ]
+ ],
+ [
+ [
+ 71857,
+ 71857
+ ],
+ "mapped",
+ [
+ 71889
+ ]
+ ],
+ [
+ [
+ 71858,
+ 71858
+ ],
+ "mapped",
+ [
+ 71890
+ ]
+ ],
+ [
+ [
+ 71859,
+ 71859
+ ],
+ "mapped",
+ [
+ 71891
+ ]
+ ],
+ [
+ [
+ 71860,
+ 71860
+ ],
+ "mapped",
+ [
+ 71892
+ ]
+ ],
+ [
+ [
+ 71861,
+ 71861
+ ],
+ "mapped",
+ [
+ 71893
+ ]
+ ],
+ [
+ [
+ 71862,
+ 71862
+ ],
+ "mapped",
+ [
+ 71894
+ ]
+ ],
+ [
+ [
+ 71863,
+ 71863
+ ],
+ "mapped",
+ [
+ 71895
+ ]
+ ],
+ [
+ [
+ 71864,
+ 71864
+ ],
+ "mapped",
+ [
+ 71896
+ ]
+ ],
+ [
+ [
+ 71865,
+ 71865
+ ],
+ "mapped",
+ [
+ 71897
+ ]
+ ],
+ [
+ [
+ 71866,
+ 71866
+ ],
+ "mapped",
+ [
+ 71898
+ ]
+ ],
+ [
+ [
+ 71867,
+ 71867
+ ],
+ "mapped",
+ [
+ 71899
+ ]
+ ],
+ [
+ [
+ 71868,
+ 71868
+ ],
+ "mapped",
+ [
+ 71900
+ ]
+ ],
+ [
+ [
+ 71869,
+ 71869
+ ],
+ "mapped",
+ [
+ 71901
+ ]
+ ],
+ [
+ [
+ 71870,
+ 71870
+ ],
+ "mapped",
+ [
+ 71902
+ ]
+ ],
+ [
+ [
+ 71871,
+ 71871
+ ],
+ "mapped",
+ [
+ 71903
+ ]
+ ],
+ [
+ [
+ 71872,
+ 71913
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71914,
+ 71922
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 71923,
+ 71934
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 71935,
+ 71935
+ ],
+ "valid"
+ ],
+ [
+ [
+ 71936,
+ 72383
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 72384,
+ 72440
+ ],
+ "valid"
+ ],
+ [
+ [
+ 72441,
+ 73727
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 73728,
+ 74606
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74607,
+ 74648
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74649,
+ 74649
+ ],
+ "valid"
+ ],
+ [
+ [
+ 74650,
+ 74751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74752,
+ 74850
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74851,
+ 74862
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74863,
+ 74863
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74864,
+ 74867
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74868,
+ 74868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 74869,
+ 74879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 74880,
+ 75075
+ ],
+ "valid"
+ ],
+ [
+ [
+ 75076,
+ 77823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 77824,
+ 78894
+ ],
+ "valid"
+ ],
+ [
+ [
+ 78895,
+ 82943
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 82944,
+ 83526
+ ],
+ "valid"
+ ],
+ [
+ [
+ 83527,
+ 92159
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92160,
+ 92728
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92729,
+ 92735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92736,
+ 92766
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92767,
+ 92767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92768,
+ 92777
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92778,
+ 92781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92782,
+ 92783
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92784,
+ 92879
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92880,
+ 92909
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92910,
+ 92911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92912,
+ 92916
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92917,
+ 92917
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92918,
+ 92927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 92928,
+ 92982
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92983,
+ 92991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92992,
+ 92995
+ ],
+ "valid"
+ ],
+ [
+ [
+ 92996,
+ 92997
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 92998,
+ 93007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93008,
+ 93017
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93018,
+ 93018
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93019,
+ 93025
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 93026,
+ 93026
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93027,
+ 93047
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93048,
+ 93052
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93053,
+ 93071
+ ],
+ "valid"
+ ],
+ [
+ [
+ 93072,
+ 93951
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 93952,
+ 94020
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94021,
+ 94031
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94032,
+ 94078
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94079,
+ 94094
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 94095,
+ 94111
+ ],
+ "valid"
+ ],
+ [
+ [
+ 94112,
+ 110591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 110592,
+ 110593
+ ],
+ "valid"
+ ],
+ [
+ [
+ 110594,
+ 113663
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113664,
+ 113770
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113771,
+ 113775
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113776,
+ 113788
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113789,
+ 113791
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113792,
+ 113800
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113801,
+ 113807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113808,
+ 113817
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113818,
+ 113819
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 113820,
+ 113820
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113821,
+ 113822
+ ],
+ "valid"
+ ],
+ [
+ [
+ 113823,
+ 113823
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 113824,
+ 113827
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 113828,
+ 118783
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 118784,
+ 119029
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119030,
+ 119039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119040,
+ 119078
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119079,
+ 119080
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119081,
+ 119081
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119082,
+ 119133
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119134,
+ 119134
+ ],
+ "mapped",
+ [
+ 119127,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119135,
+ 119135
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119136,
+ 119136
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119137,
+ 119137
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119138,
+ 119138
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119152
+ ]
+ ],
+ [
+ [
+ 119139,
+ 119139
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119153
+ ]
+ ],
+ [
+ [
+ 119140,
+ 119140
+ ],
+ "mapped",
+ [
+ 119128,
+ 119141,
+ 119154
+ ]
+ ],
+ [
+ [
+ 119141,
+ 119154
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119155,
+ 119162
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119163,
+ 119226
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119227,
+ 119227
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119228,
+ 119228
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141
+ ]
+ ],
+ [
+ [
+ 119229,
+ 119229
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119230,
+ 119230
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119150
+ ]
+ ],
+ [
+ [
+ 119231,
+ 119231
+ ],
+ "mapped",
+ [
+ 119225,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119232,
+ 119232
+ ],
+ "mapped",
+ [
+ 119226,
+ 119141,
+ 119151
+ ]
+ ],
+ [
+ [
+ 119233,
+ 119261
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119262,
+ 119272
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119273,
+ 119295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119296,
+ 119365
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119366,
+ 119551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119552,
+ 119638
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119639,
+ 119647
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119648,
+ 119665
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 119666,
+ 119807
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119808,
+ 119808
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119809,
+ 119809
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119810,
+ 119810
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119811,
+ 119811
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119812,
+ 119812
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119813,
+ 119813
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119814,
+ 119814
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119815,
+ 119815
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119816,
+ 119816
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119817,
+ 119817
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119818,
+ 119818
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119819,
+ 119819
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119820,
+ 119820
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119821,
+ 119821
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119822,
+ 119822
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119823,
+ 119823
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119824,
+ 119824
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119825,
+ 119825
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119826,
+ 119826
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119827,
+ 119827
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119828,
+ 119828
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119829,
+ 119829
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119830,
+ 119830
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119831,
+ 119831
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119832,
+ 119832
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119833,
+ 119833
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119834,
+ 119834
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119835,
+ 119835
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119836,
+ 119836
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119837,
+ 119837
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119838,
+ 119838
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119839,
+ 119839
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119840,
+ 119840
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119841,
+ 119841
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119842,
+ 119842
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119843,
+ 119843
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119844,
+ 119844
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119845,
+ 119845
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119846,
+ 119846
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119847,
+ 119847
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119848,
+ 119848
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119849,
+ 119849
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119850,
+ 119850
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119851,
+ 119851
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119852,
+ 119852
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119853,
+ 119853
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119854,
+ 119854
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119855,
+ 119855
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119856,
+ 119856
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119857,
+ 119857
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119858,
+ 119858
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119859,
+ 119859
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119860,
+ 119860
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119861,
+ 119861
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119862,
+ 119862
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119863,
+ 119863
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119864,
+ 119864
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119865,
+ 119865
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119866,
+ 119866
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119867,
+ 119867
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119868,
+ 119868
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119869,
+ 119869
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119870,
+ 119870
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119871,
+ 119871
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119872,
+ 119872
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119873,
+ 119873
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119874,
+ 119874
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119875,
+ 119875
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119876,
+ 119876
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119877,
+ 119877
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119878,
+ 119878
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119879,
+ 119879
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119880,
+ 119880
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119881,
+ 119881
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119882,
+ 119882
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119883,
+ 119883
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119884,
+ 119884
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119885,
+ 119885
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119886,
+ 119886
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119887,
+ 119887
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119888,
+ 119888
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119889,
+ 119889
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119890,
+ 119890
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119891,
+ 119891
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119892,
+ 119892
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119893,
+ 119893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119894,
+ 119894
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119895,
+ 119895
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119896,
+ 119896
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119897,
+ 119897
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119898,
+ 119898
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119899,
+ 119899
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119900,
+ 119900
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119901,
+ 119901
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119902,
+ 119902
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119903,
+ 119903
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119904,
+ 119904
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119905,
+ 119905
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119906,
+ 119906
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119907,
+ 119907
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119908,
+ 119908
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119909,
+ 119909
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119910,
+ 119910
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119911,
+ 119911
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119912,
+ 119912
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119913,
+ 119913
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119914,
+ 119914
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119915,
+ 119915
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119916,
+ 119916
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119917,
+ 119917
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119918,
+ 119918
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119919,
+ 119919
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119920,
+ 119920
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119921,
+ 119921
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119922,
+ 119922
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119923,
+ 119923
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119924,
+ 119924
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119925,
+ 119925
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119926,
+ 119926
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119927,
+ 119927
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119928,
+ 119928
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119929,
+ 119929
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119930,
+ 119930
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119931,
+ 119931
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119932,
+ 119932
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119933,
+ 119933
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119934,
+ 119934
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119935,
+ 119935
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119936,
+ 119936
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119937,
+ 119937
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119938,
+ 119938
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119939,
+ 119939
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119940,
+ 119940
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119941,
+ 119941
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119942,
+ 119942
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 119943,
+ 119943
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119944,
+ 119944
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119945,
+ 119945
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119946,
+ 119946
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119947,
+ 119947
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119948,
+ 119948
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119949,
+ 119949
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 119950,
+ 119950
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 119951,
+ 119951
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119952,
+ 119952
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119953,
+ 119953
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119954,
+ 119954
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119955,
+ 119955
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 119956,
+ 119956
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119957,
+ 119957
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119958,
+ 119958
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119959,
+ 119959
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119960,
+ 119960
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119961,
+ 119961
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119962,
+ 119962
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119963,
+ 119963
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119964,
+ 119964
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119965,
+ 119965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119966,
+ 119966
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119967,
+ 119967
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119968,
+ 119969
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119970,
+ 119970
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 119971,
+ 119972
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119973,
+ 119973
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 119974,
+ 119974
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 119975,
+ 119976
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119977,
+ 119977
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 119978,
+ 119978
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 119979,
+ 119979
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 119980,
+ 119980
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 119981,
+ 119981
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119982,
+ 119982
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 119983,
+ 119983
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 119984,
+ 119984
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 119985,
+ 119985
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 119986,
+ 119986
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 119987,
+ 119987
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 119988,
+ 119988
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 119989,
+ 119989
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 119990,
+ 119990
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 119991,
+ 119991
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 119992,
+ 119992
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 119993,
+ 119993
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 119994,
+ 119994
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119995,
+ 119995
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 119996,
+ 119996
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 119997,
+ 119997
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 119998,
+ 119998
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 119999,
+ 119999
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120000,
+ 120000
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120001,
+ 120001
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120002,
+ 120002
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120003,
+ 120003
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120004,
+ 120004
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120005,
+ 120005
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120006,
+ 120006
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120007,
+ 120007
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120008,
+ 120008
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120009,
+ 120009
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120010,
+ 120010
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120011,
+ 120011
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120012,
+ 120012
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120013,
+ 120013
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120014,
+ 120014
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120015,
+ 120015
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120016,
+ 120016
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120017,
+ 120017
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120018,
+ 120018
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120019,
+ 120019
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120020,
+ 120020
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120021,
+ 120021
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120022,
+ 120022
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120023,
+ 120023
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120024,
+ 120024
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120025,
+ 120025
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120026,
+ 120026
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120027,
+ 120027
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120028,
+ 120028
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120029,
+ 120029
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120030,
+ 120030
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120031,
+ 120031
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120032,
+ 120032
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120033,
+ 120033
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120034,
+ 120034
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120035,
+ 120035
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120036,
+ 120036
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120037,
+ 120037
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120038,
+ 120038
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120039,
+ 120039
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120040,
+ 120040
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120041,
+ 120041
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120042,
+ 120042
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120043,
+ 120043
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120044,
+ 120044
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120045,
+ 120045
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120046,
+ 120046
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120047,
+ 120047
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120048,
+ 120048
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120049,
+ 120049
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120050,
+ 120050
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120051,
+ 120051
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120052,
+ 120052
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120053,
+ 120053
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120054,
+ 120054
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120055,
+ 120055
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120056,
+ 120056
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120057,
+ 120057
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120058,
+ 120058
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120059,
+ 120059
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120060,
+ 120060
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120061,
+ 120061
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120062,
+ 120062
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120063,
+ 120063
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120064,
+ 120064
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120065,
+ 120065
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120066,
+ 120066
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120067,
+ 120067
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120068,
+ 120068
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120069,
+ 120069
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120070,
+ 120070
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120071,
+ 120071
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120072,
+ 120072
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120073,
+ 120073
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120074,
+ 120074
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120075,
+ 120076
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120077,
+ 120077
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120078,
+ 120078
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120079,
+ 120079
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120080,
+ 120080
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120081,
+ 120081
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120082,
+ 120082
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120083,
+ 120083
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120084,
+ 120084
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120085,
+ 120085
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120086,
+ 120086
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120087,
+ 120087
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120088,
+ 120088
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120089,
+ 120089
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120090,
+ 120090
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120091,
+ 120091
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120092,
+ 120092
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120093,
+ 120093
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120094,
+ 120094
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120095,
+ 120095
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120096,
+ 120096
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120097,
+ 120097
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120098,
+ 120098
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120099,
+ 120099
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120100,
+ 120100
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120101,
+ 120101
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120102,
+ 120102
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120103,
+ 120103
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120104,
+ 120104
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120105,
+ 120105
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120106,
+ 120106
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120107,
+ 120107
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120108,
+ 120108
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120109,
+ 120109
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120110,
+ 120110
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120111,
+ 120111
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120112,
+ 120112
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120113,
+ 120113
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120114,
+ 120114
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120115,
+ 120115
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120116,
+ 120116
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120117,
+ 120117
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120118,
+ 120118
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120119,
+ 120119
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120120,
+ 120120
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120121,
+ 120121
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120122,
+ 120122
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120123,
+ 120123
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120124,
+ 120124
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120125,
+ 120125
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120126,
+ 120126
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120127,
+ 120127
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120128,
+ 120128
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120129,
+ 120129
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120130,
+ 120130
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120131,
+ 120131
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120132,
+ 120132
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120133,
+ 120133
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120134,
+ 120134
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120135,
+ 120137
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120138,
+ 120138
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120139,
+ 120139
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120140,
+ 120140
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120141,
+ 120141
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120142,
+ 120142
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120143,
+ 120143
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120144,
+ 120144
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120145,
+ 120145
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120146,
+ 120146
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120147,
+ 120147
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120148,
+ 120148
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120149,
+ 120149
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120150,
+ 120150
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120151,
+ 120151
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120152,
+ 120152
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120153,
+ 120153
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120154,
+ 120154
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120155,
+ 120155
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120156,
+ 120156
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120157,
+ 120157
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120158,
+ 120158
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120159,
+ 120159
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120160,
+ 120160
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120161,
+ 120161
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120162,
+ 120162
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120163,
+ 120163
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120164,
+ 120164
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120165,
+ 120165
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120166,
+ 120166
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120167,
+ 120167
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120168,
+ 120168
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120169,
+ 120169
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120170,
+ 120170
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120171,
+ 120171
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120172,
+ 120172
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120173,
+ 120173
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120174,
+ 120174
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120175,
+ 120175
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120176,
+ 120176
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120177,
+ 120177
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120178,
+ 120178
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120179,
+ 120179
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120180,
+ 120180
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120181,
+ 120181
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120182,
+ 120182
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120183,
+ 120183
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120184,
+ 120184
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120185,
+ 120185
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120186,
+ 120186
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120187,
+ 120187
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120188,
+ 120188
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120189,
+ 120189
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120190,
+ 120190
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120191,
+ 120191
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120192,
+ 120192
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120193,
+ 120193
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120194,
+ 120194
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120195,
+ 120195
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120196,
+ 120196
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120197,
+ 120197
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120198,
+ 120198
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120199,
+ 120199
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120200,
+ 120200
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120201,
+ 120201
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120202,
+ 120202
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120203,
+ 120203
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120204,
+ 120204
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120205,
+ 120205
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120206,
+ 120206
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120207,
+ 120207
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120208,
+ 120208
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120209,
+ 120209
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120210,
+ 120210
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120211,
+ 120211
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120212,
+ 120212
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120213,
+ 120213
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120214,
+ 120214
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120215,
+ 120215
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120216,
+ 120216
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120217,
+ 120217
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120218,
+ 120218
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120219,
+ 120219
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120220,
+ 120220
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120221,
+ 120221
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120222,
+ 120222
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120223,
+ 120223
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120224,
+ 120224
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120225,
+ 120225
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120226,
+ 120226
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120227,
+ 120227
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120228,
+ 120228
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120229,
+ 120229
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120230,
+ 120230
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120231,
+ 120231
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120232,
+ 120232
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120233,
+ 120233
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120234,
+ 120234
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120235,
+ 120235
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120236,
+ 120236
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120237,
+ 120237
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120238,
+ 120238
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120239,
+ 120239
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120240,
+ 120240
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120241,
+ 120241
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120242,
+ 120242
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120243,
+ 120243
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120244,
+ 120244
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120245,
+ 120245
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120246,
+ 120246
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120247,
+ 120247
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120248,
+ 120248
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120249,
+ 120249
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120250,
+ 120250
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120251,
+ 120251
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120252,
+ 120252
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120253,
+ 120253
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120254,
+ 120254
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120255,
+ 120255
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120256,
+ 120256
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120257,
+ 120257
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120258,
+ 120258
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120259,
+ 120259
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120260,
+ 120260
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120261,
+ 120261
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120262,
+ 120262
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120263,
+ 120263
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120264,
+ 120264
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120265,
+ 120265
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120266,
+ 120266
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120267,
+ 120267
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120268,
+ 120268
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120269,
+ 120269
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120270,
+ 120270
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120271,
+ 120271
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120272,
+ 120272
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120273,
+ 120273
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120274,
+ 120274
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120275,
+ 120275
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120276,
+ 120276
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120277,
+ 120277
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120278,
+ 120278
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120279,
+ 120279
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120280,
+ 120280
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120281,
+ 120281
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120282,
+ 120282
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120283,
+ 120283
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120284,
+ 120284
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120285,
+ 120285
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120286,
+ 120286
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120287,
+ 120287
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120288,
+ 120288
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120289,
+ 120289
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120290,
+ 120290
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120291,
+ 120291
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120292,
+ 120292
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120293,
+ 120293
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120294,
+ 120294
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120295,
+ 120295
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120296,
+ 120296
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120297,
+ 120297
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120298,
+ 120298
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120299,
+ 120299
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120300,
+ 120300
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120301,
+ 120301
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120302,
+ 120302
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120303,
+ 120303
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120304,
+ 120304
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120305,
+ 120305
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120306,
+ 120306
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120307,
+ 120307
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120308,
+ 120308
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120309,
+ 120309
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120310,
+ 120310
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120311,
+ 120311
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120312,
+ 120312
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120313,
+ 120313
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120314,
+ 120314
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120315,
+ 120315
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120316,
+ 120316
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120317,
+ 120317
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120318,
+ 120318
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120319,
+ 120319
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120320,
+ 120320
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120321,
+ 120321
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120322,
+ 120322
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120323,
+ 120323
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120324,
+ 120324
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120325,
+ 120325
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120326,
+ 120326
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120327,
+ 120327
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120328,
+ 120328
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120329,
+ 120329
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120330,
+ 120330
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120331,
+ 120331
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120332,
+ 120332
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120333,
+ 120333
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120334,
+ 120334
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120335,
+ 120335
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120336,
+ 120336
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120337,
+ 120337
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120338,
+ 120338
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120339,
+ 120339
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120340,
+ 120340
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120341,
+ 120341
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120342,
+ 120342
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120343,
+ 120343
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120344,
+ 120344
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120345,
+ 120345
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120346,
+ 120346
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120347,
+ 120347
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120348,
+ 120348
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120349,
+ 120349
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120350,
+ 120350
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120351,
+ 120351
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120352,
+ 120352
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120353,
+ 120353
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120354,
+ 120354
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120355,
+ 120355
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120356,
+ 120356
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120357,
+ 120357
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120358,
+ 120358
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120359,
+ 120359
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120360,
+ 120360
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120361,
+ 120361
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120362,
+ 120362
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120363,
+ 120363
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120364,
+ 120364
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120365,
+ 120365
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120366,
+ 120366
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120367,
+ 120367
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120368,
+ 120368
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120369,
+ 120369
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120370,
+ 120370
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120371,
+ 120371
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120372,
+ 120372
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120373,
+ 120373
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120374,
+ 120374
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120375,
+ 120375
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120376,
+ 120376
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120377,
+ 120377
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120378,
+ 120378
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120379,
+ 120379
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120380,
+ 120380
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120381,
+ 120381
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120382,
+ 120382
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120383,
+ 120383
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120384,
+ 120384
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120385,
+ 120385
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120386,
+ 120386
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120387,
+ 120387
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120388,
+ 120388
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120389,
+ 120389
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120390,
+ 120390
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120391,
+ 120391
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120392,
+ 120392
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120393,
+ 120393
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120394,
+ 120394
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120395,
+ 120395
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120396,
+ 120396
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120397,
+ 120397
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120398,
+ 120398
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120399,
+ 120399
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120400,
+ 120400
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120401,
+ 120401
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120402,
+ 120402
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120403,
+ 120403
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120404,
+ 120404
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120405,
+ 120405
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120406,
+ 120406
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120407,
+ 120407
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120408,
+ 120408
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120409,
+ 120409
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120410,
+ 120410
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120411,
+ 120411
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120412,
+ 120412
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120413,
+ 120413
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120414,
+ 120414
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120415,
+ 120415
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120416,
+ 120416
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120417,
+ 120417
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120418,
+ 120418
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120419,
+ 120419
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120420,
+ 120420
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120421,
+ 120421
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120422,
+ 120422
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120423,
+ 120423
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120424,
+ 120424
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120425,
+ 120425
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120426,
+ 120426
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120427,
+ 120427
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120428,
+ 120428
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120429,
+ 120429
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120430,
+ 120430
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120431,
+ 120431
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120432,
+ 120432
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120433,
+ 120433
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120434,
+ 120434
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120435,
+ 120435
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120436,
+ 120436
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120437,
+ 120437
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120438,
+ 120438
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120439,
+ 120439
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120440,
+ 120440
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120441,
+ 120441
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120442,
+ 120442
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120443,
+ 120443
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120444,
+ 120444
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120445,
+ 120445
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120446,
+ 120446
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120447,
+ 120447
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120448,
+ 120448
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120449,
+ 120449
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120450,
+ 120450
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120451,
+ 120451
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120452,
+ 120452
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120453,
+ 120453
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120454,
+ 120454
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120455,
+ 120455
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120456,
+ 120456
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120457,
+ 120457
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120458,
+ 120458
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 120459,
+ 120459
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 120460,
+ 120460
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 120461,
+ 120461
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 120462,
+ 120462
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 120463,
+ 120463
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 120464,
+ 120464
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 120465,
+ 120465
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 120466,
+ 120466
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 120467,
+ 120467
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 120468,
+ 120468
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 120469,
+ 120469
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 120470,
+ 120470
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 120471,
+ 120471
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 120472,
+ 120472
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 120473,
+ 120473
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 120474,
+ 120474
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 120475,
+ 120475
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 120476,
+ 120476
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 120477,
+ 120477
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 120478,
+ 120478
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 120479,
+ 120479
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 120480,
+ 120480
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 120481,
+ 120481
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 120482,
+ 120482
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 120483,
+ 120483
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 120484,
+ 120484
+ ],
+ "mapped",
+ [
+ 305
+ ]
+ ],
+ [
+ [
+ 120485,
+ 120485
+ ],
+ "mapped",
+ [
+ 567
+ ]
+ ],
+ [
+ [
+ 120486,
+ 120487
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120488,
+ 120488
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120489,
+ 120489
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120490,
+ 120490
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120491,
+ 120491
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120492,
+ 120492
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120493,
+ 120493
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120494,
+ 120494
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120495,
+ 120495
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120496,
+ 120496
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120497,
+ 120497
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120498,
+ 120498
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120499,
+ 120499
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120500,
+ 120500
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120501,
+ 120501
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120502,
+ 120502
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120503,
+ 120503
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120504,
+ 120504
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120505,
+ 120505
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120506,
+ 120506
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120507,
+ 120507
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120508,
+ 120508
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120509,
+ 120509
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120510,
+ 120510
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120511,
+ 120511
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120512,
+ 120512
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120513,
+ 120513
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120514,
+ 120514
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120515,
+ 120515
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120516,
+ 120516
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120517,
+ 120517
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120518,
+ 120518
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120519,
+ 120519
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120520,
+ 120520
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120521,
+ 120521
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120522,
+ 120522
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120523,
+ 120523
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120524,
+ 120524
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120525,
+ 120525
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120526,
+ 120526
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120527,
+ 120527
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120528,
+ 120528
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120529,
+ 120529
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120530,
+ 120530
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120531,
+ 120532
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120533,
+ 120533
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120534,
+ 120534
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120535,
+ 120535
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120536,
+ 120536
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120537,
+ 120537
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120538,
+ 120538
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120539,
+ 120539
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120540,
+ 120540
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120541,
+ 120541
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120542,
+ 120542
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120543,
+ 120543
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120544,
+ 120544
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120545,
+ 120545
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120546,
+ 120546
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120547,
+ 120547
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120548,
+ 120548
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120549,
+ 120549
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120550,
+ 120550
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120551,
+ 120551
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120552,
+ 120552
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120553,
+ 120553
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120554,
+ 120554
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120555,
+ 120555
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120556,
+ 120556
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120557,
+ 120557
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120558,
+ 120558
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120559,
+ 120559
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120560,
+ 120560
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120561,
+ 120561
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120562,
+ 120562
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120563,
+ 120563
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120564,
+ 120564
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120565,
+ 120565
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120566,
+ 120566
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120567,
+ 120567
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120568,
+ 120568
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120569,
+ 120569
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120570,
+ 120570
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120571,
+ 120571
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120572,
+ 120572
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120573,
+ 120573
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120574,
+ 120574
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120575,
+ 120575
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120576,
+ 120576
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120577,
+ 120577
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120578,
+ 120578
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120579,
+ 120579
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120580,
+ 120580
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120581,
+ 120581
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120582,
+ 120582
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120583,
+ 120583
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120584,
+ 120584
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120585,
+ 120585
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120586,
+ 120586
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120587,
+ 120587
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120588,
+ 120588
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120589,
+ 120590
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120591,
+ 120591
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120592,
+ 120592
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120593,
+ 120593
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120594,
+ 120594
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120595,
+ 120595
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120596,
+ 120596
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120597,
+ 120597
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120598,
+ 120598
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120599,
+ 120599
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120600,
+ 120600
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120601,
+ 120601
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120602,
+ 120602
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120603,
+ 120603
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120604,
+ 120604
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120605,
+ 120605
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120606,
+ 120606
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120607,
+ 120607
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120608,
+ 120608
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120609,
+ 120609
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120610,
+ 120610
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120611,
+ 120611
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120612,
+ 120612
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120613,
+ 120613
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120614,
+ 120614
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120615,
+ 120615
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120616,
+ 120616
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120617,
+ 120617
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120618,
+ 120618
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120619,
+ 120619
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120620,
+ 120620
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120621,
+ 120621
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120622,
+ 120622
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120623,
+ 120623
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120624,
+ 120624
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120625,
+ 120625
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120626,
+ 120626
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120627,
+ 120627
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120628,
+ 120628
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120629,
+ 120629
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120630,
+ 120630
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120631,
+ 120631
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120632,
+ 120632
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120633,
+ 120633
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120634,
+ 120634
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120635,
+ 120635
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120636,
+ 120636
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120637,
+ 120637
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120638,
+ 120638
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120639,
+ 120639
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120640,
+ 120640
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120641,
+ 120641
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120642,
+ 120642
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120643,
+ 120643
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120644,
+ 120644
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120645,
+ 120645
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120646,
+ 120646
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120647,
+ 120648
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120649,
+ 120649
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120650,
+ 120650
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120651,
+ 120651
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120652,
+ 120652
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120653,
+ 120653
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120654,
+ 120654
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120655,
+ 120655
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120656,
+ 120656
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120657,
+ 120657
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120658,
+ 120658
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120659,
+ 120659
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120660,
+ 120660
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120661,
+ 120661
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120662,
+ 120662
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120663,
+ 120663
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120664,
+ 120664
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120665,
+ 120665
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120666,
+ 120666
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120667,
+ 120667
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120668,
+ 120668
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120669,
+ 120669
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120670,
+ 120670
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120671,
+ 120671
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120672,
+ 120672
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120673,
+ 120673
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120674,
+ 120674
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120675,
+ 120675
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120676,
+ 120676
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120677,
+ 120677
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120678,
+ 120678
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120679,
+ 120679
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120680,
+ 120680
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120681,
+ 120681
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120682,
+ 120682
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120683,
+ 120683
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120684,
+ 120684
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120685,
+ 120685
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120686,
+ 120686
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120687,
+ 120687
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120688,
+ 120688
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120689,
+ 120689
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120690,
+ 120690
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120691,
+ 120691
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120692,
+ 120692
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120693,
+ 120693
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120694,
+ 120694
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120695,
+ 120695
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120696,
+ 120696
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120697,
+ 120697
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120698,
+ 120698
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120699,
+ 120699
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120700,
+ 120700
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120701,
+ 120701
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120702,
+ 120702
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120703,
+ 120703
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120704,
+ 120704
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120705,
+ 120706
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120707,
+ 120707
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120708,
+ 120708
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120709,
+ 120709
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120710,
+ 120710
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120711,
+ 120711
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120712,
+ 120712
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120713,
+ 120713
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120714,
+ 120714
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120715,
+ 120715
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120716,
+ 120716
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120717,
+ 120717
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120718,
+ 120718
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120719,
+ 120719
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120720,
+ 120720
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120721,
+ 120721
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120722,
+ 120722
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120723,
+ 120723
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120724,
+ 120724
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120725,
+ 120725
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120726,
+ 120726
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120727,
+ 120727
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120728,
+ 120728
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120729,
+ 120729
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120730,
+ 120730
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120731,
+ 120731
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120732,
+ 120732
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120733,
+ 120733
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120734,
+ 120734
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120735,
+ 120735
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120736,
+ 120736
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120737,
+ 120737
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120738,
+ 120738
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120739,
+ 120739
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120740,
+ 120740
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120741,
+ 120741
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120742,
+ 120742
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120743,
+ 120743
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120744,
+ 120744
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120745,
+ 120745
+ ],
+ "mapped",
+ [
+ 8711
+ ]
+ ],
+ [
+ [
+ 120746,
+ 120746
+ ],
+ "mapped",
+ [
+ 945
+ ]
+ ],
+ [
+ [
+ 120747,
+ 120747
+ ],
+ "mapped",
+ [
+ 946
+ ]
+ ],
+ [
+ [
+ 120748,
+ 120748
+ ],
+ "mapped",
+ [
+ 947
+ ]
+ ],
+ [
+ [
+ 120749,
+ 120749
+ ],
+ "mapped",
+ [
+ 948
+ ]
+ ],
+ [
+ [
+ 120750,
+ 120750
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120751,
+ 120751
+ ],
+ "mapped",
+ [
+ 950
+ ]
+ ],
+ [
+ [
+ 120752,
+ 120752
+ ],
+ "mapped",
+ [
+ 951
+ ]
+ ],
+ [
+ [
+ 120753,
+ 120753
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120754,
+ 120754
+ ],
+ "mapped",
+ [
+ 953
+ ]
+ ],
+ [
+ [
+ 120755,
+ 120755
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120756,
+ 120756
+ ],
+ "mapped",
+ [
+ 955
+ ]
+ ],
+ [
+ [
+ 120757,
+ 120757
+ ],
+ "mapped",
+ [
+ 956
+ ]
+ ],
+ [
+ [
+ 120758,
+ 120758
+ ],
+ "mapped",
+ [
+ 957
+ ]
+ ],
+ [
+ [
+ 120759,
+ 120759
+ ],
+ "mapped",
+ [
+ 958
+ ]
+ ],
+ [
+ [
+ 120760,
+ 120760
+ ],
+ "mapped",
+ [
+ 959
+ ]
+ ],
+ [
+ [
+ 120761,
+ 120761
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120762,
+ 120762
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120763,
+ 120764
+ ],
+ "mapped",
+ [
+ 963
+ ]
+ ],
+ [
+ [
+ 120765,
+ 120765
+ ],
+ "mapped",
+ [
+ 964
+ ]
+ ],
+ [
+ [
+ 120766,
+ 120766
+ ],
+ "mapped",
+ [
+ 965
+ ]
+ ],
+ [
+ [
+ 120767,
+ 120767
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120768,
+ 120768
+ ],
+ "mapped",
+ [
+ 967
+ ]
+ ],
+ [
+ [
+ 120769,
+ 120769
+ ],
+ "mapped",
+ [
+ 968
+ ]
+ ],
+ [
+ [
+ 120770,
+ 120770
+ ],
+ "mapped",
+ [
+ 969
+ ]
+ ],
+ [
+ [
+ 120771,
+ 120771
+ ],
+ "mapped",
+ [
+ 8706
+ ]
+ ],
+ [
+ [
+ 120772,
+ 120772
+ ],
+ "mapped",
+ [
+ 949
+ ]
+ ],
+ [
+ [
+ 120773,
+ 120773
+ ],
+ "mapped",
+ [
+ 952
+ ]
+ ],
+ [
+ [
+ 120774,
+ 120774
+ ],
+ "mapped",
+ [
+ 954
+ ]
+ ],
+ [
+ [
+ 120775,
+ 120775
+ ],
+ "mapped",
+ [
+ 966
+ ]
+ ],
+ [
+ [
+ 120776,
+ 120776
+ ],
+ "mapped",
+ [
+ 961
+ ]
+ ],
+ [
+ [
+ 120777,
+ 120777
+ ],
+ "mapped",
+ [
+ 960
+ ]
+ ],
+ [
+ [
+ 120778,
+ 120779
+ ],
+ "mapped",
+ [
+ 989
+ ]
+ ],
+ [
+ [
+ 120780,
+ 120781
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 120782,
+ 120782
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120783,
+ 120783
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120784,
+ 120784
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120785,
+ 120785
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120786,
+ 120786
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120787,
+ 120787
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120788,
+ 120788
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120789,
+ 120789
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120790,
+ 120790
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120791,
+ 120791
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120792,
+ 120792
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120793,
+ 120793
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120794,
+ 120794
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120795,
+ 120795
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120796,
+ 120796
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120797,
+ 120797
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120798,
+ 120798
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120799,
+ 120799
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120800,
+ 120800
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120801,
+ 120801
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120802,
+ 120802
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120803,
+ 120803
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120804,
+ 120804
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120805,
+ 120805
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120806,
+ 120806
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120807,
+ 120807
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120808,
+ 120808
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120809,
+ 120809
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120810,
+ 120810
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120811,
+ 120811
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120812,
+ 120812
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120813,
+ 120813
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120814,
+ 120814
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120815,
+ 120815
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120816,
+ 120816
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120817,
+ 120817
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120818,
+ 120818
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120819,
+ 120819
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120820,
+ 120820
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120821,
+ 120821
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120822,
+ 120822
+ ],
+ "mapped",
+ [
+ 48
+ ]
+ ],
+ [
+ [
+ 120823,
+ 120823
+ ],
+ "mapped",
+ [
+ 49
+ ]
+ ],
+ [
+ [
+ 120824,
+ 120824
+ ],
+ "mapped",
+ [
+ 50
+ ]
+ ],
+ [
+ [
+ 120825,
+ 120825
+ ],
+ "mapped",
+ [
+ 51
+ ]
+ ],
+ [
+ [
+ 120826,
+ 120826
+ ],
+ "mapped",
+ [
+ 52
+ ]
+ ],
+ [
+ [
+ 120827,
+ 120827
+ ],
+ "mapped",
+ [
+ 53
+ ]
+ ],
+ [
+ [
+ 120828,
+ 120828
+ ],
+ "mapped",
+ [
+ 54
+ ]
+ ],
+ [
+ [
+ 120829,
+ 120829
+ ],
+ "mapped",
+ [
+ 55
+ ]
+ ],
+ [
+ [
+ 120830,
+ 120830
+ ],
+ "mapped",
+ [
+ 56
+ ]
+ ],
+ [
+ [
+ 120831,
+ 120831
+ ],
+ "mapped",
+ [
+ 57
+ ]
+ ],
+ [
+ [
+ 120832,
+ 121343
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121344,
+ 121398
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121399,
+ 121402
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121403,
+ 121452
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121453,
+ 121460
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121461,
+ 121461
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121462,
+ 121475
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121476,
+ 121476
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121477,
+ 121483
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 121484,
+ 121498
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121499,
+ 121503
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121504,
+ 121504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 121505,
+ 121519
+ ],
+ "valid"
+ ],
+ [
+ [
+ 121520,
+ 124927
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 124928,
+ 125124
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125125,
+ 125126
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 125127,
+ 125135
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 125136,
+ 125142
+ ],
+ "valid"
+ ],
+ [
+ [
+ 125143,
+ 126463
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126464,
+ 126464
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126465,
+ 126465
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126466,
+ 126466
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126467,
+ 126467
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126468,
+ 126468
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126469,
+ 126469
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126470,
+ 126470
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126471,
+ 126471
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126472,
+ 126472
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126473,
+ 126473
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126474,
+ 126474
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126475,
+ 126475
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126476,
+ 126476
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126477,
+ 126477
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126478,
+ 126478
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126479,
+ 126479
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126480,
+ 126480
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126481,
+ 126481
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126482,
+ 126482
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126483,
+ 126483
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126484,
+ 126484
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126485,
+ 126485
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126486,
+ 126486
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126487,
+ 126487
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126488,
+ 126488
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126489,
+ 126489
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126490,
+ 126490
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126491,
+ 126491
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126492,
+ 126492
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126493,
+ 126493
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126494,
+ 126494
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126495,
+ 126495
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126496,
+ 126496
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126497,
+ 126497
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126498,
+ 126498
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126499,
+ 126499
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126500,
+ 126500
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126501,
+ 126502
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126503,
+ 126503
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126504,
+ 126504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126505,
+ 126505
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126506,
+ 126506
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126507,
+ 126507
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126508,
+ 126508
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126509,
+ 126509
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126510,
+ 126510
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126511,
+ 126511
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126512,
+ 126512
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126513,
+ 126513
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126514,
+ 126514
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126515,
+ 126515
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126516,
+ 126516
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126517,
+ 126517
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126518,
+ 126518
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126519,
+ 126519
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126520,
+ 126520
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126521,
+ 126521
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126522,
+ 126522
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126523,
+ 126523
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126524,
+ 126529
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126530,
+ 126530
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126531,
+ 126534
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126535,
+ 126535
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126536,
+ 126536
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126537,
+ 126537
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126538,
+ 126538
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126539,
+ 126539
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126540,
+ 126540
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126541,
+ 126541
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126542,
+ 126542
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126543,
+ 126543
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126544,
+ 126544
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126545,
+ 126545
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126546,
+ 126546
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126547,
+ 126547
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126548,
+ 126548
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126549,
+ 126550
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126551,
+ 126551
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126552,
+ 126552
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126553,
+ 126553
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126554,
+ 126554
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126555,
+ 126555
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126556,
+ 126556
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126557,
+ 126557
+ ],
+ "mapped",
+ [
+ 1722
+ ]
+ ],
+ [
+ [
+ 126558,
+ 126558
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126559,
+ 126559
+ ],
+ "mapped",
+ [
+ 1647
+ ]
+ ],
+ [
+ [
+ 126560,
+ 126560
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126561,
+ 126561
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126562,
+ 126562
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126563,
+ 126563
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126564,
+ 126564
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126565,
+ 126566
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126567,
+ 126567
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126568,
+ 126568
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126569,
+ 126569
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126570,
+ 126570
+ ],
+ "mapped",
+ [
+ 1603
+ ]
+ ],
+ [
+ [
+ 126571,
+ 126571
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126572,
+ 126572
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126573,
+ 126573
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126574,
+ 126574
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126575,
+ 126575
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126576,
+ 126576
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126577,
+ 126577
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126578,
+ 126578
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126579,
+ 126579
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126580,
+ 126580
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126581,
+ 126581
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126582,
+ 126582
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126583,
+ 126583
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126584,
+ 126584
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126585,
+ 126585
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126586,
+ 126586
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126587,
+ 126587
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126588,
+ 126588
+ ],
+ "mapped",
+ [
+ 1646
+ ]
+ ],
+ [
+ [
+ 126589,
+ 126589
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126590,
+ 126590
+ ],
+ "mapped",
+ [
+ 1697
+ ]
+ ],
+ [
+ [
+ 126591,
+ 126591
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126592,
+ 126592
+ ],
+ "mapped",
+ [
+ 1575
+ ]
+ ],
+ [
+ [
+ 126593,
+ 126593
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126594,
+ 126594
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126595,
+ 126595
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126596,
+ 126596
+ ],
+ "mapped",
+ [
+ 1607
+ ]
+ ],
+ [
+ [
+ 126597,
+ 126597
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126598,
+ 126598
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126599,
+ 126599
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126600,
+ 126600
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126601,
+ 126601
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126602,
+ 126602
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126603,
+ 126603
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126604,
+ 126604
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126605,
+ 126605
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126606,
+ 126606
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126607,
+ 126607
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126608,
+ 126608
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126609,
+ 126609
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126610,
+ 126610
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126611,
+ 126611
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126612,
+ 126612
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126613,
+ 126613
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126614,
+ 126614
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126615,
+ 126615
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126616,
+ 126616
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126617,
+ 126617
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126618,
+ 126618
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126619,
+ 126619
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126620,
+ 126624
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126625,
+ 126625
+ ],
+ "mapped",
+ [
+ 1576
+ ]
+ ],
+ [
+ [
+ 126626,
+ 126626
+ ],
+ "mapped",
+ [
+ 1580
+ ]
+ ],
+ [
+ [
+ 126627,
+ 126627
+ ],
+ "mapped",
+ [
+ 1583
+ ]
+ ],
+ [
+ [
+ 126628,
+ 126628
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126629,
+ 126629
+ ],
+ "mapped",
+ [
+ 1608
+ ]
+ ],
+ [
+ [
+ 126630,
+ 126630
+ ],
+ "mapped",
+ [
+ 1586
+ ]
+ ],
+ [
+ [
+ 126631,
+ 126631
+ ],
+ "mapped",
+ [
+ 1581
+ ]
+ ],
+ [
+ [
+ 126632,
+ 126632
+ ],
+ "mapped",
+ [
+ 1591
+ ]
+ ],
+ [
+ [
+ 126633,
+ 126633
+ ],
+ "mapped",
+ [
+ 1610
+ ]
+ ],
+ [
+ [
+ 126634,
+ 126634
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126635,
+ 126635
+ ],
+ "mapped",
+ [
+ 1604
+ ]
+ ],
+ [
+ [
+ 126636,
+ 126636
+ ],
+ "mapped",
+ [
+ 1605
+ ]
+ ],
+ [
+ [
+ 126637,
+ 126637
+ ],
+ "mapped",
+ [
+ 1606
+ ]
+ ],
+ [
+ [
+ 126638,
+ 126638
+ ],
+ "mapped",
+ [
+ 1587
+ ]
+ ],
+ [
+ [
+ 126639,
+ 126639
+ ],
+ "mapped",
+ [
+ 1593
+ ]
+ ],
+ [
+ [
+ 126640,
+ 126640
+ ],
+ "mapped",
+ [
+ 1601
+ ]
+ ],
+ [
+ [
+ 126641,
+ 126641
+ ],
+ "mapped",
+ [
+ 1589
+ ]
+ ],
+ [
+ [
+ 126642,
+ 126642
+ ],
+ "mapped",
+ [
+ 1602
+ ]
+ ],
+ [
+ [
+ 126643,
+ 126643
+ ],
+ "mapped",
+ [
+ 1585
+ ]
+ ],
+ [
+ [
+ 126644,
+ 126644
+ ],
+ "mapped",
+ [
+ 1588
+ ]
+ ],
+ [
+ [
+ 126645,
+ 126645
+ ],
+ "mapped",
+ [
+ 1578
+ ]
+ ],
+ [
+ [
+ 126646,
+ 126646
+ ],
+ "mapped",
+ [
+ 1579
+ ]
+ ],
+ [
+ [
+ 126647,
+ 126647
+ ],
+ "mapped",
+ [
+ 1582
+ ]
+ ],
+ [
+ [
+ 126648,
+ 126648
+ ],
+ "mapped",
+ [
+ 1584
+ ]
+ ],
+ [
+ [
+ 126649,
+ 126649
+ ],
+ "mapped",
+ [
+ 1590
+ ]
+ ],
+ [
+ [
+ 126650,
+ 126650
+ ],
+ "mapped",
+ [
+ 1592
+ ]
+ ],
+ [
+ [
+ 126651,
+ 126651
+ ],
+ "mapped",
+ [
+ 1594
+ ]
+ ],
+ [
+ [
+ 126652,
+ 126703
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126704,
+ 126705
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 126706,
+ 126975
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 126976,
+ 127019
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127020,
+ 127023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127024,
+ 127123
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127124,
+ 127135
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127136,
+ 127150
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127151,
+ 127152
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127153,
+ 127166
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127167,
+ 127167
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127168,
+ 127168
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127169,
+ 127183
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127184,
+ 127184
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127185,
+ 127199
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127200,
+ 127221
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127222,
+ 127231
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127232,
+ 127232
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127233,
+ 127233
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 48,
+ 44
+ ]
+ ],
+ [
+ [
+ 127234,
+ 127234
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 49,
+ 44
+ ]
+ ],
+ [
+ [
+ 127235,
+ 127235
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 50,
+ 44
+ ]
+ ],
+ [
+ [
+ 127236,
+ 127236
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 51,
+ 44
+ ]
+ ],
+ [
+ [
+ 127237,
+ 127237
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 52,
+ 44
+ ]
+ ],
+ [
+ [
+ 127238,
+ 127238
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 53,
+ 44
+ ]
+ ],
+ [
+ [
+ 127239,
+ 127239
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 54,
+ 44
+ ]
+ ],
+ [
+ [
+ 127240,
+ 127240
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 55,
+ 44
+ ]
+ ],
+ [
+ [
+ 127241,
+ 127241
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 56,
+ 44
+ ]
+ ],
+ [
+ [
+ 127242,
+ 127242
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 57,
+ 44
+ ]
+ ],
+ [
+ [
+ 127243,
+ 127244
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127245,
+ 127247
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127248,
+ 127248
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 97,
+ 41
+ ]
+ ],
+ [
+ [
+ 127249,
+ 127249
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 98,
+ 41
+ ]
+ ],
+ [
+ [
+ 127250,
+ 127250
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 99,
+ 41
+ ]
+ ],
+ [
+ [
+ 127251,
+ 127251
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 100,
+ 41
+ ]
+ ],
+ [
+ [
+ 127252,
+ 127252
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 101,
+ 41
+ ]
+ ],
+ [
+ [
+ 127253,
+ 127253
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 102,
+ 41
+ ]
+ ],
+ [
+ [
+ 127254,
+ 127254
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 103,
+ 41
+ ]
+ ],
+ [
+ [
+ 127255,
+ 127255
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 104,
+ 41
+ ]
+ ],
+ [
+ [
+ 127256,
+ 127256
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 105,
+ 41
+ ]
+ ],
+ [
+ [
+ 127257,
+ 127257
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 106,
+ 41
+ ]
+ ],
+ [
+ [
+ 127258,
+ 127258
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 107,
+ 41
+ ]
+ ],
+ [
+ [
+ 127259,
+ 127259
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 108,
+ 41
+ ]
+ ],
+ [
+ [
+ 127260,
+ 127260
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 109,
+ 41
+ ]
+ ],
+ [
+ [
+ 127261,
+ 127261
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 110,
+ 41
+ ]
+ ],
+ [
+ [
+ 127262,
+ 127262
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 111,
+ 41
+ ]
+ ],
+ [
+ [
+ 127263,
+ 127263
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 112,
+ 41
+ ]
+ ],
+ [
+ [
+ 127264,
+ 127264
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 113,
+ 41
+ ]
+ ],
+ [
+ [
+ 127265,
+ 127265
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 114,
+ 41
+ ]
+ ],
+ [
+ [
+ 127266,
+ 127266
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 115,
+ 41
+ ]
+ ],
+ [
+ [
+ 127267,
+ 127267
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 116,
+ 41
+ ]
+ ],
+ [
+ [
+ 127268,
+ 127268
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 117,
+ 41
+ ]
+ ],
+ [
+ [
+ 127269,
+ 127269
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 118,
+ 41
+ ]
+ ],
+ [
+ [
+ 127270,
+ 127270
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 119,
+ 41
+ ]
+ ],
+ [
+ [
+ 127271,
+ 127271
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 120,
+ 41
+ ]
+ ],
+ [
+ [
+ 127272,
+ 127272
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 121,
+ 41
+ ]
+ ],
+ [
+ [
+ 127273,
+ 127273
+ ],
+ "disallowed_STD3_mapped",
+ [
+ 40,
+ 122,
+ 41
+ ]
+ ],
+ [
+ [
+ 127274,
+ 127274
+ ],
+ "mapped",
+ [
+ 12308,
+ 115,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127275,
+ 127275
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127276,
+ 127276
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127277,
+ 127277
+ ],
+ "mapped",
+ [
+ 99,
+ 100
+ ]
+ ],
+ [
+ [
+ 127278,
+ 127278
+ ],
+ "mapped",
+ [
+ 119,
+ 122
+ ]
+ ],
+ [
+ [
+ 127279,
+ 127279
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127280,
+ 127280
+ ],
+ "mapped",
+ [
+ 97
+ ]
+ ],
+ [
+ [
+ 127281,
+ 127281
+ ],
+ "mapped",
+ [
+ 98
+ ]
+ ],
+ [
+ [
+ 127282,
+ 127282
+ ],
+ "mapped",
+ [
+ 99
+ ]
+ ],
+ [
+ [
+ 127283,
+ 127283
+ ],
+ "mapped",
+ [
+ 100
+ ]
+ ],
+ [
+ [
+ 127284,
+ 127284
+ ],
+ "mapped",
+ [
+ 101
+ ]
+ ],
+ [
+ [
+ 127285,
+ 127285
+ ],
+ "mapped",
+ [
+ 102
+ ]
+ ],
+ [
+ [
+ 127286,
+ 127286
+ ],
+ "mapped",
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 127287,
+ 127287
+ ],
+ "mapped",
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 127288,
+ 127288
+ ],
+ "mapped",
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 127289,
+ 127289
+ ],
+ "mapped",
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 127290,
+ 127290
+ ],
+ "mapped",
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 127291,
+ 127291
+ ],
+ "mapped",
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 127292,
+ 127292
+ ],
+ "mapped",
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 127293,
+ 127293
+ ],
+ "mapped",
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 127294,
+ 127294
+ ],
+ "mapped",
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 127295,
+ 127295
+ ],
+ "mapped",
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 127296,
+ 127296
+ ],
+ "mapped",
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 127297,
+ 127297
+ ],
+ "mapped",
+ [
+ 114
+ ]
+ ],
+ [
+ [
+ 127298,
+ 127298
+ ],
+ "mapped",
+ [
+ 115
+ ]
+ ],
+ [
+ [
+ 127299,
+ 127299
+ ],
+ "mapped",
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 127300,
+ 127300
+ ],
+ "mapped",
+ [
+ 117
+ ]
+ ],
+ [
+ [
+ 127301,
+ 127301
+ ],
+ "mapped",
+ [
+ 118
+ ]
+ ],
+ [
+ [
+ 127302,
+ 127302
+ ],
+ "mapped",
+ [
+ 119
+ ]
+ ],
+ [
+ [
+ 127303,
+ 127303
+ ],
+ "mapped",
+ [
+ 120
+ ]
+ ],
+ [
+ [
+ 127304,
+ 127304
+ ],
+ "mapped",
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 127305,
+ 127305
+ ],
+ "mapped",
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 127306,
+ 127306
+ ],
+ "mapped",
+ [
+ 104,
+ 118
+ ]
+ ],
+ [
+ [
+ 127307,
+ 127307
+ ],
+ "mapped",
+ [
+ 109,
+ 118
+ ]
+ ],
+ [
+ [
+ 127308,
+ 127308
+ ],
+ "mapped",
+ [
+ 115,
+ 100
+ ]
+ ],
+ [
+ [
+ 127309,
+ 127309
+ ],
+ "mapped",
+ [
+ 115,
+ 115
+ ]
+ ],
+ [
+ [
+ 127310,
+ 127310
+ ],
+ "mapped",
+ [
+ 112,
+ 112,
+ 118
+ ]
+ ],
+ [
+ [
+ 127311,
+ 127311
+ ],
+ "mapped",
+ [
+ 119,
+ 99
+ ]
+ ],
+ [
+ [
+ 127312,
+ 127318
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127319,
+ 127319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127320,
+ 127326
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127327,
+ 127327
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127328,
+ 127337
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127338,
+ 127338
+ ],
+ "mapped",
+ [
+ 109,
+ 99
+ ]
+ ],
+ [
+ [
+ 127339,
+ 127339
+ ],
+ "mapped",
+ [
+ 109,
+ 100
+ ]
+ ],
+ [
+ [
+ 127340,
+ 127343
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127344,
+ 127352
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127353,
+ 127353
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127354,
+ 127354
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127355,
+ 127356
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127357,
+ 127358
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127359,
+ 127359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127360,
+ 127369
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127370,
+ 127373
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127374,
+ 127375
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127376,
+ 127376
+ ],
+ "mapped",
+ [
+ 100,
+ 106
+ ]
+ ],
+ [
+ [
+ 127377,
+ 127386
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127387,
+ 127461
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127462,
+ 127487
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127488,
+ 127488
+ ],
+ "mapped",
+ [
+ 12411,
+ 12363
+ ]
+ ],
+ [
+ [
+ 127489,
+ 127489
+ ],
+ "mapped",
+ [
+ 12467,
+ 12467
+ ]
+ ],
+ [
+ [
+ 127490,
+ 127490
+ ],
+ "mapped",
+ [
+ 12469
+ ]
+ ],
+ [
+ [
+ 127491,
+ 127503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127504,
+ 127504
+ ],
+ "mapped",
+ [
+ 25163
+ ]
+ ],
+ [
+ [
+ 127505,
+ 127505
+ ],
+ "mapped",
+ [
+ 23383
+ ]
+ ],
+ [
+ [
+ 127506,
+ 127506
+ ],
+ "mapped",
+ [
+ 21452
+ ]
+ ],
+ [
+ [
+ 127507,
+ 127507
+ ],
+ "mapped",
+ [
+ 12487
+ ]
+ ],
+ [
+ [
+ 127508,
+ 127508
+ ],
+ "mapped",
+ [
+ 20108
+ ]
+ ],
+ [
+ [
+ 127509,
+ 127509
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 127510,
+ 127510
+ ],
+ "mapped",
+ [
+ 35299
+ ]
+ ],
+ [
+ [
+ 127511,
+ 127511
+ ],
+ "mapped",
+ [
+ 22825
+ ]
+ ],
+ [
+ [
+ 127512,
+ 127512
+ ],
+ "mapped",
+ [
+ 20132
+ ]
+ ],
+ [
+ [
+ 127513,
+ 127513
+ ],
+ "mapped",
+ [
+ 26144
+ ]
+ ],
+ [
+ [
+ 127514,
+ 127514
+ ],
+ "mapped",
+ [
+ 28961
+ ]
+ ],
+ [
+ [
+ 127515,
+ 127515
+ ],
+ "mapped",
+ [
+ 26009
+ ]
+ ],
+ [
+ [
+ 127516,
+ 127516
+ ],
+ "mapped",
+ [
+ 21069
+ ]
+ ],
+ [
+ [
+ 127517,
+ 127517
+ ],
+ "mapped",
+ [
+ 24460
+ ]
+ ],
+ [
+ [
+ 127518,
+ 127518
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 127519,
+ 127519
+ ],
+ "mapped",
+ [
+ 26032
+ ]
+ ],
+ [
+ [
+ 127520,
+ 127520
+ ],
+ "mapped",
+ [
+ 21021
+ ]
+ ],
+ [
+ [
+ 127521,
+ 127521
+ ],
+ "mapped",
+ [
+ 32066
+ ]
+ ],
+ [
+ [
+ 127522,
+ 127522
+ ],
+ "mapped",
+ [
+ 29983
+ ]
+ ],
+ [
+ [
+ 127523,
+ 127523
+ ],
+ "mapped",
+ [
+ 36009
+ ]
+ ],
+ [
+ [
+ 127524,
+ 127524
+ ],
+ "mapped",
+ [
+ 22768
+ ]
+ ],
+ [
+ [
+ 127525,
+ 127525
+ ],
+ "mapped",
+ [
+ 21561
+ ]
+ ],
+ [
+ [
+ 127526,
+ 127526
+ ],
+ "mapped",
+ [
+ 28436
+ ]
+ ],
+ [
+ [
+ 127527,
+ 127527
+ ],
+ "mapped",
+ [
+ 25237
+ ]
+ ],
+ [
+ [
+ 127528,
+ 127528
+ ],
+ "mapped",
+ [
+ 25429
+ ]
+ ],
+ [
+ [
+ 127529,
+ 127529
+ ],
+ "mapped",
+ [
+ 19968
+ ]
+ ],
+ [
+ [
+ 127530,
+ 127530
+ ],
+ "mapped",
+ [
+ 19977
+ ]
+ ],
+ [
+ [
+ 127531,
+ 127531
+ ],
+ "mapped",
+ [
+ 36938
+ ]
+ ],
+ [
+ [
+ 127532,
+ 127532
+ ],
+ "mapped",
+ [
+ 24038
+ ]
+ ],
+ [
+ [
+ 127533,
+ 127533
+ ],
+ "mapped",
+ [
+ 20013
+ ]
+ ],
+ [
+ [
+ 127534,
+ 127534
+ ],
+ "mapped",
+ [
+ 21491
+ ]
+ ],
+ [
+ [
+ 127535,
+ 127535
+ ],
+ "mapped",
+ [
+ 25351
+ ]
+ ],
+ [
+ [
+ 127536,
+ 127536
+ ],
+ "mapped",
+ [
+ 36208
+ ]
+ ],
+ [
+ [
+ 127537,
+ 127537
+ ],
+ "mapped",
+ [
+ 25171
+ ]
+ ],
+ [
+ [
+ 127538,
+ 127538
+ ],
+ "mapped",
+ [
+ 31105
+ ]
+ ],
+ [
+ [
+ 127539,
+ 127539
+ ],
+ "mapped",
+ [
+ 31354
+ ]
+ ],
+ [
+ [
+ 127540,
+ 127540
+ ],
+ "mapped",
+ [
+ 21512
+ ]
+ ],
+ [
+ [
+ 127541,
+ 127541
+ ],
+ "mapped",
+ [
+ 28288
+ ]
+ ],
+ [
+ [
+ 127542,
+ 127542
+ ],
+ "mapped",
+ [
+ 26377
+ ]
+ ],
+ [
+ [
+ 127543,
+ 127543
+ ],
+ "mapped",
+ [
+ 26376
+ ]
+ ],
+ [
+ [
+ 127544,
+ 127544
+ ],
+ "mapped",
+ [
+ 30003
+ ]
+ ],
+ [
+ [
+ 127545,
+ 127545
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 127546,
+ 127546
+ ],
+ "mapped",
+ [
+ 21942
+ ]
+ ],
+ [
+ [
+ 127547,
+ 127551
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127552,
+ 127552
+ ],
+ "mapped",
+ [
+ 12308,
+ 26412,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127553,
+ 127553
+ ],
+ "mapped",
+ [
+ 12308,
+ 19977,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127554,
+ 127554
+ ],
+ "mapped",
+ [
+ 12308,
+ 20108,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127555,
+ 127555
+ ],
+ "mapped",
+ [
+ 12308,
+ 23433,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127556,
+ 127556
+ ],
+ "mapped",
+ [
+ 12308,
+ 28857,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127557,
+ 127557
+ ],
+ "mapped",
+ [
+ 12308,
+ 25171,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127558,
+ 127558
+ ],
+ "mapped",
+ [
+ 12308,
+ 30423,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127559,
+ 127559
+ ],
+ "mapped",
+ [
+ 12308,
+ 21213,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127560,
+ 127560
+ ],
+ "mapped",
+ [
+ 12308,
+ 25943,
+ 12309
+ ]
+ ],
+ [
+ [
+ 127561,
+ 127567
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127568,
+ 127568
+ ],
+ "mapped",
+ [
+ 24471
+ ]
+ ],
+ [
+ [
+ 127569,
+ 127569
+ ],
+ "mapped",
+ [
+ 21487
+ ]
+ ],
+ [
+ [
+ 127570,
+ 127743
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 127744,
+ 127776
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127777,
+ 127788
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127789,
+ 127791
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127792,
+ 127797
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127798,
+ 127798
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127799,
+ 127868
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127869,
+ 127869
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127870,
+ 127871
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127872,
+ 127891
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127892,
+ 127903
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127904,
+ 127940
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127941,
+ 127941
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127942,
+ 127946
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127947,
+ 127950
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127951,
+ 127955
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127956,
+ 127967
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127968,
+ 127984
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127985,
+ 127991
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 127992,
+ 127999
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128000,
+ 128062
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128063,
+ 128063
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128064,
+ 128064
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128065,
+ 128065
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128066,
+ 128247
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128248,
+ 128248
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128249,
+ 128252
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128253,
+ 128254
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128255,
+ 128255
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128256,
+ 128317
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128318,
+ 128319
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128320,
+ 128323
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128324,
+ 128330
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128331,
+ 128335
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128336,
+ 128359
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128360,
+ 128377
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128378,
+ 128378
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128379,
+ 128419
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128420,
+ 128420
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128421,
+ 128506
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128507,
+ 128511
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128512,
+ 128512
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128513,
+ 128528
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128529,
+ 128529
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128530,
+ 128532
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128533,
+ 128533
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128534,
+ 128534
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128535,
+ 128535
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128536,
+ 128536
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128537,
+ 128537
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128538,
+ 128538
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128539,
+ 128539
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128540,
+ 128542
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128543,
+ 128543
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128544,
+ 128549
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128550,
+ 128551
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128552,
+ 128555
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128556,
+ 128556
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128557,
+ 128557
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128558,
+ 128559
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128560,
+ 128563
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128564,
+ 128564
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128565,
+ 128576
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128577,
+ 128578
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128579,
+ 128580
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128581,
+ 128591
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128592,
+ 128639
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128640,
+ 128709
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128710,
+ 128719
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128720,
+ 128720
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128721,
+ 128735
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128736,
+ 128748
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128749,
+ 128751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128752,
+ 128755
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128756,
+ 128767
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128768,
+ 128883
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128884,
+ 128895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 128896,
+ 128980
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 128981,
+ 129023
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129024,
+ 129035
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129036,
+ 129039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129040,
+ 129095
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129096,
+ 129103
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129104,
+ 129113
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129114,
+ 129119
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129120,
+ 129159
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129160,
+ 129167
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129168,
+ 129197
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129198,
+ 129295
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129296,
+ 129304
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129305,
+ 129407
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129408,
+ 129412
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129413,
+ 129471
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 129472,
+ 129472
+ ],
+ "valid",
+ [
+ ],
+ "NV8"
+ ],
+ [
+ [
+ 129473,
+ 131069
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131070,
+ 131071
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 131072,
+ 173782
+ ],
+ "valid"
+ ],
+ [
+ [
+ 173783,
+ 173823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 173824,
+ 177972
+ ],
+ "valid"
+ ],
+ [
+ [
+ 177973,
+ 177983
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 177984,
+ 178205
+ ],
+ "valid"
+ ],
+ [
+ [
+ 178206,
+ 178207
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 178208,
+ 183969
+ ],
+ "valid"
+ ],
+ [
+ [
+ 183970,
+ 194559
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194560,
+ 194560
+ ],
+ "mapped",
+ [
+ 20029
+ ]
+ ],
+ [
+ [
+ 194561,
+ 194561
+ ],
+ "mapped",
+ [
+ 20024
+ ]
+ ],
+ [
+ [
+ 194562,
+ 194562
+ ],
+ "mapped",
+ [
+ 20033
+ ]
+ ],
+ [
+ [
+ 194563,
+ 194563
+ ],
+ "mapped",
+ [
+ 131362
+ ]
+ ],
+ [
+ [
+ 194564,
+ 194564
+ ],
+ "mapped",
+ [
+ 20320
+ ]
+ ],
+ [
+ [
+ 194565,
+ 194565
+ ],
+ "mapped",
+ [
+ 20398
+ ]
+ ],
+ [
+ [
+ 194566,
+ 194566
+ ],
+ "mapped",
+ [
+ 20411
+ ]
+ ],
+ [
+ [
+ 194567,
+ 194567
+ ],
+ "mapped",
+ [
+ 20482
+ ]
+ ],
+ [
+ [
+ 194568,
+ 194568
+ ],
+ "mapped",
+ [
+ 20602
+ ]
+ ],
+ [
+ [
+ 194569,
+ 194569
+ ],
+ "mapped",
+ [
+ 20633
+ ]
+ ],
+ [
+ [
+ 194570,
+ 194570
+ ],
+ "mapped",
+ [
+ 20711
+ ]
+ ],
+ [
+ [
+ 194571,
+ 194571
+ ],
+ "mapped",
+ [
+ 20687
+ ]
+ ],
+ [
+ [
+ 194572,
+ 194572
+ ],
+ "mapped",
+ [
+ 13470
+ ]
+ ],
+ [
+ [
+ 194573,
+ 194573
+ ],
+ "mapped",
+ [
+ 132666
+ ]
+ ],
+ [
+ [
+ 194574,
+ 194574
+ ],
+ "mapped",
+ [
+ 20813
+ ]
+ ],
+ [
+ [
+ 194575,
+ 194575
+ ],
+ "mapped",
+ [
+ 20820
+ ]
+ ],
+ [
+ [
+ 194576,
+ 194576
+ ],
+ "mapped",
+ [
+ 20836
+ ]
+ ],
+ [
+ [
+ 194577,
+ 194577
+ ],
+ "mapped",
+ [
+ 20855
+ ]
+ ],
+ [
+ [
+ 194578,
+ 194578
+ ],
+ "mapped",
+ [
+ 132380
+ ]
+ ],
+ [
+ [
+ 194579,
+ 194579
+ ],
+ "mapped",
+ [
+ 13497
+ ]
+ ],
+ [
+ [
+ 194580,
+ 194580
+ ],
+ "mapped",
+ [
+ 20839
+ ]
+ ],
+ [
+ [
+ 194581,
+ 194581
+ ],
+ "mapped",
+ [
+ 20877
+ ]
+ ],
+ [
+ [
+ 194582,
+ 194582
+ ],
+ "mapped",
+ [
+ 132427
+ ]
+ ],
+ [
+ [
+ 194583,
+ 194583
+ ],
+ "mapped",
+ [
+ 20887
+ ]
+ ],
+ [
+ [
+ 194584,
+ 194584
+ ],
+ "mapped",
+ [
+ 20900
+ ]
+ ],
+ [
+ [
+ 194585,
+ 194585
+ ],
+ "mapped",
+ [
+ 20172
+ ]
+ ],
+ [
+ [
+ 194586,
+ 194586
+ ],
+ "mapped",
+ [
+ 20908
+ ]
+ ],
+ [
+ [
+ 194587,
+ 194587
+ ],
+ "mapped",
+ [
+ 20917
+ ]
+ ],
+ [
+ [
+ 194588,
+ 194588
+ ],
+ "mapped",
+ [
+ 168415
+ ]
+ ],
+ [
+ [
+ 194589,
+ 194589
+ ],
+ "mapped",
+ [
+ 20981
+ ]
+ ],
+ [
+ [
+ 194590,
+ 194590
+ ],
+ "mapped",
+ [
+ 20995
+ ]
+ ],
+ [
+ [
+ 194591,
+ 194591
+ ],
+ "mapped",
+ [
+ 13535
+ ]
+ ],
+ [
+ [
+ 194592,
+ 194592
+ ],
+ "mapped",
+ [
+ 21051
+ ]
+ ],
+ [
+ [
+ 194593,
+ 194593
+ ],
+ "mapped",
+ [
+ 21062
+ ]
+ ],
+ [
+ [
+ 194594,
+ 194594
+ ],
+ "mapped",
+ [
+ 21106
+ ]
+ ],
+ [
+ [
+ 194595,
+ 194595
+ ],
+ "mapped",
+ [
+ 21111
+ ]
+ ],
+ [
+ [
+ 194596,
+ 194596
+ ],
+ "mapped",
+ [
+ 13589
+ ]
+ ],
+ [
+ [
+ 194597,
+ 194597
+ ],
+ "mapped",
+ [
+ 21191
+ ]
+ ],
+ [
+ [
+ 194598,
+ 194598
+ ],
+ "mapped",
+ [
+ 21193
+ ]
+ ],
+ [
+ [
+ 194599,
+ 194599
+ ],
+ "mapped",
+ [
+ 21220
+ ]
+ ],
+ [
+ [
+ 194600,
+ 194600
+ ],
+ "mapped",
+ [
+ 21242
+ ]
+ ],
+ [
+ [
+ 194601,
+ 194601
+ ],
+ "mapped",
+ [
+ 21253
+ ]
+ ],
+ [
+ [
+ 194602,
+ 194602
+ ],
+ "mapped",
+ [
+ 21254
+ ]
+ ],
+ [
+ [
+ 194603,
+ 194603
+ ],
+ "mapped",
+ [
+ 21271
+ ]
+ ],
+ [
+ [
+ 194604,
+ 194604
+ ],
+ "mapped",
+ [
+ 21321
+ ]
+ ],
+ [
+ [
+ 194605,
+ 194605
+ ],
+ "mapped",
+ [
+ 21329
+ ]
+ ],
+ [
+ [
+ 194606,
+ 194606
+ ],
+ "mapped",
+ [
+ 21338
+ ]
+ ],
+ [
+ [
+ 194607,
+ 194607
+ ],
+ "mapped",
+ [
+ 21363
+ ]
+ ],
+ [
+ [
+ 194608,
+ 194608
+ ],
+ "mapped",
+ [
+ 21373
+ ]
+ ],
+ [
+ [
+ 194609,
+ 194611
+ ],
+ "mapped",
+ [
+ 21375
+ ]
+ ],
+ [
+ [
+ 194612,
+ 194612
+ ],
+ "mapped",
+ [
+ 133676
+ ]
+ ],
+ [
+ [
+ 194613,
+ 194613
+ ],
+ "mapped",
+ [
+ 28784
+ ]
+ ],
+ [
+ [
+ 194614,
+ 194614
+ ],
+ "mapped",
+ [
+ 21450
+ ]
+ ],
+ [
+ [
+ 194615,
+ 194615
+ ],
+ "mapped",
+ [
+ 21471
+ ]
+ ],
+ [
+ [
+ 194616,
+ 194616
+ ],
+ "mapped",
+ [
+ 133987
+ ]
+ ],
+ [
+ [
+ 194617,
+ 194617
+ ],
+ "mapped",
+ [
+ 21483
+ ]
+ ],
+ [
+ [
+ 194618,
+ 194618
+ ],
+ "mapped",
+ [
+ 21489
+ ]
+ ],
+ [
+ [
+ 194619,
+ 194619
+ ],
+ "mapped",
+ [
+ 21510
+ ]
+ ],
+ [
+ [
+ 194620,
+ 194620
+ ],
+ "mapped",
+ [
+ 21662
+ ]
+ ],
+ [
+ [
+ 194621,
+ 194621
+ ],
+ "mapped",
+ [
+ 21560
+ ]
+ ],
+ [
+ [
+ 194622,
+ 194622
+ ],
+ "mapped",
+ [
+ 21576
+ ]
+ ],
+ [
+ [
+ 194623,
+ 194623
+ ],
+ "mapped",
+ [
+ 21608
+ ]
+ ],
+ [
+ [
+ 194624,
+ 194624
+ ],
+ "mapped",
+ [
+ 21666
+ ]
+ ],
+ [
+ [
+ 194625,
+ 194625
+ ],
+ "mapped",
+ [
+ 21750
+ ]
+ ],
+ [
+ [
+ 194626,
+ 194626
+ ],
+ "mapped",
+ [
+ 21776
+ ]
+ ],
+ [
+ [
+ 194627,
+ 194627
+ ],
+ "mapped",
+ [
+ 21843
+ ]
+ ],
+ [
+ [
+ 194628,
+ 194628
+ ],
+ "mapped",
+ [
+ 21859
+ ]
+ ],
+ [
+ [
+ 194629,
+ 194630
+ ],
+ "mapped",
+ [
+ 21892
+ ]
+ ],
+ [
+ [
+ 194631,
+ 194631
+ ],
+ "mapped",
+ [
+ 21913
+ ]
+ ],
+ [
+ [
+ 194632,
+ 194632
+ ],
+ "mapped",
+ [
+ 21931
+ ]
+ ],
+ [
+ [
+ 194633,
+ 194633
+ ],
+ "mapped",
+ [
+ 21939
+ ]
+ ],
+ [
+ [
+ 194634,
+ 194634
+ ],
+ "mapped",
+ [
+ 21954
+ ]
+ ],
+ [
+ [
+ 194635,
+ 194635
+ ],
+ "mapped",
+ [
+ 22294
+ ]
+ ],
+ [
+ [
+ 194636,
+ 194636
+ ],
+ "mapped",
+ [
+ 22022
+ ]
+ ],
+ [
+ [
+ 194637,
+ 194637
+ ],
+ "mapped",
+ [
+ 22295
+ ]
+ ],
+ [
+ [
+ 194638,
+ 194638
+ ],
+ "mapped",
+ [
+ 22097
+ ]
+ ],
+ [
+ [
+ 194639,
+ 194639
+ ],
+ "mapped",
+ [
+ 22132
+ ]
+ ],
+ [
+ [
+ 194640,
+ 194640
+ ],
+ "mapped",
+ [
+ 20999
+ ]
+ ],
+ [
+ [
+ 194641,
+ 194641
+ ],
+ "mapped",
+ [
+ 22766
+ ]
+ ],
+ [
+ [
+ 194642,
+ 194642
+ ],
+ "mapped",
+ [
+ 22478
+ ]
+ ],
+ [
+ [
+ 194643,
+ 194643
+ ],
+ "mapped",
+ [
+ 22516
+ ]
+ ],
+ [
+ [
+ 194644,
+ 194644
+ ],
+ "mapped",
+ [
+ 22541
+ ]
+ ],
+ [
+ [
+ 194645,
+ 194645
+ ],
+ "mapped",
+ [
+ 22411
+ ]
+ ],
+ [
+ [
+ 194646,
+ 194646
+ ],
+ "mapped",
+ [
+ 22578
+ ]
+ ],
+ [
+ [
+ 194647,
+ 194647
+ ],
+ "mapped",
+ [
+ 22577
+ ]
+ ],
+ [
+ [
+ 194648,
+ 194648
+ ],
+ "mapped",
+ [
+ 22700
+ ]
+ ],
+ [
+ [
+ 194649,
+ 194649
+ ],
+ "mapped",
+ [
+ 136420
+ ]
+ ],
+ [
+ [
+ 194650,
+ 194650
+ ],
+ "mapped",
+ [
+ 22770
+ ]
+ ],
+ [
+ [
+ 194651,
+ 194651
+ ],
+ "mapped",
+ [
+ 22775
+ ]
+ ],
+ [
+ [
+ 194652,
+ 194652
+ ],
+ "mapped",
+ [
+ 22790
+ ]
+ ],
+ [
+ [
+ 194653,
+ 194653
+ ],
+ "mapped",
+ [
+ 22810
+ ]
+ ],
+ [
+ [
+ 194654,
+ 194654
+ ],
+ "mapped",
+ [
+ 22818
+ ]
+ ],
+ [
+ [
+ 194655,
+ 194655
+ ],
+ "mapped",
+ [
+ 22882
+ ]
+ ],
+ [
+ [
+ 194656,
+ 194656
+ ],
+ "mapped",
+ [
+ 136872
+ ]
+ ],
+ [
+ [
+ 194657,
+ 194657
+ ],
+ "mapped",
+ [
+ 136938
+ ]
+ ],
+ [
+ [
+ 194658,
+ 194658
+ ],
+ "mapped",
+ [
+ 23020
+ ]
+ ],
+ [
+ [
+ 194659,
+ 194659
+ ],
+ "mapped",
+ [
+ 23067
+ ]
+ ],
+ [
+ [
+ 194660,
+ 194660
+ ],
+ "mapped",
+ [
+ 23079
+ ]
+ ],
+ [
+ [
+ 194661,
+ 194661
+ ],
+ "mapped",
+ [
+ 23000
+ ]
+ ],
+ [
+ [
+ 194662,
+ 194662
+ ],
+ "mapped",
+ [
+ 23142
+ ]
+ ],
+ [
+ [
+ 194663,
+ 194663
+ ],
+ "mapped",
+ [
+ 14062
+ ]
+ ],
+ [
+ [
+ 194664,
+ 194664
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194665,
+ 194665
+ ],
+ "mapped",
+ [
+ 23304
+ ]
+ ],
+ [
+ [
+ 194666,
+ 194667
+ ],
+ "mapped",
+ [
+ 23358
+ ]
+ ],
+ [
+ [
+ 194668,
+ 194668
+ ],
+ "mapped",
+ [
+ 137672
+ ]
+ ],
+ [
+ [
+ 194669,
+ 194669
+ ],
+ "mapped",
+ [
+ 23491
+ ]
+ ],
+ [
+ [
+ 194670,
+ 194670
+ ],
+ "mapped",
+ [
+ 23512
+ ]
+ ],
+ [
+ [
+ 194671,
+ 194671
+ ],
+ "mapped",
+ [
+ 23527
+ ]
+ ],
+ [
+ [
+ 194672,
+ 194672
+ ],
+ "mapped",
+ [
+ 23539
+ ]
+ ],
+ [
+ [
+ 194673,
+ 194673
+ ],
+ "mapped",
+ [
+ 138008
+ ]
+ ],
+ [
+ [
+ 194674,
+ 194674
+ ],
+ "mapped",
+ [
+ 23551
+ ]
+ ],
+ [
+ [
+ 194675,
+ 194675
+ ],
+ "mapped",
+ [
+ 23558
+ ]
+ ],
+ [
+ [
+ 194676,
+ 194676
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194677,
+ 194677
+ ],
+ "mapped",
+ [
+ 23586
+ ]
+ ],
+ [
+ [
+ 194678,
+ 194678
+ ],
+ "mapped",
+ [
+ 14209
+ ]
+ ],
+ [
+ [
+ 194679,
+ 194679
+ ],
+ "mapped",
+ [
+ 23648
+ ]
+ ],
+ [
+ [
+ 194680,
+ 194680
+ ],
+ "mapped",
+ [
+ 23662
+ ]
+ ],
+ [
+ [
+ 194681,
+ 194681
+ ],
+ "mapped",
+ [
+ 23744
+ ]
+ ],
+ [
+ [
+ 194682,
+ 194682
+ ],
+ "mapped",
+ [
+ 23693
+ ]
+ ],
+ [
+ [
+ 194683,
+ 194683
+ ],
+ "mapped",
+ [
+ 138724
+ ]
+ ],
+ [
+ [
+ 194684,
+ 194684
+ ],
+ "mapped",
+ [
+ 23875
+ ]
+ ],
+ [
+ [
+ 194685,
+ 194685
+ ],
+ "mapped",
+ [
+ 138726
+ ]
+ ],
+ [
+ [
+ 194686,
+ 194686
+ ],
+ "mapped",
+ [
+ 23918
+ ]
+ ],
+ [
+ [
+ 194687,
+ 194687
+ ],
+ "mapped",
+ [
+ 23915
+ ]
+ ],
+ [
+ [
+ 194688,
+ 194688
+ ],
+ "mapped",
+ [
+ 23932
+ ]
+ ],
+ [
+ [
+ 194689,
+ 194689
+ ],
+ "mapped",
+ [
+ 24033
+ ]
+ ],
+ [
+ [
+ 194690,
+ 194690
+ ],
+ "mapped",
+ [
+ 24034
+ ]
+ ],
+ [
+ [
+ 194691,
+ 194691
+ ],
+ "mapped",
+ [
+ 14383
+ ]
+ ],
+ [
+ [
+ 194692,
+ 194692
+ ],
+ "mapped",
+ [
+ 24061
+ ]
+ ],
+ [
+ [
+ 194693,
+ 194693
+ ],
+ "mapped",
+ [
+ 24104
+ ]
+ ],
+ [
+ [
+ 194694,
+ 194694
+ ],
+ "mapped",
+ [
+ 24125
+ ]
+ ],
+ [
+ [
+ 194695,
+ 194695
+ ],
+ "mapped",
+ [
+ 24169
+ ]
+ ],
+ [
+ [
+ 194696,
+ 194696
+ ],
+ "mapped",
+ [
+ 14434
+ ]
+ ],
+ [
+ [
+ 194697,
+ 194697
+ ],
+ "mapped",
+ [
+ 139651
+ ]
+ ],
+ [
+ [
+ 194698,
+ 194698
+ ],
+ "mapped",
+ [
+ 14460
+ ]
+ ],
+ [
+ [
+ 194699,
+ 194699
+ ],
+ "mapped",
+ [
+ 24240
+ ]
+ ],
+ [
+ [
+ 194700,
+ 194700
+ ],
+ "mapped",
+ [
+ 24243
+ ]
+ ],
+ [
+ [
+ 194701,
+ 194701
+ ],
+ "mapped",
+ [
+ 24246
+ ]
+ ],
+ [
+ [
+ 194702,
+ 194702
+ ],
+ "mapped",
+ [
+ 24266
+ ]
+ ],
+ [
+ [
+ 194703,
+ 194703
+ ],
+ "mapped",
+ [
+ 172946
+ ]
+ ],
+ [
+ [
+ 194704,
+ 194704
+ ],
+ "mapped",
+ [
+ 24318
+ ]
+ ],
+ [
+ [
+ 194705,
+ 194706
+ ],
+ "mapped",
+ [
+ 140081
+ ]
+ ],
+ [
+ [
+ 194707,
+ 194707
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194708,
+ 194709
+ ],
+ "mapped",
+ [
+ 24354
+ ]
+ ],
+ [
+ [
+ 194710,
+ 194710
+ ],
+ "mapped",
+ [
+ 14535
+ ]
+ ],
+ [
+ [
+ 194711,
+ 194711
+ ],
+ "mapped",
+ [
+ 144056
+ ]
+ ],
+ [
+ [
+ 194712,
+ 194712
+ ],
+ "mapped",
+ [
+ 156122
+ ]
+ ],
+ [
+ [
+ 194713,
+ 194713
+ ],
+ "mapped",
+ [
+ 24418
+ ]
+ ],
+ [
+ [
+ 194714,
+ 194714
+ ],
+ "mapped",
+ [
+ 24427
+ ]
+ ],
+ [
+ [
+ 194715,
+ 194715
+ ],
+ "mapped",
+ [
+ 14563
+ ]
+ ],
+ [
+ [
+ 194716,
+ 194716
+ ],
+ "mapped",
+ [
+ 24474
+ ]
+ ],
+ [
+ [
+ 194717,
+ 194717
+ ],
+ "mapped",
+ [
+ 24525
+ ]
+ ],
+ [
+ [
+ 194718,
+ 194718
+ ],
+ "mapped",
+ [
+ 24535
+ ]
+ ],
+ [
+ [
+ 194719,
+ 194719
+ ],
+ "mapped",
+ [
+ 24569
+ ]
+ ],
+ [
+ [
+ 194720,
+ 194720
+ ],
+ "mapped",
+ [
+ 24705
+ ]
+ ],
+ [
+ [
+ 194721,
+ 194721
+ ],
+ "mapped",
+ [
+ 14650
+ ]
+ ],
+ [
+ [
+ 194722,
+ 194722
+ ],
+ "mapped",
+ [
+ 14620
+ ]
+ ],
+ [
+ [
+ 194723,
+ 194723
+ ],
+ "mapped",
+ [
+ 24724
+ ]
+ ],
+ [
+ [
+ 194724,
+ 194724
+ ],
+ "mapped",
+ [
+ 141012
+ ]
+ ],
+ [
+ [
+ 194725,
+ 194725
+ ],
+ "mapped",
+ [
+ 24775
+ ]
+ ],
+ [
+ [
+ 194726,
+ 194726
+ ],
+ "mapped",
+ [
+ 24904
+ ]
+ ],
+ [
+ [
+ 194727,
+ 194727
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194728,
+ 194728
+ ],
+ "mapped",
+ [
+ 24910
+ ]
+ ],
+ [
+ [
+ 194729,
+ 194729
+ ],
+ "mapped",
+ [
+ 24908
+ ]
+ ],
+ [
+ [
+ 194730,
+ 194730
+ ],
+ "mapped",
+ [
+ 24954
+ ]
+ ],
+ [
+ [
+ 194731,
+ 194731
+ ],
+ "mapped",
+ [
+ 24974
+ ]
+ ],
+ [
+ [
+ 194732,
+ 194732
+ ],
+ "mapped",
+ [
+ 25010
+ ]
+ ],
+ [
+ [
+ 194733,
+ 194733
+ ],
+ "mapped",
+ [
+ 24996
+ ]
+ ],
+ [
+ [
+ 194734,
+ 194734
+ ],
+ "mapped",
+ [
+ 25007
+ ]
+ ],
+ [
+ [
+ 194735,
+ 194735
+ ],
+ "mapped",
+ [
+ 25054
+ ]
+ ],
+ [
+ [
+ 194736,
+ 194736
+ ],
+ "mapped",
+ [
+ 25074
+ ]
+ ],
+ [
+ [
+ 194737,
+ 194737
+ ],
+ "mapped",
+ [
+ 25078
+ ]
+ ],
+ [
+ [
+ 194738,
+ 194738
+ ],
+ "mapped",
+ [
+ 25104
+ ]
+ ],
+ [
+ [
+ 194739,
+ 194739
+ ],
+ "mapped",
+ [
+ 25115
+ ]
+ ],
+ [
+ [
+ 194740,
+ 194740
+ ],
+ "mapped",
+ [
+ 25181
+ ]
+ ],
+ [
+ [
+ 194741,
+ 194741
+ ],
+ "mapped",
+ [
+ 25265
+ ]
+ ],
+ [
+ [
+ 194742,
+ 194742
+ ],
+ "mapped",
+ [
+ 25300
+ ]
+ ],
+ [
+ [
+ 194743,
+ 194743
+ ],
+ "mapped",
+ [
+ 25424
+ ]
+ ],
+ [
+ [
+ 194744,
+ 194744
+ ],
+ "mapped",
+ [
+ 142092
+ ]
+ ],
+ [
+ [
+ 194745,
+ 194745
+ ],
+ "mapped",
+ [
+ 25405
+ ]
+ ],
+ [
+ [
+ 194746,
+ 194746
+ ],
+ "mapped",
+ [
+ 25340
+ ]
+ ],
+ [
+ [
+ 194747,
+ 194747
+ ],
+ "mapped",
+ [
+ 25448
+ ]
+ ],
+ [
+ [
+ 194748,
+ 194748
+ ],
+ "mapped",
+ [
+ 25475
+ ]
+ ],
+ [
+ [
+ 194749,
+ 194749
+ ],
+ "mapped",
+ [
+ 25572
+ ]
+ ],
+ [
+ [
+ 194750,
+ 194750
+ ],
+ "mapped",
+ [
+ 142321
+ ]
+ ],
+ [
+ [
+ 194751,
+ 194751
+ ],
+ "mapped",
+ [
+ 25634
+ ]
+ ],
+ [
+ [
+ 194752,
+ 194752
+ ],
+ "mapped",
+ [
+ 25541
+ ]
+ ],
+ [
+ [
+ 194753,
+ 194753
+ ],
+ "mapped",
+ [
+ 25513
+ ]
+ ],
+ [
+ [
+ 194754,
+ 194754
+ ],
+ "mapped",
+ [
+ 14894
+ ]
+ ],
+ [
+ [
+ 194755,
+ 194755
+ ],
+ "mapped",
+ [
+ 25705
+ ]
+ ],
+ [
+ [
+ 194756,
+ 194756
+ ],
+ "mapped",
+ [
+ 25726
+ ]
+ ],
+ [
+ [
+ 194757,
+ 194757
+ ],
+ "mapped",
+ [
+ 25757
+ ]
+ ],
+ [
+ [
+ 194758,
+ 194758
+ ],
+ "mapped",
+ [
+ 25719
+ ]
+ ],
+ [
+ [
+ 194759,
+ 194759
+ ],
+ "mapped",
+ [
+ 14956
+ ]
+ ],
+ [
+ [
+ 194760,
+ 194760
+ ],
+ "mapped",
+ [
+ 25935
+ ]
+ ],
+ [
+ [
+ 194761,
+ 194761
+ ],
+ "mapped",
+ [
+ 25964
+ ]
+ ],
+ [
+ [
+ 194762,
+ 194762
+ ],
+ "mapped",
+ [
+ 143370
+ ]
+ ],
+ [
+ [
+ 194763,
+ 194763
+ ],
+ "mapped",
+ [
+ 26083
+ ]
+ ],
+ [
+ [
+ 194764,
+ 194764
+ ],
+ "mapped",
+ [
+ 26360
+ ]
+ ],
+ [
+ [
+ 194765,
+ 194765
+ ],
+ "mapped",
+ [
+ 26185
+ ]
+ ],
+ [
+ [
+ 194766,
+ 194766
+ ],
+ "mapped",
+ [
+ 15129
+ ]
+ ],
+ [
+ [
+ 194767,
+ 194767
+ ],
+ "mapped",
+ [
+ 26257
+ ]
+ ],
+ [
+ [
+ 194768,
+ 194768
+ ],
+ "mapped",
+ [
+ 15112
+ ]
+ ],
+ [
+ [
+ 194769,
+ 194769
+ ],
+ "mapped",
+ [
+ 15076
+ ]
+ ],
+ [
+ [
+ 194770,
+ 194770
+ ],
+ "mapped",
+ [
+ 20882
+ ]
+ ],
+ [
+ [
+ 194771,
+ 194771
+ ],
+ "mapped",
+ [
+ 20885
+ ]
+ ],
+ [
+ [
+ 194772,
+ 194772
+ ],
+ "mapped",
+ [
+ 26368
+ ]
+ ],
+ [
+ [
+ 194773,
+ 194773
+ ],
+ "mapped",
+ [
+ 26268
+ ]
+ ],
+ [
+ [
+ 194774,
+ 194774
+ ],
+ "mapped",
+ [
+ 32941
+ ]
+ ],
+ [
+ [
+ 194775,
+ 194775
+ ],
+ "mapped",
+ [
+ 17369
+ ]
+ ],
+ [
+ [
+ 194776,
+ 194776
+ ],
+ "mapped",
+ [
+ 26391
+ ]
+ ],
+ [
+ [
+ 194777,
+ 194777
+ ],
+ "mapped",
+ [
+ 26395
+ ]
+ ],
+ [
+ [
+ 194778,
+ 194778
+ ],
+ "mapped",
+ [
+ 26401
+ ]
+ ],
+ [
+ [
+ 194779,
+ 194779
+ ],
+ "mapped",
+ [
+ 26462
+ ]
+ ],
+ [
+ [
+ 194780,
+ 194780
+ ],
+ "mapped",
+ [
+ 26451
+ ]
+ ],
+ [
+ [
+ 194781,
+ 194781
+ ],
+ "mapped",
+ [
+ 144323
+ ]
+ ],
+ [
+ [
+ 194782,
+ 194782
+ ],
+ "mapped",
+ [
+ 15177
+ ]
+ ],
+ [
+ [
+ 194783,
+ 194783
+ ],
+ "mapped",
+ [
+ 26618
+ ]
+ ],
+ [
+ [
+ 194784,
+ 194784
+ ],
+ "mapped",
+ [
+ 26501
+ ]
+ ],
+ [
+ [
+ 194785,
+ 194785
+ ],
+ "mapped",
+ [
+ 26706
+ ]
+ ],
+ [
+ [
+ 194786,
+ 194786
+ ],
+ "mapped",
+ [
+ 26757
+ ]
+ ],
+ [
+ [
+ 194787,
+ 194787
+ ],
+ "mapped",
+ [
+ 144493
+ ]
+ ],
+ [
+ [
+ 194788,
+ 194788
+ ],
+ "mapped",
+ [
+ 26766
+ ]
+ ],
+ [
+ [
+ 194789,
+ 194789
+ ],
+ "mapped",
+ [
+ 26655
+ ]
+ ],
+ [
+ [
+ 194790,
+ 194790
+ ],
+ "mapped",
+ [
+ 26900
+ ]
+ ],
+ [
+ [
+ 194791,
+ 194791
+ ],
+ "mapped",
+ [
+ 15261
+ ]
+ ],
+ [
+ [
+ 194792,
+ 194792
+ ],
+ "mapped",
+ [
+ 26946
+ ]
+ ],
+ [
+ [
+ 194793,
+ 194793
+ ],
+ "mapped",
+ [
+ 27043
+ ]
+ ],
+ [
+ [
+ 194794,
+ 194794
+ ],
+ "mapped",
+ [
+ 27114
+ ]
+ ],
+ [
+ [
+ 194795,
+ 194795
+ ],
+ "mapped",
+ [
+ 27304
+ ]
+ ],
+ [
+ [
+ 194796,
+ 194796
+ ],
+ "mapped",
+ [
+ 145059
+ ]
+ ],
+ [
+ [
+ 194797,
+ 194797
+ ],
+ "mapped",
+ [
+ 27355
+ ]
+ ],
+ [
+ [
+ 194798,
+ 194798
+ ],
+ "mapped",
+ [
+ 15384
+ ]
+ ],
+ [
+ [
+ 194799,
+ 194799
+ ],
+ "mapped",
+ [
+ 27425
+ ]
+ ],
+ [
+ [
+ 194800,
+ 194800
+ ],
+ "mapped",
+ [
+ 145575
+ ]
+ ],
+ [
+ [
+ 194801,
+ 194801
+ ],
+ "mapped",
+ [
+ 27476
+ ]
+ ],
+ [
+ [
+ 194802,
+ 194802
+ ],
+ "mapped",
+ [
+ 15438
+ ]
+ ],
+ [
+ [
+ 194803,
+ 194803
+ ],
+ "mapped",
+ [
+ 27506
+ ]
+ ],
+ [
+ [
+ 194804,
+ 194804
+ ],
+ "mapped",
+ [
+ 27551
+ ]
+ ],
+ [
+ [
+ 194805,
+ 194805
+ ],
+ "mapped",
+ [
+ 27578
+ ]
+ ],
+ [
+ [
+ 194806,
+ 194806
+ ],
+ "mapped",
+ [
+ 27579
+ ]
+ ],
+ [
+ [
+ 194807,
+ 194807
+ ],
+ "mapped",
+ [
+ 146061
+ ]
+ ],
+ [
+ [
+ 194808,
+ 194808
+ ],
+ "mapped",
+ [
+ 138507
+ ]
+ ],
+ [
+ [
+ 194809,
+ 194809
+ ],
+ "mapped",
+ [
+ 146170
+ ]
+ ],
+ [
+ [
+ 194810,
+ 194810
+ ],
+ "mapped",
+ [
+ 27726
+ ]
+ ],
+ [
+ [
+ 194811,
+ 194811
+ ],
+ "mapped",
+ [
+ 146620
+ ]
+ ],
+ [
+ [
+ 194812,
+ 194812
+ ],
+ "mapped",
+ [
+ 27839
+ ]
+ ],
+ [
+ [
+ 194813,
+ 194813
+ ],
+ "mapped",
+ [
+ 27853
+ ]
+ ],
+ [
+ [
+ 194814,
+ 194814
+ ],
+ "mapped",
+ [
+ 27751
+ ]
+ ],
+ [
+ [
+ 194815,
+ 194815
+ ],
+ "mapped",
+ [
+ 27926
+ ]
+ ],
+ [
+ [
+ 194816,
+ 194816
+ ],
+ "mapped",
+ [
+ 27966
+ ]
+ ],
+ [
+ [
+ 194817,
+ 194817
+ ],
+ "mapped",
+ [
+ 28023
+ ]
+ ],
+ [
+ [
+ 194818,
+ 194818
+ ],
+ "mapped",
+ [
+ 27969
+ ]
+ ],
+ [
+ [
+ 194819,
+ 194819
+ ],
+ "mapped",
+ [
+ 28009
+ ]
+ ],
+ [
+ [
+ 194820,
+ 194820
+ ],
+ "mapped",
+ [
+ 28024
+ ]
+ ],
+ [
+ [
+ 194821,
+ 194821
+ ],
+ "mapped",
+ [
+ 28037
+ ]
+ ],
+ [
+ [
+ 194822,
+ 194822
+ ],
+ "mapped",
+ [
+ 146718
+ ]
+ ],
+ [
+ [
+ 194823,
+ 194823
+ ],
+ "mapped",
+ [
+ 27956
+ ]
+ ],
+ [
+ [
+ 194824,
+ 194824
+ ],
+ "mapped",
+ [
+ 28207
+ ]
+ ],
+ [
+ [
+ 194825,
+ 194825
+ ],
+ "mapped",
+ [
+ 28270
+ ]
+ ],
+ [
+ [
+ 194826,
+ 194826
+ ],
+ "mapped",
+ [
+ 15667
+ ]
+ ],
+ [
+ [
+ 194827,
+ 194827
+ ],
+ "mapped",
+ [
+ 28363
+ ]
+ ],
+ [
+ [
+ 194828,
+ 194828
+ ],
+ "mapped",
+ [
+ 28359
+ ]
+ ],
+ [
+ [
+ 194829,
+ 194829
+ ],
+ "mapped",
+ [
+ 147153
+ ]
+ ],
+ [
+ [
+ 194830,
+ 194830
+ ],
+ "mapped",
+ [
+ 28153
+ ]
+ ],
+ [
+ [
+ 194831,
+ 194831
+ ],
+ "mapped",
+ [
+ 28526
+ ]
+ ],
+ [
+ [
+ 194832,
+ 194832
+ ],
+ "mapped",
+ [
+ 147294
+ ]
+ ],
+ [
+ [
+ 194833,
+ 194833
+ ],
+ "mapped",
+ [
+ 147342
+ ]
+ ],
+ [
+ [
+ 194834,
+ 194834
+ ],
+ "mapped",
+ [
+ 28614
+ ]
+ ],
+ [
+ [
+ 194835,
+ 194835
+ ],
+ "mapped",
+ [
+ 28729
+ ]
+ ],
+ [
+ [
+ 194836,
+ 194836
+ ],
+ "mapped",
+ [
+ 28702
+ ]
+ ],
+ [
+ [
+ 194837,
+ 194837
+ ],
+ "mapped",
+ [
+ 28699
+ ]
+ ],
+ [
+ [
+ 194838,
+ 194838
+ ],
+ "mapped",
+ [
+ 15766
+ ]
+ ],
+ [
+ [
+ 194839,
+ 194839
+ ],
+ "mapped",
+ [
+ 28746
+ ]
+ ],
+ [
+ [
+ 194840,
+ 194840
+ ],
+ "mapped",
+ [
+ 28797
+ ]
+ ],
+ [
+ [
+ 194841,
+ 194841
+ ],
+ "mapped",
+ [
+ 28791
+ ]
+ ],
+ [
+ [
+ 194842,
+ 194842
+ ],
+ "mapped",
+ [
+ 28845
+ ]
+ ],
+ [
+ [
+ 194843,
+ 194843
+ ],
+ "mapped",
+ [
+ 132389
+ ]
+ ],
+ [
+ [
+ 194844,
+ 194844
+ ],
+ "mapped",
+ [
+ 28997
+ ]
+ ],
+ [
+ [
+ 194845,
+ 194845
+ ],
+ "mapped",
+ [
+ 148067
+ ]
+ ],
+ [
+ [
+ 194846,
+ 194846
+ ],
+ "mapped",
+ [
+ 29084
+ ]
+ ],
+ [
+ [
+ 194847,
+ 194847
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194848,
+ 194848
+ ],
+ "mapped",
+ [
+ 29224
+ ]
+ ],
+ [
+ [
+ 194849,
+ 194849
+ ],
+ "mapped",
+ [
+ 29237
+ ]
+ ],
+ [
+ [
+ 194850,
+ 194850
+ ],
+ "mapped",
+ [
+ 29264
+ ]
+ ],
+ [
+ [
+ 194851,
+ 194851
+ ],
+ "mapped",
+ [
+ 149000
+ ]
+ ],
+ [
+ [
+ 194852,
+ 194852
+ ],
+ "mapped",
+ [
+ 29312
+ ]
+ ],
+ [
+ [
+ 194853,
+ 194853
+ ],
+ "mapped",
+ [
+ 29333
+ ]
+ ],
+ [
+ [
+ 194854,
+ 194854
+ ],
+ "mapped",
+ [
+ 149301
+ ]
+ ],
+ [
+ [
+ 194855,
+ 194855
+ ],
+ "mapped",
+ [
+ 149524
+ ]
+ ],
+ [
+ [
+ 194856,
+ 194856
+ ],
+ "mapped",
+ [
+ 29562
+ ]
+ ],
+ [
+ [
+ 194857,
+ 194857
+ ],
+ "mapped",
+ [
+ 29579
+ ]
+ ],
+ [
+ [
+ 194858,
+ 194858
+ ],
+ "mapped",
+ [
+ 16044
+ ]
+ ],
+ [
+ [
+ 194859,
+ 194859
+ ],
+ "mapped",
+ [
+ 29605
+ ]
+ ],
+ [
+ [
+ 194860,
+ 194861
+ ],
+ "mapped",
+ [
+ 16056
+ ]
+ ],
+ [
+ [
+ 194862,
+ 194862
+ ],
+ "mapped",
+ [
+ 29767
+ ]
+ ],
+ [
+ [
+ 194863,
+ 194863
+ ],
+ "mapped",
+ [
+ 29788
+ ]
+ ],
+ [
+ [
+ 194864,
+ 194864
+ ],
+ "mapped",
+ [
+ 29809
+ ]
+ ],
+ [
+ [
+ 194865,
+ 194865
+ ],
+ "mapped",
+ [
+ 29829
+ ]
+ ],
+ [
+ [
+ 194866,
+ 194866
+ ],
+ "mapped",
+ [
+ 29898
+ ]
+ ],
+ [
+ [
+ 194867,
+ 194867
+ ],
+ "mapped",
+ [
+ 16155
+ ]
+ ],
+ [
+ [
+ 194868,
+ 194868
+ ],
+ "mapped",
+ [
+ 29988
+ ]
+ ],
+ [
+ [
+ 194869,
+ 194869
+ ],
+ "mapped",
+ [
+ 150582
+ ]
+ ],
+ [
+ [
+ 194870,
+ 194870
+ ],
+ "mapped",
+ [
+ 30014
+ ]
+ ],
+ [
+ [
+ 194871,
+ 194871
+ ],
+ "mapped",
+ [
+ 150674
+ ]
+ ],
+ [
+ [
+ 194872,
+ 194872
+ ],
+ "mapped",
+ [
+ 30064
+ ]
+ ],
+ [
+ [
+ 194873,
+ 194873
+ ],
+ "mapped",
+ [
+ 139679
+ ]
+ ],
+ [
+ [
+ 194874,
+ 194874
+ ],
+ "mapped",
+ [
+ 30224
+ ]
+ ],
+ [
+ [
+ 194875,
+ 194875
+ ],
+ "mapped",
+ [
+ 151457
+ ]
+ ],
+ [
+ [
+ 194876,
+ 194876
+ ],
+ "mapped",
+ [
+ 151480
+ ]
+ ],
+ [
+ [
+ 194877,
+ 194877
+ ],
+ "mapped",
+ [
+ 151620
+ ]
+ ],
+ [
+ [
+ 194878,
+ 194878
+ ],
+ "mapped",
+ [
+ 16380
+ ]
+ ],
+ [
+ [
+ 194879,
+ 194879
+ ],
+ "mapped",
+ [
+ 16392
+ ]
+ ],
+ [
+ [
+ 194880,
+ 194880
+ ],
+ "mapped",
+ [
+ 30452
+ ]
+ ],
+ [
+ [
+ 194881,
+ 194881
+ ],
+ "mapped",
+ [
+ 151795
+ ]
+ ],
+ [
+ [
+ 194882,
+ 194882
+ ],
+ "mapped",
+ [
+ 151794
+ ]
+ ],
+ [
+ [
+ 194883,
+ 194883
+ ],
+ "mapped",
+ [
+ 151833
+ ]
+ ],
+ [
+ [
+ 194884,
+ 194884
+ ],
+ "mapped",
+ [
+ 151859
+ ]
+ ],
+ [
+ [
+ 194885,
+ 194885
+ ],
+ "mapped",
+ [
+ 30494
+ ]
+ ],
+ [
+ [
+ 194886,
+ 194887
+ ],
+ "mapped",
+ [
+ 30495
+ ]
+ ],
+ [
+ [
+ 194888,
+ 194888
+ ],
+ "mapped",
+ [
+ 30538
+ ]
+ ],
+ [
+ [
+ 194889,
+ 194889
+ ],
+ "mapped",
+ [
+ 16441
+ ]
+ ],
+ [
+ [
+ 194890,
+ 194890
+ ],
+ "mapped",
+ [
+ 30603
+ ]
+ ],
+ [
+ [
+ 194891,
+ 194891
+ ],
+ "mapped",
+ [
+ 16454
+ ]
+ ],
+ [
+ [
+ 194892,
+ 194892
+ ],
+ "mapped",
+ [
+ 16534
+ ]
+ ],
+ [
+ [
+ 194893,
+ 194893
+ ],
+ "mapped",
+ [
+ 152605
+ ]
+ ],
+ [
+ [
+ 194894,
+ 194894
+ ],
+ "mapped",
+ [
+ 30798
+ ]
+ ],
+ [
+ [
+ 194895,
+ 194895
+ ],
+ "mapped",
+ [
+ 30860
+ ]
+ ],
+ [
+ [
+ 194896,
+ 194896
+ ],
+ "mapped",
+ [
+ 30924
+ ]
+ ],
+ [
+ [
+ 194897,
+ 194897
+ ],
+ "mapped",
+ [
+ 16611
+ ]
+ ],
+ [
+ [
+ 194898,
+ 194898
+ ],
+ "mapped",
+ [
+ 153126
+ ]
+ ],
+ [
+ [
+ 194899,
+ 194899
+ ],
+ "mapped",
+ [
+ 31062
+ ]
+ ],
+ [
+ [
+ 194900,
+ 194900
+ ],
+ "mapped",
+ [
+ 153242
+ ]
+ ],
+ [
+ [
+ 194901,
+ 194901
+ ],
+ "mapped",
+ [
+ 153285
+ ]
+ ],
+ [
+ [
+ 194902,
+ 194902
+ ],
+ "mapped",
+ [
+ 31119
+ ]
+ ],
+ [
+ [
+ 194903,
+ 194903
+ ],
+ "mapped",
+ [
+ 31211
+ ]
+ ],
+ [
+ [
+ 194904,
+ 194904
+ ],
+ "mapped",
+ [
+ 16687
+ ]
+ ],
+ [
+ [
+ 194905,
+ 194905
+ ],
+ "mapped",
+ [
+ 31296
+ ]
+ ],
+ [
+ [
+ 194906,
+ 194906
+ ],
+ "mapped",
+ [
+ 31306
+ ]
+ ],
+ [
+ [
+ 194907,
+ 194907
+ ],
+ "mapped",
+ [
+ 31311
+ ]
+ ],
+ [
+ [
+ 194908,
+ 194908
+ ],
+ "mapped",
+ [
+ 153980
+ ]
+ ],
+ [
+ [
+ 194909,
+ 194910
+ ],
+ "mapped",
+ [
+ 154279
+ ]
+ ],
+ [
+ [
+ 194911,
+ 194911
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 194912,
+ 194912
+ ],
+ "mapped",
+ [
+ 16898
+ ]
+ ],
+ [
+ [
+ 194913,
+ 194913
+ ],
+ "mapped",
+ [
+ 154539
+ ]
+ ],
+ [
+ [
+ 194914,
+ 194914
+ ],
+ "mapped",
+ [
+ 31686
+ ]
+ ],
+ [
+ [
+ 194915,
+ 194915
+ ],
+ "mapped",
+ [
+ 31689
+ ]
+ ],
+ [
+ [
+ 194916,
+ 194916
+ ],
+ "mapped",
+ [
+ 16935
+ ]
+ ],
+ [
+ [
+ 194917,
+ 194917
+ ],
+ "mapped",
+ [
+ 154752
+ ]
+ ],
+ [
+ [
+ 194918,
+ 194918
+ ],
+ "mapped",
+ [
+ 31954
+ ]
+ ],
+ [
+ [
+ 194919,
+ 194919
+ ],
+ "mapped",
+ [
+ 17056
+ ]
+ ],
+ [
+ [
+ 194920,
+ 194920
+ ],
+ "mapped",
+ [
+ 31976
+ ]
+ ],
+ [
+ [
+ 194921,
+ 194921
+ ],
+ "mapped",
+ [
+ 31971
+ ]
+ ],
+ [
+ [
+ 194922,
+ 194922
+ ],
+ "mapped",
+ [
+ 32000
+ ]
+ ],
+ [
+ [
+ 194923,
+ 194923
+ ],
+ "mapped",
+ [
+ 155526
+ ]
+ ],
+ [
+ [
+ 194924,
+ 194924
+ ],
+ "mapped",
+ [
+ 32099
+ ]
+ ],
+ [
+ [
+ 194925,
+ 194925
+ ],
+ "mapped",
+ [
+ 17153
+ ]
+ ],
+ [
+ [
+ 194926,
+ 194926
+ ],
+ "mapped",
+ [
+ 32199
+ ]
+ ],
+ [
+ [
+ 194927,
+ 194927
+ ],
+ "mapped",
+ [
+ 32258
+ ]
+ ],
+ [
+ [
+ 194928,
+ 194928
+ ],
+ "mapped",
+ [
+ 32325
+ ]
+ ],
+ [
+ [
+ 194929,
+ 194929
+ ],
+ "mapped",
+ [
+ 17204
+ ]
+ ],
+ [
+ [
+ 194930,
+ 194930
+ ],
+ "mapped",
+ [
+ 156200
+ ]
+ ],
+ [
+ [
+ 194931,
+ 194931
+ ],
+ "mapped",
+ [
+ 156231
+ ]
+ ],
+ [
+ [
+ 194932,
+ 194932
+ ],
+ "mapped",
+ [
+ 17241
+ ]
+ ],
+ [
+ [
+ 194933,
+ 194933
+ ],
+ "mapped",
+ [
+ 156377
+ ]
+ ],
+ [
+ [
+ 194934,
+ 194934
+ ],
+ "mapped",
+ [
+ 32634
+ ]
+ ],
+ [
+ [
+ 194935,
+ 194935
+ ],
+ "mapped",
+ [
+ 156478
+ ]
+ ],
+ [
+ [
+ 194936,
+ 194936
+ ],
+ "mapped",
+ [
+ 32661
+ ]
+ ],
+ [
+ [
+ 194937,
+ 194937
+ ],
+ "mapped",
+ [
+ 32762
+ ]
+ ],
+ [
+ [
+ 194938,
+ 194938
+ ],
+ "mapped",
+ [
+ 32773
+ ]
+ ],
+ [
+ [
+ 194939,
+ 194939
+ ],
+ "mapped",
+ [
+ 156890
+ ]
+ ],
+ [
+ [
+ 194940,
+ 194940
+ ],
+ "mapped",
+ [
+ 156963
+ ]
+ ],
+ [
+ [
+ 194941,
+ 194941
+ ],
+ "mapped",
+ [
+ 32864
+ ]
+ ],
+ [
+ [
+ 194942,
+ 194942
+ ],
+ "mapped",
+ [
+ 157096
+ ]
+ ],
+ [
+ [
+ 194943,
+ 194943
+ ],
+ "mapped",
+ [
+ 32880
+ ]
+ ],
+ [
+ [
+ 194944,
+ 194944
+ ],
+ "mapped",
+ [
+ 144223
+ ]
+ ],
+ [
+ [
+ 194945,
+ 194945
+ ],
+ "mapped",
+ [
+ 17365
+ ]
+ ],
+ [
+ [
+ 194946,
+ 194946
+ ],
+ "mapped",
+ [
+ 32946
+ ]
+ ],
+ [
+ [
+ 194947,
+ 194947
+ ],
+ "mapped",
+ [
+ 33027
+ ]
+ ],
+ [
+ [
+ 194948,
+ 194948
+ ],
+ "mapped",
+ [
+ 17419
+ ]
+ ],
+ [
+ [
+ 194949,
+ 194949
+ ],
+ "mapped",
+ [
+ 33086
+ ]
+ ],
+ [
+ [
+ 194950,
+ 194950
+ ],
+ "mapped",
+ [
+ 23221
+ ]
+ ],
+ [
+ [
+ 194951,
+ 194951
+ ],
+ "mapped",
+ [
+ 157607
+ ]
+ ],
+ [
+ [
+ 194952,
+ 194952
+ ],
+ "mapped",
+ [
+ 157621
+ ]
+ ],
+ [
+ [
+ 194953,
+ 194953
+ ],
+ "mapped",
+ [
+ 144275
+ ]
+ ],
+ [
+ [
+ 194954,
+ 194954
+ ],
+ "mapped",
+ [
+ 144284
+ ]
+ ],
+ [
+ [
+ 194955,
+ 194955
+ ],
+ "mapped",
+ [
+ 33281
+ ]
+ ],
+ [
+ [
+ 194956,
+ 194956
+ ],
+ "mapped",
+ [
+ 33284
+ ]
+ ],
+ [
+ [
+ 194957,
+ 194957
+ ],
+ "mapped",
+ [
+ 36766
+ ]
+ ],
+ [
+ [
+ 194958,
+ 194958
+ ],
+ "mapped",
+ [
+ 17515
+ ]
+ ],
+ [
+ [
+ 194959,
+ 194959
+ ],
+ "mapped",
+ [
+ 33425
+ ]
+ ],
+ [
+ [
+ 194960,
+ 194960
+ ],
+ "mapped",
+ [
+ 33419
+ ]
+ ],
+ [
+ [
+ 194961,
+ 194961
+ ],
+ "mapped",
+ [
+ 33437
+ ]
+ ],
+ [
+ [
+ 194962,
+ 194962
+ ],
+ "mapped",
+ [
+ 21171
+ ]
+ ],
+ [
+ [
+ 194963,
+ 194963
+ ],
+ "mapped",
+ [
+ 33457
+ ]
+ ],
+ [
+ [
+ 194964,
+ 194964
+ ],
+ "mapped",
+ [
+ 33459
+ ]
+ ],
+ [
+ [
+ 194965,
+ 194965
+ ],
+ "mapped",
+ [
+ 33469
+ ]
+ ],
+ [
+ [
+ 194966,
+ 194966
+ ],
+ "mapped",
+ [
+ 33510
+ ]
+ ],
+ [
+ [
+ 194967,
+ 194967
+ ],
+ "mapped",
+ [
+ 158524
+ ]
+ ],
+ [
+ [
+ 194968,
+ 194968
+ ],
+ "mapped",
+ [
+ 33509
+ ]
+ ],
+ [
+ [
+ 194969,
+ 194969
+ ],
+ "mapped",
+ [
+ 33565
+ ]
+ ],
+ [
+ [
+ 194970,
+ 194970
+ ],
+ "mapped",
+ [
+ 33635
+ ]
+ ],
+ [
+ [
+ 194971,
+ 194971
+ ],
+ "mapped",
+ [
+ 33709
+ ]
+ ],
+ [
+ [
+ 194972,
+ 194972
+ ],
+ "mapped",
+ [
+ 33571
+ ]
+ ],
+ [
+ [
+ 194973,
+ 194973
+ ],
+ "mapped",
+ [
+ 33725
+ ]
+ ],
+ [
+ [
+ 194974,
+ 194974
+ ],
+ "mapped",
+ [
+ 33767
+ ]
+ ],
+ [
+ [
+ 194975,
+ 194975
+ ],
+ "mapped",
+ [
+ 33879
+ ]
+ ],
+ [
+ [
+ 194976,
+ 194976
+ ],
+ "mapped",
+ [
+ 33619
+ ]
+ ],
+ [
+ [
+ 194977,
+ 194977
+ ],
+ "mapped",
+ [
+ 33738
+ ]
+ ],
+ [
+ [
+ 194978,
+ 194978
+ ],
+ "mapped",
+ [
+ 33740
+ ]
+ ],
+ [
+ [
+ 194979,
+ 194979
+ ],
+ "mapped",
+ [
+ 33756
+ ]
+ ],
+ [
+ [
+ 194980,
+ 194980
+ ],
+ "mapped",
+ [
+ 158774
+ ]
+ ],
+ [
+ [
+ 194981,
+ 194981
+ ],
+ "mapped",
+ [
+ 159083
+ ]
+ ],
+ [
+ [
+ 194982,
+ 194982
+ ],
+ "mapped",
+ [
+ 158933
+ ]
+ ],
+ [
+ [
+ 194983,
+ 194983
+ ],
+ "mapped",
+ [
+ 17707
+ ]
+ ],
+ [
+ [
+ 194984,
+ 194984
+ ],
+ "mapped",
+ [
+ 34033
+ ]
+ ],
+ [
+ [
+ 194985,
+ 194985
+ ],
+ "mapped",
+ [
+ 34035
+ ]
+ ],
+ [
+ [
+ 194986,
+ 194986
+ ],
+ "mapped",
+ [
+ 34070
+ ]
+ ],
+ [
+ [
+ 194987,
+ 194987
+ ],
+ "mapped",
+ [
+ 160714
+ ]
+ ],
+ [
+ [
+ 194988,
+ 194988
+ ],
+ "mapped",
+ [
+ 34148
+ ]
+ ],
+ [
+ [
+ 194989,
+ 194989
+ ],
+ "mapped",
+ [
+ 159532
+ ]
+ ],
+ [
+ [
+ 194990,
+ 194990
+ ],
+ "mapped",
+ [
+ 17757
+ ]
+ ],
+ [
+ [
+ 194991,
+ 194991
+ ],
+ "mapped",
+ [
+ 17761
+ ]
+ ],
+ [
+ [
+ 194992,
+ 194992
+ ],
+ "mapped",
+ [
+ 159665
+ ]
+ ],
+ [
+ [
+ 194993,
+ 194993
+ ],
+ "mapped",
+ [
+ 159954
+ ]
+ ],
+ [
+ [
+ 194994,
+ 194994
+ ],
+ "mapped",
+ [
+ 17771
+ ]
+ ],
+ [
+ [
+ 194995,
+ 194995
+ ],
+ "mapped",
+ [
+ 34384
+ ]
+ ],
+ [
+ [
+ 194996,
+ 194996
+ ],
+ "mapped",
+ [
+ 34396
+ ]
+ ],
+ [
+ [
+ 194997,
+ 194997
+ ],
+ "mapped",
+ [
+ 34407
+ ]
+ ],
+ [
+ [
+ 194998,
+ 194998
+ ],
+ "mapped",
+ [
+ 34409
+ ]
+ ],
+ [
+ [
+ 194999,
+ 194999
+ ],
+ "mapped",
+ [
+ 34473
+ ]
+ ],
+ [
+ [
+ 195000,
+ 195000
+ ],
+ "mapped",
+ [
+ 34440
+ ]
+ ],
+ [
+ [
+ 195001,
+ 195001
+ ],
+ "mapped",
+ [
+ 34574
+ ]
+ ],
+ [
+ [
+ 195002,
+ 195002
+ ],
+ "mapped",
+ [
+ 34530
+ ]
+ ],
+ [
+ [
+ 195003,
+ 195003
+ ],
+ "mapped",
+ [
+ 34681
+ ]
+ ],
+ [
+ [
+ 195004,
+ 195004
+ ],
+ "mapped",
+ [
+ 34600
+ ]
+ ],
+ [
+ [
+ 195005,
+ 195005
+ ],
+ "mapped",
+ [
+ 34667
+ ]
+ ],
+ [
+ [
+ 195006,
+ 195006
+ ],
+ "mapped",
+ [
+ 34694
+ ]
+ ],
+ [
+ [
+ 195007,
+ 195007
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 195008,
+ 195008
+ ],
+ "mapped",
+ [
+ 34785
+ ]
+ ],
+ [
+ [
+ 195009,
+ 195009
+ ],
+ "mapped",
+ [
+ 34817
+ ]
+ ],
+ [
+ [
+ 195010,
+ 195010
+ ],
+ "mapped",
+ [
+ 17913
+ ]
+ ],
+ [
+ [
+ 195011,
+ 195011
+ ],
+ "mapped",
+ [
+ 34912
+ ]
+ ],
+ [
+ [
+ 195012,
+ 195012
+ ],
+ "mapped",
+ [
+ 34915
+ ]
+ ],
+ [
+ [
+ 195013,
+ 195013
+ ],
+ "mapped",
+ [
+ 161383
+ ]
+ ],
+ [
+ [
+ 195014,
+ 195014
+ ],
+ "mapped",
+ [
+ 35031
+ ]
+ ],
+ [
+ [
+ 195015,
+ 195015
+ ],
+ "mapped",
+ [
+ 35038
+ ]
+ ],
+ [
+ [
+ 195016,
+ 195016
+ ],
+ "mapped",
+ [
+ 17973
+ ]
+ ],
+ [
+ [
+ 195017,
+ 195017
+ ],
+ "mapped",
+ [
+ 35066
+ ]
+ ],
+ [
+ [
+ 195018,
+ 195018
+ ],
+ "mapped",
+ [
+ 13499
+ ]
+ ],
+ [
+ [
+ 195019,
+ 195019
+ ],
+ "mapped",
+ [
+ 161966
+ ]
+ ],
+ [
+ [
+ 195020,
+ 195020
+ ],
+ "mapped",
+ [
+ 162150
+ ]
+ ],
+ [
+ [
+ 195021,
+ 195021
+ ],
+ "mapped",
+ [
+ 18110
+ ]
+ ],
+ [
+ [
+ 195022,
+ 195022
+ ],
+ "mapped",
+ [
+ 18119
+ ]
+ ],
+ [
+ [
+ 195023,
+ 195023
+ ],
+ "mapped",
+ [
+ 35488
+ ]
+ ],
+ [
+ [
+ 195024,
+ 195024
+ ],
+ "mapped",
+ [
+ 35565
+ ]
+ ],
+ [
+ [
+ 195025,
+ 195025
+ ],
+ "mapped",
+ [
+ 35722
+ ]
+ ],
+ [
+ [
+ 195026,
+ 195026
+ ],
+ "mapped",
+ [
+ 35925
+ ]
+ ],
+ [
+ [
+ 195027,
+ 195027
+ ],
+ "mapped",
+ [
+ 162984
+ ]
+ ],
+ [
+ [
+ 195028,
+ 195028
+ ],
+ "mapped",
+ [
+ 36011
+ ]
+ ],
+ [
+ [
+ 195029,
+ 195029
+ ],
+ "mapped",
+ [
+ 36033
+ ]
+ ],
+ [
+ [
+ 195030,
+ 195030
+ ],
+ "mapped",
+ [
+ 36123
+ ]
+ ],
+ [
+ [
+ 195031,
+ 195031
+ ],
+ "mapped",
+ [
+ 36215
+ ]
+ ],
+ [
+ [
+ 195032,
+ 195032
+ ],
+ "mapped",
+ [
+ 163631
+ ]
+ ],
+ [
+ [
+ 195033,
+ 195033
+ ],
+ "mapped",
+ [
+ 133124
+ ]
+ ],
+ [
+ [
+ 195034,
+ 195034
+ ],
+ "mapped",
+ [
+ 36299
+ ]
+ ],
+ [
+ [
+ 195035,
+ 195035
+ ],
+ "mapped",
+ [
+ 36284
+ ]
+ ],
+ [
+ [
+ 195036,
+ 195036
+ ],
+ "mapped",
+ [
+ 36336
+ ]
+ ],
+ [
+ [
+ 195037,
+ 195037
+ ],
+ "mapped",
+ [
+ 133342
+ ]
+ ],
+ [
+ [
+ 195038,
+ 195038
+ ],
+ "mapped",
+ [
+ 36564
+ ]
+ ],
+ [
+ [
+ 195039,
+ 195039
+ ],
+ "mapped",
+ [
+ 36664
+ ]
+ ],
+ [
+ [
+ 195040,
+ 195040
+ ],
+ "mapped",
+ [
+ 165330
+ ]
+ ],
+ [
+ [
+ 195041,
+ 195041
+ ],
+ "mapped",
+ [
+ 165357
+ ]
+ ],
+ [
+ [
+ 195042,
+ 195042
+ ],
+ "mapped",
+ [
+ 37012
+ ]
+ ],
+ [
+ [
+ 195043,
+ 195043
+ ],
+ "mapped",
+ [
+ 37105
+ ]
+ ],
+ [
+ [
+ 195044,
+ 195044
+ ],
+ "mapped",
+ [
+ 37137
+ ]
+ ],
+ [
+ [
+ 195045,
+ 195045
+ ],
+ "mapped",
+ [
+ 165678
+ ]
+ ],
+ [
+ [
+ 195046,
+ 195046
+ ],
+ "mapped",
+ [
+ 37147
+ ]
+ ],
+ [
+ [
+ 195047,
+ 195047
+ ],
+ "mapped",
+ [
+ 37432
+ ]
+ ],
+ [
+ [
+ 195048,
+ 195048
+ ],
+ "mapped",
+ [
+ 37591
+ ]
+ ],
+ [
+ [
+ 195049,
+ 195049
+ ],
+ "mapped",
+ [
+ 37592
+ ]
+ ],
+ [
+ [
+ 195050,
+ 195050
+ ],
+ "mapped",
+ [
+ 37500
+ ]
+ ],
+ [
+ [
+ 195051,
+ 195051
+ ],
+ "mapped",
+ [
+ 37881
+ ]
+ ],
+ [
+ [
+ 195052,
+ 195052
+ ],
+ "mapped",
+ [
+ 37909
+ ]
+ ],
+ [
+ [
+ 195053,
+ 195053
+ ],
+ "mapped",
+ [
+ 166906
+ ]
+ ],
+ [
+ [
+ 195054,
+ 195054
+ ],
+ "mapped",
+ [
+ 38283
+ ]
+ ],
+ [
+ [
+ 195055,
+ 195055
+ ],
+ "mapped",
+ [
+ 18837
+ ]
+ ],
+ [
+ [
+ 195056,
+ 195056
+ ],
+ "mapped",
+ [
+ 38327
+ ]
+ ],
+ [
+ [
+ 195057,
+ 195057
+ ],
+ "mapped",
+ [
+ 167287
+ ]
+ ],
+ [
+ [
+ 195058,
+ 195058
+ ],
+ "mapped",
+ [
+ 18918
+ ]
+ ],
+ [
+ [
+ 195059,
+ 195059
+ ],
+ "mapped",
+ [
+ 38595
+ ]
+ ],
+ [
+ [
+ 195060,
+ 195060
+ ],
+ "mapped",
+ [
+ 23986
+ ]
+ ],
+ [
+ [
+ 195061,
+ 195061
+ ],
+ "mapped",
+ [
+ 38691
+ ]
+ ],
+ [
+ [
+ 195062,
+ 195062
+ ],
+ "mapped",
+ [
+ 168261
+ ]
+ ],
+ [
+ [
+ 195063,
+ 195063
+ ],
+ "mapped",
+ [
+ 168474
+ ]
+ ],
+ [
+ [
+ 195064,
+ 195064
+ ],
+ "mapped",
+ [
+ 19054
+ ]
+ ],
+ [
+ [
+ 195065,
+ 195065
+ ],
+ "mapped",
+ [
+ 19062
+ ]
+ ],
+ [
+ [
+ 195066,
+ 195066
+ ],
+ "mapped",
+ [
+ 38880
+ ]
+ ],
+ [
+ [
+ 195067,
+ 195067
+ ],
+ "mapped",
+ [
+ 168970
+ ]
+ ],
+ [
+ [
+ 195068,
+ 195068
+ ],
+ "mapped",
+ [
+ 19122
+ ]
+ ],
+ [
+ [
+ 195069,
+ 195069
+ ],
+ "mapped",
+ [
+ 169110
+ ]
+ ],
+ [
+ [
+ 195070,
+ 195071
+ ],
+ "mapped",
+ [
+ 38923
+ ]
+ ],
+ [
+ [
+ 195072,
+ 195072
+ ],
+ "mapped",
+ [
+ 38953
+ ]
+ ],
+ [
+ [
+ 195073,
+ 195073
+ ],
+ "mapped",
+ [
+ 169398
+ ]
+ ],
+ [
+ [
+ 195074,
+ 195074
+ ],
+ "mapped",
+ [
+ 39138
+ ]
+ ],
+ [
+ [
+ 195075,
+ 195075
+ ],
+ "mapped",
+ [
+ 19251
+ ]
+ ],
+ [
+ [
+ 195076,
+ 195076
+ ],
+ "mapped",
+ [
+ 39209
+ ]
+ ],
+ [
+ [
+ 195077,
+ 195077
+ ],
+ "mapped",
+ [
+ 39335
+ ]
+ ],
+ [
+ [
+ 195078,
+ 195078
+ ],
+ "mapped",
+ [
+ 39362
+ ]
+ ],
+ [
+ [
+ 195079,
+ 195079
+ ],
+ "mapped",
+ [
+ 39422
+ ]
+ ],
+ [
+ [
+ 195080,
+ 195080
+ ],
+ "mapped",
+ [
+ 19406
+ ]
+ ],
+ [
+ [
+ 195081,
+ 195081
+ ],
+ "mapped",
+ [
+ 170800
+ ]
+ ],
+ [
+ [
+ 195082,
+ 195082
+ ],
+ "mapped",
+ [
+ 39698
+ ]
+ ],
+ [
+ [
+ 195083,
+ 195083
+ ],
+ "mapped",
+ [
+ 40000
+ ]
+ ],
+ [
+ [
+ 195084,
+ 195084
+ ],
+ "mapped",
+ [
+ 40189
+ ]
+ ],
+ [
+ [
+ 195085,
+ 195085
+ ],
+ "mapped",
+ [
+ 19662
+ ]
+ ],
+ [
+ [
+ 195086,
+ 195086
+ ],
+ "mapped",
+ [
+ 19693
+ ]
+ ],
+ [
+ [
+ 195087,
+ 195087
+ ],
+ "mapped",
+ [
+ 40295
+ ]
+ ],
+ [
+ [
+ 195088,
+ 195088
+ ],
+ "mapped",
+ [
+ 172238
+ ]
+ ],
+ [
+ [
+ 195089,
+ 195089
+ ],
+ "mapped",
+ [
+ 19704
+ ]
+ ],
+ [
+ [
+ 195090,
+ 195090
+ ],
+ "mapped",
+ [
+ 172293
+ ]
+ ],
+ [
+ [
+ 195091,
+ 195091
+ ],
+ "mapped",
+ [
+ 172558
+ ]
+ ],
+ [
+ [
+ 195092,
+ 195092
+ ],
+ "mapped",
+ [
+ 172689
+ ]
+ ],
+ [
+ [
+ 195093,
+ 195093
+ ],
+ "mapped",
+ [
+ 40635
+ ]
+ ],
+ [
+ [
+ 195094,
+ 195094
+ ],
+ "mapped",
+ [
+ 19798
+ ]
+ ],
+ [
+ [
+ 195095,
+ 195095
+ ],
+ "mapped",
+ [
+ 40697
+ ]
+ ],
+ [
+ [
+ 195096,
+ 195096
+ ],
+ "mapped",
+ [
+ 40702
+ ]
+ ],
+ [
+ [
+ 195097,
+ 195097
+ ],
+ "mapped",
+ [
+ 40709
+ ]
+ ],
+ [
+ [
+ 195098,
+ 195098
+ ],
+ "mapped",
+ [
+ 40719
+ ]
+ ],
+ [
+ [
+ 195099,
+ 195099
+ ],
+ "mapped",
+ [
+ 40726
+ ]
+ ],
+ [
+ [
+ 195100,
+ 195100
+ ],
+ "mapped",
+ [
+ 40763
+ ]
+ ],
+ [
+ [
+ 195101,
+ 195101
+ ],
+ "mapped",
+ [
+ 173568
+ ]
+ ],
+ [
+ [
+ 195102,
+ 196605
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196606,
+ 196607
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 196608,
+ 262141
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262142,
+ 262143
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 262144,
+ 327677
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327678,
+ 327679
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 327680,
+ 393213
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393214,
+ 393215
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 393216,
+ 458749
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458750,
+ 458751
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 458752,
+ 524285
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524286,
+ 524287
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 524288,
+ 589821
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589822,
+ 589823
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 589824,
+ 655357
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655358,
+ 655359
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 655360,
+ 720893
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720894,
+ 720895
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 720896,
+ 786429
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786430,
+ 786431
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 786432,
+ 851965
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851966,
+ 851967
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 851968,
+ 917501
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917502,
+ 917503
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917504,
+ 917504
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917505,
+ 917505
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917506,
+ 917535
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917536,
+ 917631
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917632,
+ 917759
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 917760,
+ 917999
+ ],
+ "ignored"
+ ],
+ [
+ [
+ 918000,
+ 983037
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983038,
+ 983039
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 983040,
+ 1048573
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048574,
+ 1048575
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1048576,
+ 1114109
+ ],
+ "disallowed"
+ ],
+ [
+ [
+ 1114110,
+ 1114111
+ ],
+ "disallowed"
+ ]
+];
+
+var punycode = require$$0;
+var mappingTable = require$$1;
+
+var PROCESSING_OPTIONS = {
+ TRANSITIONAL: 0,
+ NONTRANSITIONAL: 1
+};
+
+function normalize(str) { // fix bug in v8
+ return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
+}
+
+function findStatus(val) {
+ var start = 0;
+ var end = mappingTable.length - 1;
+
+ while (start <= end) {
+ var mid = Math.floor((start + end) / 2);
+
+ var target = mappingTable[mid];
+ if (target[0][0] <= val && target[0][1] >= val) {
+ return target;
+ } else if (target[0][0] > val) {
+ end = mid - 1;
+ } else {
+ start = mid + 1;
+ }
+ }
+
+ return null;
+}
+
+var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+
+function countSymbols(string) {
+ return string
+ // replace every surrogate pair with a BMP symbol
+ .replace(regexAstralSymbols, '_')
+ // then get the length
+ .length;
+}
+
+function mapChars(domain_name, useSTD3, processing_option) {
+ var hasError = false;
+ var processed = "";
+
+ var len = countSymbols(domain_name);
+ for (var i = 0; i < len; ++i) {
+ var codePoint = domain_name.codePointAt(i);
+ var status = findStatus(codePoint);
+
+ switch (status[1]) {
+ case "disallowed":
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "ignored":
+ break;
+ case "mapped":
+ processed += String.fromCodePoint.apply(String, status[2]);
+ break;
+ case "deviation":
+ if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ } else {
+ processed += String.fromCodePoint(codePoint);
+ }
+ break;
+ case "valid":
+ processed += String.fromCodePoint(codePoint);
+ break;
+ case "disallowed_STD3_mapped":
+ if (useSTD3) {
+ hasError = true;
+ processed += String.fromCodePoint(codePoint);
+ } else {
+ processed += String.fromCodePoint.apply(String, status[2]);
+ }
+ break;
+ case "disallowed_STD3_valid":
+ if (useSTD3) {
+ hasError = true;
+ }
+
+ processed += String.fromCodePoint(codePoint);
+ break;
+ }
+ }
+
+ return {
+ string: processed,
+ error: hasError
+ };
+}
+
+var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
+
+function validateLabel(label, processing_option) {
+ if (label.substr(0, 4) === "xn--") {
+ label = punycode.toUnicode(label);
+ PROCESSING_OPTIONS.NONTRANSITIONAL;
+ }
+
+ var error = false;
+
+ if (normalize(label) !== label ||
+ (label[3] === "-" && label[4] === "-") ||
+ label[0] === "-" || label[label.length - 1] === "-" ||
+ label.indexOf(".") !== -1 ||
+ label.search(combiningMarksRegex) === 0) {
+ error = true;
+ }
+
+ var len = countSymbols(label);
+ for (var i = 0; i < len; ++i) {
+ var status = findStatus(label.codePointAt(i));
+ if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") ||
+ (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&
+ status[1] !== "valid" && status[1] !== "deviation")) {
+ error = true;
+ break;
+ }
+ }
+
+ return {
+ label: label,
+ error: error
+ };
+}
+
+function processing(domain_name, useSTD3, processing_option) {
+ var result = mapChars(domain_name, useSTD3, processing_option);
+ result.string = normalize(result.string);
+
+ var labels = result.string.split(".");
+ for (var i = 0; i < labels.length; ++i) {
+ try {
+ var validation = validateLabel(labels[i]);
+ labels[i] = validation.label;
+ result.error = result.error || validation.error;
+ } catch(e) {
+ result.error = true;
+ }
+ }
+
+ return {
+ string: labels.join("."),
+ error: result.error
+ };
+}
+
+tr46.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {
+ var result = processing(domain_name, useSTD3, processing_option);
+ var labels = result.string.split(".");
+ labels = labels.map(function(l) {
+ try {
+ return punycode.toASCII(l);
+ } catch(e) {
+ result.error = true;
+ return l;
+ }
+ });
+
+ if (verifyDnsLength) {
+ var total = labels.slice(0, labels.length - 1).join(".").length;
+ if (total.length > 253 || total.length === 0) {
+ result.error = true;
+ }
+
+ for (var i=0; i < labels.length; ++i) {
+ if (labels.length > 63 || labels.length === 0) {
+ result.error = true;
+ break;
+ }
+ }
+ }
+
+ if (result.error) return null;
+ return labels.join(".");
+};
+
+tr46.toUnicode = function(domain_name, useSTD3) {
+ var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
+
+ return {
+ domain: result.string,
+ error: result.error
+ };
+};
+
+tr46.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
+
+urlStateMachine.exports;
+
+(function (module) {
+ const punycode = require$$0;
+ const tr46$1 = tr46;
+
+ const specialSchemes = {
+ ftp: 21,
+ file: null,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443
+ };
+
+ const failure = Symbol("failure");
+
+ function countSymbols(str) {
+ return punycode.ucs2.decode(str).length;
+ }
+
+ function at(input, idx) {
+ const c = input[idx];
+ return isNaN(c) ? undefined : String.fromCodePoint(c);
+ }
+
+ function isASCIIDigit(c) {
+ return c >= 0x30 && c <= 0x39;
+ }
+
+ function isASCIIAlpha(c) {
+ return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
+ }
+
+ function isASCIIAlphanumeric(c) {
+ return isASCIIAlpha(c) || isASCIIDigit(c);
+ }
+
+ function isASCIIHex(c) {
+ return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
+ }
+
+ function isSingleDot(buffer) {
+ return buffer === "." || buffer.toLowerCase() === "%2e";
+ }
+
+ function isDoubleDot(buffer) {
+ buffer = buffer.toLowerCase();
+ return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
+ }
+
+ function isWindowsDriveLetterCodePoints(cp1, cp2) {
+ return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
+ }
+
+ function isWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
+ }
+
+ function isNormalizedWindowsDriveLetterString(string) {
+ return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
+ }
+
+ function containsForbiddenHostCodePoint(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function containsForbiddenHostCodePointExcludingPercent(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
+ }
+
+ function isSpecialScheme(scheme) {
+ return specialSchemes[scheme] !== undefined;
+ }
+
+ function isSpecial(url) {
+ return isSpecialScheme(url.scheme);
+ }
+
+ function defaultPort(scheme) {
+ return specialSchemes[scheme];
+ }
+
+ function percentEncode(c) {
+ let hex = c.toString(16).toUpperCase();
+ if (hex.length === 1) {
+ hex = "0" + hex;
+ }
+
+ return "%" + hex;
+ }
+
+ function utf8PercentEncode(c) {
+ const buf = new Buffer(c);
+
+ let str = "";
+
+ for (let i = 0; i < buf.length; ++i) {
+ str += percentEncode(buf[i]);
+ }
+
+ return str;
+ }
+
+ function utf8PercentDecode(str) {
+ const input = new Buffer(str);
+ const output = [];
+ for (let i = 0; i < input.length; ++i) {
+ if (input[i] !== 37) {
+ output.push(input[i]);
+ } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
+ output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
+ i += 2;
+ } else {
+ output.push(input[i]);
+ }
+ }
+ return new Buffer(output).toString();
+ }
+
+ function isC0ControlPercentEncode(c) {
+ return c <= 0x1F || c > 0x7E;
+ }
+
+ const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
+ function isPathPercentEncode(c) {
+ return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
+ }
+
+ const extraUserinfoPercentEncodeSet =
+ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
+ function isUserinfoPercentEncode(c) {
+ return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
+ }
+
+ function percentEncodeChar(c, encodeSetPredicate) {
+ const cStr = String.fromCodePoint(c);
+
+ if (encodeSetPredicate(c)) {
+ return utf8PercentEncode(cStr);
+ }
+
+ return cStr;
+ }
+
+ function parseIPv4Number(input) {
+ let R = 10;
+
+ if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
+ input = input.substring(2);
+ R = 16;
+ } else if (input.length >= 2 && input.charAt(0) === "0") {
+ input = input.substring(1);
+ R = 8;
+ }
+
+ if (input === "") {
+ return 0;
+ }
+
+ const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);
+ if (regex.test(input)) {
+ return failure;
+ }
+
+ return parseInt(input, R);
+ }
+
+ function parseIPv4(input) {
+ const parts = input.split(".");
+ if (parts[parts.length - 1] === "") {
+ if (parts.length > 1) {
+ parts.pop();
+ }
+ }
+
+ if (parts.length > 4) {
+ return input;
+ }
+
+ const numbers = [];
+ for (const part of parts) {
+ if (part === "") {
+ return input;
+ }
+ const n = parseIPv4Number(part);
+ if (n === failure) {
+ return input;
+ }
+
+ numbers.push(n);
+ }
+
+ for (let i = 0; i < numbers.length - 1; ++i) {
+ if (numbers[i] > 255) {
+ return failure;
+ }
+ }
+ if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
+ return failure;
+ }
+
+ let ipv4 = numbers.pop();
+ let counter = 0;
+
+ for (const n of numbers) {
+ ipv4 += n * Math.pow(256, 3 - counter);
+ ++counter;
+ }
+
+ return ipv4;
+ }
+
+ function serializeIPv4(address) {
+ let output = "";
+ let n = address;
+
+ for (let i = 1; i <= 4; ++i) {
+ output = String(n % 256) + output;
+ if (i !== 4) {
+ output = "." + output;
+ }
+ n = Math.floor(n / 256);
+ }
+
+ return output;
+ }
+
+ function parseIPv6(input) {
+ const address = [0, 0, 0, 0, 0, 0, 0, 0];
+ let pieceIndex = 0;
+ let compress = null;
+ let pointer = 0;
+
+ input = punycode.ucs2.decode(input);
+
+ if (input[pointer] === 58) {
+ if (input[pointer + 1] !== 58) {
+ return failure;
+ }
+
+ pointer += 2;
+ ++pieceIndex;
+ compress = pieceIndex;
+ }
+
+ while (pointer < input.length) {
+ if (pieceIndex === 8) {
+ return failure;
+ }
+
+ if (input[pointer] === 58) {
+ if (compress !== null) {
+ return failure;
+ }
+ ++pointer;
+ ++pieceIndex;
+ compress = pieceIndex;
+ continue;
+ }
+
+ let value = 0;
+ let length = 0;
+
+ while (length < 4 && isASCIIHex(input[pointer])) {
+ value = value * 0x10 + parseInt(at(input, pointer), 16);
+ ++pointer;
+ ++length;
+ }
+
+ if (input[pointer] === 46) {
+ if (length === 0) {
+ return failure;
+ }
+
+ pointer -= length;
+
+ if (pieceIndex > 6) {
+ return failure;
+ }
+
+ let numbersSeen = 0;
+
+ while (input[pointer] !== undefined) {
+ let ipv4Piece = null;
+
+ if (numbersSeen > 0) {
+ if (input[pointer] === 46 && numbersSeen < 4) {
+ ++pointer;
+ } else {
+ return failure;
+ }
+ }
+
+ if (!isASCIIDigit(input[pointer])) {
+ return failure;
+ }
+
+ while (isASCIIDigit(input[pointer])) {
+ const number = parseInt(at(input, pointer));
+ if (ipv4Piece === null) {
+ ipv4Piece = number;
+ } else if (ipv4Piece === 0) {
+ return failure;
+ } else {
+ ipv4Piece = ipv4Piece * 10 + number;
+ }
+ if (ipv4Piece > 255) {
+ return failure;
+ }
+ ++pointer;
+ }
+
+ address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
+
+ ++numbersSeen;
+
+ if (numbersSeen === 2 || numbersSeen === 4) {
+ ++pieceIndex;
+ }
+ }
+
+ if (numbersSeen !== 4) {
+ return failure;
+ }
+
+ break;
+ } else if (input[pointer] === 58) {
+ ++pointer;
+ if (input[pointer] === undefined) {
+ return failure;
+ }
+ } else if (input[pointer] !== undefined) {
+ return failure;
+ }
+
+ address[pieceIndex] = value;
+ ++pieceIndex;
+ }
+
+ if (compress !== null) {
+ let swaps = pieceIndex - compress;
+ pieceIndex = 7;
+ while (pieceIndex !== 0 && swaps > 0) {
+ const temp = address[compress + swaps - 1];
+ address[compress + swaps - 1] = address[pieceIndex];
+ address[pieceIndex] = temp;
+ --pieceIndex;
+ --swaps;
+ }
+ } else if (compress === null && pieceIndex !== 8) {
+ return failure;
+ }
+
+ return address;
+ }
+
+ function serializeIPv6(address) {
+ let output = "";
+ const seqResult = findLongestZeroSequence(address);
+ const compress = seqResult.idx;
+ let ignore0 = false;
+
+ for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
+ if (ignore0 && address[pieceIndex] === 0) {
+ continue;
+ } else if (ignore0) {
+ ignore0 = false;
+ }
+
+ if (compress === pieceIndex) {
+ const separator = pieceIndex === 0 ? "::" : ":";
+ output += separator;
+ ignore0 = true;
+ continue;
+ }
+
+ output += address[pieceIndex].toString(16);
+
+ if (pieceIndex !== 7) {
+ output += ":";
+ }
+ }
+
+ return output;
+ }
+
+ function parseHost(input, isSpecialArg) {
+ if (input[0] === "[") {
+ if (input[input.length - 1] !== "]") {
+ return failure;
+ }
+
+ return parseIPv6(input.substring(1, input.length - 1));
+ }
+
+ if (!isSpecialArg) {
+ return parseOpaqueHost(input);
+ }
+
+ const domain = utf8PercentDecode(input);
+ const asciiDomain = tr46$1.toASCII(domain, false, tr46$1.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
+ if (asciiDomain === null) {
+ return failure;
+ }
+
+ if (containsForbiddenHostCodePoint(asciiDomain)) {
+ return failure;
+ }
+
+ const ipv4Host = parseIPv4(asciiDomain);
+ if (typeof ipv4Host === "number" || ipv4Host === failure) {
+ return ipv4Host;
+ }
+
+ return asciiDomain;
+ }
+
+ function parseOpaqueHost(input) {
+ if (containsForbiddenHostCodePointExcludingPercent(input)) {
+ return failure;
+ }
+
+ let output = "";
+ const decoded = punycode.ucs2.decode(input);
+ for (let i = 0; i < decoded.length; ++i) {
+ output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
+ }
+ return output;
+ }
+
+ function findLongestZeroSequence(arr) {
+ let maxIdx = null;
+ let maxLen = 1; // only find elements > 1
+ let currStart = null;
+ let currLen = 0;
+
+ for (let i = 0; i < arr.length; ++i) {
+ if (arr[i] !== 0) {
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ currStart = null;
+ currLen = 0;
+ } else {
+ if (currStart === null) {
+ currStart = i;
+ }
+ ++currLen;
+ }
+ }
+
+ // if trailing zeros
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
+
+ return {
+ idx: maxIdx,
+ len: maxLen
+ };
+ }
+
+ function serializeHost(host) {
+ if (typeof host === "number") {
+ return serializeIPv4(host);
+ }
+
+ // IPv6 serializer
+ if (host instanceof Array) {
+ return "[" + serializeIPv6(host) + "]";
+ }
+
+ return host;
+ }
+
+ function trimControlChars(url) {
+ return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
+ }
+
+ function trimTabAndNewline(url) {
+ return url.replace(/\u0009|\u000A|\u000D/g, "");
+ }
+
+ function shortenPath(url) {
+ const path = url.path;
+ if (path.length === 0) {
+ return;
+ }
+ if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
+ return;
+ }
+
+ path.pop();
+ }
+
+ function includesCredentials(url) {
+ return url.username !== "" || url.password !== "";
+ }
+
+ function cannotHaveAUsernamePasswordPort(url) {
+ return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
+ }
+
+ function isNormalizedWindowsDriveLetter(string) {
+ return /^[A-Za-z]:$/.test(string);
+ }
+
+ function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
+ this.pointer = 0;
+ this.input = input;
+ this.base = base || null;
+ this.encodingOverride = encodingOverride || "utf-8";
+ this.stateOverride = stateOverride;
+ this.url = url;
+ this.failure = false;
+ this.parseError = false;
+
+ if (!this.url) {
+ this.url = {
+ scheme: "",
+ username: "",
+ password: "",
+ host: null,
+ port: null,
+ path: [],
+ query: null,
+ fragment: null,
+
+ cannotBeABaseURL: false
+ };
+
+ const res = trimControlChars(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+ }
+
+ const res = trimTabAndNewline(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+
+ this.state = stateOverride || "scheme start";
+
+ this.buffer = "";
+ this.atFlag = false;
+ this.arrFlag = false;
+ this.passwordTokenSeenFlag = false;
+
+ this.input = punycode.ucs2.decode(this.input);
+
+ for (; this.pointer <= this.input.length; ++this.pointer) {
+ const c = this.input[this.pointer];
+ const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
+
+ // exec state machine
+ const ret = this["parse " + this.state](c, cStr);
+ if (!ret) {
+ break; // terminate algorithm
+ } else if (ret === failure) {
+ this.failure = true;
+ break;
+ }
+ }
+ }
+
+ URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
+ if (isASCIIAlpha(c)) {
+ this.buffer += cStr.toLowerCase();
+ this.state = "scheme";
+ } else if (!this.stateOverride) {
+ this.state = "no scheme";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
+ if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
+ this.buffer += cStr.toLowerCase();
+ } else if (c === 58) {
+ if (this.stateOverride) {
+ if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
+ return false;
+ }
+
+ if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
+ return false;
+ }
+
+ if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
+ return false;
+ }
+ }
+ this.url.scheme = this.buffer;
+ this.buffer = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ if (this.url.scheme === "file") {
+ if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
+ this.parseError = true;
+ }
+ this.state = "file";
+ } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
+ this.state = "special relative or authority";
+ } else if (isSpecial(this.url)) {
+ this.state = "special authority slashes";
+ } else if (this.input[this.pointer + 1] === 47) {
+ this.state = "path or authority";
+ ++this.pointer;
+ } else {
+ this.url.cannotBeABaseURL = true;
+ this.url.path.push("");
+ this.state = "cannot-be-a-base-URL path";
+ }
+ } else if (!this.stateOverride) {
+ this.buffer = "";
+ this.state = "no scheme";
+ this.pointer = -1;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
+ if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
+ return failure;
+ } else if (this.base.cannotBeABaseURL && c === 35) {
+ this.url.scheme = this.base.scheme;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.url.cannotBeABaseURL = true;
+ this.state = "fragment";
+ } else if (this.base.scheme === "file") {
+ this.state = "file";
+ --this.pointer;
+ } else {
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "relative";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
+ if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
+ this.url.scheme = this.base.scheme;
+ if (isNaN(c)) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 47) {
+ this.state = "relative slash";
+ } else if (c === 63) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ this.state = "relative slash";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice(0, this.base.path.length - 1);
+
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
+ if (isSpecial(this.url) && (c === 47 || c === 92)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "special authority ignore slashes";
+ } else if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "special authority ignore slashes";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
+ if (c !== 47 && c !== 92) {
+ this.state = "authority";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
+ if (c === 64) {
+ this.parseError = true;
+ if (this.atFlag) {
+ this.buffer = "%40" + this.buffer;
+ }
+ this.atFlag = true;
+
+ // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
+ const len = countSymbols(this.buffer);
+ for (let pointer = 0; pointer < len; ++pointer) {
+ const codePoint = this.buffer.codePointAt(pointer);
+
+ if (codePoint === 58 && !this.passwordTokenSeenFlag) {
+ this.passwordTokenSeenFlag = true;
+ continue;
+ }
+ const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
+ if (this.passwordTokenSeenFlag) {
+ this.url.password += encodedCodePoints;
+ } else {
+ this.url.username += encodedCodePoints;
+ }
+ }
+ this.buffer = "";
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ if (this.atFlag && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+ this.pointer -= countSymbols(this.buffer) + 1;
+ this.buffer = "";
+ this.state = "host";
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse hostname"] =
+ URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
+ if (this.stateOverride && this.url.scheme === "file") {
+ --this.pointer;
+ this.state = "file host";
+ } else if (c === 58 && !this.arrFlag) {
+ if (this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "port";
+ if (this.stateOverride === "hostname") {
+ return false;
+ }
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ --this.pointer;
+ if (isSpecial(this.url) && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ } else if (this.stateOverride && this.buffer === "" &&
+ (includesCredentials(this.url) || this.url.port !== null)) {
+ this.parseError = true;
+ return false;
+ }
+
+ const host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "path start";
+ if (this.stateOverride) {
+ return false;
+ }
+ } else {
+ if (c === 91) {
+ this.arrFlag = true;
+ } else if (c === 93) {
+ this.arrFlag = false;
+ }
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
+ if (isASCIIDigit(c)) {
+ this.buffer += cStr;
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92) ||
+ this.stateOverride) {
+ if (this.buffer !== "") {
+ const port = parseInt(this.buffer);
+ if (port > Math.pow(2, 16) - 1) {
+ this.parseError = true;
+ return failure;
+ }
+ this.url.port = port === defaultPort(this.url.scheme) ? null : port;
+ this.buffer = "";
+ }
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
+
+ return true;
+ };
+
+ const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
+
+ URLStateMachine.prototype["parse file"] = function parseFile(c) {
+ this.url.scheme = "file";
+
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file slash";
+ } else if (this.base !== null && this.base.scheme === "file") {
+ if (isNaN(c)) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 63) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points
+ !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||
+ (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points
+ !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ shortenPath(this.url);
+ } else {
+ this.parseError = true;
+ }
+
+ this.state = "path";
+ --this.pointer;
+ }
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file host";
+ } else {
+ if (this.base !== null && this.base.scheme === "file") {
+ if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
+ this.url.path.push(this.base.path[0]);
+ } else {
+ this.url.host = this.base.host;
+ }
+ }
+ this.state = "path";
+ --this.pointer;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
+ if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
+ --this.pointer;
+ if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
+ this.parseError = true;
+ this.state = "path";
+ } else if (this.buffer === "") {
+ this.url.host = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ } else {
+ let host = parseHost(this.buffer, isSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+ if (host === "localhost") {
+ host = "";
+ }
+ this.url.host = host;
+
+ if (this.stateOverride) {
+ return false;
+ }
+
+ this.buffer = "";
+ this.state = "path start";
+ }
+ } else {
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
+ if (isSpecial(this.url)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "path";
+
+ if (c !== 47 && c !== 92) {
+ --this.pointer;
+ }
+ } else if (!this.stateOverride && c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (!this.stateOverride && c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (c !== undefined) {
+ this.state = "path";
+ if (c !== 47) {
+ --this.pointer;
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse path"] = function parsePath(c) {
+ if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
+ (!this.stateOverride && (c === 63 || c === 35))) {
+ if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ }
+
+ if (isDoubleDot(this.buffer)) {
+ shortenPath(this.url);
+ if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ }
+ } else if (isSingleDot(this.buffer) && c !== 47 &&
+ !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ } else if (!isSingleDot(this.buffer)) {
+ if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
+ if (this.url.host !== "" && this.url.host !== null) {
+ this.parseError = true;
+ this.url.host = "";
+ }
+ this.buffer = this.buffer[0] + ":";
+ }
+ this.url.path.push(this.buffer);
+ }
+ this.buffer = "";
+ if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
+ while (this.url.path.length > 1 && this.url.path[0] === "") {
+ this.parseError = true;
+ this.url.path.shift();
+ }
+ }
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ }
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += percentEncodeChar(c, isPathPercentEncode);
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ // TODO: Add: not a URL code point
+ if (!isNaN(c) && c !== 37) {
+ this.parseError = true;
+ }
+
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ if (!isNaN(c)) {
+ this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
+ if (isNaN(c) || (!this.stateOverride && c === 35)) {
+ if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
+ this.encodingOverride = "utf-8";
+ }
+
+ const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
+ for (let i = 0; i < buffer.length; ++i) {
+ if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||
+ buffer[i] === 0x3C || buffer[i] === 0x3E) {
+ this.url.query += percentEncode(buffer[i]);
+ } else {
+ this.url.query += String.fromCodePoint(buffer[i]);
+ }
+ }
+
+ this.buffer = "";
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.buffer += cStr;
+ }
+
+ return true;
+ };
+
+ URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
+ if (isNaN(c)) ; else if (c === 0x0) {
+ this.parseError = true;
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!isASCIIHex(this.input[this.pointer + 1]) ||
+ !isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
+
+ this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+
+ return true;
+ };
+
+ function serializeURL(url, excludeFragment) {
+ let output = url.scheme + ":";
+ if (url.host !== null) {
+ output += "//";
+
+ if (url.username !== "" || url.password !== "") {
+ output += url.username;
+ if (url.password !== "") {
+ output += ":" + url.password;
+ }
+ output += "@";
+ }
+
+ output += serializeHost(url.host);
+
+ if (url.port !== null) {
+ output += ":" + url.port;
+ }
+ } else if (url.host === null && url.scheme === "file") {
+ output += "//";
+ }
+
+ if (url.cannotBeABaseURL) {
+ output += url.path[0];
+ } else {
+ for (const string of url.path) {
+ output += "/" + string;
+ }
+ }
+
+ if (url.query !== null) {
+ output += "?" + url.query;
+ }
+
+ if (!excludeFragment && url.fragment !== null) {
+ output += "#" + url.fragment;
+ }
+
+ return output;
+ }
+
+ function serializeOrigin(tuple) {
+ let result = tuple.scheme + "://";
+ result += serializeHost(tuple.host);
+
+ if (tuple.port !== null) {
+ result += ":" + tuple.port;
+ }
+
+ return result;
+ }
+
+ module.exports.serializeURL = serializeURL;
+
+ module.exports.serializeURLOrigin = function (url) {
+ // https://url.spec.whatwg.org/#concept-url-origin
+ switch (url.scheme) {
+ case "blob":
+ try {
+ return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
+ } catch (e) {
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ case "ftp":
+ case "gopher":
+ case "http":
+ case "https":
+ case "ws":
+ case "wss":
+ return serializeOrigin({
+ scheme: url.scheme,
+ host: url.host,
+ port: url.port
+ });
+ case "file":
+ // spec says "exercise to the reader", chrome says "file://"
+ return "file://";
+ default:
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ };
+
+ module.exports.basicURLParse = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
+ if (usm.failure) {
+ return "failure";
+ }
+
+ return usm.url;
+ };
+
+ module.exports.setTheUsername = function (url, username) {
+ url.username = "";
+ const decoded = punycode.ucs2.decode(username);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.setThePassword = function (url, password) {
+ url.password = "";
+ const decoded = punycode.ucs2.decode(password);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
+ }
+ };
+
+ module.exports.serializeHost = serializeHost;
+
+ module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
+
+ module.exports.serializeInteger = function (integer) {
+ return String(integer);
+ };
+
+ module.exports.parseURL = function (input, options) {
+ if (options === undefined) {
+ options = {};
+ }
+
+ // We don't handle blobs, so this just delegates:
+ return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
+ };
+} (urlStateMachine));
+
+var urlStateMachineExports = urlStateMachine.exports;
+
+const usm = urlStateMachineExports;
+
+URLImpl.implementation = class URLImpl {
+ constructor(constructorArgs) {
+ const url = constructorArgs[0];
+ const base = constructorArgs[1];
+
+ let parsedBase = null;
+ if (base !== undefined) {
+ parsedBase = usm.basicURLParse(base);
+ if (parsedBase === "failure") {
+ throw new TypeError("Invalid base URL");
+ }
+ }
+
+ const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+
+ // TODO: query stuff
+ }
+
+ get href() {
+ return usm.serializeURL(this._url);
+ }
+
+ set href(v) {
+ const parsedURL = usm.basicURLParse(v);
+ if (parsedURL === "failure") {
+ throw new TypeError("Invalid URL");
+ }
+
+ this._url = parsedURL;
+ }
+
+ get origin() {
+ return usm.serializeURLOrigin(this._url);
+ }
+
+ get protocol() {
+ return this._url.scheme + ":";
+ }
+
+ set protocol(v) {
+ usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
+ }
+
+ get username() {
+ return this._url.username;
+ }
+
+ set username(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setTheUsername(this._url, v);
+ }
+
+ get password() {
+ return this._url.password;
+ }
+
+ set password(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setThePassword(this._url, v);
+ }
+
+ get host() {
+ const url = this._url;
+
+ if (url.host === null) {
+ return "";
+ }
+
+ if (url.port === null) {
+ return usm.serializeHost(url.host);
+ }
+
+ return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
+ }
+
+ set host(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
+ }
+
+ get hostname() {
+ if (this._url.host === null) {
+ return "";
+ }
+
+ return usm.serializeHost(this._url.host);
+ }
+
+ set hostname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
+ }
+
+ get port() {
+ if (this._url.port === null) {
+ return "";
+ }
+
+ return usm.serializeInteger(this._url.port);
+ }
+
+ set port(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ if (v === "") {
+ this._url.port = null;
+ } else {
+ usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
+ }
+ }
+
+ get pathname() {
+ if (this._url.cannotBeABaseURL) {
+ return this._url.path[0];
+ }
+
+ if (this._url.path.length === 0) {
+ return "";
+ }
+
+ return "/" + this._url.path.join("/");
+ }
+
+ set pathname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
+
+ this._url.path = [];
+ usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
+ }
+
+ get search() {
+ if (this._url.query === null || this._url.query === "") {
+ return "";
+ }
+
+ return "?" + this._url.query;
+ }
+
+ set search(v) {
+ // TODO: query stuff
+
+ const url = this._url;
+
+ if (v === "") {
+ url.query = null;
+ return;
+ }
+
+ const input = v[0] === "?" ? v.substring(1) : v;
+ url.query = "";
+ usm.basicURLParse(input, { url, stateOverride: "query" });
+ }
+
+ get hash() {
+ if (this._url.fragment === null || this._url.fragment === "") {
+ return "";
+ }
+
+ return "#" + this._url.fragment;
+ }
+
+ set hash(v) {
+ if (v === "") {
+ this._url.fragment = null;
+ return;
+ }
+
+ const input = v[0] === "#" ? v.substring(1) : v;
+ this._url.fragment = "";
+ usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
+ }
+
+ toJSON() {
+ return this.href;
+ }
+};
+
+URL$2.exports;
+
+(function (module) {
+
+ const conversions = lib;
+ const utils = utilsExports;
+ const Impl = URLImpl;
+
+ const impl = utils.implSymbol;
+
+ function URL(url) {
+ if (!this || this[impl] || !(this instanceof URL)) {
+ throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
+ }
+ if (arguments.length < 1) {
+ throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 2; ++i) {
+ args[i] = arguments[i];
+ }
+ args[0] = conversions["USVString"](args[0]);
+ if (args[1] !== undefined) {
+ args[1] = conversions["USVString"](args[1]);
+ }
+
+ module.exports.setup(this, args);
+ }
+
+ URL.prototype.toJSON = function toJSON() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ const args = [];
+ for (let i = 0; i < arguments.length && i < 0; ++i) {
+ args[i] = arguments[i];
+ }
+ return this[impl].toJSON.apply(this[impl], args);
+ };
+ Object.defineProperty(URL.prototype, "href", {
+ get() {
+ return this[impl].href;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].href = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ URL.prototype.toString = function () {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return this.href;
+ };
+
+ Object.defineProperty(URL.prototype, "origin", {
+ get() {
+ return this[impl].origin;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "protocol", {
+ get() {
+ return this[impl].protocol;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].protocol = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "username", {
+ get() {
+ return this[impl].username;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].username = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "password", {
+ get() {
+ return this[impl].password;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].password = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "host", {
+ get() {
+ return this[impl].host;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].host = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hostname", {
+ get() {
+ return this[impl].hostname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hostname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "port", {
+ get() {
+ return this[impl].port;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].port = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "pathname", {
+ get() {
+ return this[impl].pathname;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].pathname = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "search", {
+ get() {
+ return this[impl].search;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].search = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperty(URL.prototype, "hash", {
+ get() {
+ return this[impl].hash;
+ },
+ set(V) {
+ V = conversions["USVString"](V);
+ this[impl].hash = V;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+
+ module.exports = {
+ is(obj) {
+ return !!obj && obj[impl] instanceof Impl.implementation;
+ },
+ create(constructorArgs, privateData) {
+ let obj = Object.create(URL.prototype);
+ this.setup(obj, constructorArgs, privateData);
+ return obj;
+ },
+ setup(obj, constructorArgs, privateData) {
+ if (!privateData) privateData = {};
+ privateData.wrapper = obj;
+
+ obj[impl] = new Impl.implementation(constructorArgs, privateData);
+ obj[impl][utils.wrapperSymbol] = obj;
+ },
+ interface: URL,
+ expose: {
+ Window: { URL: URL },
+ Worker: { URL: URL }
+ }
+ };
+} (URL$2));
+
+var URLExports = URL$2.exports;
+
+publicApi.URL = URLExports.interface;
+publicApi.serializeURL = urlStateMachineExports.serializeURL;
+publicApi.serializeURLOrigin = urlStateMachineExports.serializeURLOrigin;
+publicApi.basicURLParse = urlStateMachineExports.basicURLParse;
+publicApi.setTheUsername = urlStateMachineExports.setTheUsername;
+publicApi.setThePassword = urlStateMachineExports.setThePassword;
+publicApi.serializeHost = urlStateMachineExports.serializeHost;
+publicApi.serializeInteger = urlStateMachineExports.serializeInteger;
+publicApi.parseURL = urlStateMachineExports.parseURL;
+
+// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
+
+// fix for "Readable" isn't a named export issue
+const Readable = Stream.Readable;
+
+const BUFFER = Symbol('buffer');
+const TYPE = Symbol('type');
+
+class Blob {
+ constructor() {
+ this[TYPE] = '';
+
+ const blobParts = arguments[0];
+ const options = arguments[1];
+
+ const buffers = [];
+ let size = 0;
+
+ if (blobParts) {
+ const a = blobParts;
+ const length = Number(a.length);
+ for (let i = 0; i < length; i++) {
+ const element = a[i];
+ let buffer;
+ if (element instanceof Buffer) {
+ buffer = element;
+ } else if (ArrayBuffer.isView(element)) {
+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
+ } else if (element instanceof ArrayBuffer) {
+ buffer = Buffer.from(element);
+ } else if (element instanceof Blob) {
+ buffer = element[BUFFER];
+ } else {
+ buffer = Buffer.from(typeof element === 'string' ? element : String(element));
+ }
+ size += buffer.length;
+ buffers.push(buffer);
+ }
+ }
+
+ this[BUFFER] = Buffer.concat(buffers);
+
+ let type = options && options.type !== undefined && String(options.type).toLowerCase();
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
+ this[TYPE] = type;
+ }
+ }
+ get size() {
+ return this[BUFFER].length;
+ }
+ get type() {
+ return this[TYPE];
+ }
+ text() {
+ return Promise.resolve(this[BUFFER].toString());
+ }
+ arrayBuffer() {
+ const buf = this[BUFFER];
+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ return Promise.resolve(ab);
+ }
+ stream() {
+ const readable = new Readable();
+ readable._read = function () {};
+ readable.push(this[BUFFER]);
+ readable.push(null);
+ return readable;
+ }
+ toString() {
+ return '[object Blob]';
+ }
+ slice() {
+ const size = this.size;
+
+ const start = arguments[0];
+ const end = arguments[1];
+ let relativeStart, relativeEnd;
+ if (start === undefined) {
+ relativeStart = 0;
+ } else if (start < 0) {
+ relativeStart = Math.max(size + start, 0);
+ } else {
+ relativeStart = Math.min(start, size);
+ }
+ if (end === undefined) {
+ relativeEnd = size;
+ } else if (end < 0) {
+ relativeEnd = Math.max(size + end, 0);
+ } else {
+ relativeEnd = Math.min(end, size);
+ }
+ const span = Math.max(relativeEnd - relativeStart, 0);
+
+ const buffer = this[BUFFER];
+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
+ const blob = new Blob([], { type: arguments[2] });
+ blob[BUFFER] = slicedBuffer;
+ return blob;
+ }
+}
+
+Object.defineProperties(Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+ slice: { enumerable: true }
+});
+
+Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
+ value: 'Blob',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * fetch-error.js
+ *
+ * FetchError interface for operational errors
+ */
+
+/**
+ * Create FetchError instance
+ *
+ * @param String message Error message for human
+ * @param String type Error type for machine
+ * @param String systemError For Node.js system error
+ * @return FetchError
+ */
+function FetchError(message, type, systemError) {
+ Error.call(this, message);
+
+ this.message = message;
+ this.type = type;
+
+ // when err.type is `system`, err.code contains system error code
+ if (systemError) {
+ this.code = this.errno = systemError.code;
+ }
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+FetchError.prototype = Object.create(Error.prototype);
+FetchError.prototype.constructor = FetchError;
+FetchError.prototype.name = 'FetchError';
+
+let convert;
+try {
+ convert = require('encoding').convert;
+} catch (e) {}
+
+const INTERNALS = Symbol('Body internals');
+
+// fix an issue where "PassThrough" isn't a named export for node <10
+const PassThrough = Stream.PassThrough;
+
+/**
+ * Body mixin
+ *
+ * Ref: https://fetch.spec.whatwg.org/#body
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+function Body(body) {
+ var _this = this;
+
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ _ref$size = _ref.size;
+
+ let size = _ref$size === undefined ? 0 : _ref$size;
+ var _ref$timeout = _ref.timeout;
+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
+
+ if (body == null) {
+ // body is undefined or null
+ body = null;
+ } else if (isURLSearchParams(body)) {
+ // body is a URLSearchParams
+ body = Buffer.from(body.toString());
+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
+ // body is ArrayBuffer
+ body = Buffer.from(body);
+ } else if (ArrayBuffer.isView(body)) {
+ // body is ArrayBufferView
+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
+ } else if (body instanceof Stream) ; else {
+ // none of the above
+ // coerce to string then buffer
+ body = Buffer.from(String(body));
+ }
+ this[INTERNALS] = {
+ body,
+ disturbed: false,
+ error: null
+ };
+ this.size = size;
+ this.timeout = timeout;
+
+ if (body instanceof Stream) {
+ body.on('error', function (err) {
+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
+ _this[INTERNALS].error = error;
+ });
+ }
+}
+
+Body.prototype = {
+ get body() {
+ return this[INTERNALS].body;
+ },
+
+ get bodyUsed() {
+ return this[INTERNALS].disturbed;
+ },
+
+ /**
+ * Decode response as ArrayBuffer
+ *
+ * @return Promise
+ */
+ arrayBuffer() {
+ return consumeBody.call(this).then(function (buf) {
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
+ });
+ },
+
+ /**
+ * Return raw response as Blob
+ *
+ * @return Promise
+ */
+ blob() {
+ let ct = this.headers && this.headers.get('content-type') || '';
+ return consumeBody.call(this).then(function (buf) {
+ return Object.assign(
+ // Prevent copying
+ new Blob([], {
+ type: ct.toLowerCase()
+ }), {
+ [BUFFER]: buf
+ });
+ });
+ },
+
+ /**
+ * Decode response as json
+ *
+ * @return Promise
+ */
+ json() {
+ var _this2 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ try {
+ return JSON.parse(buffer.toString());
+ } catch (err) {
+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
+ }
+ });
+ },
+
+ /**
+ * Decode response as text
+ *
+ * @return Promise
+ */
+ text() {
+ return consumeBody.call(this).then(function (buffer) {
+ return buffer.toString();
+ });
+ },
+
+ /**
+ * Decode response as buffer (non-spec api)
+ *
+ * @return Promise
+ */
+ buffer() {
+ return consumeBody.call(this);
+ },
+
+ /**
+ * Decode response as text, while automatically detecting the encoding and
+ * trying to decode to UTF-8 (non-spec api)
+ *
+ * @return Promise
+ */
+ textConverted() {
+ var _this3 = this;
+
+ return consumeBody.call(this).then(function (buffer) {
+ return convertBody(buffer, _this3.headers);
+ });
+ }
+};
+
+// In browsers, all properties are enumerable.
+Object.defineProperties(Body.prototype, {
+ body: { enumerable: true },
+ bodyUsed: { enumerable: true },
+ arrayBuffer: { enumerable: true },
+ blob: { enumerable: true },
+ json: { enumerable: true },
+ text: { enumerable: true }
+});
+
+Body.mixIn = function (proto) {
+ for (const name of Object.getOwnPropertyNames(Body.prototype)) {
+ // istanbul ignore else: future proof
+ if (!(name in proto)) {
+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
+ Object.defineProperty(proto, name, desc);
+ }
+ }
+};
+
+/**
+ * Consume and convert an entire Body to a Buffer.
+ *
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
+ *
+ * @return Promise
+ */
+function consumeBody() {
+ var _this4 = this;
+
+ if (this[INTERNALS].disturbed) {
+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
+ }
+
+ this[INTERNALS].disturbed = true;
+
+ if (this[INTERNALS].error) {
+ return Body.Promise.reject(this[INTERNALS].error);
+ }
+
+ let body = this.body;
+
+ // body is null
+ if (body === null) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is blob
+ if (isBlob(body)) {
+ body = body.stream();
+ }
+
+ // body is buffer
+ if (Buffer.isBuffer(body)) {
+ return Body.Promise.resolve(body);
+ }
+
+ // istanbul ignore if: should never happen
+ if (!(body instanceof Stream)) {
+ return Body.Promise.resolve(Buffer.alloc(0));
+ }
+
+ // body is stream
+ // get ready to actually consume the body
+ let accum = [];
+ let accumBytes = 0;
+ let abort = false;
+
+ return new Body.Promise(function (resolve, reject) {
+ let resTimeout;
+
+ // allow timeout on slow response body
+ if (_this4.timeout) {
+ resTimeout = setTimeout(function () {
+ abort = true;
+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
+ }, _this4.timeout);
+ }
+
+ // handle stream errors
+ body.on('error', function (err) {
+ if (err.name === 'AbortError') {
+ // if the request was aborted, reject with this Error
+ abort = true;
+ reject(err);
+ } else {
+ // other errors, such as incorrect content-encoding
+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+
+ body.on('data', function (chunk) {
+ if (abort || chunk === null) {
+ return;
+ }
+
+ if (_this4.size && accumBytes + chunk.length > _this4.size) {
+ abort = true;
+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
+ return;
+ }
+
+ accumBytes += chunk.length;
+ accum.push(chunk);
+ });
+
+ body.on('end', function () {
+ if (abort) {
+ return;
+ }
+
+ clearTimeout(resTimeout);
+
+ try {
+ resolve(Buffer.concat(accum, accumBytes));
+ } catch (err) {
+ // handle streams that have accumulated too much data (issue #414)
+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
+ }
+ });
+ });
+}
+
+/**
+ * Detect buffer encoding and convert to target encoding
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
+ *
+ * @param Buffer buffer Incoming buffer
+ * @param String encoding Target encoding
+ * @return String
+ */
+function convertBody(buffer, headers) {
+ if (typeof convert !== 'function') {
+ throw new Error('The package `encoding` must be installed to use the textConverted() function');
+ }
+
+ const ct = headers.get('content-type');
+ let charset = 'utf-8';
+ let res, str;
+
+ // header
+ if (ct) {
+ res = /charset=([^;]*)/i.exec(ct);
+ }
+
+ // no charset in content type, peek at response body for at most 1024 bytes
+ str = buffer.slice(0, 1024).toString();
+
+ // html5
+ if (!res && str) {
+ res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;
+
+ this[MAP] = Object.create(null);
+
+ if (init instanceof Headers) {
+ const rawHeaders = init.raw();
+ const headerNames = Object.keys(rawHeaders);
+
+ for (const headerName of headerNames) {
+ for (const value of rawHeaders[headerName]) {
+ this.append(headerName, value);
+ }
+ }
+
+ return;
+ }
+
+ // We don't worry about converting prop to ByteString here as append()
+ // will handle it.
+ if (init == null) ; else if (typeof init === 'object') {
+ const method = init[Symbol.iterator];
+ if (method != null) {
+ if (typeof method !== 'function') {
+ throw new TypeError('Header pairs must be iterable');
+ }
+
+ // sequence>
+ // Note: per spec we have to first exhaust the lists then process them
+ const pairs = [];
+ for (const pair of init) {
+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
+ throw new TypeError('Each header pair must be iterable');
+ }
+ pairs.push(Array.from(pair));
+ }
+
+ for (const pair of pairs) {
+ if (pair.length !== 2) {
+ throw new TypeError('Each header pair must be a name/value tuple');
+ }
+ this.append(pair[0], pair[1]);
+ }
+ } else {
+ // record
+ for (const key of Object.keys(init)) {
+ const value = init[key];
+ this.append(key, value);
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object');
+ }
+ }
+
+ /**
+ * Return combined header value given name
+ *
+ * @param String name Header name
+ * @return Mixed
+ */
+ get(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key === undefined) {
+ return null;
+ }
+
+ return this[MAP][key].join(', ');
+ }
+
+ /**
+ * Iterate over all headers
+ *
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
+ * @param Boolean thisArg `this` context for callback function
+ * @return Void
+ */
+ forEach(callback) {
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+ let pairs = getHeaders(this);
+ let i = 0;
+ while (i < pairs.length) {
+ var _pairs$i = pairs[i];
+ const name = _pairs$i[0],
+ value = _pairs$i[1];
+
+ callback.call(thisArg, value, name, this);
+ pairs = getHeaders(this);
+ i++;
+ }
+ }
+
+ /**
+ * Overwrite header values given name
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ set(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ this[MAP][key !== undefined ? key : name] = [value];
+ }
+
+ /**
+ * Append a value onto existing header
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ append(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ this[MAP][key].push(value);
+ } else {
+ this[MAP][name] = [value];
+ }
+ }
+
+ /**
+ * Check for header name existence
+ *
+ * @param String name Header name
+ * @return Boolean
+ */
+ has(name) {
+ name = `${name}`;
+ validateName(name);
+ return find(this[MAP], name) !== undefined;
+ }
+
+ /**
+ * Delete all header values given name
+ *
+ * @param String name Header name
+ * @return Void
+ */
+ delete(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ delete this[MAP][key];
+ }
+ }
+
+ /**
+ * Return raw headers (non-spec api)
+ *
+ * @return Object
+ */
+ raw() {
+ return this[MAP];
+ }
+
+ /**
+ * Get an iterator on keys.
+ *
+ * @return Iterator
+ */
+ keys() {
+ return createHeadersIterator(this, 'key');
+ }
+
+ /**
+ * Get an iterator on values.
+ *
+ * @return Iterator
+ */
+ values() {
+ return createHeadersIterator(this, 'value');
+ }
+
+ /**
+ * Get an iterator on entries.
+ *
+ * This is the default iterator of the Headers object.
+ *
+ * @return Iterator
+ */
+ [Symbol.iterator]() {
+ return createHeadersIterator(this, 'key+value');
+ }
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+ value: 'Headers',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+ const keys = Object.keys(headers[MAP]).sort();
+ return keys.map(kind === 'key' ? function (k) {
+ return k.toLowerCase();
+ } : kind === 'value' ? function (k) {
+ return headers[MAP][k].join(', ');
+ } : function (k) {
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
+ });
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+ const iterator = Object.create(HeadersIteratorPrototype);
+ iterator[INTERNAL] = {
+ target,
+ kind,
+ index: 0
+ };
+ return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+ next() {
+ // istanbul ignore if
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator');
+ }
+
+ var _INTERNAL = this[INTERNAL];
+ const target = _INTERNAL.target,
+ kind = _INTERNAL.kind,
+ index = _INTERNAL.index;
+
+ const values = getHeaders(target, kind);
+ const len = values.length;
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ this[INTERNAL].index = index + 1;
+
+ return {
+ value: values[index],
+ done: false
+ };
+ }
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+ value: 'HeadersIterator',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param Headers headers
+ * @return Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host');
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
+ }
+
+ return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param Object obj Object of headers
+ * @return Headers
+ */
+function createHeadersLenient(obj) {
+ const headers = new Headers();
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue;
+ }
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue;
+ }
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val];
+ } else {
+ headers[MAP][name].push(val);
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]];
+ }
+ }
+ return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+class Response {
+ constructor() {
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ Body.call(this, body, opts);
+
+ const status = opts.status || 200;
+ const headers = new Headers(opts.headers);
+
+ if (body != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ this[INTERNALS$1] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter
+ };
+ }
+
+ get url() {
+ return this[INTERNALS$1].url || '';
+ }
+
+ get status() {
+ return this[INTERNALS$1].status;
+ }
+
+ /**
+ * Convenience property representing if the request ended normally
+ */
+ get ok() {
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+ }
+
+ get redirected() {
+ return this[INTERNALS$1].counter > 0;
+ }
+
+ get statusText() {
+ return this[INTERNALS$1].statusText;
+ }
+
+ get headers() {
+ return this[INTERNALS$1].headers;
+ }
+
+ /**
+ * Clone this response
+ *
+ * @return Response
+ */
+ clone() {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected
+ });
+ }
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+ value: 'Response',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+const URL = Url.URL || publicApi.URL;
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
+
+/**
+ * Wrapper around `new URL` to handle arbitrary URLs
+ *
+ * @param {string} urlStr
+ * @return {void}
+ */
+function parseURL(urlStr) {
+ /*
+ Check whether the URL is absolute or not
+ Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
+ Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
+ */
+ if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
+ urlStr = new URL(urlStr).toString();
+ }
+
+ // Fallback to old implementation for arbitrary URLs
+ return parse_url(urlStr);
+}
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param Mixed input
+ * @return Boolean
+ */
+function isRequest(input) {
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+ return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param Mixed input Url or Request instance
+ * @param Object init Custom options
+ * @return Void
+ */
+class Request {
+ constructor(input) {
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ let parsedURL;
+
+ // normalize input
+ if (!isRequest(input)) {
+ if (input && input.href) {
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
+ // will fall into this branch also (since their `toString()` will return
+ // `href` property anyway)
+ parsedURL = parseURL(input.href);
+ } else {
+ // coerce input to a string before attempting to parse
+ parsedURL = parseURL(`${input}`);
+ }
+ input = {};
+ } else {
+ parsedURL = parseURL(input.url);
+ }
+
+ let method = init.method || input.method || 'GET';
+ method = method.toUpperCase();
+
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+ throw new TypeError('Request with GET/HEAD method cannot have body');
+ }
+
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+ Body.call(this, inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0
+ });
+
+ const headers = new Headers(init.headers || input.headers || {});
+
+ if (inputBody != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ let signal = isRequest(input) ? input.signal : null;
+ if ('signal' in init) signal = init.signal;
+
+ if (signal != null && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
+ }
+
+ this[INTERNALS$2] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal
+ };
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+ this.counter = init.counter || input.counter || 0;
+ this.agent = init.agent || input.agent;
+ }
+
+ get method() {
+ return this[INTERNALS$2].method;
+ }
+
+ get url() {
+ return format_url(this[INTERNALS$2].parsedURL);
+ }
+
+ get headers() {
+ return this[INTERNALS$2].headers;
+ }
+
+ get redirect() {
+ return this[INTERNALS$2].redirect;
+ }
+
+ get signal() {
+ return this[INTERNALS$2].signal;
+ }
+
+ /**
+ * Clone this request
+ *
+ * @return Request
+ */
+ clone() {
+ return new Request(this);
+ }
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+ value: 'Request',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param Request A Request instance
+ * @return Object The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+ const parsedURL = request[INTERNALS$2].parsedURL;
+ const headers = new Headers(request[INTERNALS$2].headers);
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*');
+ }
+
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname) {
+ throw new TypeError('Only absolute URLs are supported');
+ }
+
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported');
+ }
+
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ let contentLengthValue = null;
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+ contentLengthValue = '0';
+ }
+ if (request.body != null) {
+ const totalBytes = getTotalBytes(request);
+ if (typeof totalBytes === 'number') {
+ contentLengthValue = String(totalBytes);
+ }
+ }
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue);
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate');
+ }
+
+ let agent = request.agent;
+ if (typeof agent === 'function') {
+ agent = agent(parsedURL);
+ }
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close');
+ }
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ return Object.assign({}, parsedURL, {
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent
+ });
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param String message Error message for human
+ * @return AbortError
+ */
+function AbortError(message) {
+ Error.call(this, message);
+
+ this.type = 'aborted';
+ this.message = message;
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+const URL$1 = Url.URL || publicApi.URL;
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+
+const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
+ const orig = new URL$1(original).hostname;
+ const dest = new URL$1(destination).hostname;
+
+ return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
+};
+
+/**
+ * Fetch function
+ *
+ * @param Mixed url Absolute url or Request instance
+ * @param Object opts Fetch options
+ * @return Promise
+ */
+function fetch$1(url, opts) {
+
+ // allow custom promise
+ if (!fetch$1.Promise) {
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+ }
+
+ Body.Promise = fetch$1.Promise;
+
+ // wrap http.request into fetch
+ return new fetch$1.Promise(function (resolve, reject) {
+ // build request object
+ const request = new Request(url, opts);
+ const options = getNodeRequestOptions(request);
+
+ const send = (options.protocol === 'https:' ? https : http).request;
+ const signal = request.signal;
+
+ let response = null;
+
+ const abort = function abort() {
+ let error = new AbortError('The user aborted a request.');
+ reject(error);
+ if (request.body && request.body instanceof Stream.Readable) {
+ request.body.destroy(error);
+ }
+ if (!response || !response.body) return;
+ response.body.emit('error', error);
+ };
+
+ if (signal && signal.aborted) {
+ abort();
+ return;
+ }
+
+ const abortAndFinalize = function abortAndFinalize() {
+ abort();
+ finalize();
+ };
+
+ // send request
+ const req = send(options);
+ let reqTimeout;
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize);
+ }
+
+ function finalize() {
+ req.abort();
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ clearTimeout(reqTimeout);
+ }
+
+ if (request.timeout) {
+ req.once('socket', function (socket) {
+ reqTimeout = setTimeout(function () {
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+ finalize();
+ }, request.timeout);
+ });
+ }
+
+ req.on('error', function (err) {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+ finalize();
+ });
+
+ req.on('response', function (res) {
+ clearTimeout(reqTimeout);
+
+ const headers = createHeadersLenient(res.headers);
+
+ // HTTP fetch step 5
+ if (fetch$1.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location');
+
+ // HTTP fetch step 5.3
+ let locationURL = null;
+ try {
+ locationURL = location === null ? null : new URL$1(location, request.url).toString();
+ } catch (err) {
+ // error here can only be invalid URL in Location: header
+ // do not throw when options.redirect == manual
+ // let the user extract the errorneous redirect URL
+ if (request.redirect !== 'manual') {
+ reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
+ finalize();
+ return;
+ }
+ }
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
+ finalize();
+ return;
+ case 'manual':
+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
+ if (locationURL !== null) {
+ // handle corrupted header
+ try {
+ headers.set('Location', locationURL);
+ } catch (err) {
+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
+ reject(err);
+ }
+ }
+ break;
+ case 'follow':
+ // HTTP-redirect fetch step 2
+ if (locationURL === null) {
+ break;
+ }
+
+ // HTTP-redirect fetch step 5
+ if (request.counter >= request.follow) {
+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 6 (counter increment)
+ // Create a new Request object.
+ const requestOpts = {
+ headers: new Headers(request.headers),
+ follow: request.follow,
+ counter: request.counter + 1,
+ agent: request.agent,
+ compress: request.compress,
+ method: request.method,
+ body: request.body,
+ signal: request.signal,
+ timeout: request.timeout,
+ size: request.size
+ };
+
+ if (!isDomainOrSubdomain(request.url, locationURL)) {
+ for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
+ requestOpts.headers.delete(name);
+ }
+ }
+
+ // HTTP-redirect fetch step 9
+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
+ finalize();
+ return;
+ }
+
+ // HTTP-redirect fetch step 11
+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
+ requestOpts.method = 'GET';
+ requestOpts.body = undefined;
+ requestOpts.headers.delete('content-length');
+ }
+
+ // HTTP-redirect fetch step 15
+ resolve(fetch$1(new Request(locationURL, requestOpts)));
+ finalize();
+ return;
+ }
+ }
+
+ // prepare response
+ res.once('end', function () {
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ });
+ let body = res.pipe(new PassThrough$1());
+
+ const response_options = {
+ url: request.url,
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: headers,
+ size: request.size,
+ timeout: request.timeout,
+ counter: request.counter
+ };
+
+ // HTTP-network fetch step 12.1.1.3
+ const codings = headers.get('Content-Encoding');
+
+ // HTTP-network fetch step 12.1.1.4: handle content codings
+
+ // in following scenarios we ignore compression support
+ // 1. compression support is disabled
+ // 2. HEAD request
+ // 3. no Content-Encoding header
+ // 4. no content response (204)
+ // 5. content not modified response (304)
+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // For Node v6+
+ // Be less strict when decoding compressed responses, since sometimes
+ // servers send slightly invalid responses that are still accepted
+ // by common browsers.
+ // Always using Z_SYNC_FLUSH is what cURL does.
+ const zlibOptions = {
+ flush: zlib.Z_SYNC_FLUSH,
+ finishFlush: zlib.Z_SYNC_FLUSH
+ };
+
+ // for gzip
+ if (codings == 'gzip' || codings == 'x-gzip') {
+ body = body.pipe(zlib.createGunzip(zlibOptions));
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // for deflate
+ if (codings == 'deflate' || codings == 'x-deflate') {
+ // handle the infamous raw deflate response from old servers
+ // a hack for old IIS and Apache servers
+ const raw = res.pipe(new PassThrough$1());
+ raw.once('data', function (chunk) {
+ // see http://stackoverflow.com/questions/37519828
+ if ((chunk[0] & 0x0F) === 0x08) {
+ body = body.pipe(zlib.createInflate());
+ } else {
+ body = body.pipe(zlib.createInflateRaw());
+ }
+ response = new Response(body, response_options);
+ resolve(response);
+ });
+ return;
+ }
+
+ // for br
+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
+ body = body.pipe(zlib.createBrotliDecompress());
+ response = new Response(body, response_options);
+ resolve(response);
+ return;
+ }
+
+ // otherwise, use response as-is
+ response = new Response(body, response_options);
+ resolve(response);
+ });
+
+ writeToStream(req, request);
+ });
+}
+/**
+ * Redirect code matching
+ *
+ * @param Number code Status code
+ * @return Boolean
+ */
+fetch$1.isRedirect = function (code) {
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
+};
+
+// expose Promise
+fetch$1.Promise = global.Promise;
+
+/**
+ * @author Toru Nagashima
+ * @copyright 2015 Toru Nagashima. All rights reserved.
+ * See LICENSE file in root directory for full license.
+ */
+/**
+ * @typedef {object} PrivateData
+ * @property {EventTarget} eventTarget The event target.
+ * @property {{type:string}} event The original event object.
+ * @property {number} eventPhase The current event phase.
+ * @property {EventTarget|null} currentTarget The current event target.
+ * @property {boolean} canceled The flag to prevent default.
+ * @property {boolean} stopped The flag to stop propagation.
+ * @property {boolean} immediateStopped The flag to stop propagation immediately.
+ * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.
+ * @property {number} timeStamp The unix time.
+ * @private
+ */
+
+/**
+ * Private data for event wrappers.
+ * @type {WeakMap}
+ * @private
+ */
+const privateData = new WeakMap();
+
+/**
+ * Cache for wrapper classes.
+ * @type {WeakMap}
+ * @private
+ */
+const wrappers = new WeakMap();
+
+/**
+ * Get private data.
+ * @param {Event} event The event object to get private data.
+ * @returns {PrivateData} The private data of the event.
+ * @private
+ */
+function pd(event) {
+ const retv = privateData.get(event);
+ console.assert(
+ retv != null,
+ "'this' is expected an Event object, but got",
+ event
+ );
+ return retv
+}
+
+/**
+ * https://dom.spec.whatwg.org/#set-the-canceled-flag
+ * @param data {PrivateData} private data.
+ */
+function setCancelFlag(data) {
+ if (data.passiveListener != null) {
+ if (
+ typeof console !== "undefined" &&
+ typeof console.error === "function"
+ ) {
+ console.error(
+ "Unable to preventDefault inside passive event listener invocation.",
+ data.passiveListener
+ );
+ }
+ return
+ }
+ if (!data.event.cancelable) {
+ return
+ }
+
+ data.canceled = true;
+ if (typeof data.event.preventDefault === "function") {
+ data.event.preventDefault();
+ }
+}
+
+/**
+ * @see https://dom.spec.whatwg.org/#interface-event
+ * @private
+ */
+/**
+ * The event wrapper.
+ * @constructor
+ * @param {EventTarget} eventTarget The event target of this dispatching.
+ * @param {Event|{type:string}} event The original event to wrap.
+ */
+function Event(eventTarget, event) {
+ privateData.set(this, {
+ eventTarget,
+ event,
+ eventPhase: 2,
+ currentTarget: eventTarget,
+ canceled: false,
+ stopped: false,
+ immediateStopped: false,
+ passiveListener: null,
+ timeStamp: event.timeStamp || Date.now(),
+ });
+
+ // https://heycam.github.io/webidl/#Unforgeable
+ Object.defineProperty(this, "isTrusted", { value: false, enumerable: true });
+
+ // Define accessors
+ const keys = Object.keys(event);
+ for (let i = 0; i < keys.length; ++i) {
+ const key = keys[i];
+ if (!(key in this)) {
+ Object.defineProperty(this, key, defineRedirectDescriptor(key));
+ }
+ }
+}
+
+// Should be enumerable, but class methods are not enumerable.
+Event.prototype = {
+ /**
+ * The type of this event.
+ * @type {string}
+ */
+ get type() {
+ return pd(this).event.type
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ */
+ get target() {
+ return pd(this).eventTarget
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ */
+ get currentTarget() {
+ return pd(this).currentTarget
+ },
+
+ /**
+ * @returns {EventTarget[]} The composed path of this event.
+ */
+ composedPath() {
+ const currentTarget = pd(this).currentTarget;
+ if (currentTarget == null) {
+ return []
+ }
+ return [currentTarget]
+ },
+
+ /**
+ * Constant of NONE.
+ * @type {number}
+ */
+ get NONE() {
+ return 0
+ },
+
+ /**
+ * Constant of CAPTURING_PHASE.
+ * @type {number}
+ */
+ get CAPTURING_PHASE() {
+ return 1
+ },
+
+ /**
+ * Constant of AT_TARGET.
+ * @type {number}
+ */
+ get AT_TARGET() {
+ return 2
+ },
+
+ /**
+ * Constant of BUBBLING_PHASE.
+ * @type {number}
+ */
+ get BUBBLING_PHASE() {
+ return 3
+ },
+
+ /**
+ * The target of this event.
+ * @type {number}
+ */
+ get eventPhase() {
+ return pd(this).eventPhase
+ },
+
+ /**
+ * Stop event bubbling.
+ * @returns {void}
+ */
+ stopPropagation() {
+ const data = pd(this);
+
+ data.stopped = true;
+ if (typeof data.event.stopPropagation === "function") {
+ data.event.stopPropagation();
+ }
+ },
+
+ /**
+ * Stop event bubbling.
+ * @returns {void}
+ */
+ stopImmediatePropagation() {
+ const data = pd(this);
+
+ data.stopped = true;
+ data.immediateStopped = true;
+ if (typeof data.event.stopImmediatePropagation === "function") {
+ data.event.stopImmediatePropagation();
+ }
+ },
+
+ /**
+ * The flag to be bubbling.
+ * @type {boolean}
+ */
+ get bubbles() {
+ return Boolean(pd(this).event.bubbles)
+ },
+
+ /**
+ * The flag to be cancelable.
+ * @type {boolean}
+ */
+ get cancelable() {
+ return Boolean(pd(this).event.cancelable)
+ },
+
+ /**
+ * Cancel this event.
+ * @returns {void}
+ */
+ preventDefault() {
+ setCancelFlag(pd(this));
+ },
+
+ /**
+ * The flag to indicate cancellation state.
+ * @type {boolean}
+ */
+ get defaultPrevented() {
+ return pd(this).canceled
+ },
+
+ /**
+ * The flag to be composed.
+ * @type {boolean}
+ */
+ get composed() {
+ return Boolean(pd(this).event.composed)
+ },
+
+ /**
+ * The unix time of this event.
+ * @type {number}
+ */
+ get timeStamp() {
+ return pd(this).timeStamp
+ },
+
+ /**
+ * The target of this event.
+ * @type {EventTarget}
+ * @deprecated
+ */
+ get srcElement() {
+ return pd(this).eventTarget
+ },
+
+ /**
+ * The flag to stop event bubbling.
+ * @type {boolean}
+ * @deprecated
+ */
+ get cancelBubble() {
+ return pd(this).stopped
+ },
+ set cancelBubble(value) {
+ if (!value) {
+ return
+ }
+ const data = pd(this);
+
+ data.stopped = true;
+ if (typeof data.event.cancelBubble === "boolean") {
+ data.event.cancelBubble = true;
+ }
+ },
+
+ /**
+ * The flag to indicate cancellation state.
+ * @type {boolean}
+ * @deprecated
+ */
+ get returnValue() {
+ return !pd(this).canceled
+ },
+ set returnValue(value) {
+ if (!value) {
+ setCancelFlag(pd(this));
+ }
+ },
+
+ /**
+ * Initialize this event object. But do nothing under event dispatching.
+ * @param {string} type The event type.
+ * @param {boolean} [bubbles=false] The flag to be possible to bubble up.
+ * @param {boolean} [cancelable=false] The flag to be possible to cancel.
+ * @deprecated
+ */
+ initEvent() {
+ // Do nothing.
+ },
+};
+
+// `constructor` is not enumerable.
+Object.defineProperty(Event.prototype, "constructor", {
+ value: Event,
+ configurable: true,
+ writable: true,
+});
+
+// Ensure `event instanceof window.Event` is `true`.
+if (typeof window !== "undefined" && typeof window.Event !== "undefined") {
+ Object.setPrototypeOf(Event.prototype, window.Event.prototype);
+
+ // Make association for wrappers.
+ wrappers.set(window.Event.prototype, Event);
+}
+
+/**
+ * Get the property descriptor to redirect a given property.
+ * @param {string} key Property name to define property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor to redirect the property.
+ * @private
+ */
+function defineRedirectDescriptor(key) {
+ return {
+ get() {
+ return pd(this).event[key]
+ },
+ set(value) {
+ pd(this).event[key] = value;
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Get the property descriptor to call a given method property.
+ * @param {string} key Property name to define property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor to call the method property.
+ * @private
+ */
+function defineCallDescriptor(key) {
+ return {
+ value() {
+ const event = pd(this).event;
+ return event[key].apply(event, arguments)
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Define new wrapper class.
+ * @param {Function} BaseEvent The base wrapper class.
+ * @param {Object} proto The prototype of the original event.
+ * @returns {Function} The defined wrapper class.
+ * @private
+ */
+function defineWrapper(BaseEvent, proto) {
+ const keys = Object.keys(proto);
+ if (keys.length === 0) {
+ return BaseEvent
+ }
+
+ /** CustomEvent */
+ function CustomEvent(eventTarget, event) {
+ BaseEvent.call(this, eventTarget, event);
+ }
+
+ CustomEvent.prototype = Object.create(BaseEvent.prototype, {
+ constructor: { value: CustomEvent, configurable: true, writable: true },
+ });
+
+ // Define accessors.
+ for (let i = 0; i < keys.length; ++i) {
+ const key = keys[i];
+ if (!(key in BaseEvent.prototype)) {
+ const descriptor = Object.getOwnPropertyDescriptor(proto, key);
+ const isFunc = typeof descriptor.value === "function";
+ Object.defineProperty(
+ CustomEvent.prototype,
+ key,
+ isFunc
+ ? defineCallDescriptor(key)
+ : defineRedirectDescriptor(key)
+ );
+ }
+ }
+
+ return CustomEvent
+}
+
+/**
+ * Get the wrapper class of a given prototype.
+ * @param {Object} proto The prototype of the original event to get its wrapper.
+ * @returns {Function} The wrapper class.
+ * @private
+ */
+function getWrapper(proto) {
+ if (proto == null || proto === Object.prototype) {
+ return Event
+ }
+
+ let wrapper = wrappers.get(proto);
+ if (wrapper == null) {
+ wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);
+ wrappers.set(proto, wrapper);
+ }
+ return wrapper
+}
+
+/**
+ * Wrap a given event to management a dispatching.
+ * @param {EventTarget} eventTarget The event target of this dispatching.
+ * @param {Object} event The event to wrap.
+ * @returns {Event} The wrapper instance.
+ * @private
+ */
+function wrapEvent(eventTarget, event) {
+ const Wrapper = getWrapper(Object.getPrototypeOf(event));
+ return new Wrapper(eventTarget, event)
+}
+
+/**
+ * Get the immediateStopped flag of a given event.
+ * @param {Event} event The event to get.
+ * @returns {boolean} The flag to stop propagation immediately.
+ * @private
+ */
+function isStopped(event) {
+ return pd(event).immediateStopped
+}
+
+/**
+ * Set the current event phase of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {number} eventPhase New event phase.
+ * @returns {void}
+ * @private
+ */
+function setEventPhase(event, eventPhase) {
+ pd(event).eventPhase = eventPhase;
+}
+
+/**
+ * Set the current target of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {EventTarget|null} currentTarget New current target.
+ * @returns {void}
+ * @private
+ */
+function setCurrentTarget(event, currentTarget) {
+ pd(event).currentTarget = currentTarget;
+}
+
+/**
+ * Set a passive listener of a given event.
+ * @param {Event} event The event to set current target.
+ * @param {Function|null} passiveListener New passive listener.
+ * @returns {void}
+ * @private
+ */
+function setPassiveListener(event, passiveListener) {
+ pd(event).passiveListener = passiveListener;
+}
+
+/**
+ * @typedef {object} ListenerNode
+ * @property {Function} listener
+ * @property {1|2|3} listenerType
+ * @property {boolean} passive
+ * @property {boolean} once
+ * @property {ListenerNode|null} next
+ * @private
+ */
+
+/**
+ * @type {WeakMap>}
+ * @private
+ */
+const listenersMap = new WeakMap();
+
+// Listener types
+const CAPTURE = 1;
+const BUBBLE = 2;
+const ATTRIBUTE = 3;
+
+/**
+ * Check whether a given value is an object or not.
+ * @param {any} x The value to check.
+ * @returns {boolean} `true` if the value is an object.
+ */
+function isObject(x) {
+ return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax
+}
+
+/**
+ * Get listeners.
+ * @param {EventTarget} eventTarget The event target to get.
+ * @returns {Map} The listeners.
+ * @private
+ */
+function getListeners(eventTarget) {
+ const listeners = listenersMap.get(eventTarget);
+ if (listeners == null) {
+ throw new TypeError(
+ "'this' is expected an EventTarget object, but got another value."
+ )
+ }
+ return listeners
+}
+
+/**
+ * Get the property descriptor for the event attribute of a given event.
+ * @param {string} eventName The event name to get property descriptor.
+ * @returns {PropertyDescriptor} The property descriptor.
+ * @private
+ */
+function defineEventAttributeDescriptor(eventName) {
+ return {
+ get() {
+ const listeners = getListeners(this);
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (node.listenerType === ATTRIBUTE) {
+ return node.listener
+ }
+ node = node.next;
+ }
+ return null
+ },
+
+ set(listener) {
+ if (typeof listener !== "function" && !isObject(listener)) {
+ listener = null; // eslint-disable-line no-param-reassign
+ }
+ const listeners = getListeners(this);
+
+ // Traverse to the tail while removing old value.
+ let prev = null;
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (node.listenerType === ATTRIBUTE) {
+ // Remove old value.
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ } else {
+ prev = node;
+ }
+
+ node = node.next;
+ }
+
+ // Add new value.
+ if (listener !== null) {
+ const newNode = {
+ listener,
+ listenerType: ATTRIBUTE,
+ passive: false,
+ once: false,
+ next: null,
+ };
+ if (prev === null) {
+ listeners.set(eventName, newNode);
+ } else {
+ prev.next = newNode;
+ }
+ }
+ },
+ configurable: true,
+ enumerable: true,
+ }
+}
+
+/**
+ * Define an event attribute (e.g. `eventTarget.onclick`).
+ * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.
+ * @param {string} eventName The event name to define.
+ * @returns {void}
+ */
+function defineEventAttribute(eventTargetPrototype, eventName) {
+ Object.defineProperty(
+ eventTargetPrototype,
+ `on${eventName}`,
+ defineEventAttributeDescriptor(eventName)
+ );
+}
+
+/**
+ * Define a custom EventTarget with event attributes.
+ * @param {string[]} eventNames Event names for event attributes.
+ * @returns {EventTarget} The custom EventTarget.
+ * @private
+ */
+function defineCustomEventTarget(eventNames) {
+ /** CustomEventTarget */
+ function CustomEventTarget() {
+ EventTarget.call(this);
+ }
+
+ CustomEventTarget.prototype = Object.create(EventTarget.prototype, {
+ constructor: {
+ value: CustomEventTarget,
+ configurable: true,
+ writable: true,
+ },
+ });
+
+ for (let i = 0; i < eventNames.length; ++i) {
+ defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);
+ }
+
+ return CustomEventTarget
+}
+
+/**
+ * EventTarget.
+ *
+ * - This is constructor if no arguments.
+ * - This is a function which returns a CustomEventTarget constructor if there are arguments.
+ *
+ * For example:
+ *
+ * class A extends EventTarget {}
+ * class B extends EventTarget("message") {}
+ * class C extends EventTarget("message", "error") {}
+ * class D extends EventTarget(["message", "error"]) {}
+ */
+function EventTarget() {
+ /*eslint-disable consistent-return */
+ if (this instanceof EventTarget) {
+ listenersMap.set(this, new Map());
+ return
+ }
+ if (arguments.length === 1 && Array.isArray(arguments[0])) {
+ return defineCustomEventTarget(arguments[0])
+ }
+ if (arguments.length > 0) {
+ const types = new Array(arguments.length);
+ for (let i = 0; i < arguments.length; ++i) {
+ types[i] = arguments[i];
+ }
+ return defineCustomEventTarget(types)
+ }
+ throw new TypeError("Cannot call a class as a function")
+ /*eslint-enable consistent-return */
+}
+
+// Should be enumerable, but class methods are not enumerable.
+EventTarget.prototype = {
+ /**
+ * Add a given listener to this event target.
+ * @param {string} eventName The event name to add.
+ * @param {Function} listener The listener to add.
+ * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.
+ * @returns {void}
+ */
+ addEventListener(eventName, listener, options) {
+ if (listener == null) {
+ return
+ }
+ if (typeof listener !== "function" && !isObject(listener)) {
+ throw new TypeError("'listener' should be a function or an object.")
+ }
+
+ const listeners = getListeners(this);
+ const optionsIsObj = isObject(options);
+ const capture = optionsIsObj
+ ? Boolean(options.capture)
+ : Boolean(options);
+ const listenerType = capture ? CAPTURE : BUBBLE;
+ const newNode = {
+ listener,
+ listenerType,
+ passive: optionsIsObj && Boolean(options.passive),
+ once: optionsIsObj && Boolean(options.once),
+ next: null,
+ };
+
+ // Set it as the first node if the first node is null.
+ let node = listeners.get(eventName);
+ if (node === undefined) {
+ listeners.set(eventName, newNode);
+ return
+ }
+
+ // Traverse to the tail while checking duplication..
+ let prev = null;
+ while (node != null) {
+ if (
+ node.listener === listener &&
+ node.listenerType === listenerType
+ ) {
+ // Should ignore duplication.
+ return
+ }
+ prev = node;
+ node = node.next;
+ }
+
+ // Add it.
+ prev.next = newNode;
+ },
+
+ /**
+ * Remove a given listener from this event target.
+ * @param {string} eventName The event name to remove.
+ * @param {Function} listener The listener to remove.
+ * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.
+ * @returns {void}
+ */
+ removeEventListener(eventName, listener, options) {
+ if (listener == null) {
+ return
+ }
+
+ const listeners = getListeners(this);
+ const capture = isObject(options)
+ ? Boolean(options.capture)
+ : Boolean(options);
+ const listenerType = capture ? CAPTURE : BUBBLE;
+
+ let prev = null;
+ let node = listeners.get(eventName);
+ while (node != null) {
+ if (
+ node.listener === listener &&
+ node.listenerType === listenerType
+ ) {
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ return
+ }
+
+ prev = node;
+ node = node.next;
+ }
+ },
+
+ /**
+ * Dispatch a given event.
+ * @param {Event|{type:string}} event The event to dispatch.
+ * @returns {boolean} `false` if canceled.
+ */
+ dispatchEvent(event) {
+ if (event == null || typeof event.type !== "string") {
+ throw new TypeError('"event.type" should be a string.')
+ }
+
+ // If listeners aren't registered, terminate.
+ const listeners = getListeners(this);
+ const eventName = event.type;
+ let node = listeners.get(eventName);
+ if (node == null) {
+ return true
+ }
+
+ // Since we cannot rewrite several properties, so wrap object.
+ const wrappedEvent = wrapEvent(this, event);
+
+ // This doesn't process capturing phase and bubbling phase.
+ // This isn't participating in a tree.
+ let prev = null;
+ while (node != null) {
+ // Remove this listener if it's once
+ if (node.once) {
+ if (prev !== null) {
+ prev.next = node.next;
+ } else if (node.next !== null) {
+ listeners.set(eventName, node.next);
+ } else {
+ listeners.delete(eventName);
+ }
+ } else {
+ prev = node;
+ }
+
+ // Call this listener
+ setPassiveListener(
+ wrappedEvent,
+ node.passive ? node.listener : null
+ );
+ if (typeof node.listener === "function") {
+ try {
+ node.listener.call(this, wrappedEvent);
+ } catch (err) {
+ if (
+ typeof console !== "undefined" &&
+ typeof console.error === "function"
+ ) {
+ console.error(err);
+ }
+ }
+ } else if (
+ node.listenerType !== ATTRIBUTE &&
+ typeof node.listener.handleEvent === "function"
+ ) {
+ node.listener.handleEvent(wrappedEvent);
+ }
+
+ // Break if `event.stopImmediatePropagation` was called.
+ if (isStopped(wrappedEvent)) {
+ break
+ }
+
+ node = node.next;
+ }
+ setPassiveListener(wrappedEvent, null);
+ setEventPhase(wrappedEvent, 0);
+ setCurrentTarget(wrappedEvent, null);
+
+ return !wrappedEvent.defaultPrevented
+ },
+};
+
+// `constructor` is not enumerable.
+Object.defineProperty(EventTarget.prototype, "constructor", {
+ value: EventTarget,
+ configurable: true,
+ writable: true,
+});
+
+// Ensure `eventTarget instanceof window.EventTarget` is `true`.
+if (
+ typeof window !== "undefined" &&
+ typeof window.EventTarget !== "undefined"
+) {
+ Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);
+}
+
+/**
+ * @author Toru Nagashima
+ * See LICENSE file in root directory for full license.
+ */
+
+/**
+ * The signal class.
+ * @see https://dom.spec.whatwg.org/#abortsignal
+ */
+class AbortSignal extends EventTarget {
+ /**
+ * AbortSignal cannot be constructed directly.
+ */
+ constructor() {
+ super();
+ throw new TypeError("AbortSignal cannot be constructed directly");
+ }
+ /**
+ * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.
+ */
+ get aborted() {
+ const aborted = abortedFlags.get(this);
+ if (typeof aborted !== "boolean") {
+ throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? "null" : typeof this}`);
+ }
+ return aborted;
+ }
+}
+defineEventAttribute(AbortSignal.prototype, "abort");
+/**
+ * Create an AbortSignal object.
+ */
+function createAbortSignal() {
+ const signal = Object.create(AbortSignal.prototype);
+ EventTarget.call(signal);
+ abortedFlags.set(signal, false);
+ return signal;
+}
+/**
+ * Abort a given signal.
+ */
+function abortSignal(signal) {
+ if (abortedFlags.get(signal) !== false) {
+ return;
+ }
+ abortedFlags.set(signal, true);
+ signal.dispatchEvent({ type: "abort" });
+}
+/**
+ * Aborted flag for each instances.
+ */
+const abortedFlags = new WeakMap();
+// Properties should be enumerable.
+Object.defineProperties(AbortSignal.prototype, {
+ aborted: { enumerable: true },
+});
+// `toString()` should return `"[object AbortSignal]"`
+if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") {
+ Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {
+ configurable: true,
+ value: "AbortSignal",
+ });
+}
+
+/**
+ * The AbortController.
+ * @see https://dom.spec.whatwg.org/#abortcontroller
+ */
+class AbortController {
+ /**
+ * Initialize this controller.
+ */
+ constructor() {
+ signals.set(this, createAbortSignal());
+ }
+ /**
+ * Returns the `AbortSignal` object associated with this object.
+ */
+ get signal() {
+ return getSignal(this);
+ }
+ /**
+ * Abort and signal to any observers that the associated activity is to be aborted.
+ */
+ abort() {
+ abortSignal(getSignal(this));
+ }
+}
+/**
+ * Associated signals.
+ */
+const signals = new WeakMap();
+/**
+ * Get the associated signal of a given controller.
+ */
+function getSignal(controller) {
+ const signal = signals.get(controller);
+ if (signal == null) {
+ throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? "null" : typeof controller}`);
+ }
+ return signal;
+}
+// Properties should be enumerable.
+Object.defineProperties(AbortController.prototype, {
+ signal: { enumerable: true },
+ abort: { enumerable: true },
+});
+if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol") {
+ Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {
+ configurable: true,
+ value: "AbortController",
+ });
+}
+
+// 'use strict'; is default when ESM
+
+var fetch = fetchCookie(fetch$1);
+
+export { AbortController, Headers, fetch };
diff --git a/packages/pouchdb-platform/lib/pouchdb-find.js b/packages/pouchdb-platform/lib/pouchdb-find.js
new file mode 100644
index 0000000000..332adcc50f
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-find.js
@@ -0,0 +1,1592 @@
+import { clone, nextTick, upsert, toPromise, isRemote } from 'pouchdb-utils';
+import { generateErrorFromResponse } from 'pouchdb-errors';
+import { Headers } from 'pouchdb-fetch';
+import { parseField, getFieldFromDoc, setFieldInDoc, matchesSelector, massageSelector, getValue, getKey, compare, filterInMemoryFields } from 'pouchdb-selector-core';
+import abstractMapReduce from 'pouchdb-abstract-mapreduce';
+import { collate } from 'pouchdb-collate';
+import { stringMd5 } from 'pouchdb-crypto';
+
+// we restucture the supplied JSON considerably, because the official
+// Mango API is very particular about a lot of this stuff, but we like
+// to be liberal with what we accept in order to prevent mental
+// breakdowns in our users
+function massageCreateIndexRequest(requestDef) {
+ requestDef = clone(requestDef);
+
+ if (!requestDef.index) {
+ requestDef.index = {};
+ }
+
+ ['type', 'name', 'ddoc'].forEach(function (key) {
+ if (requestDef.index[key]) {
+ requestDef[key] = requestDef.index[key];
+ delete requestDef.index[key];
+ }
+ });
+
+ if (requestDef.fields) {
+ requestDef.index.fields = requestDef.fields;
+ delete requestDef.fields;
+ }
+
+ if (!requestDef.type) {
+ requestDef.type = 'json';
+ }
+ return requestDef;
+}
+
+// throws if the user is using the wrong query field value type
+function checkFieldValueType(name, value, isHttp) {
+ var message = '';
+ var received = value;
+ var addReceived = true;
+ if ([ '$in', '$nin', '$or', '$and', '$mod', '$nor', '$all' ].indexOf(name) !== -1) {
+ if (!Array.isArray(value)) {
+ message = 'Query operator ' + name + ' must be an array.';
+
+ }
+ }
+
+ if ([ '$not', '$elemMatch', '$allMatch' ].indexOf(name) !== -1) {
+ if (!(!Array.isArray(value) && typeof value === 'object' && value !== null)) {
+ message = 'Query operator ' + name + ' must be an object.';
+ }
+ }
+
+ if (name === '$mod' && Array.isArray(value)) {
+ if (value.length !== 2) {
+ message = 'Query operator $mod must be in the format [divisor, remainder], ' +
+ 'where divisor and remainder are both integers.';
+ } else {
+ var divisor = value[0];
+ var mod = value[1];
+ if (divisor === 0) {
+ message = 'Query operator $mod\'s divisor cannot be 0, cannot divide by zero.';
+ addReceived = false;
+ }
+ if (typeof divisor !== 'number' || parseInt(divisor, 10) !== divisor) {
+ message = 'Query operator $mod\'s divisor is not an integer.';
+ received = divisor;
+ }
+ if (parseInt(mod, 10) !== mod) {
+ message = 'Query operator $mod\'s remainder is not an integer.';
+ received = mod;
+ }
+ }
+ }
+ if (name === '$exists') {
+ if (typeof value !== 'boolean') {
+ message = 'Query operator $exists must be a boolean.';
+ }
+ }
+
+ if (name === '$type') {
+ var allowed = [ 'null', 'boolean', 'number', 'string', 'array', 'object' ];
+ var allowedStr = '"' + allowed.slice(0, allowed.length - 1).join('", "') + '", or "' + allowed[allowed.length - 1] + '"';
+ if (typeof value !== 'string') {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ } else if (allowed.indexOf(value) == -1) {
+ message = 'Query operator $type must be a string. Supported values: ' + allowedStr + '.';
+ }
+ }
+
+ if (name === '$size') {
+ if (parseInt(value, 10) !== value) {
+ message = 'Query operator $size must be a integer.';
+ }
+ }
+
+ if (name === '$regex') {
+ if (typeof value !== 'string') {
+ if (isHttp) {
+ message = 'Query operator $regex must be a string.';
+ } else if (!(value instanceof RegExp)) {
+ message = 'Query operator $regex must be a string or an instance ' +
+ 'of a javascript regular expression.';
+ }
+ }
+ }
+
+ if (message) {
+ if (addReceived) {
+
+ var type = received === null
+ ? ' '
+ : Array.isArray(received)
+ ? ' array'
+ : ' ' + typeof received;
+ var receivedStr = typeof received === 'object' && received !== null
+ ? JSON.stringify(received, null, '\t')
+ : received;
+
+ message += ' Received' + type + ': ' + receivedStr;
+ }
+ throw new Error(message);
+ }
+}
+
+
+var requireValidation = [ '$all', '$allMatch', '$and', '$elemMatch', '$exists', '$in', '$mod', '$nin', '$nor', '$not', '$or', '$regex', '$size', '$type' ];
+
+var arrayTypeComparisonOperators = [ '$in', '$nin', '$mod', '$all'];
+
+var equalityOperators = [ '$eq', '$gt', '$gte', '$lt', '$lte' ];
+
+// recursively walks down the a query selector validating any operators
+function validateSelector(input, isHttp) {
+ if (Array.isArray(input)) {
+ for (var entry of input) {
+ if (typeof entry === 'object' && value !== null) {
+ validateSelector(entry, isHttp);
+ }
+ }
+ } else {
+ var fields = Object.keys(input);
+
+ for (var i = 0; i < fields.length; i++) {
+ var key = fields[i];
+ var value = input[key];
+
+ if (requireValidation.indexOf(key) !== -1) {
+ checkFieldValueType(key, value, isHttp);
+ }
+ if (equalityOperators.indexOf(key) !== -1) {
+ // skip, explicit comparison operators can be anything
+ continue;
+ }
+ if (arrayTypeComparisonOperators.indexOf(key) !== -1) {
+ // skip, their values are already valid
+ continue;
+ }
+ if (typeof value === 'object' && value !== null) {
+ validateSelector(value, isHttp);
+ }
+ }
+ }
+}
+
+function dbFetch(db, path, opts, callback) {
+ var status, ok;
+ opts.headers = new Headers({'Content-type': 'application/json'});
+ db.fetch(path, opts).then(function (response) {
+ status = response.status;
+ ok = response.ok;
+ return response.json();
+ }).then(function (json) {
+ if (!ok) {
+ json.status = status;
+ var err = generateErrorFromResponse(json);
+ callback(err);
+ } else {
+ callback(null, json);
+ }
+ }).catch(callback);
+}
+
+function createIndex$1(db, requestDef, callback) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ dbFetch(db, '_index', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function find$1(db, requestDef, callback) {
+ validateSelector(requestDef.selector, true);
+ dbFetch(db, '_find', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function explain$1(db, requestDef, callback) {
+ dbFetch(db, '_explain', {
+ method: 'POST',
+ body: JSON.stringify(requestDef)
+ }, callback);
+}
+
+function getIndexes$1(db, callback) {
+ dbFetch(db, '_index', {
+ method: 'GET'
+ }, callback);
+}
+
+function deleteIndex$1(db, indexDef, callback) {
+
+
+ var ddoc = indexDef.ddoc;
+ var type = indexDef.type || 'json';
+ var name = indexDef.name;
+
+ if (!ddoc) {
+ return callback(new Error('you must provide an index\'s ddoc'));
+ }
+
+ if (!name) {
+ return callback(new Error('you must provide an index\'s name'));
+ }
+
+ var url = '_index/' + [ddoc, type, name].map(encodeURIComponent).join('/');
+
+ dbFetch(db, url, {method: 'DELETE'}, callback);
+}
+
+function callbackify(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ promisedCallback(promise, cb);
+ return promise;
+ };
+}
+
+function promisedCallback(promise, callback) {
+ promise.then(function (res) {
+ nextTick(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick(function () {
+ callback(reason);
+ });
+ });
+ return promise;
+}
+
+var flatten = function (...args) {
+ var res = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ var subArr = args[i];
+ if (Array.isArray(subArr)) {
+ res = res.concat(flatten.apply(null, subArr));
+ } else {
+ res.push(subArr);
+ }
+ }
+ return res;
+};
+
+function mergeObjects(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res = Object.assign(res, arr[i]);
+ }
+ return res;
+}
+
+// Selects a list of fields defined in dot notation from one doc
+// and copies them to a new doc. Like underscore _.pick but supports nesting.
+function pick(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var parsedField = parseField(arr[i]);
+ var value = getFieldFromDoc(obj, parsedField);
+ if (typeof value !== 'undefined') {
+ setFieldInDoc(res, parsedField, value);
+ }
+ }
+ return res;
+}
+
+// e.g. ['a'], ['a', 'b'] is true, but ['b'], ['a', 'b'] is false
+function oneArrayIsSubArrayOfOther(left, right) {
+
+ for (var i = 0, len = Math.min(left.length, right.length); i < len; i++) {
+ if (left[i] !== right[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+// e.g.['a', 'b', 'c'], ['a', 'b'] is false
+function oneArrayIsStrictSubArrayOfOther(left, right) {
+
+ if (left.length > right.length) {
+ return false;
+ }
+
+ return oneArrayIsSubArrayOfOther(left, right);
+}
+
+// same as above, but treat the left array as an unordered set
+// e.g. ['b', 'a'], ['a', 'b', 'c'] is true, but ['c'], ['a', 'b', 'c'] is false
+function oneSetIsSubArrayOfOther(left, right) {
+ left = left.slice();
+ for (var i = 0, len = right.length; i < len; i++) {
+ var field = right[i];
+ if (!left.length) {
+ break;
+ }
+ var leftIdx = left.indexOf(field);
+ if (leftIdx === -1) {
+ return false;
+ } else {
+ left.splice(leftIdx, 1);
+ }
+ }
+ return true;
+}
+
+function arrayToObject(arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ res[arr[i]] = true;
+ }
+ return res;
+}
+
+function max(arr, fun) {
+ var max = null;
+ var maxScore = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var element = arr[i];
+ var score = fun(element);
+ if (score > maxScore) {
+ maxScore = score;
+ max = element;
+ }
+ }
+ return max;
+}
+
+function arrayEquals(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+ for (var i = 0, len = arr1.length; i < len; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function uniq(arr) {
+ var obj = {};
+ for (var i = 0; i < arr.length; i++) {
+ obj['$' + arr[i]] = true;
+ }
+ return Object.keys(obj).map(function (key) {
+ return key.substring(1);
+ });
+}
+
+//
+// One thing about these mappers:
+//
+// Per the advice of John-David Dalton (http://youtu.be/NthmeLEhDDM),
+// what you want to do in this case is optimize for the smallest possible
+// function, since that's the thing that gets run over and over again.
+//
+// This code would be a lot simpler if all the if/elses were inside
+// the function, but it would also be a lot less performant.
+//
+
+
+function createDeepMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, iLen = fields.length; i < iLen; i++) {
+ var parsedField = parseField(fields[i]);
+ var value = doc;
+ for (var j = 0, jLen = parsedField.length; j < jLen; j++) {
+ var key = parsedField[j];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // don't emit
+ }
+ }
+ toEmit.push(value);
+ }
+ emit(toEmit);
+ };
+}
+
+function createDeepSingleMapper(field, emit, selector) {
+ var parsedField = parseField(field);
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (typeof value === 'undefined') {
+ return; // do nothing
+ }
+ }
+ emit(value);
+ };
+}
+
+function createShallowSingleMapper(field, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ emit(doc[field]);
+ };
+}
+
+function createShallowMultiMapper(fields, emit, selector) {
+ return function (doc) {
+ if (selector && !matchesSelector(doc, selector)) { return; }
+ var toEmit = [];
+ for (var i = 0, len = fields.length; i < len; i++) {
+ toEmit.push(doc[fields[i]]);
+ }
+ emit(toEmit);
+ };
+}
+
+function checkShallow(fields) {
+ for (var i = 0, len = fields.length; i < len; i++) {
+ var field = fields[i];
+ if (field.indexOf('.') !== -1) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function createMapper(fields, emit, selector) {
+ var isShallow = checkShallow(fields);
+ var isSingle = fields.length === 1;
+
+ // notice we try to optimize for the most common case,
+ // i.e. single shallow indexes
+ if (isShallow) {
+ if (isSingle) {
+ return createShallowSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createShallowMultiMapper(fields, emit, selector);
+ }
+ } else { // deep
+ if (isSingle) {
+ return createDeepSingleMapper(fields[0], emit, selector);
+ } else { // multi
+ return createDeepMultiMapper(fields, emit, selector);
+ }
+ }
+}
+
+function mapper(mapFunDef, emit) {
+ // mapFunDef is a list of fields
+
+ const fields = Object.keys(mapFunDef.fields);
+ const partialSelector = mapFunDef.partial_filter_selector;
+
+ return createMapper(fields, emit, partialSelector);
+}
+
+/* istanbul ignore next */
+function reducer(/*reduceFunDef*/) {
+ throw new Error('reduce not supported');
+}
+
+function ddocValidator(ddoc, viewName) {
+ var view = ddoc.views[viewName];
+ // This doesn't actually need to be here apparently, but
+ // I feel safer keeping it.
+ /* istanbul ignore if */
+ if (!view.map || !view.map.fields) {
+ throw new Error('ddoc ' + ddoc._id +' with view ' + viewName +
+ ' doesn\'t have map.fields defined. ' +
+ 'maybe it wasn\'t created by this plugin?');
+ }
+}
+
+var abstractMapper = abstractMapReduce(
+ /* localDocName */ 'indexes',
+ mapper,
+ reducer,
+ ddocValidator
+);
+
+function abstractMapper$1 (db) {
+ if (db._customFindAbstractMapper) {
+ return {
+ // Calls the _customFindAbstractMapper, but with a third argument:
+ // the standard findAbstractMapper query/viewCleanup.
+ // This allows the indexeddb adapter to support partial_filter_selector.
+ query: function addQueryFallback(signature, opts) {
+ var fallback = abstractMapper.query.bind(this);
+ return db._customFindAbstractMapper.query.call(this, signature, opts, fallback);
+ },
+ viewCleanup: function addViewCleanupFallback() {
+ var fallback = abstractMapper.viewCleanup.bind(this);
+ return db._customFindAbstractMapper.viewCleanup.call(this, fallback);
+ }
+ };
+ }
+ return abstractMapper;
+}
+
+// normalize the "sort" value
+function massageSort(sort) {
+ if (!Array.isArray(sort)) {
+ throw new Error('invalid sort json - should be an array');
+ }
+ return sort.map(function (sorting) {
+ if (typeof sorting === 'string') {
+ var obj = {};
+ obj[sorting] = 'asc';
+ return obj;
+ } else {
+ return sorting;
+ }
+ });
+}
+
+function massageUseIndex(useIndex) {
+ var cleanedUseIndex = [];
+ if (typeof useIndex === 'string') {
+ cleanedUseIndex.push(useIndex);
+ } else {
+ cleanedUseIndex = useIndex;
+ }
+
+ return cleanedUseIndex.map(function (name) {
+ return name.replace('_design/', '');
+ });
+}
+
+function massageIndexDef(indexDef) {
+ indexDef.fields = indexDef.fields.map(function (field) {
+ if (typeof field === 'string') {
+ var obj = {};
+ obj[field] = 'asc';
+ return obj;
+ }
+ return field;
+ });
+ if (indexDef.partial_filter_selector) {
+ indexDef.partial_filter_selector = massageSelector(
+ indexDef.partial_filter_selector
+ );
+ }
+ return indexDef;
+}
+
+function getKeyFromDoc(doc, index) {
+ var res = [];
+ for (var i = 0; i < index.def.fields.length; i++) {
+ var field = getKey(index.def.fields[i]);
+ res.push(getFieldFromDoc(doc, parseField(field)));
+ }
+ return res;
+}
+
+// have to do this manually because REASONS. I don't know why
+// CouchDB didn't implement inclusive_start
+function filterInclusiveStart(rows, targetValue, index) {
+ var indexFields = index.def.fields;
+ for (var i = 0, len = rows.length; i < len; i++) {
+ var row = rows[i];
+
+ // shave off any docs at the beginning that are <= the
+ // target value
+
+ var docKey = getKeyFromDoc(row.doc, index);
+ if (indexFields.length === 1) {
+ docKey = docKey[0]; // only one field, not multi-field
+ } else { // more than one field in index
+ // in the case where e.g. the user is searching {$gt: {a: 1}}
+ // but the index is [a, b], then we need to shorten the doc key
+ while (docKey.length > targetValue.length) {
+ docKey.pop();
+ }
+ }
+ //ABS as we just looking for values that don't match
+ if (Math.abs(collate(docKey, targetValue)) > 0) {
+ // no need to filter any further; we're past the key
+ break;
+ }
+ }
+ return i > 0 ? rows.slice(i) : rows;
+}
+
+function reverseOptions(opts) {
+ var newOpts = clone(opts);
+ delete newOpts.startkey;
+ delete newOpts.endkey;
+ delete newOpts.inclusive_start;
+ delete newOpts.inclusive_end;
+
+ if ('endkey' in opts) {
+ newOpts.startkey = opts.endkey;
+ }
+ if ('startkey' in opts) {
+ newOpts.endkey = opts.startkey;
+ }
+ if ('inclusive_start' in opts) {
+ newOpts.inclusive_end = opts.inclusive_start;
+ }
+ if ('inclusive_end' in opts) {
+ newOpts.inclusive_start = opts.inclusive_end;
+ }
+ return newOpts;
+}
+
+function validateIndex(index) {
+ var ascFields = index.fields.filter(function (field) {
+ return getValue(field) === 'asc';
+ });
+ if (ascFields.length !== 0 && ascFields.length !== index.fields.length) {
+ throw new Error('unsupported mixed sorting');
+ }
+}
+
+function validateSort(requestDef, index) {
+ if (index.defaultUsed && requestDef.sort) {
+ var noneIdSorts = requestDef.sort.filter(function (sortItem) {
+ return Object.keys(sortItem)[0] !== '_id';
+ }).map(function (sortItem) {
+ return Object.keys(sortItem)[0];
+ });
+
+ if (noneIdSorts.length > 0) {
+ throw new Error('Cannot sort on field(s) "' + noneIdSorts.join(',') +
+ '" when using the default index');
+ }
+ }
+
+ if (index.defaultUsed) {
+ return;
+ }
+}
+
+function validateFindRequest(requestDef) {
+ if (typeof requestDef.selector !== 'object') {
+ throw new Error('you must provide a selector when you find()');
+ }
+
+ /*var selectors = requestDef.selector['$and'] || [requestDef.selector];
+ for (var i = 0; i < selectors.length; i++) {
+ var selector = selectors[i];
+ var keys = Object.keys(selector);
+ if (keys.length === 0) {
+ throw new Error('invalid empty selector');
+ }
+ //var selection = selector[keys[0]];
+ /*if (Object.keys(selection).length !== 1) {
+ throw new Error('invalid selector: ' + JSON.stringify(selection) +
+ ' - it must have exactly one key/value');
+ }
+ }*/
+}
+
+// determine the maximum number of fields
+// we're going to need to query, e.g. if the user
+// has selection ['a'] and sorting ['a', 'b'], then we
+// need to use the longer of the two: ['a', 'b']
+function getUserFields(selector, sort) {
+ var selectorFields = Object.keys(selector);
+ var sortFields = sort? sort.map(getKey) : [];
+ var userFields;
+ if (selectorFields.length >= sortFields.length) {
+ userFields = selectorFields;
+ } else {
+ userFields = sortFields;
+ }
+
+ if (sortFields.length === 0) {
+ return {
+ fields: userFields
+ };
+ }
+
+ // sort according to the user's preferred sorting
+ userFields = userFields.sort(function (left, right) {
+ var leftIdx = sortFields.indexOf(left);
+ if (leftIdx === -1) {
+ leftIdx = Number.MAX_VALUE;
+ }
+ var rightIdx = sortFields.indexOf(right);
+ if (rightIdx === -1) {
+ rightIdx = Number.MAX_VALUE;
+ }
+ return leftIdx < rightIdx ? -1 : leftIdx > rightIdx ? 1 : 0;
+ });
+
+ return {
+ fields: userFields,
+ sortOrder: sort.map(getKey)
+ };
+}
+
+async function createIndex(db, requestDef) {
+ requestDef = massageCreateIndexRequest(requestDef);
+ var originalIndexDef = clone(requestDef.index);
+ requestDef.index = massageIndexDef(requestDef.index);
+
+ validateIndex(requestDef.index);
+
+ // calculating md5 is expensive - memoize and only
+ // run if required
+ var md5 = await stringMd5(JSON.stringify(requestDef));
+
+ var viewName = requestDef.name || ('idx-' + md5);
+
+ var ddocName = requestDef.ddoc || ('idx-' + md5);
+ var ddocId = '_design/' + ddocName;
+
+ var hasInvalidLanguage = false;
+ var viewExists = false;
+
+ function updateDdoc(doc) {
+ if (doc._rev && doc.language !== 'query') {
+ hasInvalidLanguage = true;
+ }
+ doc.language = 'query';
+ doc.views = doc.views || {};
+
+ viewExists = !!doc.views[viewName];
+
+ if (viewExists) {
+ return false;
+ }
+
+ doc.views[viewName] = {
+ map: {
+ fields: mergeObjects(requestDef.index.fields),
+ partial_filter_selector: requestDef.index.partial_filter_selector
+ },
+ reduce: '_count',
+ options: {
+ def: originalIndexDef
+ }
+ };
+
+ return doc;
+ }
+
+ db.constructor.emit('debug', ['find', 'creating index', ddocId]);
+
+ return upsert(db, ddocId, updateDdoc).then(function () {
+ if (hasInvalidLanguage) {
+ throw new Error('invalid language for ddoc with id "' +
+ ddocId +
+ '" (should be "query")');
+ }
+ }).then(function () {
+ // kick off a build
+ // TODO: abstract-pouchdb-mapreduce should support auto-updating
+ // TODO: should also use update_after, but pouchdb/pouchdb#3415 blocks me
+ var signature = ddocName + '/' + viewName;
+ return abstractMapper$1(db).query.call(db, signature, {
+ limit: 0,
+ reduce: false
+ }).then(function () {
+ return {
+ id: ddocId,
+ name: viewName,
+ result: viewExists ? 'exists' : 'created'
+ };
+ });
+ });
+}
+
+function getIndexes(db) {
+ // just search through all the design docs and filter in-memory.
+ // hopefully there aren't that many ddocs.
+ return db.allDocs({
+ startkey: '_design/',
+ endkey: '_design/\uffff',
+ include_docs: true
+ }).then(function (allDocsRes) {
+ var res = {
+ indexes: [{
+ ddoc: null,
+ name: '_all_docs',
+ type: 'special',
+ def: {
+ fields: [{_id: 'asc'}]
+ }
+ }]
+ };
+
+ res.indexes = flatten(res.indexes, allDocsRes.rows.filter(function (row) {
+ return row.doc.language === 'query';
+ }).map(function (row) {
+ var viewNames = row.doc.views !== undefined ? Object.keys(row.doc.views) : [];
+
+ return viewNames.map(function (viewName) {
+ var view = row.doc.views[viewName];
+ return {
+ ddoc: row.id,
+ name: viewName,
+ type: 'json',
+ def: massageIndexDef(view.options.def)
+ };
+ });
+ }));
+
+ // these are sorted by view name for some reason
+ res.indexes.sort(function (left, right) {
+ return compare(left.name, right.name);
+ });
+ res.total_rows = res.indexes.length;
+ return res;
+ });
+}
+
+// couchdb lowest collation value
+var COLLATE_LO = null;
+
+// couchdb highest collation value (TODO: well not really, but close enough amirite)
+var COLLATE_HI = {"\uffff": {}};
+
+const SHORT_CIRCUIT_QUERY = {
+ queryOpts: { limit: 0, startkey: COLLATE_HI, endkey: COLLATE_LO },
+ inMemoryFields: [],
+};
+
+// couchdb second-lowest collation value
+
+function checkFieldInIndex(index, field) {
+ var indexFields = index.def.fields.map(getKey);
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (field === indexField) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// so when you do e.g. $eq/$eq, we can do it entirely in the database.
+// but when you do e.g. $gt/$eq, the first part can be done
+// in the database, but the second part has to be done in-memory,
+// because $gt has forced us to lose precision.
+// so that's what this determines
+function userOperatorLosesPrecision(selector, field) {
+ var matcher = selector[field];
+ var userOperator = getKey(matcher);
+
+ return userOperator !== '$eq';
+}
+
+// sort the user fields by their position in the index,
+// if they're in the index
+function sortFieldsByIndex(userFields, index) {
+ var indexFields = index.def.fields.map(getKey);
+
+ return userFields.slice().sort(function (a, b) {
+ var aIdx = indexFields.indexOf(a);
+ var bIdx = indexFields.indexOf(b);
+ if (aIdx === -1) {
+ aIdx = Number.MAX_VALUE;
+ }
+ if (bIdx === -1) {
+ bIdx = Number.MAX_VALUE;
+ }
+ return compare(aIdx, bIdx);
+ });
+}
+
+// first pass to try to find fields that will need to be sorted in-memory
+function getBasicInMemoryFields(index, selector, userFields) {
+
+ userFields = sortFieldsByIndex(userFields, index);
+
+ // check if any of the user selectors lose precision
+ var needToFilterInMemory = false;
+ for (var i = 0, len = userFields.length; i < len; i++) {
+ var field = userFields[i];
+ if (needToFilterInMemory || !checkFieldInIndex(index, field)) {
+ return userFields.slice(i);
+ }
+ if (i < len - 1 && userOperatorLosesPrecision(selector, field)) {
+ needToFilterInMemory = true;
+ }
+ }
+ return [];
+}
+
+function getInMemoryFieldsFromNe(selector) {
+ var fields = [];
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ Object.keys(matcher).forEach(function (operator) {
+ if (operator === '$ne') {
+ fields.push(field);
+ }
+ });
+ });
+ return fields;
+}
+
+function getInMemoryFields(coreInMemoryFields, index, selector, userFields) {
+ var result = flatten(
+ // in-memory fields reported as necessary by the query planner
+ coreInMemoryFields,
+ // combine with another pass that checks for any we may have missed
+ getBasicInMemoryFields(index, selector, userFields),
+ // combine with another pass that checks for $ne's
+ getInMemoryFieldsFromNe(selector)
+ );
+
+ return sortFieldsByIndex(uniq(result), index);
+}
+
+// check that at least one field in the user's query is represented
+// in the index. order matters in the case of sorts
+function checkIndexFieldsMatch(indexFields, sortOrder, fields) {
+ if (sortOrder) {
+ // array has to be a strict subarray of index array. furthermore,
+ // the sortOrder fields need to all be represented in the index
+ var sortMatches = oneArrayIsStrictSubArrayOfOther(sortOrder, indexFields);
+ var selectorMatches = oneArrayIsSubArrayOfOther(fields, indexFields);
+
+ return sortMatches && selectorMatches;
+ }
+
+ // all of the user's specified fields still need to be
+ // on the left side of the index array, although the order
+ // doesn't matter
+ return oneSetIsSubArrayOfOther(fields, indexFields);
+}
+
+var logicalMatchers = ['$eq', '$gt', '$gte', '$lt', '$lte'];
+function isNonLogicalMatcher(matcher) {
+ return logicalMatchers.indexOf(matcher) === -1;
+}
+
+// check all the index fields for usages of '$ne'
+// e.g. if the user queries {foo: {$ne: 'foo'}, bar: {$eq: 'bar'}},
+// then we can neither use an index on ['foo'] nor an index on
+// ['foo', 'bar'], but we can use an index on ['bar'] or ['bar', 'foo']
+function checkFieldsLogicallySound(indexFields, selector) {
+ var firstField = indexFields[0];
+ var matcher = selector[firstField];
+
+ if (typeof matcher === 'undefined') {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ var isInvalidNe = Object.keys(matcher).length === 1 &&
+ getKey(matcher) === '$ne';
+
+ return !isInvalidNe;
+}
+
+function checkIndexMatches(index, sortOrder, fields, selector) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var fieldsMatch = checkIndexFieldsMatch(indexFields, sortOrder, fields);
+
+ if (!fieldsMatch) {
+ return false;
+ }
+
+ return checkFieldsLogicallySound(indexFields, selector);
+}
+
+//
+// the algorithm is very simple:
+// take all the fields the user supplies, and if those fields
+// are a strict subset of the fields in some index,
+// then use that index
+//
+//
+function findMatchingIndexes(selector, userFields, sortOrder, indexes) {
+ return indexes.filter(function (index) {
+ return checkIndexMatches(index, sortOrder, userFields, selector);
+ });
+}
+
+// find the best index, i.e. the one that matches the most fields
+// in the user's query
+function findBestMatchingIndex(selector, userFields, sortOrder, indexes, useIndex) {
+
+ var matchingIndexes = findMatchingIndexes(selector, userFields, sortOrder, indexes);
+
+ if (matchingIndexes.length === 0) {
+ if (useIndex) {
+ throw {
+ error: "no_usable_index",
+ message: "There is no index available for this selector."
+ };
+ }
+ //return `all_docs` as a default index;
+ //I'm assuming that _all_docs is always first
+ var defaultIndex = indexes[0];
+ defaultIndex.defaultUsed = true;
+ return defaultIndex;
+ }
+ if (matchingIndexes.length === 1 && !useIndex) {
+ return matchingIndexes[0];
+ }
+
+ var userFieldsMap = arrayToObject(userFields);
+
+ function scoreIndex(index) {
+ var indexFields = index.def.fields.map(getKey);
+ var score = 0;
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+ if (userFieldsMap[indexField]) {
+ score++;
+ }
+ }
+ return score;
+ }
+
+ if (useIndex) {
+ var useIndexDdoc = '_design/' + useIndex[0];
+ var useIndexName = useIndex.length === 2 ? useIndex[1] : false;
+ var index = matchingIndexes.find(function (index) {
+ if (useIndexName && index.ddoc === useIndexDdoc && useIndexName === index.name) {
+ return true;
+ }
+
+ if (index.ddoc === useIndexDdoc) {
+ /* istanbul ignore next */
+ return true;
+ }
+
+ return false;
+ });
+
+ if (!index) {
+ throw {
+ error: "unknown_error",
+ message: "Could not find that index or could not use that index for the query"
+ };
+ }
+ return index;
+ }
+
+ return max(matchingIndexes, scoreIndex);
+}
+
+function getSingleFieldQueryOptsFor(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {key: userValue};
+ case '$lte':
+ return {endkey: userValue};
+ case '$gte':
+ return {startkey: userValue};
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+
+ return {
+ startkey: COLLATE_LO
+ };
+}
+
+function getSingleFieldCoreQueryPlan(selector, index) {
+ var field = getKey(index.def.fields[0]);
+ //ignoring this because the test to exercise the branch is skipped at the moment
+ /* istanbul ignore next */
+ var matcher = selector[field] || {};
+ var inMemoryFields = [];
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts;
+
+ userOperators.forEach(function (userOperator) {
+
+ if (isNonLogicalMatcher(userOperator)) {
+ inMemoryFields.push(field);
+ }
+
+ var userValue = matcher[userOperator];
+
+ var newQueryOpts = getSingleFieldQueryOptsFor(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newQueryOpts]);
+ } else {
+ combinedOpts = newQueryOpts;
+ }
+ });
+
+ return {
+ queryOpts: combinedOpts,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function getMultiFieldCoreQueryPlan(userOperator, userValue) {
+ switch (userOperator) {
+ case '$eq':
+ return {
+ startkey: userValue,
+ endkey: userValue
+ };
+ case '$lte':
+ return {
+ endkey: userValue
+ };
+ case '$gte':
+ return {
+ startkey: userValue
+ };
+ case '$lt':
+ return {
+ endkey: userValue,
+ inclusive_end: false
+ };
+ case '$gt':
+ return {
+ startkey: userValue,
+ inclusive_start: false
+ };
+ }
+}
+
+function getMultiFieldQueryOpts(selector, index) {
+
+ var indexFields = index.def.fields.map(getKey);
+
+ var inMemoryFields = [];
+ var startkey = [];
+ var endkey = [];
+ var inclusiveStart;
+ var inclusiveEnd;
+
+
+ function finish(i) {
+
+ if (inclusiveStart !== false) {
+ startkey.push(COLLATE_LO);
+ }
+ if (inclusiveEnd !== false) {
+ endkey.push(COLLATE_HI);
+ }
+ // keep track of the fields where we lost specificity,
+ // and therefore need to filter in-memory
+ inMemoryFields = indexFields.slice(i);
+ }
+
+ for (var i = 0, len = indexFields.length; i < len; i++) {
+ var indexField = indexFields[i];
+
+ var matcher = selector[indexField];
+
+ if (!matcher || !Object.keys(matcher).length) { // fewer fields in user query than in index
+ finish(i);
+ break;
+ } else if (Object.keys(matcher).some(isNonLogicalMatcher)) { // non-logical are ignored
+ finish(i);
+ break;
+ } else if (i > 0) {
+ var usingGtlt = (
+ '$gt' in matcher || '$gte' in matcher ||
+ '$lt' in matcher || '$lte' in matcher);
+ var previousKeys = Object.keys(selector[indexFields[i - 1]]);
+ var previousWasEq = arrayEquals(previousKeys, ['$eq']);
+ var previousWasSame = arrayEquals(previousKeys, Object.keys(matcher));
+ var gtltLostSpecificity = usingGtlt && !previousWasEq && !previousWasSame;
+ if (gtltLostSpecificity) {
+ finish(i);
+ break;
+ }
+ }
+
+ var userOperators = Object.keys(matcher);
+
+ var combinedOpts = null;
+
+ for (var j = 0; j < userOperators.length; j++) {
+ var userOperator = userOperators[j];
+ var userValue = matcher[userOperator];
+
+ var newOpts = getMultiFieldCoreQueryPlan(userOperator, userValue);
+
+ if (combinedOpts) {
+ combinedOpts = mergeObjects([combinedOpts, newOpts]);
+ } else {
+ combinedOpts = newOpts;
+ }
+ }
+
+ startkey.push('startkey' in combinedOpts ? combinedOpts.startkey : COLLATE_LO);
+ endkey.push('endkey' in combinedOpts ? combinedOpts.endkey : COLLATE_HI);
+ if ('inclusive_start' in combinedOpts) {
+ inclusiveStart = combinedOpts.inclusive_start;
+ }
+ if ('inclusive_end' in combinedOpts) {
+ inclusiveEnd = combinedOpts.inclusive_end;
+ }
+ }
+
+ var res = {
+ startkey: startkey,
+ endkey: endkey
+ };
+
+ if (typeof inclusiveStart !== 'undefined') {
+ res.inclusive_start = inclusiveStart;
+ }
+ if (typeof inclusiveEnd !== 'undefined') {
+ res.inclusive_end = inclusiveEnd;
+ }
+
+ return {
+ queryOpts: res,
+ inMemoryFields: inMemoryFields
+ };
+}
+
+function shouldShortCircuit(selector) {
+ // We have a field to select from, but not a valid value
+ // this should result in a short circuited query
+ // just like the http adapter (couchdb) and mongodb
+ // see tests for issue #7810
+
+ // @todo Use 'Object.values' when Node.js v6 support is dropped.
+ const values = Object.keys(selector).map(function (key) {
+ return selector[key];
+ });
+ return values.some(function (val) {
+ return typeof val === 'object' && Object.keys(val).length === 0;
+});
+}
+
+function getDefaultQueryPlan(selector) {
+ //using default index, so all fields need to be done in memory
+ return {
+ queryOpts: {startkey: null},
+ inMemoryFields: [Object.keys(selector)]
+ };
+}
+
+function getCoreQueryPlan(selector, index) {
+ if (index.defaultUsed) {
+ return getDefaultQueryPlan(selector);
+ }
+
+ if (index.def.fields.length === 1) {
+ // one field in index, so the value was indexed as a singleton
+ return getSingleFieldCoreQueryPlan(selector, index);
+ }
+ // else index has multiple fields, so the value was indexed as an array
+ return getMultiFieldQueryOpts(selector, index);
+}
+
+function planQuery(request, indexes) {
+
+ var selector = request.selector;
+ var sort = request.sort;
+
+ if (shouldShortCircuit(selector)) {
+ return Object.assign({}, SHORT_CIRCUIT_QUERY, { index: indexes[0] });
+ }
+
+ var userFieldsRes = getUserFields(selector, sort);
+
+ var userFields = userFieldsRes.fields;
+ var sortOrder = userFieldsRes.sortOrder;
+ var index = findBestMatchingIndex(selector, userFields, sortOrder, indexes, request.use_index);
+
+ var coreQueryPlan = getCoreQueryPlan(selector, index);
+ var queryOpts = coreQueryPlan.queryOpts;
+ var coreInMemoryFields = coreQueryPlan.inMemoryFields;
+
+ var inMemoryFields = getInMemoryFields(coreInMemoryFields, index, selector, userFields);
+
+ var res = {
+ queryOpts: queryOpts,
+ index: index,
+ inMemoryFields: inMemoryFields
+ };
+ return res;
+}
+
+function indexToSignature(index) {
+ // remove '_design/'
+ return index.ddoc.substring(8) + '/' + index.name;
+}
+
+function doAllDocs(db, originalOpts) {
+ var opts = clone(originalOpts);
+
+ // CouchDB responds in weird ways when you provide a non-string to _id;
+ // we mimic the behavior for consistency. See issue66 tests for details.
+ if (opts.descending) {
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.endkey = '';
+ }
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.limit = 0;
+ }
+ } else {
+ if ('startkey' in opts && typeof opts.startkey !== 'string') {
+ opts.startkey = '';
+ }
+ if ('endkey' in opts && typeof opts.endkey !== 'string') {
+ opts.limit = 0;
+ }
+ }
+ if ('key' in opts && typeof opts.key !== 'string') {
+ opts.limit = 0;
+ }
+
+ if (opts.limit > 0 && opts.indexes_count) {
+ // brute force and quite naive impl.
+ // amp up the limit with the amount of (indexes) design docs
+ // or is this too naive? How about skip?
+ opts.original_limit = opts.limit;
+ opts.limit += opts.indexes_count;
+ }
+
+ return db.allDocs(opts)
+ .then(function (res) {
+ // filter out any design docs that _all_docs might return
+ res.rows = res.rows.filter(function (row) {
+ return !/^_design\//.test(row.id);
+ });
+ // put back original limit
+ if (opts.original_limit) {
+ opts.limit = opts.original_limit;
+ }
+ // enforce the rows to respect the given limit
+ res.rows = res.rows.slice(0, opts.limit);
+ return res;
+ });
+}
+
+function find(db, requestDef, explain) {
+ if (requestDef.selector) {
+ // must be validated before massaging
+ validateSelector(requestDef.selector, false);
+ requestDef.selector = massageSelector(requestDef.selector);
+ }
+
+ if (requestDef.sort) {
+ requestDef.sort = massageSort(requestDef.sort);
+ }
+
+ if (requestDef.use_index) {
+ requestDef.use_index = massageUseIndex(requestDef.use_index);
+ }
+
+ validateFindRequest(requestDef);
+
+ return getIndexes(db).then(function (getIndexesRes) {
+
+ db.constructor.emit('debug', ['find', 'planning query', requestDef]);
+ var queryPlan = planQuery(requestDef, getIndexesRes.indexes);
+ db.constructor.emit('debug', ['find', 'query plan', queryPlan]);
+
+ var indexToUse = queryPlan.index;
+
+ validateSort(requestDef, indexToUse);
+
+ var opts = Object.assign({
+ include_docs: true,
+ reduce: false,
+ // Add amount of index for doAllDocs to use (related to issue #7810)
+ indexes_count: getIndexesRes.total_rows,
+ }, queryPlan.queryOpts);
+
+ if ('startkey' in opts && 'endkey' in opts &&
+ collate(opts.startkey, opts.endkey) > 0) {
+ // can't possibly return any results, startkey > endkey
+ /* istanbul ignore next */
+ return {docs: []};
+ }
+
+ var isDescending = requestDef.sort &&
+ typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc';
+
+ if (isDescending) {
+ // either all descending or all ascending
+ opts.descending = true;
+ opts = reverseOptions(opts);
+ }
+
+ if (!queryPlan.inMemoryFields.length) {
+ // no in-memory filtering necessary, so we can let the
+ // database do the limit/skip for us
+ if ('limit' in requestDef) {
+ opts.limit = requestDef.limit;
+ }
+ if ('skip' in requestDef) {
+ opts.skip = requestDef.skip;
+ }
+ }
+
+ if (explain) {
+ return Promise.resolve(queryPlan, opts);
+ }
+
+ return Promise.resolve().then(function () {
+ if (indexToUse.name === '_all_docs') {
+ return doAllDocs(db, opts);
+ } else {
+ var signature = indexToSignature(indexToUse);
+ return abstractMapper$1(db).query.call(db, signature, opts);
+ }
+ }).then(function (res) {
+ if (opts.inclusive_start === false) {
+ // may have to manually filter the first one,
+ // since couchdb has no true inclusive_start option
+ res.rows = filterInclusiveStart(res.rows, opts.startkey, indexToUse);
+ }
+
+ if (queryPlan.inMemoryFields.length) {
+ // need to filter some stuff in-memory
+ res.rows = filterInMemoryFields(res.rows, requestDef, queryPlan.inMemoryFields);
+ }
+
+ var resp = {
+ docs: res.rows.map(function (row) {
+ var doc = row.doc;
+ if (requestDef.fields) {
+ return pick(doc, requestDef.fields);
+ }
+ return doc;
+ })
+ };
+
+ if (indexToUse.defaultUsed) {
+ resp.warning = 'No matching index found, create an index to optimize query time.';
+ }
+
+ return resp;
+ });
+ });
+}
+
+function explain(db, requestDef) {
+ return find(db, requestDef, true)
+ .then(function (queryPlan) {
+ return {
+ dbname: db.name,
+ index: queryPlan.index,
+ selector: requestDef.selector,
+ range: {
+ start_key: queryPlan.queryOpts.startkey,
+ end_key: queryPlan.queryOpts.endkey,
+ },
+ opts: {
+ use_index: requestDef.use_index || [],
+ bookmark: "nil", //hardcoded to match CouchDB since its not supported,
+ limit: requestDef.limit,
+ skip: requestDef.skip,
+ sort: requestDef.sort || {},
+ fields: requestDef.fields,
+ conflicts: false, //hardcoded to match CouchDB since its not supported,
+ r: [49], // hardcoded to match CouchDB since its not support
+ },
+ limit: requestDef.limit,
+ skip: requestDef.skip || 0,
+ fields: requestDef.fields,
+ };
+ });
+}
+
+function deleteIndex(db, index) {
+
+ if (!index.ddoc) {
+ throw new Error('you must supply an index.ddoc when deleting');
+ }
+
+ if (!index.name) {
+ throw new Error('you must supply an index.name when deleting');
+ }
+
+ var docId = index.ddoc;
+ var viewName = index.name;
+
+ function deltaFun(doc) {
+ if (Object.keys(doc.views).length === 1 && doc.views[viewName]) {
+ // only one view in this ddoc, delete the whole ddoc
+ return {_id: docId, _deleted: true};
+ }
+ // more than one view here, just remove the view
+ delete doc.views[viewName];
+ return doc;
+ }
+
+ return upsert(db, docId, deltaFun).then(function () {
+ return abstractMapper$1(db).viewCleanup.apply(db);
+ }).then(function () {
+ return {ok: true};
+ });
+}
+
+var createIndexAsCallback = callbackify(createIndex);
+var findAsCallback = callbackify(find);
+var explainAsCallback = callbackify(explain);
+var getIndexesAsCallback = callbackify(getIndexes);
+var deleteIndexAsCallback = callbackify(deleteIndex);
+
+var plugin = {};
+plugin.createIndex = toPromise(function (requestDef, callback) {
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide an index to create'));
+ }
+
+ var createIndex = isRemote(this) ?
+ createIndex$1 : createIndexAsCallback;
+ createIndex(this, requestDef, callback);
+});
+
+plugin.find = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to find()'));
+ }
+
+ var find = isRemote(this) ? find$1 : findAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.explain = toPromise(function (requestDef, callback) {
+
+ if (typeof callback === 'undefined') {
+ callback = requestDef;
+ requestDef = undefined;
+ }
+
+ if (typeof requestDef !== 'object') {
+ return callback(new Error('you must provide search parameters to explain()'));
+ }
+
+ var find = isRemote(this) ? explain$1 : explainAsCallback;
+ find(this, requestDef, callback);
+});
+
+plugin.getIndexes = toPromise(function (callback) {
+
+ var getIndexes = isRemote(this) ? getIndexes$1 : getIndexesAsCallback;
+ getIndexes(this, callback);
+});
+
+plugin.deleteIndex = toPromise(function (indexDef, callback) {
+
+ if (typeof indexDef !== 'object') {
+ return callback(new Error('you must provide an index to delete'));
+ }
+
+ var deleteIndex = isRemote(this) ?
+ deleteIndex$1 : deleteIndexAsCallback;
+ deleteIndex(this, indexDef, callback);
+});
+
+export { plugin as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-for-coverage.js b/packages/pouchdb-platform/lib/pouchdb-for-coverage.js
new file mode 100644
index 0000000000..2aaa9c6f49
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-for-coverage.js
@@ -0,0 +1,79 @@
+import './pouchdb-node.js';
+import { parseUri, uuid, rev, clone, parseDdocFunctionName, normalizeDdocFunctionName, once, upsert, toPromise, defaultBackOff } from 'pouchdb-utils';
+import { merge, winningRev } from 'pouchdb-merge';
+import { binaryStringToBlobOrBuffer } from 'pouchdb-binary-utils';
+import { uniq, sequentialize, fin, callbackify, promisedCallback } from 'pouchdb-mapreduce-utils';
+import { createError, generateErrorFromResponse, UNAUTHORIZED, MISSING_BULK_DOCS, MISSING_DOC, REV_CONFLICT, INVALID_ID, MISSING_ID, RESERVED_ID, NOT_OPEN, UNKNOWN_ERROR, BAD_ARG, INVALID_REQUEST, QUERY_PARSE_ERROR, DOC_VALIDATION, BAD_REQUEST, NOT_AN_OBJECT, DB_MISSING, WSQ_ERROR, LDB_ERROR, FORBIDDEN, INVALID_REV, FILE_EXISTS, MISSING_STUB, IDB_ERROR, INVALID_URL } from 'pouchdb-errors';
+import generateReplicationId from 'pouchdb-generate-replication-id';
+import checkpointer from 'pouchdb-checkpointer';
+import * as collate from 'pouchdb-collate';
+import find from 'pouchdb-find';
+import PouchDB from 'pouchdb-core';
+export { default } from 'pouchdb-core';
+import 'pouchdb-adapter-leveldb';
+import 'pouchdb-adapter-http';
+import 'pouchdb-mapreduce';
+import 'pouchdb-replication';
+
+//
+
+var utils = {
+ parseUri: parseUri,
+ uuid: uuid,
+ rev: rev,
+ Promise: Promise,
+ binaryStringToBlobOrBuffer: binaryStringToBlobOrBuffer,
+ clone: clone,
+ createError: createError,
+ generateErrorFromResponse: generateErrorFromResponse,
+ generateReplicationId: generateReplicationId,
+ parseDdocFunctionName: parseDdocFunctionName,
+ normalizeDdocFunctionName: normalizeDdocFunctionName,
+ once: once,
+ merge: merge,
+ winningRev: winningRev,
+ upsert: upsert,
+ toPromise: toPromise,
+ checkpointer: checkpointer,
+ defaultBackOff: defaultBackOff,
+ assign: Object.assign,
+ mapReduceUtils: {
+ uniq: uniq,
+ sequentialize: sequentialize,
+ fin: fin,
+ callbackify: callbackify,
+ promisedCallback: promisedCallback
+ }
+};
+
+var errors = {
+ UNAUTHORIZED: UNAUTHORIZED,
+ MISSING_BULK_DOCS: MISSING_BULK_DOCS,
+ MISSING_DOC: MISSING_DOC,
+ REV_CONFLICT: REV_CONFLICT,
+ INVALID_ID: INVALID_ID,
+ MISSING_ID: MISSING_ID,
+ RESERVED_ID: RESERVED_ID,
+ NOT_OPEN: NOT_OPEN,
+ UNKNOWN_ERROR: UNKNOWN_ERROR,
+ BAD_ARG: BAD_ARG,
+ INVALID_REQUEST: INVALID_REQUEST,
+ QUERY_PARSE_ERROR: QUERY_PARSE_ERROR,
+ DOC_VALIDATION: DOC_VALIDATION,
+ BAD_REQUEST: BAD_REQUEST,
+ NOT_AN_OBJECT: NOT_AN_OBJECT,
+ DB_MISSING: DB_MISSING,
+ WSQ_ERROR: WSQ_ERROR,
+ LDB_ERROR: LDB_ERROR,
+ FORBIDDEN: FORBIDDEN,
+ INVALID_REV: INVALID_REV,
+ FILE_EXISTS: FILE_EXISTS,
+ MISSING_STUB: MISSING_STUB,
+ IDB_ERROR: IDB_ERROR,
+ INVALID_URL: INVALID_URL
+};
+
+PouchDB.utils = utils;
+PouchDB.Errors = errors;
+PouchDB.collate = collate;
+PouchDB.plugin(find);
diff --git a/packages/pouchdb-platform/lib/pouchdb-generate-replication-id.js b/packages/pouchdb-platform/lib/pouchdb-generate-replication-id.js
new file mode 100644
index 0000000000..bad1b69070
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-generate-replication-id.js
@@ -0,0 +1,50 @@
+import { binaryMd5 } from 'pouchdb-md5';
+import { collate } from 'pouchdb-collate';
+
+function sortObjectPropertiesByKey(queryParams) {
+ return Object.keys(queryParams).sort(collate).reduce(function (result, key) {
+ result[key] = queryParams[key];
+ return result;
+ }, {});
+}
+
+// Generate a unique id particular to this replication.
+// Not guaranteed to align perfectly with CouchDB's rep ids.
+function generateReplicationId(src, target, opts) {
+ var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';
+ var filterFun = opts.filter ? opts.filter.toString() : '';
+ var queryParams = '';
+ var filterViewName = '';
+ var selector = '';
+
+ // possibility for checkpoints to be lost here as behaviour of
+ // JSON.stringify is not stable (see #6226)
+ /* istanbul ignore if */
+ if (opts.selector) {
+ selector = JSON.stringify(opts.selector);
+ }
+
+ if (opts.filter && opts.query_params) {
+ queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));
+ }
+
+ if (opts.filter && opts.filter === '_view') {
+ filterViewName = opts.view.toString();
+ }
+
+ return Promise.all([src.id(), target.id()]).then(function (res) {
+ var queryData = res[0] + res[1] + filterFun + filterViewName +
+ queryParams + docIds + selector;
+ return new Promise(function (resolve) {
+ binaryMd5(queryData, resolve);
+ });
+ }).then(function (md5sum) {
+ // can't use straight-up md5 alphabet, because
+ // the char '/' is interpreted as being for attachments,
+ // and + is also not url-safe
+ md5sum = md5sum.replace(/\//g, '.').replace(/\+/g, '_');
+ return '_local/' + md5sum;
+ });
+}
+
+export { generateReplicationId as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-json.js b/packages/pouchdb-platform/lib/pouchdb-json.js
new file mode 100644
index 0000000000..4e360a2024
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-json.js
@@ -0,0 +1,24 @@
+import * as vuvuzela from 'vuvuzela';
+
+function safeJsonParse(str) {
+ // This try/catch guards against stack overflow errors.
+ // JSON.parse() is faster than vuvuzela.parse() but vuvuzela
+ // cannot overflow.
+ try {
+ return JSON.parse(str);
+ } catch (e) {
+ /* istanbul ignore next */
+ return vuvuzela.parse(str);
+ }
+}
+
+function safeJsonStringify(json) {
+ try {
+ return JSON.stringify(json);
+ } catch (e) {
+ /* istanbul ignore next */
+ return vuvuzela.stringify(json);
+ }
+}
+
+export { safeJsonParse, safeJsonStringify };
diff --git a/packages/pouchdb-platform/lib/pouchdb-lib.js b/packages/pouchdb-platform/lib/pouchdb-lib.js
new file mode 100644
index 0000000000..ce38507478
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-lib.js
@@ -0,0 +1,3 @@
+var index = {};
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-mapreduce-utils.js b/packages/pouchdb-platform/lib/pouchdb-mapreduce-utils.js
new file mode 100644
index 0000000000..4a95b254fd
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-mapreduce-utils.js
@@ -0,0 +1,112 @@
+import { nextTick } from 'pouchdb-utils';
+
+class QueryParseError extends Error {
+ constructor(message) {
+ super();
+ this.status = 400;
+ this.name = 'query_parse_error';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, QueryParseError);
+ } catch (e) {}
+ }
+}
+
+class NotFoundError extends Error {
+ constructor(message) {
+ super();
+ this.status = 404;
+ this.name = 'not_found';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, NotFoundError);
+ } catch (e) {}
+ }
+}
+
+class BuiltInError extends Error {
+ constructor(message) {
+ super();
+ this.status = 500;
+ this.name = 'invalid_value';
+ this.message = message;
+ this.error = true;
+ try {
+ Error.captureStackTrace(this, BuiltInError);
+ } catch (e) {}
+ }
+}
+
+function promisedCallback(promise, callback) {
+ if (callback) {
+ promise.then(function (res) {
+ nextTick(function () {
+ callback(null, res);
+ });
+ }, function (reason) {
+ nextTick(function () {
+ callback(reason);
+ });
+ });
+ }
+ return promise;
+}
+
+function callbackify(fun) {
+ return function (...args) {
+ var cb = args.pop();
+ var promise = fun.apply(this, args);
+ if (typeof cb === 'function') {
+ promisedCallback(promise, cb);
+ }
+ return promise;
+ };
+}
+
+// Promise finally util similar to Q.finally
+function fin(promise, finalPromiseFactory) {
+ return promise.then(function (res) {
+ return finalPromiseFactory().then(function () {
+ return res;
+ });
+ }, function (reason) {
+ return finalPromiseFactory().then(function () {
+ throw reason;
+ });
+ });
+}
+
+function sequentialize(queue, promiseFactory) {
+ return function () {
+ var args = arguments;
+ var that = this;
+ return queue.add(function () {
+ return promiseFactory.apply(that, args);
+ });
+ };
+}
+
+// uniq an array of strings, order not guaranteed
+// similar to underscore/lodash _.uniq
+function uniq(arr) {
+ var theSet = new Set(arr);
+ var result = new Array(theSet.size);
+ var index = -1;
+ theSet.forEach(function (value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+function mapToKeysArray(map) {
+ var result = new Array(map.size);
+ var index = -1;
+ map.forEach(function (value, key) {
+ result[++index] = key;
+ });
+ return result;
+}
+
+export { BuiltInError, NotFoundError, QueryParseError, callbackify, fin, mapToKeysArray, promisedCallback, sequentialize, uniq };
diff --git a/packages/pouchdb-platform/lib/pouchdb-mapreduce.js b/packages/pouchdb-platform/lib/pouchdb-mapreduce.js
new file mode 100644
index 0000000000..99e94b0cb5
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-mapreduce.js
@@ -0,0 +1,212 @@
+import vm from 'vm';
+import { BuiltInError, NotFoundError } from 'pouchdb-mapreduce-utils';
+import { guardedConsole, scopeEval } from 'pouchdb-utils';
+import abstractMapReduce from 'pouchdb-abstract-mapreduce';
+
+function createBuiltInError(name) {
+ var message = 'builtin ' + name +
+ ' function requires map values to be numbers' +
+ ' or number arrays';
+ return new BuiltInError(message);
+}
+
+function sum(values) {
+ var result = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ if (typeof num !== 'number') {
+ if (Array.isArray(num)) {
+ // lists of numbers are also allowed, sum them separately
+ result = typeof result === 'number' ? [result] : result;
+ for (var j = 0, jLen = num.length; j < jLen; j++) {
+ var jNum = num[j];
+ if (typeof jNum !== 'number') {
+ throw createBuiltInError('_sum');
+ } else if (typeof result[j] === 'undefined') {
+ result.push(jNum);
+ } else {
+ result[j] += jNum;
+ }
+ }
+ } else { // not array/number
+ throw createBuiltInError('_sum');
+ }
+ } else if (typeof result === 'number') {
+ result += num;
+ } else { // add number to array
+ result[0] += num;
+ }
+ }
+ return result;
+}
+
+// Inside of 'vm' for Node, we need a way to translate a pseudo-error
+// back into a real error once it's out of the VM.
+function createBuiltInErrorInVm(name) {
+ return {
+ builtInError: true,
+ name: name
+ };
+}
+
+function convertToTrueError(err) {
+ return createBuiltInError(err.name);
+}
+
+function isBuiltInError(obj) {
+ return obj && obj.builtInError;
+}
+
+// All of this vm hullaballoo is to be able to run arbitrary code in a sandbox
+// for security reasons.
+function evalFunctionInVm(func, emit) {
+ return function (arg1, arg2, arg3) {
+ var code = '(function() {"use strict";' +
+ 'var createBuiltInError = ' + createBuiltInErrorInVm.toString() + ';' +
+ 'var sum = ' + sum.toString() + ';' +
+ 'var log = function () {};' +
+ 'var isArray = Array.isArray;' +
+ 'var toJSON = JSON.parse;' +
+ 'var __emitteds__ = [];' +
+ 'var emit = function (key, value) {__emitteds__.push([key, value]);};' +
+ 'var __result__ = (' +
+ func.replace(/;\s*$/, '') + ')' + '(' +
+ JSON.stringify(arg1) + ',' +
+ JSON.stringify(arg2) + ',' +
+ JSON.stringify(arg3) + ');' +
+ 'return {result: __result__, emitteds: __emitteds__};' +
+ '})()';
+
+ var output = vm.runInNewContext(code);
+
+ output.emitteds.forEach(function (emitted) {
+ emit(emitted[0], emitted[1]);
+ });
+ if (isBuiltInError(output.result)) {
+ output.result = convertToTrueError(output.result);
+ }
+ return output.result;
+ };
+}
+
+var log = guardedConsole.bind(null, 'log');
+var isArray = Array.isArray;
+var toJSON = JSON.parse;
+
+function evalFunctionWithEval(func, emit) {
+ return scopeEval(
+ "return (" + func.replace(/;\s*$/, "") + ");",
+ {
+ emit: emit,
+ sum: sum,
+ log: log,
+ isArray: isArray,
+ toJSON: toJSON
+ }
+ );
+}
+
+// The "stringify, then execute in a VM" strategy totally breaks Istanbul due
+// to missing __coverage global objects. As a solution, export different
+// code during coverage testing and during regular execution.
+// Note that this doesn't get shipped to consumers because Rollup replaces it
+// with rollup-plugin-replace, so process.env.COVERAGE is replaced with `false`
+var evalFunc;
+/* istanbul ignore else */
+if (process.env.COVERAGE) {
+ evalFunc = evalFunctionWithEval;
+} else {
+ evalFunc = evalFunctionInVm;
+}
+
+var evalFunction = evalFunc;
+
+var builtInReduce = {
+ _sum: function (keys, values) {
+ return sum(values);
+ },
+
+ _count: function (keys, values) {
+ return values.length;
+ },
+
+ _stats: function (keys, values) {
+ // no need to implement rereduce=true, because Pouch
+ // will never call it
+ function sumsqr(values) {
+ var _sumsqr = 0;
+ for (var i = 0, len = values.length; i < len; i++) {
+ var num = values[i];
+ _sumsqr += (num * num);
+ }
+ return _sumsqr;
+ }
+ return {
+ sum : sum(values),
+ min : Math.min.apply(null, values),
+ max : Math.max.apply(null, values),
+ count : values.length,
+ sumsqr : sumsqr(values)
+ };
+ }
+};
+
+function getBuiltIn(reduceFunString) {
+ if (/^_sum/.test(reduceFunString)) {
+ return builtInReduce._sum;
+ } else if (/^_count/.test(reduceFunString)) {
+ return builtInReduce._count;
+ } else if (/^_stats/.test(reduceFunString)) {
+ return builtInReduce._stats;
+ } else if (/^_/.test(reduceFunString)) {
+ throw new Error(reduceFunString + ' is not a supported reduce function.');
+ }
+}
+
+function mapper(mapFun, emit) {
+ // for temp_views one can use emit(doc, emit), see #38
+ if (typeof mapFun === "function" && mapFun.length === 2) {
+ var origMap = mapFun;
+ return function (doc) {
+ return origMap(doc, emit);
+ };
+ } else {
+ return evalFunction(mapFun.toString(), emit);
+ }
+}
+
+function reducer(reduceFun) {
+ var reduceFunString = reduceFun.toString();
+ var builtIn = getBuiltIn(reduceFunString);
+ if (builtIn) {
+ return builtIn;
+ } else {
+ return evalFunction(reduceFunString);
+ }
+}
+
+function ddocValidator(ddoc, viewName) {
+ var fun = ddoc.views && ddoc.views[viewName];
+ if (typeof fun.map !== 'string') {
+ throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +
+ viewName + ', instead found object of type: ' + typeof fun.map);
+ }
+}
+
+var localDocName = 'mrviews';
+var abstract = abstractMapReduce(localDocName, mapper, reducer, ddocValidator);
+
+function query(fun, opts, callback) {
+ return abstract.query.call(this, fun, opts, callback);
+}
+
+function viewCleanup(callback) {
+ return abstract.viewCleanup.call(this, callback);
+}
+
+var index = {
+ query: query,
+ viewCleanup: viewCleanup
+};
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-md5.js b/packages/pouchdb-platform/lib/pouchdb-md5.js
new file mode 100644
index 0000000000..d2871e7328
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-md5.js
@@ -0,0 +1,12 @@
+import crypto from 'crypto';
+
+function binaryMd5(data, callback) {
+ var base64 = crypto.createHash('md5').update(data, 'binary').digest('base64');
+ callback(base64);
+}
+
+function stringMd5(string) {
+ return crypto.createHash('md5').update(string, 'binary').digest('hex');
+}
+
+export { binaryMd5, stringMd5 };
diff --git a/packages/pouchdb-platform/lib/pouchdb-merge.js b/packages/pouchdb-platform/lib/pouchdb-merge.js
new file mode 100644
index 0000000000..98526c9637
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-merge.js
@@ -0,0 +1,549 @@
+import { clone } from 'pouchdb-utils';
+
+// We fetch all leafs of the revision tree, and sort them based on tree length
+// and whether they were deleted, undeleted documents with the longest revision
+// tree (most edits) win
+// The final sort algorithm is slightly documented in a sidebar here:
+// http://guide.couchdb.org/draft/conflicts.html
+function winningRev(metadata) {
+ var winningId;
+ var winningPos;
+ var winningDeleted;
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var tree = node.ids;
+ var branches = tree[2];
+ var pos = node.pos;
+ if (branches.length) { // non-leaf
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i]});
+ }
+ continue;
+ }
+ var deleted = !!tree[1].deleted;
+ var id = tree[0];
+ // sort by deleted, then pos, then id
+ if (!winningId || (winningDeleted !== deleted ? winningDeleted :
+ winningPos !== pos ? winningPos < pos : winningId < id)) {
+ winningId = id;
+ winningPos = pos;
+ winningDeleted = deleted;
+ }
+ }
+
+ return winningPos + '-' + winningId;
+}
+
+// Pretty much all below can be combined into a higher order function to
+// traverse revisions
+// The return value from the callback will be passed as context to all
+// children of that node
+function traverseRevTree(revs, callback) {
+ var toVisit = revs.slice();
+
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var branches = tree[2];
+ var newCtx =
+ callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});
+ }
+ }
+}
+
+function sortByPos$1(a, b) {
+ return a.pos - b.pos;
+}
+
+function collectLeaves(revs) {
+ var leaves = [];
+ traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {
+ if (isLeaf) {
+ leaves.push({rev: pos + "-" + id, pos: pos, opts: opts});
+ }
+ });
+ leaves.sort(sortByPos$1).reverse();
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ delete leaves[i].pos;
+ }
+ return leaves;
+}
+
+// returns revs of all conflicts that is leaves such that
+// 1. are not deleted and
+// 2. are different than winning revision
+function collectConflicts(metadata) {
+ var win = winningRev(metadata);
+ var leaves = collectLeaves(metadata.rev_tree);
+ var conflicts = [];
+ for (var i = 0, len = leaves.length; i < len; i++) {
+ var leaf = leaves[i];
+ if (leaf.rev !== win && !leaf.opts.deleted) {
+ conflicts.push(leaf.rev);
+ }
+ }
+ return conflicts;
+}
+
+// compact a tree by marking its non-leafs as missing,
+// and return a list of revs to delete
+function compactTree(metadata) {
+ var revs = [];
+ traverseRevTree(metadata.rev_tree, function (isLeaf, pos,
+ revHash, ctx, opts) {
+ if (opts.status === 'available' && !isLeaf) {
+ revs.push(pos + '-' + revHash);
+ opts.status = 'missing';
+ }
+ });
+ return revs;
+}
+
+// `findPathToLeaf()` returns an array of revs that goes from the specified
+// leaf rev to the root of that leaf’s branch.
+//
+// eg. for this rev tree:
+// 1-9692 ▶ 2-37aa ▶ 3-df22 ▶ 4-6e94 ▶ 5-df4a ▶ 6-6a3a ▶ 7-57e5
+// ┃ ┗━━━━━━▶ 5-8d8c ▶ 6-65e0
+// ┗━━━━━━▶ 3-43f6 ▶ 4-a3b4
+//
+// For a `targetRev` of '7-57e5', `findPathToLeaf()` would return ['7-57e5', '6-6a3a', '5-df4a']
+// The `revs` arument has the same structure as what `revs_tree` has on e.g.
+// the IndexedDB representation of the rev tree datastructure. Please refer to
+// tests/unit/test.purge.js for examples of what these look like.
+//
+// This function will throw an error if:
+// - The requested revision does not exist
+// - The requested revision is not a leaf
+function findPathToLeaf(revs, targetRev) {
+ let path = [];
+ const toVisit = revs.slice();
+
+ let node;
+ while ((node = toVisit.pop())) {
+ const { pos, ids: tree } = node;
+ const rev = `${pos}-${tree[0]}`;
+ const branches = tree[2];
+
+ // just assuming we're already working on the path up towards our desired leaf.
+ path.push(rev);
+
+ // we've reached the leaf of our dreams, so return the computed path.
+ if (rev === targetRev) {
+ //…unleeeeess
+ if (branches.length !== 0) {
+ throw new Error('The requested revision is not a leaf');
+ }
+ return path.reverse();
+ }
+
+ // this is based on the assumption that after we have a leaf (`branches.length == 0`), we handle the next
+ // branch. this is true for all branches other than the path leading to the winning rev (which is 7-57e5 in
+ // the example above. i've added a reset condition for branching nodes (`branches.length > 1`) as well.
+ if (branches.length === 0 || branches.length > 1) {
+ path = [];
+ }
+
+ // as a next step, we push the branches of this node to `toVisit` for visiting it during the next iteration
+ for (let i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({ pos: pos + 1, ids: branches[i] });
+ }
+ }
+ if (path.length === 0) {
+ throw new Error('The requested revision does not exist');
+ }
+ return path.reverse();
+}
+
+// build up a list of all the paths to the leafs in this revision tree
+function rootToLeaf(revs) {
+ var paths = [];
+ var toVisit = revs.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, opts: opts});
+ if (isLeaf) {
+ paths.push({pos: (pos + 1 - history.length), ids: history});
+ }
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: pos + 1, ids: branches[i], history: history});
+ }
+ }
+ return paths.reverse();
+}
+
+// for a better overview of what this is doing, read:
+
+function sortByPos(a, b) {
+ return a.pos - b.pos;
+}
+
+// classic binary search
+function binarySearch(arr, item, comparator) {
+ var low = 0;
+ var high = arr.length;
+ var mid;
+ while (low < high) {
+ mid = (low + high) >>> 1;
+ if (comparator(arr[mid], item) < 0) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return low;
+}
+
+// assuming the arr is sorted, insert the item in the proper place
+function insertSorted(arr, item, comparator) {
+ var idx = binarySearch(arr, item, comparator);
+ arr.splice(idx, 0, item);
+}
+
+// Turn a path as a flat array into a tree with a single branch.
+// If any should be stemmed from the beginning of the array, that's passed
+// in as the second argument
+function pathToTree(path, numStemmed) {
+ var root;
+ var leaf;
+ for (var i = numStemmed, len = path.length; i < len; i++) {
+ var node = path[i];
+ var currentLeaf = [node.id, node.opts, []];
+ if (leaf) {
+ leaf[2].push(currentLeaf);
+ leaf = currentLeaf;
+ } else {
+ root = leaf = currentLeaf;
+ }
+ }
+ return root;
+}
+
+// compare the IDs of two trees
+function compareTree(a, b) {
+ return a[0] < b[0] ? -1 : 1;
+}
+
+// Merge two trees together
+// The roots of tree1 and tree2 must be the same revision
+function mergeTree(in_tree1, in_tree2) {
+ var queue = [{tree1: in_tree1, tree2: in_tree2}];
+ var conflicts = false;
+ while (queue.length > 0) {
+ var item = queue.pop();
+ var tree1 = item.tree1;
+ var tree2 = item.tree2;
+
+ if (tree1[1].status || tree2[1].status) {
+ tree1[1].status =
+ (tree1[1].status === 'available' ||
+ tree2[1].status === 'available') ? 'available' : 'missing';
+ }
+
+ for (var i = 0; i < tree2[2].length; i++) {
+ if (!tree1[2][0]) {
+ conflicts = 'new_leaf';
+ tree1[2][0] = tree2[2][i];
+ continue;
+ }
+
+ var merged = false;
+ for (var j = 0; j < tree1[2].length; j++) {
+ if (tree1[2][j][0] === tree2[2][i][0]) {
+ queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});
+ merged = true;
+ }
+ }
+ if (!merged) {
+ conflicts = 'new_branch';
+ insertSorted(tree1[2], tree2[2][i], compareTree);
+ }
+ }
+ }
+ return {conflicts: conflicts, tree: in_tree1};
+}
+
+function doMerge(tree, path, dontExpand) {
+ var restree = [];
+ var conflicts = false;
+ var merged = false;
+ var res;
+
+ if (!tree.length) {
+ return {tree: [path], conflicts: 'new_leaf'};
+ }
+
+ for (var i = 0, len = tree.length; i < len; i++) {
+ var branch = tree[i];
+ if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {
+ // Paths start at the same position and have the same root, so they need
+ // merged
+ res = mergeTree(branch.ids, path.ids);
+ restree.push({pos: branch.pos, ids: res.tree});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ } else if (dontExpand !== true) {
+ // The paths start at a different position, take the earliest path and
+ // traverse up until it as at the same point from root as the path we
+ // want to merge. If the keys match we return the longer path with the
+ // other merged After stemming we dont want to expand the trees
+
+ var t1 = branch.pos < path.pos ? branch : path;
+ var t2 = branch.pos < path.pos ? path : branch;
+ var diff = t2.pos - t1.pos;
+
+ var candidateParents = [];
+
+ var trees = [];
+ trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});
+ while (trees.length > 0) {
+ var item = trees.pop();
+ if (item.diff === 0) {
+ if (item.ids[0] === t2.ids[0]) {
+ candidateParents.push(item);
+ }
+ continue;
+ }
+ var elements = item.ids[2];
+ for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {
+ trees.push({
+ ids: elements[j],
+ diff: item.diff - 1,
+ parent: item.ids,
+ parentIdx: j
+ });
+ }
+ }
+
+ var el = candidateParents[0];
+
+ if (!el) {
+ restree.push(branch);
+ } else {
+ res = mergeTree(el.ids, t2.ids);
+ el.parent[2][el.parentIdx] = res.tree;
+ restree.push({pos: t1.pos, ids: t1.ids});
+ conflicts = conflicts || res.conflicts;
+ merged = true;
+ }
+ } else {
+ restree.push(branch);
+ }
+ }
+
+ // We didnt find
+ if (!merged) {
+ restree.push(path);
+ }
+
+ restree.sort(sortByPos);
+
+ return {
+ tree: restree,
+ conflicts: conflicts || 'internal_node'
+ };
+}
+
+// To ensure we dont grow the revision tree infinitely, we stem old revisions
+function stem(tree, depth) {
+ // First we break out the tree into a complete list of root to leaf paths
+ var paths = rootToLeaf(tree);
+ var stemmedRevs;
+
+ var result;
+ for (var i = 0, len = paths.length; i < len; i++) {
+ // Then for each path, we cut off the start of the path based on the
+ // `depth` to stem to, and generate a new set of flat trees
+ var path = paths[i];
+ var stemmed = path.ids;
+ var node;
+ if (stemmed.length > depth) {
+ // only do the stemming work if we actually need to stem
+ if (!stemmedRevs) {
+ stemmedRevs = {}; // avoid allocating this object unnecessarily
+ }
+ var numStemmed = stemmed.length - depth;
+ node = {
+ pos: path.pos + numStemmed,
+ ids: pathToTree(stemmed, numStemmed)
+ };
+
+ for (var s = 0; s < numStemmed; s++) {
+ var rev = (path.pos + s) + '-' + stemmed[s].id;
+ stemmedRevs[rev] = true;
+ }
+ } else { // no need to actually stem
+ node = {
+ pos: path.pos,
+ ids: pathToTree(stemmed, 0)
+ };
+ }
+
+ // Then we remerge all those flat trees together, ensuring that we dont
+ // connect trees that would go beyond the depth limit
+ if (result) {
+ result = doMerge(result, node, true).tree;
+ } else {
+ result = [node];
+ }
+ }
+
+ // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed
+ if (stemmedRevs) {
+ traverseRevTree(result, function (isLeaf, pos, revHash) {
+ // some revisions may have been removed in a branch but not in another
+ delete stemmedRevs[pos + '-' + revHash];
+ });
+ }
+
+ return {
+ tree: result,
+ revs: stemmedRevs ? Object.keys(stemmedRevs) : []
+ };
+}
+
+function merge(tree, path, depth) {
+ var newTree = doMerge(tree, path);
+ var stemmed = stem(newTree.tree, depth);
+ return {
+ tree: stemmed.tree,
+ stemmedRevs: stemmed.revs,
+ conflicts: newTree.conflicts
+ };
+}
+
+// this method removes a leaf from a rev tree, independent of its status.
+// e.g., by removing an available leaf, it could leave its predecessor as
+// a missing leaf and corrupting the tree.
+function removeLeafFromRevTree(tree, leafRev) {
+ return tree.flatMap((path) => {
+ path = removeLeafFromPath(path, leafRev);
+ return path ? [path] : [];
+ });
+}
+
+function removeLeafFromPath(path, leafRev) {
+ const tree = clone(path);
+ const toVisit = [tree];
+ let node;
+
+ while ((node = toVisit.pop())) {
+ const { pos, ids: [id, , branches], parent } = node;
+ const isLeaf = branches.length === 0;
+ const hash = `${pos}-${id}`;
+
+ if (isLeaf && hash === leafRev) {
+ if (!parent) {
+ // FIXME: we're facing the root, and probably shouldn't just return an empty array (object? null?).
+ return null;
+ }
+
+ parent.ids[2] = parent.ids[2].filter(function (branchNode) {
+ return branchNode[0] !== id;
+ });
+ return tree;
+ }
+
+ for (let i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({ pos: pos + 1, ids: branches[i], parent: node });
+ }
+ }
+ return tree;
+}
+
+// return true if a rev exists in the rev tree, false otherwise
+function revExists(revs, rev) {
+ var toVisit = revs.slice();
+ var splitRev = rev.split('-');
+ var targetPos = parseInt(splitRev[0], 10);
+ var targetId = splitRev[1];
+
+ var node;
+ while ((node = toVisit.pop())) {
+ if (node.pos === targetPos && node.ids[0] === targetId) {
+ return true;
+ }
+ var branches = node.ids[2];
+ for (var i = 0, len = branches.length; i < len; i++) {
+ toVisit.push({pos: node.pos + 1, ids: branches[i]});
+ }
+ }
+ return false;
+}
+
+function getTrees(node) {
+ return node.ids;
+}
+
+// check if a specific revision of a doc has been deleted
+// - metadata: the metadata object from the doc store
+// - rev: (optional) the revision to check. defaults to winning revision
+function isDeleted(metadata, rev) {
+ if (!rev) {
+ rev = winningRev(metadata);
+ }
+ var id = rev.substring(rev.indexOf('-') + 1);
+ var toVisit = metadata.rev_tree.map(getTrees);
+
+ var tree;
+ while ((tree = toVisit.pop())) {
+ if (tree[0] === id) {
+ return !!tree[1].deleted;
+ }
+ toVisit = toVisit.concat(tree[2]);
+ }
+}
+
+function isLocalId(id) {
+ return typeof id === 'string' && id.startsWith('_local/');
+}
+
+// returns the current leaf node for a given revision
+function latest(rev, metadata) {
+ var toVisit = metadata.rev_tree.slice();
+ var node;
+ while ((node = toVisit.pop())) {
+ var pos = node.pos;
+ var tree = node.ids;
+ var id = tree[0];
+ var opts = tree[1];
+ var branches = tree[2];
+ var isLeaf = branches.length === 0;
+
+ var history = node.history ? node.history.slice() : [];
+ history.push({id: id, pos: pos, opts: opts});
+
+ if (isLeaf) {
+ for (var i = 0, len = history.length; i < len; i++) {
+ var historyNode = history[i];
+ var historyRev = historyNode.pos + '-' + historyNode.id;
+
+ if (historyRev === rev) {
+ // return the rev of this leaf
+ return pos + '-' + id;
+ }
+ }
+ }
+
+ for (var j = 0, l = branches.length; j < l; j++) {
+ toVisit.push({pos: pos + 1, ids: branches[j], history: history});
+ }
+ }
+
+ /* istanbul ignore next */
+ throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);
+}
+
+export { collectConflicts, collectLeaves, compactTree, findPathToLeaf, isDeleted, isLocalId, latest, merge, removeLeafFromRevTree as removeLeafFromTree, revExists, rootToLeaf, traverseRevTree, winningRev };
diff --git a/packages/pouchdb-platform/lib/pouchdb-node.js b/packages/pouchdb-platform/lib/pouchdb-node.js
new file mode 100644
index 0000000000..48b3fda98d
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-node.js
@@ -0,0 +1,11 @@
+import PouchDB from 'pouchdb-core';
+export { default } from 'pouchdb-core';
+import LevelPouch from 'pouchdb-adapter-leveldb';
+import HttpPouch from 'pouchdb-adapter-http';
+import mapreduce from 'pouchdb-mapreduce';
+import replication from 'pouchdb-replication';
+
+PouchDB.plugin(LevelPouch)
+ .plugin(HttpPouch)
+ .plugin(mapreduce)
+ .plugin(replication);
diff --git a/packages/pouchdb-platform/lib/pouchdb-platform.js b/packages/pouchdb-platform/lib/pouchdb-platform.js
new file mode 100644
index 0000000000..0eba3fbf5b
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-platform.js
@@ -0,0 +1,7 @@
+import { g as getDefaultExportFromCjs } from './_commonjsHelpers-7d1333e8.js';
+
+var src = import('./node-8c918d45.js');
+
+var index = /*@__PURE__*/getDefaultExportFromCjs(src);
+
+export { index as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-replication.js b/packages/pouchdb-platform/lib/pouchdb-replication.js
new file mode 100644
index 0000000000..99c5d06aba
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-replication.js
@@ -0,0 +1,1024 @@
+import { clone, flatten, isRemote, defaultBackOff, uuid, filterChange, nextTick } from 'pouchdb-utils';
+import checkpointer from 'pouchdb-checkpointer';
+import generateReplicationId from 'pouchdb-generate-replication-id';
+import { createError, BAD_REQUEST } from 'pouchdb-errors';
+import EE from 'node:events';
+
+function fileHasChanged(localDoc, remoteDoc, filename) {
+ return !localDoc._attachments ||
+ !localDoc._attachments[filename] ||
+ localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;
+}
+
+function getDocAttachments(db, doc) {
+ var filenames = Object.keys(doc._attachments);
+ return Promise.all(filenames.map(function (filename) {
+ return db.getAttachment(doc._id, filename, {rev: doc._rev});
+ }));
+}
+
+function getDocAttachmentsFromTargetOrSource(target, src, doc) {
+ var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);
+ var filenames = Object.keys(doc._attachments);
+
+ if (!doCheckForLocalAttachments) {
+ return getDocAttachments(src, doc);
+ }
+
+ return target.get(doc._id).then(function (localDoc) {
+ return Promise.all(filenames.map(function (filename) {
+ if (fileHasChanged(localDoc, doc, filename)) {
+ return src.getAttachment(doc._id, filename);
+ }
+
+ return target.getAttachment(localDoc._id, filename);
+ }));
+ }).catch(function (error) {
+ /* istanbul ignore if */
+ if (error.status !== 404) {
+ throw error;
+ }
+
+ return getDocAttachments(src, doc);
+ });
+}
+
+function createBulkGetOpts(diffs) {
+ var requests = [];
+ Object.keys(diffs).forEach(function (id) {
+ var missingRevs = diffs[id].missing;
+ missingRevs.forEach(function (missingRev) {
+ requests.push({
+ id: id,
+ rev: missingRev
+ });
+ });
+ });
+
+ return {
+ docs: requests,
+ revs: true,
+ latest: true
+ };
+}
+
+//
+// Fetch all the documents from the src as described in the "diffs",
+// which is a mapping of docs IDs to revisions. If the state ever
+// changes to "cancelled", then the returned promise will be rejected.
+// Else it will be resolved with a list of fetched documents.
+//
+function getDocs(src, target, diffs, state) {
+ diffs = clone(diffs); // we do not need to modify this
+
+ var resultDocs = [],
+ ok = true;
+
+ function getAllDocs() {
+
+ var bulkGetOpts = createBulkGetOpts(diffs);
+
+ if (!bulkGetOpts.docs.length) { // optimization: skip empty requests
+ return;
+ }
+
+ return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {
+ /* istanbul ignore if */
+ if (state.cancelled) {
+ throw new Error('cancelled');
+ }
+ return Promise.all(bulkGetResponse.results.map(function (bulkGetInfo) {
+ return Promise.all(bulkGetInfo.docs.map(function (doc) {
+ var remoteDoc = doc.ok;
+
+ if (doc.error) {
+ // when AUTO_COMPACTION is set, docs can be returned which look
+ // like this: {"missing":"1-7c3ac256b693c462af8442f992b83696"}
+ ok = false;
+ }
+
+ if (!remoteDoc || !remoteDoc._attachments) {
+ return remoteDoc;
+ }
+
+ return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)
+ .then(function (attachments) {
+ var filenames = Object.keys(remoteDoc._attachments);
+ attachments
+ .forEach(function (attachment, i) {
+ var att = remoteDoc._attachments[filenames[i]];
+ delete att.stub;
+ delete att.length;
+ att.data = attachment;
+ });
+
+ return remoteDoc;
+ });
+ }));
+ }))
+
+ .then(function (results) {
+ resultDocs = resultDocs.concat(flatten(results).filter(Boolean));
+ });
+ });
+ }
+
+ function returnResult() {
+ return { ok:ok, docs:resultDocs };
+ }
+
+ return Promise.resolve()
+ .then(getAllDocs)
+ .then(returnResult);
+}
+
+var STARTING_BACK_OFF = 0;
+
+function backOff(opts, returnValue, error, callback) {
+ if (opts.retry === false) {
+ returnValue.emit('error', error);
+ returnValue.removeAllListeners();
+ return;
+ }
+ /* istanbul ignore if */
+ if (typeof opts.back_off_function !== 'function') {
+ opts.back_off_function = defaultBackOff;
+ }
+ returnValue.emit('requestError', error);
+ if (returnValue.state === 'active' || returnValue.state === 'pending') {
+ returnValue.emit('paused', error);
+ returnValue.state = 'stopped';
+ var backOffSet = function backoffTimeSet() {
+ opts.current_back_off = STARTING_BACK_OFF;
+ };
+ var removeBackOffSetter = function removeBackOffTimeSet() {
+ returnValue.removeListener('active', backOffSet);
+ };
+ returnValue.once('paused', removeBackOffSetter);
+ returnValue.once('active', backOffSet);
+ }
+
+ opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;
+ opts.current_back_off = opts.back_off_function(opts.current_back_off);
+ setTimeout(callback, opts.current_back_off);
+}
+
+function replicate(src, target, opts, returnValue, result) {
+ var batches = []; // list of batches to be processed
+ var currentBatch; // the batch currently being processed
+ var pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ }; // next batch, not yet ready to be processed
+ var writingCheckpoint = false; // true while checkpoint is being written
+ var changesCompleted = false; // true when all changes received
+ var replicationCompleted = false; // true when replication has completed
+ // initial_last_seq is the state of the source db before
+ // replication started, and it is _not_ updated during
+ // replication or used anywhere else, as opposed to last_seq
+ var initial_last_seq = 0;
+ var last_seq = 0;
+ var continuous = opts.continuous || opts.live || false;
+ var batch_size = opts.batch_size || 100;
+ var batches_limit = opts.batches_limit || 10;
+ var style = opts.style || 'all_docs';
+ var changesPending = false; // true while src.changes is running
+ var doc_ids = opts.doc_ids;
+ var selector = opts.selector;
+ var repId;
+ var checkpointer$1;
+ var changedDocs = [];
+ // Like couchdb, every replication gets a unique session id
+ var session = uuid();
+ var taskId;
+
+ result = result || {
+ ok: true,
+ start_time: new Date().toISOString(),
+ docs_read: 0,
+ docs_written: 0,
+ doc_write_failures: 0,
+ errors: []
+ };
+
+ var changesOpts = {};
+ returnValue.ready(src, target);
+
+ function initCheckpointer() {
+ if (checkpointer$1) {
+ return Promise.resolve();
+ }
+ return generateReplicationId(src, target, opts).then(function (res) {
+ repId = res;
+
+ var checkpointOpts = {};
+ if (opts.checkpoint === false) {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'source') {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };
+ } else if (opts.checkpoint === 'target') {
+ checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };
+ } else {
+ checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };
+ }
+
+ checkpointer$1 = new checkpointer(src, target, repId, returnValue, checkpointOpts);
+ });
+ }
+
+ function writeDocs() {
+ changedDocs = [];
+
+ if (currentBatch.docs.length === 0) {
+ return;
+ }
+ var docs = currentBatch.docs;
+ var bulkOpts = {timeout: opts.timeout};
+ return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+
+ // `res` doesn't include full documents (which live in `docs`), so we create a map of
+ // (id -> error), and check for errors while iterating over `docs`
+ var errorsById = Object.create(null);
+ res.forEach(function (res) {
+ if (res.error) {
+ errorsById[res.id] = res;
+ }
+ });
+
+ var errorsNo = Object.keys(errorsById).length;
+ result.doc_write_failures += errorsNo;
+ result.docs_written += docs.length - errorsNo;
+
+ docs.forEach(function (doc) {
+ var error = errorsById[doc._id];
+ if (error) {
+ result.errors.push(error);
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (error.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('denied', clone(error));
+ } else {
+ throw error;
+ }
+ } else {
+ changedDocs.push(doc);
+ }
+ });
+
+ }, function (err) {
+ result.doc_write_failures += docs.length;
+ throw err;
+ });
+ }
+
+ function finishBatch() {
+ if (currentBatch.error) {
+ throw new Error('There was a problem getting docs.');
+ }
+ result.last_seq = last_seq = currentBatch.seq;
+ var outResult = clone(result);
+ if (changedDocs.length) {
+ outResult.docs = changedDocs;
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof currentBatch.pending === 'number') {
+ outResult.pending = currentBatch.pending;
+ delete currentBatch.pending;
+ }
+ returnValue.emit('change', outResult);
+ }
+ writingCheckpoint = true;
+
+ src.info().then(function (info) {
+ var task = src.activeTasks.get(taskId);
+ if (!currentBatch || !task) {
+ return;
+ }
+
+ var completed = task.completed_items || 0;
+ var total_items = parseInt(info.update_seq, 10) - parseInt(initial_last_seq, 10);
+ src.activeTasks.update(taskId, {
+ completed_items: completed + currentBatch.changes.length,
+ total_items
+ });
+ });
+
+ return checkpointer$1.writeCheckpoint(currentBatch.seq,
+ session).then(function () {
+ returnValue.emit('checkpoint', { 'checkpoint': currentBatch.seq });
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ currentBatch = undefined;
+ getChanges();
+ }).catch(function (err) {
+ onCheckpointError(err);
+ throw err;
+ });
+ }
+
+ function getDiffs() {
+ var diff = {};
+ currentBatch.changes.forEach(function (change) {
+ returnValue.emit('checkpoint', { 'revs_diff': change });
+ // Couchbase Sync Gateway emits these, but we can ignore them
+ /* istanbul ignore if */
+ if (change.id === "_user/") {
+ return;
+ }
+ diff[change.id] = change.changes.map(function (x) {
+ return x.rev;
+ });
+ });
+ return target.revsDiff(diff).then(function (diffs) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ }
+ // currentBatch.diffs elements are deleted as the documents are written
+ currentBatch.diffs = diffs;
+ });
+ }
+
+ function getBatchDocs() {
+ return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {
+ currentBatch.error = !got.ok;
+ got.docs.forEach(function (doc) {
+ delete currentBatch.diffs[doc._id];
+ result.docs_read++;
+ currentBatch.docs.push(doc);
+ });
+ });
+ }
+
+ function startNextBatch() {
+ if (returnValue.cancelled || currentBatch) {
+ return;
+ }
+ if (batches.length === 0) {
+ processPendingBatch(true);
+ return;
+ }
+ currentBatch = batches.shift();
+ returnValue.emit('checkpoint', { 'start_next_batch': currentBatch.seq });
+ getDiffs()
+ .then(getBatchDocs)
+ .then(writeDocs)
+ .then(finishBatch)
+ .then(startNextBatch)
+ .catch(function (err) {
+ abortReplication('batch processing terminated with error', err);
+ });
+ }
+
+
+ function processPendingBatch(immediate) {
+ if (pendingBatch.changes.length === 0) {
+ if (batches.length === 0 && !currentBatch) {
+ if ((continuous && changesOpts.live) || changesCompleted) {
+ returnValue.state = 'pending';
+ returnValue.emit('paused');
+ }
+ if (changesCompleted) {
+ completeReplication();
+ }
+ }
+ return;
+ }
+ if (
+ immediate ||
+ changesCompleted ||
+ pendingBatch.changes.length >= batch_size
+ ) {
+ batches.push(pendingBatch);
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ if (returnValue.state === 'pending' || returnValue.state === 'stopped') {
+ returnValue.state = 'active';
+ returnValue.emit('active');
+ }
+ startNextBatch();
+ }
+ }
+
+
+ function abortReplication(reason, err) {
+ if (replicationCompleted) {
+ return;
+ }
+ if (!err.message) {
+ err.message = reason;
+ }
+ result.ok = false;
+ result.status = 'aborting';
+ batches = [];
+ pendingBatch = {
+ seq: 0,
+ changes: [],
+ docs: []
+ };
+ completeReplication(err);
+ }
+
+
+ function completeReplication(fatalError) {
+ if (replicationCompleted) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ result.status = 'cancelled';
+ if (writingCheckpoint) {
+ return;
+ }
+ }
+ result.status = result.status || 'complete';
+ result.end_time = new Date().toISOString();
+ result.last_seq = last_seq;
+ replicationCompleted = true;
+
+ src.activeTasks.remove(taskId, fatalError);
+
+ if (fatalError) {
+ // need to extend the error because Firefox considers ".result" read-only
+ fatalError = createError(fatalError);
+ fatalError.result = result;
+
+ // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)
+ var errorName = (fatalError.name || '').toLowerCase();
+ if (errorName === 'unauthorized' || errorName === 'forbidden') {
+ returnValue.emit('error', fatalError);
+ returnValue.removeAllListeners();
+ } else {
+ backOff(opts, returnValue, fatalError, function () {
+ replicate(src, target, opts, returnValue);
+ });
+ }
+ } else {
+ returnValue.emit('complete', result);
+ returnValue.removeAllListeners();
+ }
+ }
+
+ function onChange(change, pending, lastSeq) {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ // Attach 'pending' property if server supports it (CouchDB 2.0+)
+ /* istanbul ignore if */
+ if (typeof pending === 'number') {
+ pendingBatch.pending = pending;
+ }
+
+ var filter = filterChange(opts)(change);
+ if (!filter) {
+ // update processed items count by 1
+ var task = src.activeTasks.get(taskId);
+ if (task) {
+ // we can assume that task exists here? shouldn't be deleted by here.
+ var completed = task.completed_items || 0;
+ src.activeTasks.update(taskId, {completed_items: ++completed});
+ }
+ return;
+ }
+ pendingBatch.seq = change.seq || lastSeq;
+ pendingBatch.changes.push(change);
+ returnValue.emit('checkpoint', { 'pending_batch': pendingBatch.seq });
+ nextTick(function () {
+ processPendingBatch(batches.length === 0 && changesOpts.live);
+ });
+ }
+
+
+ function onChangesComplete(changes) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+
+ // if no results were returned then we're done,
+ // else fetch more
+ if (changes.results.length > 0) {
+ changesOpts.since = changes.results[changes.results.length - 1].seq;
+ getChanges();
+ processPendingBatch(true);
+ } else {
+
+ var complete = function () {
+ if (continuous) {
+ changesOpts.live = true;
+ getChanges();
+ } else {
+ changesCompleted = true;
+ }
+ processPendingBatch(true);
+ };
+
+ // update the checkpoint so we start from the right seq next time
+ if (!currentBatch && changes.results.length === 0) {
+ writingCheckpoint = true;
+ checkpointer$1.writeCheckpoint(changes.last_seq,
+ session).then(function () {
+ writingCheckpoint = false;
+ result.last_seq = last_seq = changes.last_seq;
+ if (returnValue.cancelled) {
+ completeReplication();
+ throw new Error('cancelled');
+ } else {
+ complete();
+ }
+ })
+ .catch(onCheckpointError);
+ } else {
+ complete();
+ }
+ }
+ }
+
+
+ function onChangesError(err) {
+ changesPending = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ return completeReplication();
+ }
+ abortReplication('changes rejected', err);
+ }
+
+
+ function getChanges() {
+ if (!(
+ !changesPending &&
+ !changesCompleted &&
+ batches.length < batches_limit
+ )) {
+ return;
+ }
+ changesPending = true;
+ function abortChanges() {
+ changes.cancel();
+ }
+ function removeListener() {
+ returnValue.removeListener('cancel', abortChanges);
+ }
+
+ if (returnValue._changes) { // remove old changes() and listeners
+ returnValue.removeListener('cancel', returnValue._abortChanges);
+ returnValue._changes.cancel();
+ }
+ returnValue.once('cancel', abortChanges);
+
+ var changes = src.changes(changesOpts)
+ .on('change', onChange);
+ changes.then(removeListener, removeListener);
+ changes.then(onChangesComplete)
+ .catch(onChangesError);
+
+ if (opts.retry) {
+ // save for later so we can cancel if necessary
+ returnValue._changes = changes;
+ returnValue._abortChanges = abortChanges;
+ }
+ }
+
+ function createTask(checkpoint) {
+ return src.info().then(function (info) {
+ var total_items = typeof opts.since === 'undefined' ?
+ parseInt(info.update_seq, 10) - parseInt(checkpoint, 10) :
+ parseInt(info.update_seq, 10);
+
+ taskId = src.activeTasks.add({
+ name: `${continuous ? 'continuous ' : ''}replication from ${info.db_name}` ,
+ total_items,
+ });
+
+ return checkpoint;
+ });
+ }
+
+ function startChanges() {
+ initCheckpointer().then(function () {
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ return checkpointer$1.getCheckpoint().then(createTask).then(function (checkpoint) {
+ last_seq = checkpoint;
+ initial_last_seq = checkpoint;
+ changesOpts = {
+ since: last_seq,
+ limit: batch_size,
+ batch_size: batch_size,
+ style: style,
+ doc_ids: doc_ids,
+ selector: selector,
+ return_docs: true // required so we know when we're done
+ };
+ if (opts.filter) {
+ if (typeof opts.filter !== 'string') {
+ // required for the client-side filter in onChange
+ changesOpts.include_docs = true;
+ } else { // ddoc filter
+ changesOpts.filter = opts.filter;
+ }
+ }
+ if ('heartbeat' in opts) {
+ changesOpts.heartbeat = opts.heartbeat;
+ }
+ if ('timeout' in opts) {
+ changesOpts.timeout = opts.timeout;
+ }
+ if (opts.query_params) {
+ changesOpts.query_params = opts.query_params;
+ }
+ if (opts.view) {
+ changesOpts.view = opts.view;
+ }
+ getChanges();
+ });
+ }).catch(function (err) {
+ abortReplication('getCheckpoint rejected with ', err);
+ });
+ }
+
+ /* istanbul ignore next */
+ function onCheckpointError(err) {
+ writingCheckpoint = false;
+ abortReplication('writeCheckpoint completed with error', err);
+ }
+
+ /* istanbul ignore if */
+ if (returnValue.cancelled) { // cancelled immediately
+ completeReplication();
+ return;
+ }
+
+ if (!returnValue._addedListeners) {
+ returnValue.once('cancel', completeReplication);
+
+ if (typeof opts.complete === 'function') {
+ returnValue.once('error', opts.complete);
+ returnValue.once('complete', function (result) {
+ opts.complete(null, result);
+ });
+ }
+ returnValue._addedListeners = true;
+ }
+
+ if (typeof opts.since === 'undefined') {
+ startChanges();
+ } else {
+ initCheckpointer().then(function () {
+ writingCheckpoint = true;
+ return checkpointer$1.writeCheckpoint(opts.since, session);
+ }).then(function () {
+ writingCheckpoint = false;
+ /* istanbul ignore if */
+ if (returnValue.cancelled) {
+ completeReplication();
+ return;
+ }
+ last_seq = opts.since;
+ startChanges();
+ }).catch(onCheckpointError);
+ }
+}
+
+// We create a basic promise so the caller can cancel the replication possibly
+// before we have actually started listening to changes etc
+class Replication extends EE {
+ constructor() {
+ super();
+ this.cancelled = false;
+ this.state = 'pending';
+ const promise = new Promise((fulfill, reject) => {
+ this.once('complete', fulfill);
+ this.once('error', reject);
+ });
+ this.then = function (resolve, reject) {
+ return promise.then(resolve, reject);
+ };
+ this.catch = function (reject) {
+ return promise.catch(reject);
+ };
+ // As we allow error handling via "error" event as well,
+ // put a stub in here so that rejecting never throws UnhandledError.
+ this.catch(function () {});
+ }
+
+ cancel() {
+ this.cancelled = true;
+ this.state = 'cancelled';
+ this.emit('cancel');
+ }
+
+ ready(src, target) {
+ if (this._readyCalled) {
+ return;
+ }
+ this._readyCalled = true;
+
+ const onDestroy = () => {
+ this.cancel();
+ };
+ src.once('destroyed', onDestroy);
+ target.once('destroyed', onDestroy);
+ function cleanup() {
+ src.removeListener('destroyed', onDestroy);
+ target.removeListener('destroyed', onDestroy);
+ }
+ this.once('complete', cleanup);
+ this.once('error', cleanup);
+ }
+}
+
+function toPouch(db, opts) {
+ var PouchConstructor = opts.PouchConstructor;
+ if (typeof db === 'string') {
+ return new PouchConstructor(db, opts);
+ } else {
+ return db;
+ }
+}
+
+function replicateWrapper(src, target, opts, callback) {
+
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+
+ if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {
+ throw createError(BAD_REQUEST,
+ "`doc_ids` filter parameter is not a list.");
+ }
+
+ opts.complete = callback;
+ opts = clone(opts);
+ opts.continuous = opts.continuous || opts.live;
+ opts.retry = ('retry' in opts) ? opts.retry : false;
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ var replicateRet = new Replication(opts);
+ var srcPouch = toPouch(src, opts);
+ var targetPouch = toPouch(target, opts);
+ replicate(srcPouch, targetPouch, opts, replicateRet);
+ return replicateRet;
+}
+
+function sync(src, target, opts, callback) {
+ if (typeof opts === 'function') {
+ callback = opts;
+ opts = {};
+ }
+ if (typeof opts === 'undefined') {
+ opts = {};
+ }
+ opts = clone(opts);
+ /*jshint validthis:true */
+ opts.PouchConstructor = opts.PouchConstructor || this;
+ src = toPouch(src, opts);
+ target = toPouch(target, opts);
+ return new Sync(src, target, opts, callback);
+}
+
+class Sync extends EE {
+ constructor(src, target, opts, callback) {
+ super();
+ this.canceled = false;
+
+ const optsPush = opts.push ? Object.assign({}, opts, opts.push) : opts;
+ const optsPull = opts.pull ? Object.assign({}, opts, opts.pull) : opts;
+
+ this.push = replicateWrapper(src, target, optsPush);
+ this.pull = replicateWrapper(target, src, optsPull);
+
+ this.pushPaused = true;
+ this.pullPaused = true;
+
+ const pullChange = (change) => {
+ this.emit('change', {
+ direction: 'pull',
+ change: change
+ });
+ };
+ const pushChange = (change) => {
+ this.emit('change', {
+ direction: 'push',
+ change: change
+ });
+ };
+ const pushDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'push',
+ doc: doc
+ });
+ };
+ const pullDenied = (doc) => {
+ this.emit('denied', {
+ direction: 'pull',
+ doc: doc
+ });
+ };
+ const pushPaused = () => {
+ this.pushPaused = true;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('paused');
+ }
+ };
+ const pullPaused = () => {
+ this.pullPaused = true;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('paused');
+ }
+ };
+ const pushActive = () => {
+ this.pushPaused = false;
+ /* istanbul ignore if */
+ if (this.pullPaused) {
+ this.emit('active', {
+ direction: 'push'
+ });
+ }
+ };
+ const pullActive = () => {
+ this.pullPaused = false;
+ /* istanbul ignore if */
+ if (this.pushPaused) {
+ this.emit('active', {
+ direction: 'pull'
+ });
+ }
+ };
+
+ let removed = {};
+
+ const removeAll = (type) => { // type is 'push' or 'pull'
+ return (event, func) => {
+ const isChange = event === 'change' &&
+ (func === pullChange || func === pushChange);
+ const isDenied = event === 'denied' &&
+ (func === pullDenied || func === pushDenied);
+ const isPaused = event === 'paused' &&
+ (func === pullPaused || func === pushPaused);
+ const isActive = event === 'active' &&
+ (func === pullActive || func === pushActive);
+
+ if (isChange || isDenied || isPaused || isActive) {
+ if (!(event in removed)) {
+ removed[event] = {};
+ }
+ removed[event][type] = true;
+ if (Object.keys(removed[event]).length === 2) {
+ // both push and pull have asked to be removed
+ this.removeAllListeners(event);
+ }
+ }
+ };
+ };
+
+ if (opts.live) {
+ this.push.on('complete', this.pull.cancel.bind(this.pull));
+ this.pull.on('complete', this.push.cancel.bind(this.push));
+ }
+
+ function addOneListener(ee, event, listener) {
+ if (ee.listeners(event).indexOf(listener) == -1) {
+ ee.on(event, listener);
+ }
+ }
+
+ this.on('newListener', function (event) {
+ if (event === 'change') {
+ addOneListener(this.pull, 'change', pullChange);
+ addOneListener(this.push, 'change', pushChange);
+ } else if (event === 'denied') {
+ addOneListener(this.pull, 'denied', pullDenied);
+ addOneListener(this.push, 'denied', pushDenied);
+ } else if (event === 'active') {
+ addOneListener(this.pull, 'active', pullActive);
+ addOneListener(this.push, 'active', pushActive);
+ } else if (event === 'paused') {
+ addOneListener(this.pull, 'paused', pullPaused);
+ addOneListener(this.push, 'paused', pushPaused);
+ }
+ });
+
+ this.on('removeListener', function (event) {
+ if (event === 'change') {
+ this.pull.removeListener('change', pullChange);
+ this.push.removeListener('change', pushChange);
+ } else if (event === 'denied') {
+ this.pull.removeListener('denied', pullDenied);
+ this.push.removeListener('denied', pushDenied);
+ } else if (event === 'active') {
+ this.pull.removeListener('active', pullActive);
+ this.push.removeListener('active', pushActive);
+ } else if (event === 'paused') {
+ this.pull.removeListener('paused', pullPaused);
+ this.push.removeListener('paused', pushPaused);
+ }
+ });
+
+ this.pull.on('removeListener', removeAll('pull'));
+ this.push.on('removeListener', removeAll('push'));
+
+ const promise = Promise.all([
+ this.push,
+ this.pull
+ ]).then((resp) => {
+ const out = {
+ push: resp[0],
+ pull: resp[1]
+ };
+ this.emit('complete', out);
+ if (callback) {
+ callback(null, out);
+ }
+ this.removeAllListeners();
+ return out;
+ }, (err) => {
+ this.cancel();
+ if (callback) {
+ // if there's a callback, then the callback can receive
+ // the error event
+ callback(err);
+ } else {
+ // if there's no callback, then we're safe to emit an error
+ // event, which would otherwise throw an unhandled error
+ // due to 'error' being a special event in EventEmitters
+ this.emit('error', err);
+ }
+ this.removeAllListeners();
+ if (callback) {
+ // no sense throwing if we're already emitting an 'error' event
+ throw err;
+ }
+ });
+
+ this.then = function (success, err) {
+ return promise.then(success, err);
+ };
+
+ this.catch = function (err) {
+ return promise.catch(err);
+ };
+ }
+
+ cancel() {
+ if (!this.canceled) {
+ this.canceled = true;
+ this.push.cancel();
+ this.pull.cancel();
+ }
+ }
+}
+
+function replication(PouchDB) {
+ PouchDB.replicate = replicateWrapper;
+ PouchDB.sync = sync;
+
+ Object.defineProperty(PouchDB.prototype, 'replicate', {
+ get: function () {
+ var self = this;
+ if (typeof this.replicateMethods === 'undefined') {
+ this.replicateMethods = {
+ from: function (other, opts, callback) {
+ return self.constructor.replicate(other, self, opts, callback);
+ },
+ to: function (other, opts, callback) {
+ return self.constructor.replicate(self, other, opts, callback);
+ }
+ };
+ }
+ return this.replicateMethods;
+ }
+ });
+
+ PouchDB.prototype.sync = function (dbName, opts, callback) {
+ return this.constructor.sync(this, dbName, opts, callback);
+ };
+}
+
+export { replication as default };
diff --git a/packages/pouchdb-platform/lib/pouchdb-selector-core.js b/packages/pouchdb-platform/lib/pouchdb-selector-core.js
new file mode 100644
index 0000000000..c6a20d25a0
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-selector-core.js
@@ -0,0 +1,673 @@
+import { clone } from 'pouchdb-utils';
+import { collate } from 'pouchdb-collate';
+
+// this would just be "return doc[field]", but fields
+// can be "deep" due to dot notation
+function getFieldFromDoc(doc, parsedField) {
+ var value = doc;
+ for (var i = 0, len = parsedField.length; i < len; i++) {
+ var key = parsedField[i];
+ value = value[key];
+ if (!value) {
+ break;
+ }
+ }
+ return value;
+}
+
+function setFieldInDoc(doc, parsedField, value) {
+ for (var i = 0, len = parsedField.length; i < len-1; i++) {
+ var elem = parsedField[i];
+ doc = doc[elem] = doc[elem] || {};
+ }
+ doc[parsedField[len-1]] = value;
+}
+
+function compare(left, right) {
+ return left < right ? -1 : left > right ? 1 : 0;
+}
+
+// Converts a string in dot notation to an array of its components, with backslash escaping
+function parseField(fieldName) {
+ // fields may be deep (e.g. "foo.bar.baz"), so parse
+ var fields = [];
+ var current = '';
+ for (var i = 0, len = fieldName.length; i < len; i++) {
+ var ch = fieldName[i];
+ if (i > 0 && fieldName[i - 1] === '\\' && (ch === '$' || ch === '.')) {
+ // escaped delimiter
+ current = current.substring(0, current.length - 1) + ch;
+ } else if (ch === '.') {
+ // When `.` is not escaped (above), it is a field delimiter
+ fields.push(current);
+ current = '';
+ } else { // normal character
+ current += ch;
+ }
+ }
+ fields.push(current);
+ return fields;
+}
+
+var combinationFields = ['$or', '$nor', '$not'];
+function isCombinationalField(field) {
+ return combinationFields.indexOf(field) > -1;
+}
+
+function getKey(obj) {
+ return Object.keys(obj)[0];
+}
+
+function getValue(obj) {
+ return obj[getKey(obj)];
+}
+
+
+// flatten an array of selectors joined by an $and operator
+function mergeAndedSelectors(selectors) {
+
+ // sort to ensure that e.g. if the user specified
+ // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into
+ // just {$gt: 'b'}
+ var res = {};
+ var first = {$or: true, $nor: true};
+
+ selectors.forEach(function (selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+ if (typeof matcher !== 'object') {
+ matcher = {$eq: matcher};
+ }
+
+ if (isCombinationalField(field)) {
+ // or, nor
+ if (matcher instanceof Array) {
+ if (first[field]) {
+ first[field] = false;
+ res[field] = matcher;
+ return;
+ }
+
+ var entries = [];
+ res[field].forEach(function (existing) {
+ Object.keys(matcher).forEach(function (key) {
+ var m = matcher[key];
+ var longest = Math.max(Object.keys(existing).length, Object.keys(m).length);
+ var merged = mergeAndedSelectors([existing, m]);
+ if (Object.keys(merged).length <= longest) {
+ // we have a situation like: (a :{$eq :1} || ...) && (a {$eq: 2} || ...)
+ // merging would produce a $eq 2 when actually we shouldn't ever match against these merged conditions
+ // merged should always contain more values to be valid
+ return;
+ }
+ entries.push(merged);
+ });
+ });
+ res[field] = entries;
+ } else {
+ // not
+ res[field] = mergeAndedSelectors([matcher]);
+ }
+ } else {
+ var fieldMatchers = res[field] = res[field] || {};
+ Object.keys(matcher).forEach(function (operator) {
+ var value = matcher[operator];
+
+ if (operator === '$gt' || operator === '$gte') {
+ return mergeGtGte(operator, value, fieldMatchers);
+ } else if (operator === '$lt' || operator === '$lte') {
+ return mergeLtLte(operator, value, fieldMatchers);
+ } else if (operator === '$ne') {
+ return mergeNe(value, fieldMatchers);
+ } else if (operator === '$eq') {
+ return mergeEq(value, fieldMatchers);
+ } else if (operator === "$regex") {
+ return mergeRegex(value, fieldMatchers);
+ }
+ fieldMatchers[operator] = value;
+ });
+ }
+ });
+ });
+
+ return res;
+}
+
+
+
+// collapse logically equivalent gt/gte values
+function mergeGtGte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$gte !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gte) { // more specificity
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value >= fieldMatchers.$gte) { // more specificity
+ delete fieldMatchers.$gte;
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$gt !== 'undefined') {
+ if (operator === '$gte') {
+ if (value > fieldMatchers.$gt) { // more specificity
+ delete fieldMatchers.$gt;
+ fieldMatchers.$gte = value;
+ }
+ } else { // operator === '$gt'
+ if (value > fieldMatchers.$gt) { // more specificity
+ fieldMatchers.$gt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// collapse logically equivalent lt/lte values
+function mergeLtLte(operator, value, fieldMatchers) {
+ if (typeof fieldMatchers.$eq !== 'undefined') {
+ return; // do nothing
+ }
+ if (typeof fieldMatchers.$lte !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lte) { // more specificity
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value <= fieldMatchers.$lte) { // more specificity
+ delete fieldMatchers.$lte;
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else if (typeof fieldMatchers.$lt !== 'undefined') {
+ if (operator === '$lte') {
+ if (value < fieldMatchers.$lt) { // more specificity
+ delete fieldMatchers.$lt;
+ fieldMatchers.$lte = value;
+ }
+ } else { // operator === '$gt'
+ if (value < fieldMatchers.$lt) { // more specificity
+ fieldMatchers.$lt = value;
+ }
+ }
+ } else {
+ fieldMatchers[operator] = value;
+ }
+}
+
+// combine $ne values into one array
+function mergeNe(value, fieldMatchers) {
+ if ('$ne' in fieldMatchers) {
+ // there are many things this could "not" be
+ fieldMatchers.$ne.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$ne = [value];
+ }
+}
+
+// add $eq into the mix
+function mergeEq(value, fieldMatchers) {
+ // these all have less specificity than the $eq
+ // TODO: check for user errors here
+ delete fieldMatchers.$gt;
+ delete fieldMatchers.$gte;
+ delete fieldMatchers.$lt;
+ delete fieldMatchers.$lte;
+ delete fieldMatchers.$ne;
+ fieldMatchers.$eq = value;
+}
+
+// combine $regex values into one array
+function mergeRegex(value, fieldMatchers) {
+ if ('$regex' in fieldMatchers) {
+ // a value could match multiple regexes
+ fieldMatchers.$regex.push(value);
+ } else { // doesn't exist yet
+ fieldMatchers.$regex = [value];
+ }
+}
+
+//#7458: execute function mergeAndedSelectors on nested $and
+function mergeAndedSelectorsNested(obj) {
+ for (var prop in obj) {
+ if (Array.isArray(obj)) {
+ for (var i in obj) {
+ if (obj[i]['$and']) {
+ obj[i] = mergeAndedSelectors(obj[i]['$and']);
+ }
+ }
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ mergeAndedSelectorsNested(value); // <- recursive call
+ }
+ }
+ return obj;
+}
+
+//#7458: determine id $and is present in selector (at any level)
+function isAndInSelector(obj, isAnd) {
+ for (var prop in obj) {
+ if (prop === '$and') {
+ isAnd = true;
+ }
+ var value = obj[prop];
+ if (typeof value === 'object') {
+ isAnd = isAndInSelector(value, isAnd); // <- recursive call
+ }
+ }
+ return isAnd;
+}
+
+//
+// normalize the selector
+//
+function massageSelector(input) {
+ var result = clone(input);
+
+ //#7458: if $and is present in selector (at any level) merge nested $and
+ if (isAndInSelector(result, false)) {
+ result = mergeAndedSelectorsNested(result);
+ if ('$and' in result) {
+ result = mergeAndedSelectors(result['$and']);
+ }
+ }
+
+ ['$or', '$nor'].forEach(function (orOrNor) {
+ if (orOrNor in result) {
+ // message each individual selector
+ // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}
+ result[orOrNor].forEach(function (subSelector) {
+ var fields = Object.keys(subSelector);
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = subSelector[field];
+ if (typeof matcher !== 'object' || matcher === null) {
+ subSelector[field] = {$eq: matcher};
+ }
+ }
+ });
+ }
+ });
+
+ if ('$not' in result) {
+ //This feels a little like forcing, but it will work for now,
+ //I would like to come back to this and make the merging of selectors a little more generic
+ result['$not'] = mergeAndedSelectors([result['$not']]);
+ }
+
+ var fields = Object.keys(result);
+
+ for (var i = 0; i < fields.length; i++) {
+ var field = fields[i];
+ var matcher = result[field];
+
+ if (typeof matcher !== 'object' || matcher === null) {
+ matcher = {$eq: matcher};
+ }
+ result[field] = matcher;
+ }
+
+ normalizeArrayOperators(result);
+
+ return result;
+}
+
+//
+// The $ne and $regex values must be placed in an array because these operators can be used multiple times on the same field.
+// When $and is used, mergeAndedSelectors takes care of putting some of them into arrays, otherwise it's done here.
+//
+function normalizeArrayOperators(selector) {
+ Object.keys(selector).forEach(function (field) {
+ var matcher = selector[field];
+
+ if (Array.isArray(matcher)) {
+ matcher.forEach(function (matcherItem) {
+ if (matcherItem && typeof matcherItem === 'object') {
+ normalizeArrayOperators(matcherItem);
+ }
+ });
+ } else if (field === '$ne') {
+ selector.$ne = [matcher];
+ } else if (field === '$regex') {
+ selector.$regex = [matcher];
+ } else if (matcher && typeof matcher === 'object') {
+ normalizeArrayOperators(matcher);
+ }
+ });
+}
+
+// create a comparator based on the sort object
+function createFieldSorter(sort) {
+
+ function getFieldValuesAsArray(doc) {
+ return sort.map(function (sorting) {
+ var fieldName = getKey(sorting);
+ var parsedField = parseField(fieldName);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ return docFieldValue;
+ });
+ }
+
+ return function (aRow, bRow) {
+ var aFieldValues = getFieldValuesAsArray(aRow.doc);
+ var bFieldValues = getFieldValuesAsArray(bRow.doc);
+ var collation = collate(aFieldValues, bFieldValues);
+ if (collation !== 0) {
+ return collation;
+ }
+ // this is what mango seems to do
+ return compare(aRow.doc._id, bRow.doc._id);
+ };
+}
+
+function filterInMemoryFields(rows, requestDef, inMemoryFields) {
+ rows = rows.filter(function (row) {
+ return rowFilter(row.doc, requestDef.selector, inMemoryFields);
+ });
+
+ if (requestDef.sort) {
+ // in-memory sort
+ var fieldSorter = createFieldSorter(requestDef.sort);
+ rows = rows.sort(fieldSorter);
+ if (typeof requestDef.sort[0] !== 'string' &&
+ getValue(requestDef.sort[0]) === 'desc') {
+ rows = rows.reverse();
+ }
+ }
+
+ if ('limit' in requestDef || 'skip' in requestDef) {
+ // have to do the limit in-memory
+ var skip = requestDef.skip || 0;
+ var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;
+ rows = rows.slice(skip, limit);
+ }
+ return rows;
+}
+
+function rowFilter(doc, selector, inMemoryFields) {
+ return inMemoryFields.every(function (field) {
+ var matcher = selector[field];
+ var parsedField = parseField(field);
+ var docFieldValue = getFieldFromDoc(doc, parsedField);
+ if (isCombinationalField(field)) {
+ return matchCominationalSelector(field, matcher, doc);
+ }
+
+ return matchSelector(matcher, doc, parsedField, docFieldValue);
+ });
+}
+
+function matchSelector(matcher, doc, parsedField, docFieldValue) {
+ if (!matcher) {
+ // no filtering necessary; this field is just needed for sorting
+ return true;
+ }
+
+ // is matcher an object, if so continue recursion
+ if (typeof matcher === 'object') {
+ return Object.keys(matcher).every(function (maybeUserOperator) {
+ var userValue = matcher[ maybeUserOperator ];
+ // explicit operator
+ if (maybeUserOperator.indexOf("$") === 0) {
+ return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue);
+ } else {
+ var subParsedField = parseField(maybeUserOperator);
+
+ if (
+ docFieldValue === undefined &&
+ typeof userValue !== "object" &&
+ subParsedField.length > 0
+ ) {
+ // the field does not exist, return or getFieldFromDoc will throw
+ return false;
+ }
+
+ var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField);
+
+ if (typeof userValue === "object") {
+ // field value is an object that might contain more operators
+ return matchSelector(userValue, doc, parsedField, subDocFieldValue);
+ }
+
+ // implicit operator
+ return match("$eq", doc, userValue, subParsedField, subDocFieldValue);
+ }
+ });
+ }
+
+ // no more depth, No need to recurse further
+ return matcher === docFieldValue;
+}
+
+function matchCominationalSelector(field, matcher, doc) {
+
+ if (field === '$or') {
+ return matcher.some(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+ }
+
+ if (field === '$not') {
+ return !rowFilter(doc, matcher, Object.keys(matcher));
+ }
+
+ //`$nor`
+ return !matcher.find(function (orMatchers) {
+ return rowFilter(doc, orMatchers, Object.keys(orMatchers));
+ });
+
+}
+
+function match(userOperator, doc, userValue, parsedField, docFieldValue) {
+ if (!matchers[userOperator]) {
+ /* istanbul ignore next */
+ throw new Error('unknown operator "' + userOperator +
+ '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +
+ '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');
+ }
+ return matchers[userOperator](doc, userValue, parsedField, docFieldValue);
+}
+
+function fieldExists(docFieldValue) {
+ return typeof docFieldValue !== 'undefined' && docFieldValue !== null;
+}
+
+function fieldIsNotUndefined(docFieldValue) {
+ return typeof docFieldValue !== 'undefined';
+}
+
+function modField(docFieldValue, userValue) {
+ if (typeof docFieldValue !== "number" ||
+ parseInt(docFieldValue, 10) !== docFieldValue) {
+ return false;
+ }
+
+ var divisor = userValue[0];
+ var mod = userValue[1];
+
+ return docFieldValue % divisor === mod;
+}
+
+function arrayContainsValue(docFieldValue, userValue) {
+ return userValue.some(function (val) {
+ if (docFieldValue instanceof Array) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ }
+
+ return collate(val, docFieldValue) === 0;
+ });
+}
+
+function arrayContainsAllValues(docFieldValue, userValue) {
+ return userValue.every(function (val) {
+ return docFieldValue.some(function (docFieldValueItem) {
+ return collate(val, docFieldValueItem) === 0;
+ });
+ });
+}
+
+function arraySize(docFieldValue, userValue) {
+ return docFieldValue.length === userValue;
+}
+
+function regexMatch(docFieldValue, userValue) {
+ var re = new RegExp(userValue);
+
+ return re.test(docFieldValue);
+}
+
+function typeMatch(docFieldValue, userValue) {
+
+ switch (userValue) {
+ case 'null':
+ return docFieldValue === null;
+ case 'boolean':
+ return typeof (docFieldValue) === 'boolean';
+ case 'number':
+ return typeof (docFieldValue) === 'number';
+ case 'string':
+ return typeof (docFieldValue) === 'string';
+ case 'array':
+ return docFieldValue instanceof Array;
+ case 'object':
+ return ({}).toString.call(docFieldValue) === '[object Object]';
+ }
+}
+
+var matchers = {
+
+ '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.some(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.some(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$allMatch': function (doc, userValue, parsedField, docFieldValue) {
+ if (!Array.isArray(docFieldValue)) {
+ return false;
+ }
+
+ /* istanbul ignore next */
+ if (docFieldValue.length === 0) {
+ return false;
+ }
+
+ if (typeof docFieldValue[0] === 'object' && docFieldValue[0] !== null) {
+ return docFieldValue.every(function (val) {
+ return rowFilter(val, userValue, Object.keys(userValue));
+ });
+ }
+
+ return docFieldValue.every(function (val) {
+ return matchSelector(userValue, doc, parsedField, val);
+ });
+ },
+
+ '$eq': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;
+ },
+
+ '$gte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;
+ },
+
+ '$gt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;
+ },
+
+ '$lte': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;
+ },
+
+ '$lt': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;
+ },
+
+ '$exists': function (doc, userValue, parsedField, docFieldValue) {
+ //a field that is null is still considered to exist
+ if (userValue) {
+ return fieldIsNotUndefined(docFieldValue);
+ }
+
+ return !fieldIsNotUndefined(docFieldValue);
+ },
+
+ '$mod': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && modField(docFieldValue, userValue);
+ },
+
+ '$ne': function (doc, userValue, parsedField, docFieldValue) {
+ return userValue.every(function (neValue) {
+ return collate(docFieldValue, neValue) !== 0;
+ });
+ },
+ '$in': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$nin': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);
+ },
+
+ '$size': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ Array.isArray(docFieldValue) &&
+ arraySize(docFieldValue, userValue);
+ },
+
+ '$all': function (doc, userValue, parsedField, docFieldValue) {
+ return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);
+ },
+
+ '$regex': function (doc, userValue, parsedField, docFieldValue) {
+ return fieldExists(docFieldValue) &&
+ typeof docFieldValue == "string" &&
+ userValue.every(function (regexValue) {
+ return regexMatch(docFieldValue, regexValue);
+ });
+ },
+
+ '$type': function (doc, userValue, parsedField, docFieldValue) {
+ return typeMatch(docFieldValue, userValue);
+ }
+};
+
+// return true if the given doc matches the supplied selector
+function matchesSelector(doc, selector) {
+ /* istanbul ignore if */
+ if (typeof selector !== 'object') {
+ // match the CouchDB error message
+ throw new Error('Selector error: expected a JSON object');
+ }
+
+ selector = massageSelector(selector);
+ var row = {
+ 'doc': doc
+ };
+
+ var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));
+ return rowsMatched && rowsMatched.length === 1;
+}
+
+export { compare, createFieldSorter, filterInMemoryFields, getFieldFromDoc, getKey, getValue, isCombinationalField, massageSelector, matchesSelector, parseField, rowFilter, setFieldInDoc };
diff --git a/packages/pouchdb-platform/lib/pouchdb-server-packages.js b/packages/pouchdb-platform/lib/pouchdb-server-packages.js
new file mode 100644
index 0000000000..f30dc327c2
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-server-packages.js
@@ -0,0 +1,3 @@
+const server = {};
+
+export { server };
diff --git a/packages/pouchdb-platform/lib/pouchdb-utils.js b/packages/pouchdb-platform/lib/pouchdb-utils.js
new file mode 100644
index 0000000000..9c13cfb1be
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb-utils.js
@@ -0,0 +1,668 @@
+import { u as uuid_1 } from './index-3ee6fe23.js';
+import EE from 'node:events';
+import cloneBuffer from 'clone-buffer';
+import { createError, BAD_REQUEST, MISSING_ID, INVALID_ID, RESERVED_ID } from 'pouchdb-errors';
+import { stringMd5 } from 'pouchdb-md5';
+import 'crypto';
+
+// like underscore/lodash _.pick()
+function pick(obj, arr) {
+ var res = {};
+ for (var i = 0, len = arr.length; i < len; i++) {
+ var prop = arr[i];
+ if (prop in obj) {
+ res[prop] = obj[prop];
+ }
+ }
+ return res;
+}
+
+// Most browsers throttle concurrent requests at 6, so it's silly
+// to shim _bulk_get by trying to launch potentially hundreds of requests
+// and then letting the majority time out. We can handle this ourselves.
+var MAX_NUM_CONCURRENT_REQUESTS = 6;
+
+function identityFunction(x) {
+ return x;
+}
+
+function formatResultForOpenRevsGet(result) {
+ return [{
+ ok: result
+ }];
+}
+
+// shim for P/CouchDB adapters that don't directly implement _bulk_get
+function bulkGet(db, opts, callback) {
+ var requests = opts.docs;
+
+ // consolidate into one request per doc if possible
+ var requestsById = new Map();
+ requests.forEach(function (request) {
+ if (requestsById.has(request.id)) {
+ requestsById.get(request.id).push(request);
+ } else {
+ requestsById.set(request.id, [request]);
+ }
+ });
+
+ var numDocs = requestsById.size;
+ var numDone = 0;
+ var perDocResults = new Array(numDocs);
+
+ function collapseResultsAndFinish() {
+ var results = [];
+ perDocResults.forEach(function (res) {
+ res.docs.forEach(function (info) {
+ results.push({
+ id: res.id,
+ docs: [info]
+ });
+ });
+ });
+ callback(null, {results: results});
+ }
+
+ function checkDone() {
+ if (++numDone === numDocs) {
+ collapseResultsAndFinish();
+ }
+ }
+
+ function gotResult(docIndex, id, docs) {
+ perDocResults[docIndex] = {id: id, docs: docs};
+ checkDone();
+ }
+
+ var allRequests = [];
+ requestsById.forEach(function (value, key) {
+ allRequests.push(key);
+ });
+
+ var i = 0;
+
+ function nextBatch() {
+
+ if (i >= allRequests.length) {
+ return;
+ }
+
+ var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);
+ var batch = allRequests.slice(i, upTo);
+ processBatch(batch, i);
+ i += batch.length;
+ }
+
+ function processBatch(batch, offset) {
+ batch.forEach(function (docId, j) {
+ var docIdx = offset + j;
+ var docRequests = requestsById.get(docId);
+
+ // just use the first request as the "template"
+ // TODO: The _bulk_get API allows for more subtle use cases than this,
+ // but for now it is unlikely that there will be a mix of different
+ // "atts_since" or "attachments" in the same request, since it's just
+ // replicate.js that is using this for the moment.
+ // Also, atts_since is aspirational, since we don't support it yet.
+ var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);
+ docOpts.open_revs = docRequests.map(function (request) {
+ // rev is optional, open_revs disallowed
+ return request.rev;
+ });
+
+ // remove falsey / undefined revisions
+ docOpts.open_revs = docOpts.open_revs.filter(identityFunction);
+
+ var formatResult = identityFunction;
+
+ if (docOpts.open_revs.length === 0) {
+ delete docOpts.open_revs;
+
+ // when fetching only the "winning" leaf,
+ // transform the result so it looks like an open_revs
+ // request
+ formatResult = formatResultForOpenRevsGet;
+ }
+
+ // globally-supplied options
+ ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {
+ if (param in opts) {
+ docOpts[param] = opts[param];
+ }
+ });
+ db.get(docId, docOpts, function (err, res) {
+ var result;
+ /* istanbul ignore if */
+ if (err) {
+ result = [{error: err}];
+ } else {
+ result = formatResult(res);
+ }
+ gotResult(docIdx, docId, result);
+ nextBatch();
+ });
+ });
+ }
+
+ nextBatch();
+
+}
+
+// in Node of course this is false
+function hasLocalStorage() {
+ return false;
+}
+
+function nextTick(fn) {
+ process.nextTick(fn);
+}
+
+class Changes extends EE {
+ constructor() {
+ super();
+
+ this._listeners = {};
+ }
+
+ addListener(dbName, id, db, opts) {
+ if (this._listeners[id]) {
+ return;
+ }
+ var inprogress = false;
+ var self = this;
+ function eventFunction() {
+ if (!self._listeners[id]) {
+ return;
+ }
+ if (inprogress) {
+ inprogress = 'waiting';
+ return;
+ }
+ inprogress = true;
+ var changesOpts = pick(opts, [
+ 'style', 'include_docs', 'attachments', 'conflicts', 'filter',
+ 'doc_ids', 'view', 'since', 'query_params', 'binary', 'return_docs'
+ ]);
+
+ function onError() {
+ inprogress = false;
+ }
+
+ db.changes(changesOpts).on('change', function (c) {
+ if (c.seq > opts.since && !opts.cancelled) {
+ opts.since = c.seq;
+ opts.onChange(c);
+ }
+ }).on('complete', function () {
+ if (inprogress === 'waiting') {
+ nextTick(eventFunction);
+ }
+ inprogress = false;
+ }).on('error', onError);
+ }
+ this._listeners[id] = eventFunction;
+ this.on(dbName, eventFunction);
+ }
+
+ removeListener(dbName, id) {
+ if (!(id in this._listeners)) {
+ return;
+ }
+ super.removeListener(dbName, this._listeners[id]);
+ delete this._listeners[id];
+ }
+
+ notifyLocalWindows(dbName) {
+ }
+
+ notify(dbName) {
+ this.emit(dbName);
+ this.notifyLocalWindows(dbName);
+ }
+}
+
+function isBinaryObject(object) {
+ return object instanceof Buffer;
+}
+
+// most of this is borrowed from lodash.isPlainObject:
+// https://github.com/fis-components/lodash.isplainobject/
+// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js
+
+var funcToString = Function.prototype.toString;
+var objectCtorString = funcToString.call(Object);
+
+function isPlainObject(value) {
+ var proto = Object.getPrototypeOf(value);
+ /* istanbul ignore if */
+ if (proto === null) { // not sure when this happens, but I guess it can
+ return true;
+ }
+ var Ctor = proto.constructor;
+ return (typeof Ctor == 'function' &&
+ Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);
+}
+
+function clone(object) {
+ var newObject;
+ var i;
+ var len;
+
+ if (!object || typeof object !== 'object') {
+ return object;
+ }
+
+ if (Array.isArray(object)) {
+ newObject = [];
+ for (i = 0, len = object.length; i < len; i++) {
+ newObject[i] = clone(object[i]);
+ }
+ return newObject;
+ }
+
+ // special case: to avoid inconsistencies between IndexedDB
+ // and other backends, we automatically stringify Dates
+ if (object instanceof Date && isFinite(object)) {
+ return object.toISOString();
+ }
+
+ if (isBinaryObject(object)) {
+ return cloneBuffer(object);
+ }
+
+ if (!isPlainObject(object)) {
+ return object; // don't clone objects like Workers
+ }
+
+ newObject = {};
+ for (i in object) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(object, i)) {
+ var value = clone(object[i]);
+ if (typeof value !== 'undefined') {
+ newObject[i] = value;
+ }
+ }
+ }
+ return newObject;
+}
+
+function guardedConsole(method) {
+ /* istanbul ignore else */
+ if (typeof console !== 'undefined' && typeof console[method] === 'function') {
+ var args = Array.prototype.slice.call(arguments, 1);
+ console[method].apply(console, args);
+ }
+}
+
+function randomNumber(min, max) {
+ var maxTimeout = 600000; // Hard-coded default of 10 minutes
+ min = parseInt(min, 10) || 0;
+ max = parseInt(max, 10);
+ if (max !== max || max <= min) {
+ max = (min || 1) << 1; //doubling
+ } else {
+ max = max + 1;
+ }
+ // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout
+ if (max > maxTimeout) {
+ min = maxTimeout >> 1; // divide by two
+ max = maxTimeout;
+ }
+ var ratio = Math.random();
+ var range = max - min;
+
+ return ~~(range * ratio + min); // ~~ coerces to an int, but fast.
+}
+
+function defaultBackOff(min) {
+ var max = 0;
+ if (!min) {
+ max = 2000;
+ }
+ return randomNumber(min, max);
+}
+
+// We assume Node users don't need to see this warning
+var res$2 = function () {};
+
+var assign;
+if (process.env.COVERAGE) { // don't penalize us on code coverage for this polyfill
+ assign = Object.assign;
+} else {
+ if (typeof Object.assign === 'function') {
+ assign = Object.assign;
+ } else {
+ // lite Object.assign polyfill based on
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
+ assign = function (target) {
+ var to = Object(target);
+
+ for (var index = 1; index < arguments.length; index++) {
+ var nextSource = arguments[index];
+
+ if (nextSource != null) { // Skip over if undefined or null
+ for (var nextKey in nextSource) {
+ // Avoid bugs when hasOwnProperty is shadowed
+ if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ }
+ return to;
+ };
+ }
+}
+
+var assign$1 = assign;
+
+function tryFilter(filter, doc, req) {
+ try {
+ return !filter(doc, req);
+ } catch (err) {
+ var msg = 'Filter function threw: ' + err.toString();
+ return createError(BAD_REQUEST, msg);
+ }
+}
+
+function filterChange(opts) {
+ var req = {};
+ var hasFilter = opts.filter && typeof opts.filter === 'function';
+ req.query = opts.query_params;
+
+ return function filter(change) {
+ if (!change.doc) {
+ // CSG sends events on the changes feed that don't have documents,
+ // this hack makes a whole lot of existing code robust.
+ change.doc = {};
+ }
+
+ var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);
+
+ if (typeof filterReturn === 'object') {
+ return filterReturn;
+ }
+
+ if (filterReturn) {
+ return false;
+ }
+
+ if (!opts.include_docs) {
+ delete change.doc;
+ } else if (!opts.attachments) {
+ for (var att in change.doc._attachments) {
+ /* istanbul ignore else */
+ if (Object.prototype.hasOwnProperty.call(change.doc._attachments, att)) {
+ change.doc._attachments[att].stub = true;
+ }
+ }
+ }
+ return true;
+ };
+}
+
+function flatten(arrs) {
+ var res = [];
+ for (var i = 0, len = arrs.length; i < len; i++) {
+ res = res.concat(arrs[i]);
+ }
+ return res;
+}
+
+// shim for Function.prototype.name,
+// for browsers that don't support it like IE
+
+/* istanbul ignore next */
+function f() {}
+
+var hasName = f.name;
+var res;
+
+// We dont run coverage in IE
+/* istanbul ignore else */
+if (hasName) {
+ res = function (fun) {
+ return fun.name;
+ };
+} else {
+ res = function (fun) {
+ var match = fun.toString().match(/^\s*function\s*(?:(\S+)\s*)?\(/);
+ if (match && match[1]) {
+ return match[1];
+ }
+ else {
+ return '';
+ }
+ };
+}
+
+var res$1 = res;
+
+// Determine id an ID is valid
+// - invalid IDs begin with an underescore that does not begin '_design' or
+// '_local'
+// - any other string value is a valid id
+// Returns the specific error object for each case
+function invalidIdError(id) {
+ var err;
+ if (!id) {
+ err = createError(MISSING_ID);
+ } else if (typeof id !== 'string') {
+ err = createError(INVALID_ID);
+ } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {
+ err = createError(RESERVED_ID);
+ }
+ if (err) {
+ throw err;
+ }
+}
+
+// Checks if a PouchDB object is "remote" or not. This is
+
+function isRemote(db) {
+ if (typeof db._remote === 'boolean') {
+ return db._remote;
+ }
+ /* istanbul ignore next */
+ if (typeof db.type === 'function') {
+ guardedConsole('warn',
+ 'db.type() is deprecated and will be removed in ' +
+ 'a future version of PouchDB');
+ return db.type() === 'http';
+ }
+ /* istanbul ignore next */
+ return false;
+}
+
+function listenerCount(ee, type) {
+ return 'listenerCount' in ee ? ee.listenerCount(type) :
+ EE.listenerCount(ee, type);
+}
+
+function parseDesignDocFunctionName(s) {
+ if (!s) {
+ return null;
+ }
+ var parts = s.split('/');
+ if (parts.length === 2) {
+ return parts;
+ }
+ if (parts.length === 1) {
+ return [s, s];
+ }
+ return null;
+}
+
+function normalizeDesignDocFunctionName(s) {
+ var normalized = parseDesignDocFunctionName(s);
+ return normalized ? normalized.join('/') : null;
+}
+
+function once(fun) {
+ var called = false;
+ return function (...args) {
+ /* istanbul ignore if */
+ if (called) {
+ // this is a smoke test and should never actually happen
+ throw new Error('once called more than once');
+ } else {
+ called = true;
+ fun.apply(this, args);
+ }
+ };
+}
+
+// originally parseUri 1.2.2, now patched by us
+// (c) Steven Levithan
+// MIT License
+var keys = ["source", "protocol", "authority", "userInfo", "user", "password",
+ "host", "port", "relative", "path", "directory", "file", "query", "anchor"];
+var qName ="queryKey";
+var qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;
+
+// use the "loose" parser
+/* eslint no-useless-escape: 0 */
+var parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
+
+function parseUri(str) {
+ var m = parser.exec(str);
+ var uri = {};
+ var i = 14;
+
+ while (i--) {
+ var key = keys[i];
+ var value = m[i] || "";
+ var encoded = ['user', 'password'].indexOf(key) !== -1;
+ uri[key] = encoded ? decodeURIComponent(value) : value;
+ }
+
+ uri[qName] = {};
+ uri[keys[12]].replace(qParser, function ($0, $1, $2) {
+ if ($1) {
+ uri[qName][$1] = $2;
+ }
+ });
+
+ return uri;
+}
+
+// Based on https://github.com/alexdavid/scope-eval v0.0.3
+// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)
+// This is basically just a wrapper around new Function()
+
+function scopeEval(source, scope) {
+ var keys = [];
+ var values = [];
+ for (var key in scope) {
+ if (Object.prototype.hasOwnProperty.call(scope, key)) {
+ keys.push(key);
+ values.push(scope[key]);
+ }
+ }
+ keys.push(source);
+ return Function.apply(null, keys).apply(null, values);
+}
+
+function toPromise(func) {
+ //create the function we will be returning
+ return function (...args) {
+ // Clone arguments
+ args = clone(args);
+ var self = this;
+ // if the last argument is a function, assume its a callback
+ var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;
+ var promise = new Promise(function (fulfill, reject) {
+ var resp;
+ try {
+ var callback = once(function (err, mesg) {
+ if (err) {
+ reject(err);
+ } else {
+ fulfill(mesg);
+ }
+ });
+ // create a callback for this invocation
+ // apply the function in the orig context
+ args.push(callback);
+ resp = func.apply(self, args);
+ if (resp && typeof resp.then === 'function') {
+ fulfill(resp);
+ }
+ } catch (e) {
+ reject(e);
+ }
+ });
+ // if there is a callback, call it back
+ if (usedCB) {
+ promise.then(function (result) {
+ usedCB(null, result);
+ }, usedCB);
+ }
+ return promise;
+ };
+}
+
+// this is essentially the "update sugar" function from daleharvey/pouchdb#1388
+// the diffFun tells us what delta to apply to the doc. it either returns
+// the doc, or false if it doesn't need to do an update after all
+function upsert(db, docId, diffFun) {
+ return db.get(docId)
+ .catch(function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 404) {
+ throw err;
+ }
+ return {};
+ })
+ .then(function (doc) {
+ // the user might change the _rev, so save it for posterity
+ var docRev = doc._rev;
+ var newDoc = diffFun(doc);
+
+ if (!newDoc) {
+ // if the diffFun returns falsy, we short-circuit as
+ // an optimization
+ return {updated: false, rev: docRev};
+ }
+
+ // users aren't allowed to modify these values,
+ // so reset them here
+ newDoc._id = docId;
+ newDoc._rev = docRev;
+ return tryAndPut(db, newDoc, diffFun);
+ });
+}
+
+function tryAndPut(db, doc, diffFun) {
+ return db.put(doc).then(function (res) {
+ return {
+ updated: true,
+ rev: res.rev
+ };
+ }, function (err) {
+ /* istanbul ignore next */
+ if (err.status !== 409) {
+ throw err;
+ }
+ return upsert(db, doc._id, diffFun);
+ });
+}
+
+/**
+ * Creates a new revision string that does NOT include the revision height
+ * For example '56649f1b0506c6ca9fda0746eb0cacdf'
+ */
+function rev(doc, deterministic_revs) {
+ if (!deterministic_revs) {
+ return uuid_1.v4().replace(/-/g, '').toLowerCase();
+ }
+
+ var mutateableDoc = Object.assign({}, doc);
+ delete mutateableDoc._rev_tree;
+ return stringMd5(JSON.stringify(mutateableDoc));
+}
+
+var uuid = uuid_1.v4; // mimic old import, only v4 is ever used elsewhere
+
+export { assign$1 as assign, bulkGet as bulkGetShim, Changes as changesHandler, clone, defaultBackOff, res$2 as explainError, filterChange, flatten, res$1 as functionName, guardedConsole, hasLocalStorage, invalidIdError, isRemote, listenerCount, nextTick, normalizeDesignDocFunctionName as normalizeDdocFunctionName, once, parseDesignDocFunctionName as parseDdocFunctionName, parseUri, pick, rev, scopeEval, toPromise, upsert, uuid };
diff --git a/packages/pouchdb-platform/lib/pouchdb.js b/packages/pouchdb-platform/lib/pouchdb.js
new file mode 100644
index 0000000000..6393c61214
--- /dev/null
+++ b/packages/pouchdb-platform/lib/pouchdb.js
@@ -0,0 +1,7 @@
+import './pouchdb-node.js';
+import PouchDB from 'pouchdb-core';
+export { default } from 'pouchdb-core';
+import 'pouchdb-adapter-leveldb';
+import 'pouchdb-adapter-http';
+import 'pouchdb-mapreduce';
+import 'pouchdb-replication';
diff --git a/packages/pouchdb-platform/lib/sublevel-pouchdb.js b/packages/pouchdb-platform/lib/sublevel-pouchdb.js
new file mode 100644
index 0000000000..3508b14a1a
--- /dev/null
+++ b/packages/pouchdb-platform/lib/sublevel-pouchdb.js
@@ -0,0 +1,3199 @@
+import * as ltgt from 'ltgt';
+import EE from 'node:events';
+import Codec from 'level-codec';
+import { c as commonjsGlobal, g as getDefaultExportFromCjs } from './_commonjsHelpers-7d1333e8.js';
+import Stream from 'stream';
+import require$$2 from 'events';
+import require$$0 from 'buffer';
+import require$$1 from 'util';
+
+function isFunction(f) {
+ return 'function' === typeof f;
+}
+
+function getPrefix(db) {
+ if (isFunction(db.prefix)) {
+ return db.prefix();
+ }
+ return db;
+}
+
+function clone(_obj) {
+ var obj = {};
+ for (var k in _obj) {
+ obj[k] = _obj[k];
+ }
+ return obj;
+}
+
+function nut(db, precodec, codec) {
+ function encodePrefix(prefix, key, opts1, opts2) {
+ return precodec.encode([ prefix, codec.encodeKey(key, opts1, opts2 ) ]);
+ }
+
+ function addEncodings(op, prefix) {
+ if (prefix && prefix.options) {
+ op.keyEncoding =
+ op.keyEncoding || prefix.options.keyEncoding;
+ op.valueEncoding =
+ op.valueEncoding || prefix.options.valueEncoding;
+ }
+ return op;
+ }
+
+ db.open(function () { /* no-op */});
+
+ return {
+ apply: function (ops, opts, cb) {
+ opts = opts || {};
+
+ var batch = [];
+ var i = -1;
+ var len = ops.length;
+
+ while (++i < len) {
+ var op = ops[i];
+ addEncodings(op, op.prefix);
+ op.prefix = getPrefix(op.prefix);
+ batch.push({
+ key: encodePrefix(op.prefix, op.key, opts, op),
+ value: op.type !== 'del' && codec.encodeValue(op.value, opts, op),
+ type: op.type
+ });
+ }
+ db.db.batch(batch, opts, cb);
+ },
+ get: function (key, prefix, opts, cb) {
+ opts.asBuffer = codec.valueAsBuffer(opts);
+ return db.db.get(
+ encodePrefix(prefix, key, opts),
+ opts,
+ function (err, value) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, codec.decodeValue(value, opts));
+ }
+ }
+ );
+ },
+ createDecoder: function (opts) {
+ return function (key, value) {
+ return {
+ key: codec.decodeKey(precodec.decode(key)[1], opts),
+ value: codec.decodeValue(value, opts)
+ };
+ };
+ },
+ isClosed: function isClosed() {
+ return db.isClosed();
+ },
+ close: function close(cb) {
+ return db.close(cb);
+ },
+ iterator: function (_opts) {
+ var opts = clone(_opts || {});
+ var prefix = _opts.prefix || [];
+
+ function encodeKey(key) {
+ return encodePrefix(prefix, key, opts, {});
+ }
+
+ ltgt.toLtgt(_opts, opts, encodeKey, precodec.lowerBound, precodec.upperBound);
+
+ // if these legacy values are in the options, remove them
+
+ opts.prefix = null;
+
+ //************************************************
+ //hard coded defaults, for now...
+ //TODO: pull defaults and encoding out of levelup.
+ opts.keyAsBuffer = opts.valueAsBuffer = false;
+ //************************************************
+
+
+ //this is vital, otherwise limit: undefined will
+ //create an empty stream.
+ /* istanbul ignore next */
+ if ('number' !== typeof opts.limit) {
+ opts.limit = -1;
+ }
+
+ opts.keyAsBuffer = precodec.buffer;
+ opts.valueAsBuffer = codec.valueAsBuffer(opts);
+
+ function wrapIterator(iterator) {
+ return {
+ next: function (cb) {
+ return iterator.next(cb);
+ },
+ end: function (cb) {
+ iterator.end(cb);
+ }
+ };
+ }
+
+ return wrapIterator(db.db.iterator(opts));
+ }
+ };
+}
+
+class NotFoundError extends Error {
+ constructor() {
+ super();
+ this.name = 'NotFoundError';
+ }
+}
+
+var EventEmitter = EE.EventEmitter;
+var version = "6.5.4";
+
+var NOT_FOUND_ERROR = new NotFoundError();
+
+var sublevel = function (nut, prefix, createStream, options) {
+ var emitter = new EventEmitter();
+ emitter.sublevels = {};
+ emitter.options = options;
+
+ emitter.version = version;
+
+ emitter.methods = {};
+ prefix = prefix || [];
+
+ function mergeOpts(opts) {
+ var o = {};
+ var k;
+ if (options) {
+ for (k in options) {
+ if (typeof options[k] !== 'undefined') {
+ o[k] = options[k];
+ }
+ }
+ }
+ if (opts) {
+ for (k in opts) {
+ if (typeof opts[k] !== 'undefined') {
+ o[k] = opts[k];
+ }
+ }
+ }
+ return o;
+ }
+
+ emitter.put = function (key, value, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ nut.apply([{
+ key: key, value: value,
+ prefix: prefix.slice(), type: 'put'
+ }], mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('put', key, value);
+ cb(null);
+ });
+ };
+
+ emitter.prefix = function () {
+ return prefix.slice();
+ };
+
+ emitter.batch = function (ops, opts, cb) {
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+
+ ops = ops.map(function (op) {
+ return {
+ key: op.key,
+ value: op.value,
+ prefix: op.prefix || prefix,
+ keyEncoding: op.keyEncoding, // *
+ valueEncoding: op.valueEncoding, // * (TODO: encodings on sublevel)
+ type: op.type
+ };
+ });
+
+ nut.apply(ops, mergeOpts(opts), function (err) {
+ /* istanbul ignore next */
+ if (err) {
+ return cb(err);
+ }
+ emitter.emit('batch', ops);
+ cb(null);
+ });
+ };
+
+ emitter.get = function (key, opts, cb) {
+ /* istanbul ignore else */
+ if ('function' === typeof opts) {
+ cb = opts;
+ opts = {};
+ }
+ nut.get(key, prefix, mergeOpts(opts), function (err, value) {
+ if (err) {
+ cb(NOT_FOUND_ERROR);
+ } else {
+ cb(null, value);
+ }
+ });
+ };
+
+ emitter.sublevel = function (name, opts) {
+ return emitter.sublevels[name] =
+ emitter.sublevels[name] || sublevel(nut, prefix.concat(name), createStream, mergeOpts(opts));
+ };
+
+ emitter.readStream = emitter.createReadStream = function (opts) {
+ opts = mergeOpts(opts);
+ opts.prefix = prefix;
+ var stream;
+ var it = nut.iterator(opts);
+
+ stream = createStream(opts, nut.createDecoder(opts));
+ stream.setIterator(it);
+
+ return stream;
+ };
+
+ emitter.close = function (cb) {
+ nut.close(cb);
+ };
+
+ emitter.isOpen = nut.isOpen;
+ emitter.isClosed = nut.isClosed;
+
+ return emitter;
+};
+
+var readable = {exports: {}};
+
+var processNextickArgs = {exports: {}};
+
+var hasRequiredProcessNextickArgs;
+
+function requireProcessNextickArgs () {
+ if (hasRequiredProcessNextickArgs) return processNextickArgs.exports;
+ hasRequiredProcessNextickArgs = 1;
+
+ if (typeof process === 'undefined' ||
+ !process.version ||
+ process.version.indexOf('v0.') === 0 ||
+ process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
+ processNextickArgs.exports = { nextTick: nextTick };
+ } else {
+ processNextickArgs.exports = process;
+ }
+
+ function nextTick(fn, arg1, arg2, arg3) {
+ if (typeof fn !== 'function') {
+ throw new TypeError('"callback" argument must be a function');
+ }
+ var len = arguments.length;
+ var args, i;
+ switch (len) {
+ case 0:
+ case 1:
+ return process.nextTick(fn);
+ case 2:
+ return process.nextTick(function afterTickOne() {
+ fn.call(null, arg1);
+ });
+ case 3:
+ return process.nextTick(function afterTickTwo() {
+ fn.call(null, arg1, arg2);
+ });
+ case 4:
+ return process.nextTick(function afterTickThree() {
+ fn.call(null, arg1, arg2, arg3);
+ });
+ default:
+ args = new Array(len - 1);
+ i = 0;
+ while (i < args.length) {
+ args[i++] = arguments[i];
+ }
+ return process.nextTick(function afterTick() {
+ fn.apply(null, args);
+ });
+ }
+ }
+ return processNextickArgs.exports;
+}
+
+var isarray;
+var hasRequiredIsarray;
+
+function requireIsarray () {
+ if (hasRequiredIsarray) return isarray;
+ hasRequiredIsarray = 1;
+ var toString = {}.toString;
+
+ isarray = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+ };
+ return isarray;
+}
+
+var stream;
+var hasRequiredStream;
+
+function requireStream () {
+ if (hasRequiredStream) return stream;
+ hasRequiredStream = 1;
+ stream = Stream;
+ return stream;
+}
+
+var safeBuffer = {exports: {}};
+
+/* eslint-disable node/no-deprecated-api */
+safeBuffer.exports;
+
+var hasRequiredSafeBuffer;
+
+function requireSafeBuffer () {
+ if (hasRequiredSafeBuffer) return safeBuffer.exports;
+ hasRequiredSafeBuffer = 1;
+ (function (module, exports) {
+ var buffer = require$$0;
+ var Buffer = buffer.Buffer;
+
+ // alternative to using Object.keys for old browsers
+ function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key];
+ }
+ }
+ if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer;
+ } else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports);
+ exports.Buffer = SafeBuffer;
+ }
+
+ function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+ }
+
+ // Copy static methods from Buffer
+ copyProps(Buffer, SafeBuffer);
+
+ SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+ };
+
+ SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size);
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding);
+ } else {
+ buf.fill(fill);
+ }
+ } else {
+ buf.fill(0);
+ }
+ return buf
+ };
+
+ SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+ };
+
+ SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+ };
+ } (safeBuffer, safeBuffer.exports));
+ return safeBuffer.exports;
+}
+
+var util = {};
+
+var hasRequiredUtil;
+
+function requireUtil () {
+ if (hasRequiredUtil) return util;
+ hasRequiredUtil = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // NOTE: These type checking functions intentionally don't use `instanceof`
+ // because it is fragile and can be easily faked with `Object.create()`.
+
+ function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+ }
+ util.isArray = isArray;
+
+ function isBoolean(arg) {
+ return typeof arg === 'boolean';
+ }
+ util.isBoolean = isBoolean;
+
+ function isNull(arg) {
+ return arg === null;
+ }
+ util.isNull = isNull;
+
+ function isNullOrUndefined(arg) {
+ return arg == null;
+ }
+ util.isNullOrUndefined = isNullOrUndefined;
+
+ function isNumber(arg) {
+ return typeof arg === 'number';
+ }
+ util.isNumber = isNumber;
+
+ function isString(arg) {
+ return typeof arg === 'string';
+ }
+ util.isString = isString;
+
+ function isSymbol(arg) {
+ return typeof arg === 'symbol';
+ }
+ util.isSymbol = isSymbol;
+
+ function isUndefined(arg) {
+ return arg === void 0;
+ }
+ util.isUndefined = isUndefined;
+
+ function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+ }
+ util.isRegExp = isRegExp;
+
+ function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+ }
+ util.isObject = isObject;
+
+ function isDate(d) {
+ return objectToString(d) === '[object Date]';
+ }
+ util.isDate = isDate;
+
+ function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+ }
+ util.isError = isError;
+
+ function isFunction(arg) {
+ return typeof arg === 'function';
+ }
+ util.isFunction = isFunction;
+
+ function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+ }
+ util.isPrimitive = isPrimitive;
+
+ util.isBuffer = require$$0.Buffer.isBuffer;
+
+ function objectToString(o) {
+ return Object.prototype.toString.call(o);
+ }
+ return util;
+}
+
+var inherits = {exports: {}};
+
+var inherits_browser = {exports: {}};
+
+var hasRequiredInherits_browser;
+
+function requireInherits_browser () {
+ if (hasRequiredInherits_browser) return inherits_browser.exports;
+ hasRequiredInherits_browser = 1;
+ if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ }
+ };
+ } else {
+ // old school shim for old browsers
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ var TempCtor = function () {};
+ TempCtor.prototype = superCtor.prototype;
+ ctor.prototype = new TempCtor();
+ ctor.prototype.constructor = ctor;
+ }
+ };
+ }
+ return inherits_browser.exports;
+}
+
+var hasRequiredInherits;
+
+function requireInherits () {
+ if (hasRequiredInherits) return inherits.exports;
+ hasRequiredInherits = 1;
+ try {
+ var util = require('util');
+ /* istanbul ignore next */
+ if (typeof util.inherits !== 'function') throw '';
+ inherits.exports = util.inherits;
+ } catch (e) {
+ /* istanbul ignore next */
+ inherits.exports = requireInherits_browser();
+ }
+ return inherits.exports;
+}
+
+var BufferList = {exports: {}};
+
+BufferList.exports;
+
+var hasRequiredBufferList;
+
+function requireBufferList () {
+ if (hasRequiredBufferList) return BufferList.exports;
+ hasRequiredBufferList = 1;
+ (function (module) {
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var util = require$$1;
+
+ function copyBuffer(src, target, offset) {
+ src.copy(target, offset);
+ }
+
+ module.exports = function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+
+ BufferList.prototype.push = function push(v) {
+ var entry = { data: v, next: null };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ };
+
+ BufferList.prototype.unshift = function unshift(v) {
+ var entry = { data: v, next: this.head };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ };
+
+ BufferList.prototype.shift = function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ };
+
+ BufferList.prototype.clear = function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ };
+
+ BufferList.prototype.join = function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) {
+ ret += s + p.data;
+ }return ret;
+ };
+
+ BufferList.prototype.concat = function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ if (this.length === 1) return this.head.data;
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ };
+
+ return BufferList;
+ }();
+
+ if (util && util.inspect && util.inspect.custom) {
+ module.exports.prototype[util.inspect.custom] = function () {
+ var obj = util.inspect({ length: this.length });
+ return this.constructor.name + ' ' + obj;
+ };
+ }
+ } (BufferList));
+ return BufferList.exports;
+}
+
+var destroy_1;
+var hasRequiredDestroy;
+
+function requireDestroy () {
+ if (hasRequiredDestroy) return destroy_1;
+ hasRequiredDestroy = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
+ pna.nextTick(emitErrorNT, this, err);
+ }
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ pna.nextTick(emitErrorNT, _this, err);
+ if (_this._writableState) {
+ _this._writableState.errorEmitted = true;
+ }
+ } else if (cb) {
+ cb(err);
+ }
+ });
+
+ return this;
+ }
+
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+
+ destroy_1 = {
+ destroy: destroy,
+ undestroy: undestroy
+ };
+ return destroy_1;
+}
+
+var node;
+var hasRequiredNode;
+
+function requireNode () {
+ if (hasRequiredNode) return node;
+ hasRequiredNode = 1;
+ /**
+ * For Node.js, simply re-export the core `util.deprecate` function.
+ */
+
+ node = require$$1.deprecate;
+ return node;
+}
+
+var _stream_writable;
+var hasRequired_stream_writable;
+
+function require_stream_writable () {
+ if (hasRequired_stream_writable) return _stream_writable;
+ hasRequired_stream_writable = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ _stream_writable = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
+ /**/
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var OurUint8Array = commonjsGlobal.Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+
+ var destroyImpl = requireDestroy();
+
+ util.inherits(Writable, Stream);
+
+ function nop() {}
+
+ function WritableState(options, stream) {
+ Duplex = Duplex || require_stream_duplex();
+
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ var isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var writableHwm = options.writableHighWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+
+ if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = Math.floor(this.highWaterMark);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function () {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function (object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function (object) {
+ return object instanceof this;
+ };
+ }
+
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+ if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
+ return new Writable(options);
+ }
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+
+ if (typeof options.writev === 'function') this._writev = options.writev;
+
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ this.emit('error', new Error('Cannot pipe, not readable'));
+ };
+
+ function writeAfterEnd(stream, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ pna.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ var er = false;
+
+ if (chunk === null) {
+ er = new TypeError('May not write null values to stream');
+ } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ if (er) {
+ stream.emit('error', er);
+ pna.nextTick(cb, er);
+ valid = false;
+ }
+ return valid;
+ }
+
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+
+ if (typeof cb !== 'function') cb = nop;
+
+ if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+
+ return ret;
+ };
+
+ Writable.prototype.cork = function () {
+ var state = this._writableState;
+
+ state.corked++;
+ };
+
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+
+ return ret;
+ }
+
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ pna.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ pna.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state);
+
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ /**/
+ asyncWrite(afterWrite, stream, state, finished, cb);
+ /**/
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new Error('_write() is not implemented'));
+ };
+
+ Writable.prototype._writev = null;
+
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished) endWritable(this, state, cb);
+ };
+
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ stream.emit('error', err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function') {
+ state.pendingcb++;
+ state.finalCalled = true;
+ pna.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ }
+ }
+ return need;
+ }
+
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+ if (state.corkedRequestsFree) {
+ state.corkedRequestsFree.next = corkReq;
+ } else {
+ state.corkedRequestsFree = corkReq;
+ }
+ }
+
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ get: function () {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ this.end();
+ cb(err);
+ };
+ return _stream_writable;
+}
+
+var _stream_duplex;
+var hasRequired_stream_duplex;
+
+function require_stream_duplex () {
+ if (hasRequired_stream_duplex) return _stream_duplex;
+ hasRequired_stream_duplex = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) {
+ keys.push(key);
+ }return keys;
+ };
+ /**/
+
+ _stream_duplex = Duplex;
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ var Readable = require_stream_readable();
+ var Writable = require_stream_writable();
+
+ util.inherits(Duplex, Readable);
+
+ {
+ // avoid scope creep, the keys array can then be collected
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false) this.readable = false;
+
+ if (options && options.writable === false) this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+
+ this.once('end', onend);
+ }
+
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ pna.nextTick(onEndNT, this);
+ }
+
+ function onEndNT(self) {
+ self.end();
+ }
+
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ get: function () {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+
+ Duplex.prototype._destroy = function (err, cb) {
+ this.push(null);
+ this.end();
+
+ pna.nextTick(cb, err);
+ };
+ return _stream_duplex;
+}
+
+var string_decoder = {};
+
+var hasRequiredString_decoder;
+
+function requireString_decoder () {
+ if (hasRequiredString_decoder) return string_decoder;
+ hasRequiredString_decoder = 1;
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ /**/
+
+ var isEncoding = Buffer.isEncoding || function (encoding) {
+ encoding = '' + encoding;
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ function _normalizeEncoding(enc) {
+ if (!enc) return 'utf8';
+ var retried;
+ while (true) {
+ switch (enc) {
+ case 'utf8':
+ case 'utf-8':
+ return 'utf8';
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return 'utf16le';
+ case 'latin1':
+ case 'binary':
+ return 'latin1';
+ case 'base64':
+ case 'ascii':
+ case 'hex':
+ return enc;
+ default:
+ if (retried) return; // undefined
+ enc = ('' + enc).toLowerCase();
+ retried = true;
+ }
+ }
+ }
+ // Do not cache `Buffer.isEncoding` when checking encoding names as some
+ // modules monkey-patch it to support additional encodings
+ function normalizeEncoding(enc) {
+ var nenc = _normalizeEncoding(enc);
+ if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+ return nenc || enc;
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters.
+ string_decoder.StringDecoder = StringDecoder;
+ function StringDecoder(encoding) {
+ this.encoding = normalizeEncoding(encoding);
+ var nb;
+ switch (this.encoding) {
+ case 'utf16le':
+ this.text = utf16Text;
+ this.end = utf16End;
+ nb = 4;
+ break;
+ case 'utf8':
+ this.fillLast = utf8FillLast;
+ nb = 4;
+ break;
+ case 'base64':
+ this.text = base64Text;
+ this.end = base64End;
+ nb = 3;
+ break;
+ default:
+ this.write = simpleWrite;
+ this.end = simpleEnd;
+ return;
+ }
+ this.lastNeed = 0;
+ this.lastTotal = 0;
+ this.lastChar = Buffer.allocUnsafe(nb);
+ }
+
+ StringDecoder.prototype.write = function (buf) {
+ if (buf.length === 0) return '';
+ var r;
+ var i;
+ if (this.lastNeed) {
+ r = this.fillLast(buf);
+ if (r === undefined) return '';
+ i = this.lastNeed;
+ this.lastNeed = 0;
+ } else {
+ i = 0;
+ }
+ if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+ return r || '';
+ };
+
+ StringDecoder.prototype.end = utf8End;
+
+ // Returns only complete characters in a Buffer
+ StringDecoder.prototype.text = utf8Text;
+
+ // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+ StringDecoder.prototype.fillLast = function (buf) {
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+ this.lastNeed -= buf.length;
+ };
+
+ // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+ // continuation byte. If an invalid byte is detected, -2 is returned.
+ function utf8CheckByte(byte) {
+ if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+ return byte >> 6 === 0x02 ? -1 : -2;
+ }
+
+ // Checks at most 3 bytes at the end of a Buffer in order to detect an
+ // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+ // needed to complete the UTF-8 character (if applicable) are returned.
+ function utf8CheckIncomplete(self, buf, i) {
+ var j = buf.length - 1;
+ if (j < i) return 0;
+ var nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 1;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 2;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) {
+ if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+ }
+ return nb;
+ }
+ return 0;
+ }
+
+ // Validates as many continuation bytes for a multi-byte UTF-8 character as
+ // needed or are available. If we see a non-continuation byte where we expect
+ // one, we "replace" the validated continuation bytes we've seen so far with
+ // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
+ // behavior. The continuation byte check is included three times in the case
+ // where all of the continuation bytes for a character exist in the same buffer.
+ // It is also done this way as a slight performance increase instead of using a
+ // loop.
+ function utf8CheckExtraBytes(self, buf, p) {
+ if ((buf[0] & 0xC0) !== 0x80) {
+ self.lastNeed = 0;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 1 && buf.length > 1) {
+ if ((buf[1] & 0xC0) !== 0x80) {
+ self.lastNeed = 1;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 2 && buf.length > 2) {
+ if ((buf[2] & 0xC0) !== 0x80) {
+ self.lastNeed = 2;
+ return '\ufffd';
+ }
+ }
+ }
+ }
+
+ // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+ function utf8FillLast(buf) {
+ var p = this.lastTotal - this.lastNeed;
+ var r = utf8CheckExtraBytes(this, buf);
+ if (r !== undefined) return r;
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, p, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, p, 0, buf.length);
+ this.lastNeed -= buf.length;
+ }
+
+ // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+ // partial character, the character's bytes are buffered until the required
+ // number of bytes are available.
+ function utf8Text(buf, i) {
+ var total = utf8CheckIncomplete(this, buf, i);
+ if (!this.lastNeed) return buf.toString('utf8', i);
+ this.lastTotal = total;
+ var end = buf.length - (total - this.lastNeed);
+ buf.copy(this.lastChar, 0, end);
+ return buf.toString('utf8', i, end);
+ }
+
+ // For UTF-8, a replacement character is added when ending on a partial
+ // character.
+ function utf8End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + '\ufffd';
+ return r;
+ }
+
+ // UTF-16LE typically needs two bytes per character, but even if we have an even
+ // number of bytes available, we need to check if we end on a leading/high
+ // surrogate. In that case, we need to wait for the next two bytes in order to
+ // decode the last character properly.
+ function utf16Text(buf, i) {
+ if ((buf.length - i) % 2 === 0) {
+ var r = buf.toString('utf16le', i);
+ if (r) {
+ var c = r.charCodeAt(r.length - 1);
+ if (c >= 0xD800 && c <= 0xDBFF) {
+ this.lastNeed = 2;
+ this.lastTotal = 4;
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ return r.slice(0, -1);
+ }
+ }
+ return r;
+ }
+ this.lastNeed = 1;
+ this.lastTotal = 2;
+ this.lastChar[0] = buf[buf.length - 1];
+ return buf.toString('utf16le', i, buf.length - 1);
+ }
+
+ // For UTF-16LE we do not explicitly append special replacement characters if we
+ // end on a partial character, we simply let v8 handle that.
+ function utf16End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) {
+ var end = this.lastTotal - this.lastNeed;
+ return r + this.lastChar.toString('utf16le', 0, end);
+ }
+ return r;
+ }
+
+ function base64Text(buf, i) {
+ var n = (buf.length - i) % 3;
+ if (n === 0) return buf.toString('base64', i);
+ this.lastNeed = 3 - n;
+ this.lastTotal = 3;
+ if (n === 1) {
+ this.lastChar[0] = buf[buf.length - 1];
+ } else {
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ }
+ return buf.toString('base64', i, buf.length - n);
+ }
+
+ function base64End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+ return r;
+ }
+
+ // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+ function simpleWrite(buf) {
+ return buf.toString(this.encoding);
+ }
+
+ function simpleEnd(buf) {
+ return buf && buf.length ? this.write(buf) : '';
+ }
+ return string_decoder;
+}
+
+var _stream_readable;
+var hasRequired_stream_readable;
+
+function require_stream_readable () {
+ if (hasRequired_stream_readable) return _stream_readable;
+ hasRequired_stream_readable = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ _stream_readable = Readable;
+
+ /**/
+ var isArray = requireIsarray();
+ /**/
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$2.EventEmitter;
+
+ var EElistenerCount = function (emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var OurUint8Array = commonjsGlobal.Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ /**/
+ var debugUtil = require$$1;
+ var debug = void 0;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function () {};
+ }
+ /**/
+
+ var BufferList = requireBufferList();
+ var destroyImpl = requireDestroy();
+ var StringDecoder;
+
+ util.inherits(Readable, Stream);
+
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+
+ function ReadableState(options, stream) {
+ Duplex = Duplex || require_stream_duplex();
+
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ var isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var readableHwm = options.readableHighWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+
+ if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = Math.floor(this.highWaterMark);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+
+ Stream.call(this);
+ }
+
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ get: function () {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ this.push(null);
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+
+ if (addToFront) {
+ if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ stream.emit('error', new Error('stream.push() after EOF'));
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+ }
+
+ return needMoreData(state);
+ }
+
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+ }
+
+ // if it's past the high water mark, we can push in some more.
+ // Also, if we have no data yet, we can stand some
+ // more bytes. This is to work around cases where hwm=0,
+ // such as the repl. Also, if the push() triggered a
+ // readable event, and the user called read(largeNumber) such that
+ // needReadable was set, then we ought to push more, so that another
+ // 'readable' event will be triggered.
+ function needMoreData(state) {
+ return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
+ }
+
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+ };
+
+ // Don't raise the hwm > 8MB
+ var MAX_HWM = 0x800000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+
+ if (ret === null) {
+ state.needReadable = true;
+ n = 0;
+ } else {
+ state.length -= n;
+ }
+
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+
+ if (ret !== null) this.emit('data', ret);
+
+ return ret;
+ };
+
+ function onEofChunk(stream, state) {
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
+ }
+ }
+
+ function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ pna.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+
+ function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;else len = state.length;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ this.emit('error', new Error('_read() is not implemented'));
+ };
+
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+
+ // If the user pushes more data while we're writing to dest then we'll end up
+ // in ondata again. However, we only want to increase awaitDrain once because
+ // dest will only emit one 'drain' event for the multiple writes.
+ // => Introduce a guard on increasing awaitDrain.
+ var increasedAwaitDrain = false;
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ increasedAwaitDrain = false;
+ var ret = dest.write(chunk);
+ if (false === ret && !increasedAwaitDrain) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ increasedAwaitDrain = true;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+ };
+
+ function pipeOnDrain(src) {
+ return function () {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = { hasUnpiped: false };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++) {
+ dests[i].emit('unpipe', this, unpipeInfo);
+ }return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this, unpipeInfo);
+
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+
+ if (ev === 'data') {
+ // Start flowing on next tick if stream isn't explicitly paused
+ if (this._readableState.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ var state = this._readableState;
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.emittedReadable = false;
+ if (!state.reading) {
+ pna.nextTick(nReadingNextTick, this);
+ } else if (state.length) {
+ emitReadable(this);
+ }
+ }
+ }
+
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ resume(this, state);
+ }
+ return this;
+ };
+
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ pna.nextTick(resume_, stream, state);
+ }
+ }
+
+ function resume_(stream, state) {
+ if (!state.reading) {
+ debug('resume read 0');
+ stream.read(0);
+ }
+
+ state.resumeScheduled = false;
+ state.awaitDrain = 0;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+ };
+
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null) {}
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+
+ var state = this._readableState;
+ var paused = false;
+
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+
+ _this.push(null);
+ });
+
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function (method) {
+ return function () {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return this;
+ };
+
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._readableState.highWaterMark;
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = fromListPartial(n, state.buffer, state.decoder);
+ }
+
+ return ret;
+ }
+
+ // Extracts only enough buffered data to satisfy the amount requested.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromListPartial(n, list, hasStrings) {
+ var ret;
+ if (n < list.head.data.length) {
+ // slice is the same for buffers and strings
+ ret = list.head.data.slice(0, n);
+ list.head.data = list.head.data.slice(n);
+ } else if (n === list.head.data.length) {
+ // first chunk is a perfect match
+ ret = list.shift();
+ } else {
+ // result spans more than one buffer
+ ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
+ }
+ return ret;
+ }
+
+ // Copies a specified amount of characters from the list of buffered data
+ // chunks.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function copyFromBufferString(n, list) {
+ var p = list.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+ }
+
+ // Copies a specified amount of bytes from the list of buffered data chunks.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function copyFromBuffer(n, list) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = list.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+ }
+
+ function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ pna.nextTick(endReadableNT, state, stream);
+ }
+ }
+
+ function endReadableNT(state, stream) {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ }
+
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable;
+}
+
+var _stream_transform;
+var hasRequired_stream_transform;
+
+function require_stream_transform () {
+ if (hasRequired_stream_transform) return _stream_transform;
+ hasRequired_stream_transform = 1;
+
+ _stream_transform = Transform;
+
+ var Duplex = require_stream_duplex();
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ util.inherits(Transform, Duplex);
+
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb) {
+ return this.emit('error', new Error('write callback called multiple times'));
+ }
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (data != null) // single equals check for both `null` and `undefined`
+ this.push(data);
+
+ cb(er);
+
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+
+ function prefinish() {
+ var _this = this;
+
+ if (typeof this._flush === 'function') {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ throw new Error('_transform() is not implemented');
+ };
+
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+
+ if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+
+ Transform.prototype._destroy = function (err, cb) {
+ var _this2 = this;
+
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ _this2.emit('close');
+ });
+ };
+
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+
+ if (data != null) // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
+
+ if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
+
+ return stream.push(null);
+ }
+ return _stream_transform;
+}
+
+var _stream_passthrough;
+var hasRequired_stream_passthrough;
+
+function require_stream_passthrough () {
+ if (hasRequired_stream_passthrough) return _stream_passthrough;
+ hasRequired_stream_passthrough = 1;
+
+ _stream_passthrough = PassThrough;
+
+ var Transform = require_stream_transform();
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ util.inherits(PassThrough, Transform);
+
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+
+ Transform.call(this, options);
+ }
+
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough;
+}
+
+readable.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1;
+ exports = module.exports = Stream$1.Readable;
+ exports.Readable = Stream$1.Readable;
+ exports.Writable = Stream$1.Writable;
+ exports.Duplex = Stream$1.Duplex;
+ exports.Transform = Stream$1.Transform;
+ exports.PassThrough = Stream$1.PassThrough;
+ exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable();
+ exports.Duplex = require_stream_duplex();
+ exports.Transform = require_stream_transform();
+ exports.PassThrough = require_stream_passthrough();
+ }
+} (readable, readable.exports));
+
+var readableExports = readable.exports;
+var ReadableStreamCore = /*@__PURE__*/getDefaultExportFromCjs(readableExports);
+
+/* Copyright (c) 2012-2014 LevelUP contributors
+ * See list at
+ * MIT License
+ */
+
+var Readable = ReadableStreamCore.Readable;
+
+function createClass(parent, init) {
+ let klass = function (...args) {
+ if (!(this instanceof klass)) {
+ return new klass(...args);
+ }
+ init.apply(this, args);
+ };
+ klass.prototype = Object.create(parent.prototype, {
+ constructor: { value: klass }
+ });
+ return klass;
+}
+
+class ReadStreamInternal extends Readable {
+ constructor(options, makeData) {
+ super({ objectMode: true, highWaterMark: options.highWaterMark });
+ this._setup(options, makeData);
+ }
+
+ _setup(options, makeData) {
+ super.constructor({ objectMode: true, highWaterMark: options.highWaterMark });
+
+ // purely to keep `db` around until we're done so it's not GCed if the user doesn't keep a ref
+ this._waiting = false;
+ this._options = options;
+ this._makeData = makeData;
+ }
+
+ setIterator(it) {
+ this._iterator = it;
+ /* istanbul ignore if */
+ if (this._destroyed) {
+ return it.end(function () {});
+ }
+ /* istanbul ignore if */
+ if (this._waiting) {
+ this._waiting = false;
+ return this._read();
+ }
+ return this;
+ }
+
+ _cleanup(err) {
+ if (this._destroyed) {
+ return;
+ }
+
+ this._destroyed = true;
+
+ var self = this;
+ /* istanbul ignore if */
+ if (err && err.message !== 'iterator has ended') {
+ self.emit('error', err);
+ }
+
+ /* istanbul ignore else */
+ if (self._iterator) {
+ self._iterator.end(function () {
+ self._iterator = null;
+ self.emit('close');
+ });
+ } else {
+ self.emit('close');
+ }
+ }
+
+ destroy() {
+ this._cleanup();
+ }
+
+ _read() {
+ var self = this;
+ /* istanbul ignore if */
+ if (self._destroyed) {
+ return;
+ }
+ /* istanbul ignore if */
+ if (!self._iterator) {
+ return this._waiting = true;
+ }
+
+ self._iterator.next(function (err, key, value) {
+ if (err || (key === undefined && value === undefined)) {
+ if (!err && !self._destroyed) {
+ self.push(null);
+ }
+ return self._cleanup(err);
+ }
+
+
+ value = self._makeData(key, value);
+ if (!self._destroyed) {
+ self.push(value);
+ }
+ });
+ }
+}
+
+const ReadStream = createClass(ReadStreamInternal, function (options, makeData) {
+ ReadStreamInternal.prototype._setup.call(this, options, makeData);
+});
+
+var precodec = {
+ encode: function (decodedKey) {
+ return '\xff' + decodedKey[0] + '\xff' + decodedKey[1];
+ },
+ decode: function (encodedKeyAsBuffer) {
+ var str = encodedKeyAsBuffer.toString();
+ var idx = str.indexOf('\xff', 1);
+ return [str.substring(1, idx), str.substring(idx + 1)];
+ },
+ lowerBound: '\x00',
+ upperBound: '\xff'
+};
+
+var codec = new Codec();
+
+function sublevelPouch(db) {
+ return sublevel(nut(db, precodec, codec), [], ReadStream, db.options);
+}
+
+export { sublevelPouch as default };
diff --git a/packages/pouchdb-platform/lib/through2-358f03fa.js b/packages/pouchdb-platform/lib/through2-358f03fa.js
new file mode 100644
index 0000000000..7b79557c05
--- /dev/null
+++ b/packages/pouchdb-platform/lib/through2-358f03fa.js
@@ -0,0 +1,2928 @@
+import Stream from 'stream';
+import { c as commonjsGlobal } from './_commonjsHelpers-7d1333e8.js';
+import require$$2 from 'events';
+import require$$0 from 'buffer';
+import require$$1 from 'util';
+
+var through2$1 = {exports: {}};
+
+var readable = {exports: {}};
+
+var processNextickArgs = {exports: {}};
+
+var hasRequiredProcessNextickArgs;
+
+function requireProcessNextickArgs () {
+ if (hasRequiredProcessNextickArgs) return processNextickArgs.exports;
+ hasRequiredProcessNextickArgs = 1;
+
+ if (typeof process === 'undefined' ||
+ !process.version ||
+ process.version.indexOf('v0.') === 0 ||
+ process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
+ processNextickArgs.exports = { nextTick: nextTick };
+ } else {
+ processNextickArgs.exports = process;
+ }
+
+ function nextTick(fn, arg1, arg2, arg3) {
+ if (typeof fn !== 'function') {
+ throw new TypeError('"callback" argument must be a function');
+ }
+ var len = arguments.length;
+ var args, i;
+ switch (len) {
+ case 0:
+ case 1:
+ return process.nextTick(fn);
+ case 2:
+ return process.nextTick(function afterTickOne() {
+ fn.call(null, arg1);
+ });
+ case 3:
+ return process.nextTick(function afterTickTwo() {
+ fn.call(null, arg1, arg2);
+ });
+ case 4:
+ return process.nextTick(function afterTickThree() {
+ fn.call(null, arg1, arg2, arg3);
+ });
+ default:
+ args = new Array(len - 1);
+ i = 0;
+ while (i < args.length) {
+ args[i++] = arguments[i];
+ }
+ return process.nextTick(function afterTick() {
+ fn.apply(null, args);
+ });
+ }
+ }
+ return processNextickArgs.exports;
+}
+
+var isarray;
+var hasRequiredIsarray;
+
+function requireIsarray () {
+ if (hasRequiredIsarray) return isarray;
+ hasRequiredIsarray = 1;
+ var toString = {}.toString;
+
+ isarray = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+ };
+ return isarray;
+}
+
+var stream;
+var hasRequiredStream;
+
+function requireStream () {
+ if (hasRequiredStream) return stream;
+ hasRequiredStream = 1;
+ stream = Stream;
+ return stream;
+}
+
+var safeBuffer = {exports: {}};
+
+/* eslint-disable node/no-deprecated-api */
+safeBuffer.exports;
+
+var hasRequiredSafeBuffer;
+
+function requireSafeBuffer () {
+ if (hasRequiredSafeBuffer) return safeBuffer.exports;
+ hasRequiredSafeBuffer = 1;
+ (function (module, exports) {
+ var buffer = require$$0;
+ var Buffer = buffer.Buffer;
+
+ // alternative to using Object.keys for old browsers
+ function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key];
+ }
+ }
+ if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer;
+ } else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports);
+ exports.Buffer = SafeBuffer;
+ }
+
+ function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+ }
+
+ // Copy static methods from Buffer
+ copyProps(Buffer, SafeBuffer);
+
+ SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+ };
+
+ SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size);
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding);
+ } else {
+ buf.fill(fill);
+ }
+ } else {
+ buf.fill(0);
+ }
+ return buf
+ };
+
+ SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+ };
+
+ SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+ };
+ } (safeBuffer, safeBuffer.exports));
+ return safeBuffer.exports;
+}
+
+var util = {};
+
+var hasRequiredUtil;
+
+function requireUtil () {
+ if (hasRequiredUtil) return util;
+ hasRequiredUtil = 1;
+ // Copyright Joyent, Inc. and other Node contributors.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a
+ // copy of this software and associated documentation files (the
+ // "Software"), to deal in the Software without restriction, including
+ // without limitation the rights to use, copy, modify, merge, publish,
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
+ // persons to whom the Software is furnished to do so, subject to the
+ // following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included
+ // in all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ // NOTE: These type checking functions intentionally don't use `instanceof`
+ // because it is fragile and can be easily faked with `Object.create()`.
+
+ function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+ }
+ util.isArray = isArray;
+
+ function isBoolean(arg) {
+ return typeof arg === 'boolean';
+ }
+ util.isBoolean = isBoolean;
+
+ function isNull(arg) {
+ return arg === null;
+ }
+ util.isNull = isNull;
+
+ function isNullOrUndefined(arg) {
+ return arg == null;
+ }
+ util.isNullOrUndefined = isNullOrUndefined;
+
+ function isNumber(arg) {
+ return typeof arg === 'number';
+ }
+ util.isNumber = isNumber;
+
+ function isString(arg) {
+ return typeof arg === 'string';
+ }
+ util.isString = isString;
+
+ function isSymbol(arg) {
+ return typeof arg === 'symbol';
+ }
+ util.isSymbol = isSymbol;
+
+ function isUndefined(arg) {
+ return arg === void 0;
+ }
+ util.isUndefined = isUndefined;
+
+ function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+ }
+ util.isRegExp = isRegExp;
+
+ function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+ }
+ util.isObject = isObject;
+
+ function isDate(d) {
+ return objectToString(d) === '[object Date]';
+ }
+ util.isDate = isDate;
+
+ function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+ }
+ util.isError = isError;
+
+ function isFunction(arg) {
+ return typeof arg === 'function';
+ }
+ util.isFunction = isFunction;
+
+ function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+ }
+ util.isPrimitive = isPrimitive;
+
+ util.isBuffer = require$$0.Buffer.isBuffer;
+
+ function objectToString(o) {
+ return Object.prototype.toString.call(o);
+ }
+ return util;
+}
+
+var inherits$1 = {exports: {}};
+
+var inherits_browser = {exports: {}};
+
+var hasRequiredInherits_browser;
+
+function requireInherits_browser () {
+ if (hasRequiredInherits_browser) return inherits_browser.exports;
+ hasRequiredInherits_browser = 1;
+ if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ }
+ };
+ } else {
+ // old school shim for old browsers
+ inherits_browser.exports = function inherits(ctor, superCtor) {
+ if (superCtor) {
+ ctor.super_ = superCtor;
+ var TempCtor = function () {};
+ TempCtor.prototype = superCtor.prototype;
+ ctor.prototype = new TempCtor();
+ ctor.prototype.constructor = ctor;
+ }
+ };
+ }
+ return inherits_browser.exports;
+}
+
+var hasRequiredInherits;
+
+function requireInherits () {
+ if (hasRequiredInherits) return inherits$1.exports;
+ hasRequiredInherits = 1;
+ try {
+ var util = require('util');
+ /* istanbul ignore next */
+ if (typeof util.inherits !== 'function') throw '';
+ inherits$1.exports = util.inherits;
+ } catch (e) {
+ /* istanbul ignore next */
+ inherits$1.exports = requireInherits_browser();
+ }
+ return inherits$1.exports;
+}
+
+var BufferList = {exports: {}};
+
+BufferList.exports;
+
+var hasRequiredBufferList;
+
+function requireBufferList () {
+ if (hasRequiredBufferList) return BufferList.exports;
+ hasRequiredBufferList = 1;
+ (function (module) {
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var util = require$$1;
+
+ function copyBuffer(src, target, offset) {
+ src.copy(target, offset);
+ }
+
+ module.exports = function () {
+ function BufferList() {
+ _classCallCheck(this, BufferList);
+
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+ }
+
+ BufferList.prototype.push = function push(v) {
+ var entry = { data: v, next: null };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+ };
+
+ BufferList.prototype.unshift = function unshift(v) {
+ var entry = { data: v, next: this.head };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+ };
+
+ BufferList.prototype.shift = function shift() {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+ };
+
+ BufferList.prototype.clear = function clear() {
+ this.head = this.tail = null;
+ this.length = 0;
+ };
+
+ BufferList.prototype.join = function join(s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) {
+ ret += s + p.data;
+ }return ret;
+ };
+
+ BufferList.prototype.concat = function concat(n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ copyBuffer(p.data, ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+ };
+
+ return BufferList;
+ }();
+
+ if (util && util.inspect && util.inspect.custom) {
+ module.exports.prototype[util.inspect.custom] = function () {
+ var obj = util.inspect({ length: this.length });
+ return this.constructor.name + ' ' + obj;
+ };
+ }
+ } (BufferList));
+ return BufferList.exports;
+}
+
+var destroy_1;
+var hasRequiredDestroy;
+
+function requireDestroy () {
+ if (hasRequiredDestroy) return destroy_1;
+ hasRequiredDestroy = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ // undocumented cb() API, needed for core, not for public API
+ function destroy(err, cb) {
+ var _this = this;
+
+ var readableDestroyed = this._readableState && this._readableState.destroyed;
+ var writableDestroyed = this._writableState && this._writableState.destroyed;
+
+ if (readableDestroyed || writableDestroyed) {
+ if (cb) {
+ cb(err);
+ } else if (err) {
+ if (!this._writableState) {
+ pna.nextTick(emitErrorNT, this, err);
+ } else if (!this._writableState.errorEmitted) {
+ this._writableState.errorEmitted = true;
+ pna.nextTick(emitErrorNT, this, err);
+ }
+ }
+
+ return this;
+ }
+
+ // we set destroyed to true before firing error callbacks in order
+ // to make it re-entrance safe in case destroy() is called within callbacks
+
+ if (this._readableState) {
+ this._readableState.destroyed = true;
+ }
+
+ // if this is a duplex stream mark the writable part as destroyed as well
+ if (this._writableState) {
+ this._writableState.destroyed = true;
+ }
+
+ this._destroy(err || null, function (err) {
+ if (!cb && err) {
+ if (!_this._writableState) {
+ pna.nextTick(emitErrorNT, _this, err);
+ } else if (!_this._writableState.errorEmitted) {
+ _this._writableState.errorEmitted = true;
+ pna.nextTick(emitErrorNT, _this, err);
+ }
+ } else if (cb) {
+ cb(err);
+ }
+ });
+
+ return this;
+ }
+
+ function undestroy() {
+ if (this._readableState) {
+ this._readableState.destroyed = false;
+ this._readableState.reading = false;
+ this._readableState.ended = false;
+ this._readableState.endEmitted = false;
+ }
+
+ if (this._writableState) {
+ this._writableState.destroyed = false;
+ this._writableState.ended = false;
+ this._writableState.ending = false;
+ this._writableState.finalCalled = false;
+ this._writableState.prefinished = false;
+ this._writableState.finished = false;
+ this._writableState.errorEmitted = false;
+ }
+ }
+
+ function emitErrorNT(self, err) {
+ self.emit('error', err);
+ }
+
+ destroy_1 = {
+ destroy: destroy,
+ undestroy: undestroy
+ };
+ return destroy_1;
+}
+
+var node;
+var hasRequiredNode;
+
+function requireNode () {
+ if (hasRequiredNode) return node;
+ hasRequiredNode = 1;
+ /**
+ * For Node.js, simply re-export the core `util.deprecate` function.
+ */
+
+ node = require$$1.deprecate;
+ return node;
+}
+
+var _stream_writable;
+var hasRequired_stream_writable;
+
+function require_stream_writable () {
+ if (hasRequired_stream_writable) return _stream_writable;
+ hasRequired_stream_writable = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ _stream_writable = Writable;
+
+ // It seems a linked list but it is not
+ // there will be only 2 of these for each stream
+ function CorkedRequest(state) {
+ var _this = this;
+
+ this.next = null;
+ this.entry = null;
+ this.finish = function () {
+ onCorkedFinish(_this, state);
+ };
+ }
+ /* */
+
+ /**/
+ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
+ /**/
+
+ /**/
+ var Duplex;
+ /**/
+
+ Writable.WritableState = WritableState;
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ /**/
+ var internalUtil = {
+ deprecate: requireNode()
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+
+ var destroyImpl = requireDestroy();
+
+ util.inherits(Writable, Stream);
+
+ function nop() {}
+
+ function WritableState(options, stream) {
+ Duplex = Duplex || require_stream_duplex();
+
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ var isDuplex = stream instanceof Duplex;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var writableHwm = options.writableHighWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+
+ if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = Math.floor(this.highWaterMark);
+
+ // if _final has been called
+ this.finalCalled = false;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+ }
+
+ WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+ };
+
+ (function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function () {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
+ });
+ } catch (_) {}
+ })();
+
+ // Test _writableState for inheritance to account for Duplex streams,
+ // whose prototype chain only points to Readable.
+ var realHasInstance;
+ if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function (object) {
+ if (realHasInstance.call(this, object)) return true;
+ if (this !== Writable) return false;
+
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+ } else {
+ realHasInstance = function (object) {
+ return object instanceof this;
+ };
+ }
+
+ function Writable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+ if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
+ return new Writable(options);
+ }
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+
+ if (typeof options.writev === 'function') this._writev = options.writev;
+
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+
+ if (typeof options.final === 'function') this._final = options.final;
+ }
+
+ Stream.call(this);
+ }
+
+ // Otherwise people can pipe Writable streams, which is just wrong.
+ Writable.prototype.pipe = function () {
+ this.emit('error', new Error('Cannot pipe, not readable'));
+ };
+
+ function writeAfterEnd(stream, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ pna.nextTick(cb, er);
+ }
+
+ // Checks that a user-supplied chunk is valid, especially for the particular
+ // mode the stream is in. Currently this means that `null` is never accepted
+ // and undefined/non-string values are only allowed in object mode.
+ function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ var er = false;
+
+ if (chunk === null) {
+ er = new TypeError('May not write null values to stream');
+ } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ if (er) {
+ stream.emit('error', er);
+ pna.nextTick(cb, er);
+ valid = false;
+ }
+ return valid;
+ }
+
+ Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = !state.objectMode && _isUint8Array(chunk);
+
+ if (isBuf && !Buffer.isBuffer(chunk)) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+
+ if (typeof cb !== 'function') cb = nop;
+
+ if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+
+ return ret;
+ };
+
+ Writable.prototype.cork = function () {
+ var state = this._writableState;
+
+ state.corked++;
+ };
+
+ Writable.prototype.uncork = function () {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+ };
+
+ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+ };
+
+ function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+ }
+
+ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // if we're already writing something, then just put this
+ // in the queue, and wait our turn. Otherwise, call _write
+ // If we return false, then we need a drain event, so set that flag.
+ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ var newChunk = decodeChunk(state, chunk, encoding);
+ if (chunk !== newChunk) {
+ isBuf = true;
+ encoding = 'buffer';
+ chunk = newChunk;
+ }
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = {
+ chunk: chunk,
+ encoding: encoding,
+ isBuf: isBuf,
+ callback: cb,
+ next: null
+ };
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+
+ return ret;
+ }
+
+ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+ }
+
+ function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+
+ if (sync) {
+ // defer the callback if we are being called synchronously
+ // to avoid piling up things on the stack
+ pna.nextTick(cb, er);
+ // this can emit finish, and it will always happen
+ // after error
+ pna.nextTick(finishMaybe, stream, state);
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ } else {
+ // the caller expect this to happen before if
+ // it is async
+ cb(er);
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+ // this can emit finish, but finish must
+ // always follow error
+ finishMaybe(stream, state);
+ }
+ }
+
+ function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+ }
+
+ function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state);
+
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ /**/
+ asyncWrite(afterWrite, stream, state, finished, cb);
+ /**/
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+ }
+
+ function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+ }
+
+ // Must force callback to be called on nextTick, so that we don't
+ // emit 'drain' before the write() consumer gets the 'false' return
+ // value, and has a chance to attach a 'drain' listener.
+ function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+ }
+
+ // if there's something in the buffer waiting, then process it
+ function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+
+ var count = 0;
+ var allBuffers = true;
+ while (entry) {
+ buffer[count] = entry;
+ if (!entry.isBuf) allBuffers = false;
+ entry = entry.next;
+ count += 1;
+ }
+ buffer.allBuffers = allBuffers;
+
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ state.bufferedRequestCount = 0;
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ state.bufferedRequestCount--;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+ }
+
+ Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new Error('_write() is not implemented'));
+ };
+
+ Writable.prototype._writev = null;
+
+ Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending) endWritable(this, state, cb);
+ };
+
+ function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+ }
+ function callFinal(stream, state) {
+ stream._final(function (err) {
+ state.pendingcb--;
+ if (err) {
+ stream.emit('error', err);
+ }
+ state.prefinished = true;
+ stream.emit('prefinish');
+ finishMaybe(stream, state);
+ });
+ }
+ function prefinish(stream, state) {
+ if (!state.prefinished && !state.finalCalled) {
+ if (typeof stream._final === 'function') {
+ state.pendingcb++;
+ state.finalCalled = true;
+ pna.nextTick(callFinal, stream, state);
+ } else {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+ }
+ }
+
+ function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ prefinish(stream, state);
+ if (state.pendingcb === 0) {
+ state.finished = true;
+ stream.emit('finish');
+ }
+ }
+ return need;
+ }
+
+ function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+ }
+
+ function onCorkedFinish(corkReq, state, err) {
+ var entry = corkReq.entry;
+ corkReq.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+
+ // reuse the free corkReq.
+ state.corkedRequestsFree.next = corkReq;
+ }
+
+ Object.defineProperty(Writable.prototype, 'destroyed', {
+ get: function () {
+ if (this._writableState === undefined) {
+ return false;
+ }
+ return this._writableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._writableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._writableState.destroyed = value;
+ }
+ });
+
+ Writable.prototype.destroy = destroyImpl.destroy;
+ Writable.prototype._undestroy = destroyImpl.undestroy;
+ Writable.prototype._destroy = function (err, cb) {
+ this.end();
+ cb(err);
+ };
+ return _stream_writable;
+}
+
+var _stream_duplex;
+var hasRequired_stream_duplex;
+
+function require_stream_duplex () {
+ if (hasRequired_stream_duplex) return _stream_duplex;
+ hasRequired_stream_duplex = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ /**/
+ var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) {
+ keys.push(key);
+ }return keys;
+ };
+ /**/
+
+ _stream_duplex = Duplex;
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ var Readable = require_stream_readable();
+ var Writable = require_stream_writable();
+
+ util.inherits(Duplex, Readable);
+
+ {
+ // avoid scope creep, the keys array can then be collected
+ var keys = objectKeys(Writable.prototype);
+ for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+ }
+ }
+
+ function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false) this.readable = false;
+
+ if (options && options.writable === false) this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+
+ this.once('end', onend);
+ }
+
+ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._writableState.highWaterMark;
+ }
+ });
+
+ // the no-half-open enforcer
+ function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ pna.nextTick(onEndNT, this);
+ }
+
+ function onEndNT(self) {
+ self.end();
+ }
+
+ Object.defineProperty(Duplex.prototype, 'destroyed', {
+ get: function () {
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed && this._writableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (this._readableState === undefined || this._writableState === undefined) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ this._writableState.destroyed = value;
+ }
+ });
+
+ Duplex.prototype._destroy = function (err, cb) {
+ this.push(null);
+ this.end();
+
+ pna.nextTick(cb, err);
+ };
+ return _stream_duplex;
+}
+
+var string_decoder = {};
+
+var hasRequiredString_decoder;
+
+function requireString_decoder () {
+ if (hasRequiredString_decoder) return string_decoder;
+ hasRequiredString_decoder = 1;
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ /**/
+
+ var isEncoding = Buffer.isEncoding || function (encoding) {
+ encoding = '' + encoding;
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ function _normalizeEncoding(enc) {
+ if (!enc) return 'utf8';
+ var retried;
+ while (true) {
+ switch (enc) {
+ case 'utf8':
+ case 'utf-8':
+ return 'utf8';
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return 'utf16le';
+ case 'latin1':
+ case 'binary':
+ return 'latin1';
+ case 'base64':
+ case 'ascii':
+ case 'hex':
+ return enc;
+ default:
+ if (retried) return; // undefined
+ enc = ('' + enc).toLowerCase();
+ retried = true;
+ }
+ }
+ }
+ // Do not cache `Buffer.isEncoding` when checking encoding names as some
+ // modules monkey-patch it to support additional encodings
+ function normalizeEncoding(enc) {
+ var nenc = _normalizeEncoding(enc);
+ if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+ return nenc || enc;
+ }
+
+ // StringDecoder provides an interface for efficiently splitting a series of
+ // buffers into a series of JS strings without breaking apart multi-byte
+ // characters.
+ string_decoder.StringDecoder = StringDecoder;
+ function StringDecoder(encoding) {
+ this.encoding = normalizeEncoding(encoding);
+ var nb;
+ switch (this.encoding) {
+ case 'utf16le':
+ this.text = utf16Text;
+ this.end = utf16End;
+ nb = 4;
+ break;
+ case 'utf8':
+ this.fillLast = utf8FillLast;
+ nb = 4;
+ break;
+ case 'base64':
+ this.text = base64Text;
+ this.end = base64End;
+ nb = 3;
+ break;
+ default:
+ this.write = simpleWrite;
+ this.end = simpleEnd;
+ return;
+ }
+ this.lastNeed = 0;
+ this.lastTotal = 0;
+ this.lastChar = Buffer.allocUnsafe(nb);
+ }
+
+ StringDecoder.prototype.write = function (buf) {
+ if (buf.length === 0) return '';
+ var r;
+ var i;
+ if (this.lastNeed) {
+ r = this.fillLast(buf);
+ if (r === undefined) return '';
+ i = this.lastNeed;
+ this.lastNeed = 0;
+ } else {
+ i = 0;
+ }
+ if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+ return r || '';
+ };
+
+ StringDecoder.prototype.end = utf8End;
+
+ // Returns only complete characters in a Buffer
+ StringDecoder.prototype.text = utf8Text;
+
+ // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+ StringDecoder.prototype.fillLast = function (buf) {
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+ this.lastNeed -= buf.length;
+ };
+
+ // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+ // continuation byte. If an invalid byte is detected, -2 is returned.
+ function utf8CheckByte(byte) {
+ if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+ return byte >> 6 === 0x02 ? -1 : -2;
+ }
+
+ // Checks at most 3 bytes at the end of a Buffer in order to detect an
+ // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+ // needed to complete the UTF-8 character (if applicable) are returned.
+ function utf8CheckIncomplete(self, buf, i) {
+ var j = buf.length - 1;
+ if (j < i) return 0;
+ var nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 1;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 2;
+ return nb;
+ }
+ if (--j < i || nb === -2) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) {
+ if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+ }
+ return nb;
+ }
+ return 0;
+ }
+
+ // Validates as many continuation bytes for a multi-byte UTF-8 character as
+ // needed or are available. If we see a non-continuation byte where we expect
+ // one, we "replace" the validated continuation bytes we've seen so far with
+ // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
+ // behavior. The continuation byte check is included three times in the case
+ // where all of the continuation bytes for a character exist in the same buffer.
+ // It is also done this way as a slight performance increase instead of using a
+ // loop.
+ function utf8CheckExtraBytes(self, buf, p) {
+ if ((buf[0] & 0xC0) !== 0x80) {
+ self.lastNeed = 0;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 1 && buf.length > 1) {
+ if ((buf[1] & 0xC0) !== 0x80) {
+ self.lastNeed = 1;
+ return '\ufffd';
+ }
+ if (self.lastNeed > 2 && buf.length > 2) {
+ if ((buf[2] & 0xC0) !== 0x80) {
+ self.lastNeed = 2;
+ return '\ufffd';
+ }
+ }
+ }
+ }
+
+ // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+ function utf8FillLast(buf) {
+ var p = this.lastTotal - this.lastNeed;
+ var r = utf8CheckExtraBytes(this, buf);
+ if (r !== undefined) return r;
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, p, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, p, 0, buf.length);
+ this.lastNeed -= buf.length;
+ }
+
+ // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+ // partial character, the character's bytes are buffered until the required
+ // number of bytes are available.
+ function utf8Text(buf, i) {
+ var total = utf8CheckIncomplete(this, buf, i);
+ if (!this.lastNeed) return buf.toString('utf8', i);
+ this.lastTotal = total;
+ var end = buf.length - (total - this.lastNeed);
+ buf.copy(this.lastChar, 0, end);
+ return buf.toString('utf8', i, end);
+ }
+
+ // For UTF-8, a replacement character is added when ending on a partial
+ // character.
+ function utf8End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + '\ufffd';
+ return r;
+ }
+
+ // UTF-16LE typically needs two bytes per character, but even if we have an even
+ // number of bytes available, we need to check if we end on a leading/high
+ // surrogate. In that case, we need to wait for the next two bytes in order to
+ // decode the last character properly.
+ function utf16Text(buf, i) {
+ if ((buf.length - i) % 2 === 0) {
+ var r = buf.toString('utf16le', i);
+ if (r) {
+ var c = r.charCodeAt(r.length - 1);
+ if (c >= 0xD800 && c <= 0xDBFF) {
+ this.lastNeed = 2;
+ this.lastTotal = 4;
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ return r.slice(0, -1);
+ }
+ }
+ return r;
+ }
+ this.lastNeed = 1;
+ this.lastTotal = 2;
+ this.lastChar[0] = buf[buf.length - 1];
+ return buf.toString('utf16le', i, buf.length - 1);
+ }
+
+ // For UTF-16LE we do not explicitly append special replacement characters if we
+ // end on a partial character, we simply let v8 handle that.
+ function utf16End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) {
+ var end = this.lastTotal - this.lastNeed;
+ return r + this.lastChar.toString('utf16le', 0, end);
+ }
+ return r;
+ }
+
+ function base64Text(buf, i) {
+ var n = (buf.length - i) % 3;
+ if (n === 0) return buf.toString('base64', i);
+ this.lastNeed = 3 - n;
+ this.lastTotal = 3;
+ if (n === 1) {
+ this.lastChar[0] = buf[buf.length - 1];
+ } else {
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ }
+ return buf.toString('base64', i, buf.length - n);
+ }
+
+ function base64End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+ return r;
+ }
+
+ // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+ function simpleWrite(buf) {
+ return buf.toString(this.encoding);
+ }
+
+ function simpleEnd(buf) {
+ return buf && buf.length ? this.write(buf) : '';
+ }
+ return string_decoder;
+}
+
+var _stream_readable;
+var hasRequired_stream_readable;
+
+function require_stream_readable () {
+ if (hasRequired_stream_readable) return _stream_readable;
+ hasRequired_stream_readable = 1;
+
+ /**/
+
+ var pna = requireProcessNextickArgs();
+ /**/
+
+ _stream_readable = Readable;
+
+ /**/
+ var isArray = requireIsarray();
+ /**/
+
+ /**/
+ var Duplex;
+ /**/
+
+ Readable.ReadableState = ReadableState;
+
+ /**/
+ require$$2.EventEmitter;
+
+ var EElistenerCount = function (emitter, type) {
+ return emitter.listeners(type).length;
+ };
+ /**/
+
+ /**/
+ var Stream = requireStream();
+ /**/
+
+ /**/
+
+ var Buffer = requireSafeBuffer().Buffer;
+ var OurUint8Array = (typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};
+ function _uint8ArrayToBuffer(chunk) {
+ return Buffer.from(chunk);
+ }
+ function _isUint8Array(obj) {
+ return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
+ }
+
+ /**/
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ /**/
+ var debugUtil = require$$1;
+ var debug = void 0;
+ if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+ } else {
+ debug = function () {};
+ }
+ /**/
+
+ var BufferList = requireBufferList();
+ var destroyImpl = requireDestroy();
+ var StringDecoder;
+
+ util.inherits(Readable, Stream);
+
+ var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+
+ function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);
+
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+
+ function ReadableState(options, stream) {
+ Duplex = Duplex || require_stream_duplex();
+
+ options = options || {};
+
+ // Duplex streams are both readable and writable, but share
+ // the same options object.
+ // However, some cases require setting options to different
+ // values for the readable and the writable sides of the duplex stream.
+ // These options can be provided separately as readableXXX and writableXXX.
+ var isDuplex = stream instanceof Duplex;
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var readableHwm = options.readableHighWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+
+ if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = Math.floor(this.highWaterMark);
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the event 'readable'/'data' is emitted
+ // immediately, or on a later tick. We set this to true at first, because
+ // any actions that shouldn't happen until "later" should generally also
+ // not happen before the first read call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+
+ // has it been destroyed
+ this.destroyed = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+ }
+
+ function Readable(options) {
+ Duplex = Duplex || require_stream_duplex();
+
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ if (options) {
+ if (typeof options.read === 'function') this._read = options.read;
+
+ if (typeof options.destroy === 'function') this._destroy = options.destroy;
+ }
+
+ Stream.call(this);
+ }
+
+ Object.defineProperty(Readable.prototype, 'destroyed', {
+ get: function () {
+ if (this._readableState === undefined) {
+ return false;
+ }
+ return this._readableState.destroyed;
+ },
+ set: function (value) {
+ // we ignore the value if the stream
+ // has not been initialized yet
+ if (!this._readableState) {
+ return;
+ }
+
+ // backward compatibility, the user is explicitly
+ // managing destroyed
+ this._readableState.destroyed = value;
+ }
+ });
+
+ Readable.prototype.destroy = destroyImpl.destroy;
+ Readable.prototype._undestroy = destroyImpl.undestroy;
+ Readable.prototype._destroy = function (err, cb) {
+ this.push(null);
+ cb(err);
+ };
+
+ // Manually shove something into the read() buffer.
+ // This returns true if the highWaterMark has not been hit yet,
+ // similar to how Writable.write() returns true if you should
+ // write() some more.
+ Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+ var skipChunkCheck;
+
+ if (!state.objectMode) {
+ if (typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ skipChunkCheck = true;
+ }
+ } else {
+ skipChunkCheck = true;
+ }
+
+ return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
+ };
+
+ // Unshift should *always* be something directly out of read()
+ Readable.prototype.unshift = function (chunk) {
+ return readableAddChunk(this, chunk, null, true, false);
+ };
+
+ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
+ var state = stream._readableState;
+ if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else {
+ var er;
+ if (!skipChunkCheck) er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
+ chunk = _uint8ArrayToBuffer(chunk);
+ }
+
+ if (addToFront) {
+ if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
+ } else if (state.ended) {
+ stream.emit('error', new Error('stream.push() after EOF'));
+ } else {
+ state.reading = false;
+ if (state.decoder && !encoding) {
+ chunk = state.decoder.write(chunk);
+ if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
+ } else {
+ addChunk(stream, state, chunk, false);
+ }
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+ }
+
+ return needMoreData(state);
+ }
+
+ function addChunk(stream, state, chunk, addToFront) {
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+
+ if (state.needReadable) emitReadable(stream);
+ }
+ maybeReadMore(stream, state);
+ }
+
+ function chunkInvalid(state, chunk) {
+ var er;
+ if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+ }
+
+ // if it's past the high water mark, we can push in some more.
+ // Also, if we have no data yet, we can stand some
+ // more bytes. This is to work around cases where hwm=0,
+ // such as the repl. Also, if the push() triggered a
+ // readable event, and the user called read(largeNumber) such that
+ // needReadable was set, then we ought to push more, so that another
+ // 'readable' event will be triggered.
+ function needMoreData(state) {
+ return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
+ }
+
+ Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+ };
+
+ // backwards compatibility.
+ Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = requireString_decoder().StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+ };
+
+ // Don't raise the hwm > 8MB
+ var MAX_HWM = 0x800000;
+ function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+ }
+
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+ }
+
+ // you can override either this method, or the async _read(n) below.
+ Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+
+ if (ret === null) {
+ state.needReadable = true;
+ n = 0;
+ } else {
+ state.length -= n;
+ }
+
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+
+ if (ret !== null) this.emit('data', ret);
+
+ return ret;
+ };
+
+ function onEofChunk(stream, state) {
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+ }
+
+ // Don't emit readable right away in sync mode, because this can trigger
+ // another read() call => stack overflow. This way, it might trigger
+ // a nextTick recursion warning, but that's not so bad.
+ function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);
+ }
+ }
+
+ function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+ }
+
+ // at this point, the user has presumably seen the 'readable' event,
+ // and called read() to consume some data. that may have triggered
+ // in turn another _read(n) call, in which case reading = true if
+ // it's in progress.
+ // However, if we're not ended, or reading, and the length < hwm,
+ // then go ahead and try to read some more preemptively.
+ function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ pna.nextTick(maybeReadMore_, stream, state);
+ }
+ }
+
+ function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;else len = state.length;
+ }
+ state.readingMore = false;
+ }
+
+ // abstract method. to be overridden in specific implementation classes.
+ // call cb(er, data) where data is <= n in length.
+ // for virtual (non-string, non-buffer) streams, "length" is somewhat
+ // arbitrary, and perhaps not very meaningful.
+ Readable.prototype._read = function (n) {
+ this.emit('error', new Error('_read() is not implemented'));
+ };
+
+ Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable, unpipeInfo) {
+ debug('onunpipe');
+ if (readable === src) {
+ if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
+ unpipeInfo.hasUnpiped = true;
+ cleanup();
+ }
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+
+ // If the user pushes more data while we're writing to dest then we'll end up
+ // in ondata again. However, we only want to increase awaitDrain once because
+ // dest will only emit one 'drain' event for the multiple writes.
+ // => Introduce a guard on increasing awaitDrain.
+ var increasedAwaitDrain = false;
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ increasedAwaitDrain = false;
+ var ret = dest.write(chunk);
+ if (false === ret && !increasedAwaitDrain) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', state.awaitDrain);
+ state.awaitDrain++;
+ increasedAwaitDrain = true;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+ };
+
+ function pipeOnDrain(src) {
+ return function () {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+ }
+
+ Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+ var unpipeInfo = { hasUnpiped: false };
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this, unpipeInfo);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++) {
+ dests[i].emit('unpipe', this, { hasUnpiped: false });
+ }return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this, unpipeInfo);
+
+ return this;
+ };
+
+ // set up data events if they are asked for
+ // Ensure readable listeners eventually get something
+ Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+
+ if (ev === 'data') {
+ // Start flowing on next tick if stream isn't explicitly paused
+ if (this._readableState.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ var state = this._readableState;
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.emittedReadable = false;
+ if (!state.reading) {
+ pna.nextTick(nReadingNextTick, this);
+ } else if (state.length) {
+ emitReadable(this);
+ }
+ }
+ }
+
+ return res;
+ };
+ Readable.prototype.addListener = Readable.prototype.on;
+
+ function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+ }
+
+ // pause() and resume() are remnants of the legacy readable stream API
+ // If the user uses them, then switch into old mode.
+ Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ resume(this, state);
+ }
+ return this;
+ };
+
+ function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ pna.nextTick(resume_, stream, state);
+ }
+ }
+
+ function resume_(stream, state) {
+ if (!state.reading) {
+ debug('resume read 0');
+ stream.read(0);
+ }
+
+ state.resumeScheduled = false;
+ state.awaitDrain = 0;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+ }
+
+ Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+ };
+
+ function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null) {}
+ }
+
+ // wrap an old-style stream as the async data source.
+ // This is *not* part of the readable stream interface.
+ // It is an ugly unfortunate mess of history.
+ Readable.prototype.wrap = function (stream) {
+ var _this = this;
+
+ var state = this._readableState;
+ var paused = false;
+
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) _this.push(chunk);
+ }
+
+ _this.push(null);
+ });
+
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+
+ var ret = _this.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function (method) {
+ return function () {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ this._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return this;
+ };
+
+ Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
+ // making it explicit this property is not enumerable
+ // because otherwise some prototype manipulation in
+ // userland will fail
+ enumerable: false,
+ get: function () {
+ return this._readableState.highWaterMark;
+ }
+ });
+
+ // exposed for testing purposes only.
+ Readable._fromList = fromList;
+
+ // Pluck off n bytes from an array of buffers.
+ // Length is the combined lengths of all the buffers in the list.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = fromListPartial(n, state.buffer, state.decoder);
+ }
+
+ return ret;
+ }
+
+ // Extracts only enough buffered data to satisfy the amount requested.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function fromListPartial(n, list, hasStrings) {
+ var ret;
+ if (n < list.head.data.length) {
+ // slice is the same for buffers and strings
+ ret = list.head.data.slice(0, n);
+ list.head.data = list.head.data.slice(n);
+ } else if (n === list.head.data.length) {
+ // first chunk is a perfect match
+ ret = list.shift();
+ } else {
+ // result spans more than one buffer
+ ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
+ }
+ return ret;
+ }
+
+ // Copies a specified amount of characters from the list of buffered data
+ // chunks.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function copyFromBufferString(n, list) {
+ var p = list.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+ }
+
+ // Copies a specified amount of bytes from the list of buffered data chunks.
+ // This function is designed to be inlinable, so please take care when making
+ // changes to the function body.
+ function copyFromBuffer(n, list) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = list.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+ }
+
+ function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ pna.nextTick(endReadableNT, state, stream);
+ }
+ }
+
+ function endReadableNT(state, stream) {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ }
+
+ function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+ }
+ return _stream_readable;
+}
+
+var _stream_transform;
+var hasRequired_stream_transform;
+
+function require_stream_transform () {
+ if (hasRequired_stream_transform) return _stream_transform;
+ hasRequired_stream_transform = 1;
+
+ _stream_transform = Transform;
+
+ var Duplex = require_stream_duplex();
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ util.inherits(Transform, Duplex);
+
+ function afterTransform(er, data) {
+ var ts = this._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb) {
+ return this.emit('error', new Error('write callback called multiple times'));
+ }
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (data != null) // single equals check for both `null` and `undefined`
+ this.push(data);
+
+ cb(er);
+
+ var rs = this._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ this._read(rs.highWaterMark);
+ }
+ }
+
+ function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = {
+ afterTransform: afterTransform.bind(this),
+ needTransform: false,
+ transforming: false,
+ writecb: null,
+ writechunk: null,
+ writeencoding: null
+ };
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.on('prefinish', prefinish);
+ }
+
+ function prefinish() {
+ var _this = this;
+
+ if (typeof this._flush === 'function') {
+ this._flush(function (er, data) {
+ done(_this, er, data);
+ });
+ } else {
+ done(this, null, null);
+ }
+ }
+
+ Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+ };
+
+ // This is the part where you do stuff!
+ // override this function in implementation classes.
+ // 'chunk' is an input chunk.
+ //
+ // Call `push(newChunk)` to pass along transformed output
+ // to the readable side. You may call 'push' zero or more times.
+ //
+ // Call `cb(err)` when you are done with this chunk. If you pass
+ // an error, then that'll put the hurt on the whole operation. If you
+ // never call cb(), then you'll never get another chunk.
+ Transform.prototype._transform = function (chunk, encoding, cb) {
+ throw new Error('_transform() is not implemented');
+ };
+
+ Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+ };
+
+ // Doesn't matter what the args are here.
+ // _transform does all the work.
+ // That we got here means that the readable side wants more data.
+ Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+
+ if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+ };
+
+ Transform.prototype._destroy = function (err, cb) {
+ var _this2 = this;
+
+ Duplex.prototype._destroy.call(this, err, function (err2) {
+ cb(err2);
+ _this2.emit('close');
+ });
+ };
+
+ function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+
+ if (data != null) // single equals check for both `null` and `undefined`
+ stream.push(data);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');
+
+ if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');
+
+ return stream.push(null);
+ }
+ return _stream_transform;
+}
+
+var _stream_passthrough;
+var hasRequired_stream_passthrough;
+
+function require_stream_passthrough () {
+ if (hasRequired_stream_passthrough) return _stream_passthrough;
+ hasRequired_stream_passthrough = 1;
+
+ _stream_passthrough = PassThrough;
+
+ var Transform = require_stream_transform();
+
+ /**/
+ var util = Object.create(requireUtil());
+ util.inherits = requireInherits();
+ /**/
+
+ util.inherits(PassThrough, Transform);
+
+ function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+
+ Transform.call(this, options);
+ }
+
+ PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+ };
+ return _stream_passthrough;
+}
+
+readable.exports;
+
+(function (module, exports) {
+ var Stream$1 = Stream;
+ if (process.env.READABLE_STREAM === 'disable' && Stream$1) {
+ module.exports = Stream$1;
+ exports = module.exports = Stream$1.Readable;
+ exports.Readable = Stream$1.Readable;
+ exports.Writable = Stream$1.Writable;
+ exports.Duplex = Stream$1.Duplex;
+ exports.Transform = Stream$1.Transform;
+ exports.PassThrough = Stream$1.PassThrough;
+ exports.Stream = Stream$1;
+ } else {
+ exports = module.exports = require_stream_readable();
+ exports.Stream = Stream$1 || exports;
+ exports.Readable = exports;
+ exports.Writable = require_stream_writable();
+ exports.Duplex = require_stream_duplex();
+ exports.Transform = require_stream_transform();
+ exports.PassThrough = require_stream_passthrough();
+ }
+} (readable, readable.exports));
+
+var readableExports = readable.exports;
+
+var immutable = extend;
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+function extend() {
+ var target = {};
+
+ for (var i = 0; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target
+}
+
+var Transform = readableExports.Transform
+ , inherits = require$$1.inherits
+ , xtend = immutable;
+
+function DestroyableTransform(opts) {
+ Transform.call(this, opts);
+ this._destroyed = false;
+}
+
+inherits(DestroyableTransform, Transform);
+
+DestroyableTransform.prototype.destroy = function(err) {
+ if (this._destroyed) return
+ this._destroyed = true;
+
+ var self = this;
+ process.nextTick(function() {
+ if (err)
+ self.emit('error', err);
+ self.emit('close');
+ });
+};
+
+// a noop _transform function
+function noop (chunk, enc, callback) {
+ callback(null, chunk);
+}
+
+
+// create a new export function, used by both the main export and
+// the .ctor export, contains common logic for dealing with arguments
+function through2 (construct) {
+ return function (options, transform, flush) {
+ if (typeof options == 'function') {
+ flush = transform;
+ transform = options;
+ options = {};
+ }
+
+ if (typeof transform != 'function')
+ transform = noop;
+
+ if (typeof flush != 'function')
+ flush = null;
+
+ return construct(options, transform, flush)
+ }
+}
+
+
+// main export, just make me a transform stream!
+through2$1.exports = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(options);
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+
+// make me a reusable prototype that I can `new`, or implicitly `new`
+// with a constructor call
+through2$1.exports.ctor = through2(function (options, transform, flush) {
+ function Through2 (override) {
+ if (!(this instanceof Through2))
+ return new Through2(override)
+
+ this.options = xtend(options, override);
+
+ DestroyableTransform.call(this, this.options);
+ }
+
+ inherits(Through2, DestroyableTransform);
+
+ Through2.prototype._transform = transform;
+
+ if (flush)
+ Through2.prototype._flush = flush;
+
+ return Through2
+});
+
+
+var obj = through2$1.exports.obj = through2(function (options, transform, flush) {
+ var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options));
+
+ t2._transform = transform;
+
+ if (flush)
+ t2._flush = flush;
+
+ return t2
+});
+
+export { obj as o };
diff --git a/packages/pouchdb-platform/node.mjs b/packages/pouchdb-platform/node.mjs
new file mode 100644
index 0000000000..c8f3aca1fa
--- /dev/null
+++ b/packages/pouchdb-platform/node.mjs
@@ -0,0 +1,14 @@
+export { default as assert } from 'node:assert';
+export { default as fs } from 'node:fs';
+export { default as buffer } from 'node:buffer';
+export { default as events } from 'node:events';
+export { default as crypto } from 'node:crypto';
+export { default as stream } from 'node:stream';
+export { default as http } from 'node:http';
+export { default as url } from 'node:url';
+export { default as https } from 'node:https';
+export { default as zlib } from 'node:zlib';
+export { default as util } from 'node:util';
+export { default as vm } from 'node:vm';
+export { default as path } from 'node:path';
+export { default as os } from 'node:os';
\ No newline at end of file
diff --git a/packages/pouchdb-platform/package-lock.json b/packages/pouchdb-platform/package-lock.json
new file mode 100644
index 0000000000..a9ac45b707
--- /dev/null
+++ b/packages/pouchdb-platform/package-lock.json
@@ -0,0 +1,10449 @@
+{
+ "name": "pouchdb-platform",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pouchdb-platform",
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "../..": {
+ "name": "pouchdb-monorepo",
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "clone-buffer": "1.0.0",
+ "double-ended-queue": "2.1.0-0",
+ "fetch-cookie": "0.11.0",
+ "fruitdown": "1.0.2",
+ "immediate": "3.3.0",
+ "level": "6.0.1",
+ "level-codec": "9.0.2",
+ "level-write-stream": "1.0.0",
+ "leveldown": "6.1.1",
+ "levelup": "4.4.0",
+ "localstorage-down": "0.6.7",
+ "ltgt": "2.2.1",
+ "memdown": "1.4.1",
+ "node-fetch": "2.6.9",
+ "promise-polyfill": "8.2.3",
+ "readable-stream": "1.1.14",
+ "spark-md5": "3.0.2",
+ "through2": "3.0.2",
+ "uuid": "8.3.2",
+ "vuvuzela": "1.0.3",
+ "whatwg-fetch": "2.0.4"
+ },
+ "devDependencies": {
+ "@rollup/plugin-alias": "^5.0.0",
+ "@rollup/plugin-commonjs": "^25.0.1",
+ "@rollup/plugin-eslint": "^9.0.4",
+ "@rollup/plugin-inject": "^5.0.3",
+ "@rollup/plugin-json": "^6.0.0",
+ "@rollup/plugin-node-resolve": "^15.1.0",
+ "@rollup/plugin-replace": "^5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "^3.25.1",
+ "rollup-plugin-inject": "3.0.1",
+ "rollup-plugin-node-resolve": "4.2.4",
+ "rollup-plugin-replace": "1.2.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "../pouchdb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-abstract-mapreduce": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-http": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-idb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-indexeddb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-leveldb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-leveldb-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-localstorage": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-memory": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-adapter-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-binary-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-browser": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-changes-filter": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-checkpointer": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-collate": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-collections": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-crypto": {},
+ "../pouchdb-errors": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-fetch": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-find": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-for-coverage": {
+ "version": "7.0.0-prerelease"
+ },
+ "../pouchdb-generate-replication-id": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-json": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-lib": {
+ "workspaces": [
+ "../*",
+ "../pouchdb-server-packages/packages/*",
+ "../../"
+ ],
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+ },
+ "../pouchdb-mapreduce": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-mapreduce-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-md5": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-merge": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-node": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0",
+ "workspaces": [
+ "../../",
+ "../"
+ ]
+ },
+ "../pouchdb-replication": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-selector-core": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages": {
+ "version": "4.2.0",
+ "workspaces": [
+ "../../",
+ "packages"
+ ],
+ "dependencies": {
+ "@gerhobbelt/nomnom": "^1.8.4-24",
+ "base64url": "^3.0.0",
+ "basic-auth": "^2.0.0",
+ "basic-authorization-header": "^0.2.7",
+ "bluebird": "^3.4.7",
+ "body-parser": "^1.16.1",
+ "colors": "^1.0.3",
+ "compression": "^1.6.2",
+ "cookie-parser": "^1.4.3",
+ "corser": "~2.0.0",
+ "couchdb-calculate-session-id": "^1.1.0",
+ "couchdb-log-parse": "^0.0.4",
+ "crypto-lite": "^0.2.0",
+ "denodeify": "^1.2.1",
+ "equals": "^1.0.5",
+ "express": "^4.14.1",
+ "extend": "^3.0.2",
+ "get-folder-size": "^2.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "is-empty": "^1.2.0",
+ "killable": "^1.0.0",
+ "mkdirp": "^0.5.0",
+ "multiparty": "^4.1.3",
+ "object-assign": "^4.1.0",
+ "on-finished": "^2.3.0",
+ "pouchdb": "^7.0.0",
+ "pouchdb-adapter-http": "^7.0.0",
+ "pouchdb-adapter-leveldb-core": "^7.0.0",
+ "pouchdb-adapter-memory": "^7.0.0",
+ "pouchdb-all-dbs": "^1.0.2",
+ "pouchdb-collections": "^7.0.0",
+ "pouchdb-core": "^7.0.0",
+ "pouchdb-fauxton": "^0.0.6",
+ "pouchdb-find": "^7.0.0",
+ "pouchdb-mapreduce": "^7.0.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-replication": "^7.0.0",
+ "promise-nodify": "^1.0.2",
+ "random-uuid-v4": "0.0.8",
+ "raw-body": "^2.2.0",
+ "sanitize-filename": "^1.6.1",
+ "secure-random": "^1.1.1",
+ "serve-favicon": "~2.5.0",
+ "sqlite3": "^5.1.6",
+ "tail": "^2.0.2",
+ "uuid": "^3.0.1",
+ "wordwrap": "1.0.0",
+ "xhr2": "^0.2.0",
+ "xmlhttprequest-cookie": "^0.9.2"
+ },
+ "devDependencies": {
+ "assert": "^2.0.0",
+ "browserify": "^16.3.0",
+ "builtin-modules": "^3.0.0",
+ "chai": "^4.1.2",
+ "couchdb-harness": "*",
+ "eslint": "4.18.2",
+ "find-requires": "^0.2.2",
+ "fs-extra": "^8.1.0",
+ "glob": "^7.1.1",
+ "jsondown": "^1.0.0",
+ "locket": "1.0.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.uniq": "^4.5.0",
+ "medeadown": "^1.1.1",
+ "memdown": "^1.2.4",
+ "mocha": "^5.0.0",
+ "navigator": "^1.0.1",
+ "sqldown": "^2.1.0",
+ "supertest": "^3.0.0",
+ "uglify-es": "^3.3.8"
+ },
+ "optionalDependencies": {
+ "pouchdb-adapter-leveldb": "^7.0.0",
+ "pouchdb-adapter-node-websql": "^7.0.0"
+ }
+ },
+ "../pouchdb-server-packages/packages/couchdb-eval": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/couchdb-objects": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/couchdb-render": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/couchdb-resp-completer": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/express-pouchdb": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/http-pouchdb": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-auth": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-changeslike-wrapper": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-list": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-plugin-error": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-replicator": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-req-http-query": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-rewrite": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-route": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-seamless-auth": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-security": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-server": {
+ "license": "Apache-2.0",
+ "bin": {
+ "pouchdb-server": "bin/pouchdb-server"
+ }
+ },
+ "../pouchdb-server-packages/packages/pouchdb-show": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-size": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-system-db": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-update": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-validation": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-vhost": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-server-packages/packages/pouchdb-wrappers": {
+ "license": "Apache-2.0"
+ },
+ "../pouchdb-utils": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "../sublevel-pouchdb": {
+ "version": "7.0.0-prerelease",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
+ "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/eslintrc/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
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.42.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz",
+ "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/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
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-alias": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz",
+ "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==",
+ "dev": true,
+ "dependencies": {
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.1.tgz",
+ "integrity": "sha512-2DJ4kv4b1xfTJopWhu61ANdNRHvzQZ2fpaIrlgaP2jOfUv1wDJ0Ucqy8AZlbFmn/iUjiwKoqki9j55Y6L8kyNQ==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-9.0.4.tgz",
+ "integrity": "sha512-JtXb8RFMsRB6pMsVAo7qR3wopb7XT7XlxnqQQk/5zdrhmCOgF/OoKBYWLzK0yaUXNfRZeuly9VLt6VgXIBrvkw==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "eslint": "^8.24.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/@eslint/eslintrc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/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,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/node_modules/eslint": {
+ "version": "8.42.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz",
+ "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.42.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@rollup/plugin-eslint/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
+ },
+ "node_modules/@rollup/plugin-eslint/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,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-inject": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz",
+ "integrity": "sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz",
+ "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz",
+ "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-replace": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz",
+ "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
+ "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
+ "dev": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==",
+ "dev": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/add-cors-to-couchdb": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/add-cors-to-couchdb/-/add-cors-to-couchdb-0.0.6.tgz",
+ "integrity": "sha512-Vw3Sz1zsUOxcs3RkrxMY3orkkObp1p/jq3KaPAxghvBNUkDrCIw6+Iq6mJYzVUzjQhqwqnIN8USbBWuKTETJCA==",
+ "dev": true,
+ "dependencies": {
+ "lie": "^3.0.2",
+ "node-fetch": "^1.4.0",
+ "yargs": "^1.3.1"
+ },
+ "bin": {
+ "add-cors-to-couchdb": "bin.js"
+ }
+ },
+ "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,
+ "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/amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true
+ },
+ "node_modules/archiver": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz",
+ "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==",
+ "dev": true,
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "async": "^2.6.3",
+ "buffer-crc32": "^0.2.1",
+ "glob": "^7.1.4",
+ "readable-stream": "^3.4.0",
+ "tar-stream": "^2.1.0",
+ "zip-stream": "^2.1.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
+ "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.0",
+ "lazystream": "^1.0.0",
+ "lodash.defaults": "^4.2.0",
+ "lodash.difference": "^4.5.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.union": "^4.6.0",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver/node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/archiver/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/archiver/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+ "dev": true
+ },
+ "node_modules/asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/assert/node_modules/inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
+ "dev": true
+ },
+ "node_modules/assert/node_modules/util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.1"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/base62": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz",
+ "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/basic-auth": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz",
+ "integrity": "sha512-CtGuTyWf3ig+sgRyC7uP6DM3N+5ur/p8L+FPfsd+BbIfIs74TFfCajZTHnCw6K5dqM0bZEbRIqRy1fAdiUJhTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/bl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+ "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.3.11.tgz",
+ "integrity": "sha512-dszL4hhVsXR4sgpEfFoMho96Tt1J10i8k3v6X6gj4e8tXYLL1hrNWWUv0HAJcsjpo9Vwsvevj3NJeEIJeZIxgA==",
+ "dev": true
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==",
+ "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+ "dev": true,
+ "dependencies": {
+ "hoek": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true
+ },
+ "node_modules/browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "dependencies": {
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "JSONStream": "^1.0.3",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "bin": {
+ "browser-pack": "bin/cmd.js"
+ }
+ },
+ "node_modules/browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "1.1.7"
+ }
+ },
+ "node_modules/browser-resolve/node_modules/resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
+ "dev": true
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg==",
+ "dev": true
+ },
+ "node_modules/browser-unpack": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz",
+ "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.5.2",
+ "concat-stream": "^1.5.0",
+ "minimist": "^1.1.1"
+ },
+ "bin": {
+ "browser-unpack": "bin/cmd.js"
+ }
+ },
+ "node_modules/browserify": {
+ "version": "16.4.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.4.0.tgz",
+ "integrity": "sha512-PRTJVE2xnXJuKi552qM0ZzpBiWoJGVdtwne+6qgaj1e987NF4xe/qr7qXA4TAQg3n/tCol6DemWZVfgcwaeFEQ==",
+ "dev": true,
+ "dependencies": {
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "JSONStream": "^1.0.3",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "browserify": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/browserify-cache-api": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-cache-api/-/browserify-cache-api-3.0.2.tgz",
+ "integrity": "sha512-14YNbboSgSHY5QNZSLwlGYB7OuBuXS7gMyR2gfBjdS4JYcWB9BqyKhraQG/VW2W5ZhjkC/C8LZ38sP3bmbmeNA==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.4",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/browserify-incremental": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-incremental/-/browserify-incremental-3.1.1.tgz",
+ "integrity": "sha512-PrFwOzLEdy27VRXK2uGjmjLq1aROBG7QoQq3eKanmm6Q8vuzT0ZNFCORHh3yJgNQQooXA9tOizGv4vCOmhrvRQ==",
+ "dev": true,
+ "dependencies": {
+ "browserify-cache-api": "^3.0.0",
+ "JSONStream": "^0.10.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "browserifyinc": "bin/cmd.js"
+ },
+ "peerDependencies": {
+ "browserify": "*"
+ }
+ },
+ "node_modules/browserify-incremental/node_modules/jsonparse": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+ "integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ]
+ },
+ "node_modules/browserify-incremental/node_modules/JSONStream": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz",
+ "integrity": "sha512-8XbSFFd43EG+1thjLNFIzCBlwXti0yKa7L+ak/f0T/pkC+31b7G41DXL/JzYpAoYWZ2eCPiu4IIqzijM8N0a/w==",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "0.0.5",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "index.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
+ "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+ "dev": true
+ },
+ "node_modules/bundle-collapser": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.3.0.tgz",
+ "integrity": "sha512-WA3Wv+dfukdE93WOjMEbIH6G05sxLnEispv0g0A7ggg3+SilUlER/TWyp5E1vKEToMBWQqlVslgf+NuB+MAzfQ==",
+ "dev": true,
+ "dependencies": {
+ "browser-pack": "^5.0.1",
+ "browser-unpack": "^1.1.0",
+ "concat-stream": "^1.5.0",
+ "falafel": "^2.1.0",
+ "minimist": "^1.1.1",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "bundle-collapser": "bin/cmd.js"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/browser-pack": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
+ "integrity": "sha512-BFMQuYXCcwr3Uvna1y1hikqd3r2dQpWIQBIN3m5YwE3ClfnXDeF3tqP6Wqjhs1LRUeBJpgHn8yD+fPX/YSEgMQ==",
+ "dev": true,
+ "dependencies": {
+ "combine-source-map": "~0.6.1",
+ "defined": "^1.0.0",
+ "JSONStream": "^1.0.3",
+ "through2": "^1.0.0",
+ "umd": "^3.0.0"
+ },
+ "bin": {
+ "browser-pack": "bin/cmd.js"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/browser-pack/node_modules/through2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
+ "integrity": "sha512-zEbpaeSMHxczpTzO1KkMHjBC1enTA68ojeaZGG4toqdASpb9t4xUZaYFBq2/9OHo5nTGFVSYd4c910OR+6wxbQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": ">=1.1.13-1 <1.2.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/combine-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
+ "integrity": "sha512-XKRNtuZRlVDTuSGKsfZpXYz80y0XDbYS4a+FzafTgmYHy/ckruFBx7Nd6WaQnFHVI3O6IseWVdXUvZutMpjSkQ==",
+ "dev": true,
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.5.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.4.2"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/inline-source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
+ "integrity": "sha512-2WtHG0qX9OH9TVcxsLVfq3Tzr+qtL6PtWgoh0XAAKe4KkdA/57Q+OGJuRJHA4mZ2OZnkJ/ZAaXf9krLB12/nIg==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.4.0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
+ },
+ "node_modules/bundle-collapser/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==",
+ "dev": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/bundle-collapser/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cached-path-relative": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz",
+ "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==",
+ "dev": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "dev": true,
+ "dependencies": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/capital-case": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz",
+ "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==",
+ "dev": true
+ },
+ "node_modules/chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha512-eRYY0vPS2a9zt5w5Z0aCeWbrXTEyvk7u/Xf71EzNObrjSCPgMm1Nku/D/u2tiqHBX5j40wWhj54YJLtgn8g55A==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/chai-as-promised": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz",
+ "integrity": "sha512-pgAOHklxHtjFAU+SXt8aDJt/OQxR4om8ZSJXQT6nObuxwGEVZ69VZR0JZzj4mDLo6OHKCO6uLTmAhPyuHJw0rw==",
+ "dev": true,
+ "peerDependencies": {
+ "chai": ">= 2.1.2 < 4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/change-case": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.0.1.tgz",
+ "integrity": "sha512-oRPY019CYNJlD84yFh0hlgFvpAVwE/A9q5UOcpVBGSw6iedJJKYML+fVcna+POge9Tti7jfZp545Y0P0KRQAKw==",
+ "dev": true,
+ "dependencies": {
+ "camel-case": "^4.0.1",
+ "capital-case": "^1.0.1",
+ "constant-case": "^3.0.1",
+ "dot-case": "^3.0.1",
+ "header-case": "^2.0.1",
+ "no-case": "^3.0.1",
+ "param-case": "^3.0.1",
+ "pascal-case": "^3.0.1",
+ "path-case": "^3.0.1",
+ "sentence-case": "^3.0.1",
+ "snake-case": "^3.0.1"
+ }
+ },
+ "node_modules/child-process-promise": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz",
+ "integrity": "sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^4.0.2",
+ "node-version": "^1.0.0",
+ "promise-polyfill": "^6.0.1"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==",
+ "dev": true
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==",
+ "dev": true,
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
+ "node_modules/commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "bin": {
+ "commonize": "bin/commonize"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commoner/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/compress-commons": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz",
+ "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "^0.2.13",
+ "crc32-stream": "^3.0.1",
+ "normalize-path": "^3.0.0",
+ "readable-stream": "^2.3.6"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/configstore": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-0.3.2.tgz",
+ "integrity": "sha512-2aMMi3erDQwgL7BgnW0aIzILAikpVH4TVEz60F/naT+XsPPX6IaPEuF/zD28XSNFWO/mHQ9OVRxkvcSbq6EFdA==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^3.0.1",
+ "js-yaml": "^3.1.0",
+ "mkdirp": "^0.5.0",
+ "object-assign": "^2.0.0",
+ "osenv": "^0.1.0",
+ "user-home": "^1.0.0",
+ "uuid": "^2.0.1",
+ "xdg-basedir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/configstore/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/configstore/node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/configstore/node_modules/graceful-fs": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
+ "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
+ "dev": true,
+ "dependencies": {
+ "natives": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/configstore/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/configstore/node_modules/object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/configstore/node_modules/uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "dev": true
+ },
+ "node_modules/console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "node_modules/constant-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz",
+ "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case": "^2.0.2"
+ }
+ },
+ "node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+ "dev": true
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-disposition/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "dev": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/couchdb-eval": {
+ "resolved": "../pouchdb-server-packages/packages/couchdb-eval",
+ "link": true
+ },
+ "node_modules/couchdb-objects": {
+ "resolved": "../pouchdb-server-packages/packages/couchdb-objects",
+ "link": true
+ },
+ "node_modules/couchdb-render": {
+ "resolved": "../pouchdb-server-packages/packages/couchdb-render",
+ "link": true
+ },
+ "node_modules/couchdb-resp-completer": {
+ "resolved": "../pouchdb-server-packages/packages/couchdb-resp-completer",
+ "link": true
+ },
+ "node_modules/coveralls": {
+ "version": "2.13.3",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz",
+ "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==",
+ "dev": true,
+ "dependencies": {
+ "js-yaml": "3.6.1",
+ "lcov-parse": "0.0.10",
+ "log-driver": "1.2.5",
+ "minimist": "1.2.0",
+ "request": "2.79.0"
+ },
+ "bin": {
+ "coveralls": "bin/coveralls.js"
+ },
+ "engines": {
+ "node": ">=0.8.6"
+ }
+ },
+ "node_modules/coveralls/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/coveralls/node_modules/js-yaml": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
+ "integrity": "sha512-BLv3oxhfET+w5fjPwq3PsAsxzi9i3qzU//HMpWVz0A6KplF86HdR9x2TGnv9DXhSUrO7LO8czUiTd3yb3mLSvg==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/coveralls/node_modules/minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==",
+ "dev": true
+ },
+ "node_modules/crc": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
+ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.1.0"
+ }
+ },
+ "node_modules/crc32-stream": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz",
+ "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==",
+ "dev": true,
+ "dependencies": {
+ "crc": "^3.4.4",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 6.9.0"
+ }
+ },
+ "node_modules/crc32-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==",
+ "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+ "dev": true,
+ "dependencies": {
+ "boom": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "dependencies": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cssmin": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz",
+ "integrity": "sha512-A0hOtBUV5dPB/gRKsLZsqoyeFHuKIWCXdumFdsK/0nlhwK1NRZHwtm0svdTA4uEpixZD+o0xs7MirNsG2X1JBg==",
+ "dev": true,
+ "bin": {
+ "cssmin": "bin/cssmin"
+ }
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
+ "dev": true
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dashdash/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "0.1.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/deep-eql/node_modules/type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "dependencies": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/denodeify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
+ "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==",
+ "dev": true
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/deps-sort": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
+ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==",
+ "dev": true,
+ "dependencies": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "deps-sort": "bin/cmd.js"
+ }
+ },
+ "node_modules/derequire": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/derequire/-/derequire-2.1.1.tgz",
+ "integrity": "sha512-5hGVgKAEGhSGZM02abtkwDzqEOXun1dP9Ocw0yh7Pz7j70k4SNk7WURm93YyHbs2PcieRyX8m4ta1glGakw84Q==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "concat-stream": "^1.4.6",
+ "escope": "^3.6.0",
+ "through2": "^2.0.0",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "derequire": "bin/cmd.js"
+ }
+ },
+ "node_modules/derequire/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,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/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,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/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,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/derequire/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,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/derequire/node_modules/yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/des.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+ "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
+ "dev": true
+ },
+ "node_modules/detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ }
+ },
+ "node_modules/detective/node_modules/acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha512-597ykPFhtJYaXqPq6fF7Vl1fXTKgPdLOntyxpmdzUOKiYGqK7zcnbplj5088+8qJnWdzXhyeau5iVr8HVo9dgg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.2"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/dotignore": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
+ "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "ignored": "bin/ignored"
+ }
+ },
+ "node_modules/duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/ecstatic": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz",
+ "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==",
+ "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.",
+ "dev": true,
+ "dependencies": {
+ "he": "^1.1.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.1.0",
+ "url-join": "^2.0.5"
+ },
+ "bin": {
+ "ecstatic": "lib/ecstatic.js"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "dev": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract/node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-abstract/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es3ify": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz",
+ "integrity": "sha512-QQ6yXmQM/cfWYj9/DM3hPRcHBZdWCoJU+35CoaMqw53sH2uqr29EZ0ne1PF/3LIG/cmawn1SbCPqcZE+siHmwg==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "jstransform": "~11.0.0",
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "node_modules/es6-set": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz",
+ "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "^3.1.3",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/es6-set/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
+ "dev": true
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "dev": true
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.2.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==",
+ "dev": true,
+ "dependencies": {
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz",
+ "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.0.5",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.0",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.2.0",
+ "espree": "^9.3.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope/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,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint/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
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/esniff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz",
+ "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.12"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/esprima-fb": {
+ "version": "15001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz",
+ "integrity": "sha512-59dDGQo2b3M/JfKIws0/z8dcXH2mnVHkfSPRhCYS91JNGfGNwr7GsSF6qzWZuOGvw5Ii0w9TtylrX07MGmlOoQ==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/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,
+ "engines": {
+ "node": ">=4.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,
+ "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,
+ "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,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "node_modules/event-stream": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz",
+ "integrity": "sha512-PzynKvHzEq8UpM5xBNuz8fSufJik0619XuJp5uXCC3X6PpmbHUmsWbpfCBS+grDG2xFBpsDF9TbtftWFEpDKaA==",
+ "dev": true,
+ "dependencies": {
+ "optimist": "0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "node_modules/events": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.0.tgz",
+ "integrity": "sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-pouchdb": {
+ "resolved": "../pouchdb-server-packages/packages/express-pouchdb",
+ "link": true
+ },
+ "node_modules/express/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dev": true,
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
+ "dev": true
+ },
+ "node_modules/extend": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz",
+ "integrity": "sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==",
+ "dev": true
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/falafel": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz",
+ "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "isarray": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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
+ },
+ "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
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-0.3.2.tgz",
+ "integrity": "sha512-fN/6PkmaGpXLhlQRhLsSSCZzpABAHrVMPhV5635qFuAjV5zaL+LEU7TZsRuFHUehEAFNQ9ygvHKZ0fziHTKbvQ==",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.1.3"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-requires": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz",
+ "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.49",
+ "esniff": "^1.1.0"
+ },
+ "bin": {
+ "find-requires": "bin/find-requires.js"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flat-cache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha512-3IWbXGkDDHFX8zIlNdfnmhvlSMhpBO6tDr4InB8fGku6dh/gjFPGNqcdsXJajZg05x9jRzXbL6gCnCnuMap4tw==",
+ "dev": true,
+ "dependencies": {
+ "globule": "~0.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/gaze/node_modules/glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha512-ANhy2V2+tFpRajE3wN4DhkNQ08KDr0Ir1qL12/cUe5+a7STEK8jkW4onUYuY8/06qAFuT5je7mjAqzx0eKI2tQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gaze/node_modules/globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha512-3eIcA2OjPCm4VvwIwZPzIxCVssA8HSpM2C6c6kK5ufJH4FGwWoyqL3In19uuX4oe+TwH3w2P1nQDmW56iehO4A==",
+ "dev": true,
+ "dependencies": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/gaze/node_modules/graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha512-iiTUZ5vZ+2ZV+h71XAgwCSu6+NAizhFU3Yw8aC/hH5SQ3SnISqEqAek40imAFGtDcwJKNhXvSY+hzIolnLwcdQ==",
+ "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/gaze/node_modules/inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha512-Al67oatbRSo3RV5hRqIoln6Y5yMVbJSIn4jEJNL7VCImzq/kLr7vvb6sFRJXqr8rpHc/2kJOM+y0sPKN47VdzA==",
+ "dev": true
+ },
+ "node_modules/gaze/node_modules/lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha512-0VSEDVec/Me2eATuoiQd8IjyBMMX0fahob8YJ96V1go2RjvCk1m1GxmtfXn8RNSaLaTtop7fsuhhu9oLk3hUgA==",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ]
+ },
+ "node_modules/gaze/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==",
+ "dev": true
+ },
+ "node_modules/gaze/node_modules/minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dev": true,
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "node_modules/generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==",
+ "dev": true,
+ "dependencies": {
+ "is-property": "^1.0.0"
+ }
+ },
+ "node_modules/get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/getpass/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
+ "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globule": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.2.0.tgz",
+ "integrity": "sha512-mMhYxzb8wpE7VtHkJi+jk0yjlBLFetYMAnkcFutmDo4uSFAHu/1tLgVm9Y6HcaTaX1DZBJjZOM1KqqCZDvBLBw==",
+ "dev": true,
+ "dependencies": {
+ "glob": "~3.2.7",
+ "lodash": "~2.4.1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/globule/node_modules/glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+ "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2",
+ "minimatch": "0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globule/node_modules/glob/node_modules/minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globule/node_modules/lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ]
+ },
+ "node_modules/globule/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==",
+ "dev": true
+ },
+ "node_modules/globule/node_modules/minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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
+ },
+ "node_modules/graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha512-RTBwDHhNuOx4F0hqzItc/siXCasGfC4DeWcBamclWd+6jWtBaeB/SGbMkGf0eiQoW7ib8JpvOgnUsmgMHI3Mfw==",
+ "dev": true
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/handlebars/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha512-P6tFV+wCcUL3nbyTDAvveDySfbhy0XkDtAIfZP6HITjM2WUsiPna/Eg1Yy93SFXvahqoX+kt0n+6xlXKDXYowA==",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
+ },
+ "bin": {
+ "har-validator": "bin/har-validator"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/har-validator/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/har-validator/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/hash-wasm": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz",
+ "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==",
+ "dev": true
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==",
+ "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
+ "dev": true,
+ "dependencies": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ },
+ "engines": {
+ "node": ">=0.10.32"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/header-case": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz",
+ "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==",
+ "dev": true,
+ "dependencies": {
+ "capital-case": "^1.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==",
+ "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.40"
+ }
+ },
+ "node_modules/htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
+ },
+ "node_modules/http-pouchdb": {
+ "resolved": "../pouchdb-server-packages/packages/http-pouchdb",
+ "link": true
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-server": {
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz",
+ "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==",
+ "dev": true,
+ "dependencies": {
+ "basic-auth": "^1.0.3",
+ "colors": "^1.4.0",
+ "corser": "^2.0.1",
+ "ecstatic": "^3.3.2",
+ "http-proxy": "^1.18.0",
+ "minimist": "^1.2.5",
+ "opener": "^1.5.1",
+ "portfinder": "^1.0.25",
+ "secure-compare": "3.0.1",
+ "union": "~0.5.0"
+ },
+ "bin": {
+ "hs": "bin/http-server",
+ "http-server": "bin/http-server"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+ "dev": true
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "dev": true
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/insert-module-globals": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz",
+ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "JSONStream": "^1.0.3",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "insert-module-globals": "bin/cmd.js"
+ }
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-builtin-module/node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "node_modules/is-my-ip-valid": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz",
+ "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==",
+ "dev": true
+ },
+ "node_modules/is-my-json-valid": {
+ "version": "2.20.6",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz",
+ "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==",
+ "dev": true,
+ "dependencies": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "is-my-ip-valid": "^1.0.0",
+ "jsonpointer": "^5.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
+ "dev": true
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true
+ },
+ "node_modules/istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==",
+ "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "istanbul": "lib/cli.js"
+ }
+ },
+ "node_modules/istanbul-coveralls": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-coveralls/-/istanbul-coveralls-1.0.3.tgz",
+ "integrity": "sha512-KaQBuLBlnGSct4Coq2L/S3bqXGmOqMGaPRD4dHcH94WzbJvxoepENzT9/LWJpGJN86Q+hnHCe6S3sr+Kp359xg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.0.0",
+ "coveralls": "^2.11.2",
+ "minimist": "^1.1.1",
+ "rimraf": "^2.3.4",
+ "sum-up": "^1.0.1"
+ },
+ "bin": {
+ "istanbul-coveralls": "cli.js"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul-coveralls/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/istanbul/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/istanbul/node_modules/async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==",
+ "dev": true
+ },
+ "node_modules/istanbul/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/istanbul/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/istanbul/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/istanbul/node_modules/resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
+ "dev": true
+ },
+ "node_modules/istanbul/node_modules/supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
+ "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
+ },
+ "node_modules/json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==",
+ "dev": true,
+ "dependencies": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true
+ },
+ "node_modules/json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha512-I5YLeauH3rIaE99EE++UeH2M2gSYo8/2TqDac7oZEH6D/DSQ4Woa628Qrfj1X9/OY5Mk5VvIDQaKCDchXaKrmA==",
+ "deprecated": "Please use the native JSON object instead of JSON 3",
+ "dev": true
+ },
+ "node_modules/jsonify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ]
+ },
+ "node_modules/jsonpointer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/jsprim/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/jstransform": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
+ "integrity": "sha512-LGm87w0A8E92RrcXt94PnNHkFqHmgDy3mKHvNZOG7QepKCTCH/VB6S+IEN+bT4uLN3gVpOT0vvOOVd96osG71g==",
+ "dev": true,
+ "dependencies": {
+ "base62": "^1.1.0",
+ "commoner": "^0.10.1",
+ "esprima-fb": "^15001.1.0-dev-harmony-fb",
+ "object-assign": "^2.0.0",
+ "source-map": "^0.4.2"
+ },
+ "bin": {
+ "jstransform": "bin/jstransform"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/jstransform/node_modules/object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jstransform/node_modules/source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==",
+ "dev": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/labeled-stream-splicer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lcov-parse": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
+ "integrity": "sha512-YsL0D4QF/vNlNcHPXM832si9d2ROryFQ4r4JvcfMIiUYr1f6WULuO75YCtxNu4P+XMRHz0SfUc524+c+U3G5kg==",
+ "dev": true
+ },
+ "node_modules/less": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
+ "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2"
+ },
+ "bin": {
+ "lessc": "bin/lessc"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "optionalDependencies": {
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.4.1",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "^2.83.0",
+ "source-map": "~0.6.0"
+ }
+ },
+ "node_modules/less/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/less/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/less/node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/less/node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/less/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/less/node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/less/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/less/node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/less/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/less/node_modules/request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/less/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,
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/less/node_modules/tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/less/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "dev": true,
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "node_modules/lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==",
+ "dev": true
+ },
+ "node_modules/lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha512-EDem6C9iQpn7fxnGdmhXmqYGjCkStmDXT4AeyB2Ph8WKbglg4aJZczNkQglj+zWXcOEEkViK8THuV2JvugW47g==",
+ "dev": true
+ },
+ "node_modules/lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==",
+ "dev": true
+ },
+ "node_modules/lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==",
+ "dev": true
+ },
+ "node_modules/lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha512-IUfOYwDEbI8JbhW6psW+Ig01BOVK67dTSCUAbS58M0HBkPcAv/jHuxD+oJVP2tUCo3H9L6f/8GM6rxwY+oc7/w==",
+ "dev": true,
+ "dependencies": {
+ "lodash._baseassign": "^3.0.0",
+ "lodash._basecreate": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0"
+ }
+ },
+ "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
+ },
+ "node_modules/lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
+ "dev": true
+ },
+ "node_modules/lodash.difference": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
+ "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==",
+ "dev": true
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "dev": true
+ },
+ "node_modules/lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==",
+ "dev": true
+ },
+ "node_modules/lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==",
+ "dev": true
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "node_modules/lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.union": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
+ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/log-driver": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz",
+ "integrity": "sha512-UwqFFU6yztduP6DXcjcIjrIyvWQMv/spvrK2vji37XiUykpCm1qTUUM3zO+ER7qjL3CtmbWKAoVC5+bO2HwiNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.6"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/marky": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.0.tgz",
+ "integrity": "sha512-6sLZKwhpcKx9d0L2vtApHSseXLmuNLgai6VU0GFlhzlWcQmx2B1fAToZCvXqOt3/7EugzDtV5yMoQgYATojSIg==",
+ "dev": true
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/median": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/median/-/median-0.0.2.tgz",
+ "integrity": "sha512-yrVT3CsP0Lqm1xuKjGHdRVt4va3rQu3UCidWboXlwnsflxRUHTKQIatvSQML8n32jH6XzY2jrdClYMUOkdrBHQ==",
+ "dev": true
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
+ "dev": true
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
+ "dev": true
+ },
+ "node_modules/mocha": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz",
+ "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==",
+ "dev": true,
+ "dependencies": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 0.10.x",
+ "npm": ">= 1.4.x"
+ }
+ },
+ "node_modules/mocha/node_modules/commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
+ "dev": true,
+ "dependencies": {
+ "graceful-readlink": ">= 1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6.x"
+ }
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha512-E22fsyWPt/lr4/UgQLt/pXqerGMDsanhbnmqIS3VAXuDi1v3IpiwXe2oncEIondHSBuPDWRoK/pMjlvi8FuOXQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/mocha/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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-mRyN/EsN2SyNhKWykF3eEGhDpeNplMWaW18Bmh76tnOqk5TbELAVwFAYOCmKVssOYFrYvvLMguiA+NXO3ZTuVA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha512-F8dvPrZJtNzvDRX26eNXT4a7AecAvTGljmmnI39xEgSpbHKhQ7N0dO/NTxUExd0wuLHp4zbwYY7lvHq0aKpwrA==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==",
+ "dev": true
+ },
+ "node_modules/module-deps": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz",
+ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",
+ "dev": true,
+ "dependencies": {
+ "browser-resolve": "^2.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "JSONStream": "^1.0.3",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "module-deps": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/browser-resolve": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
+ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/multiparty": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.0.0.tgz",
+ "integrity": "sha512-zkxPFQ789oO0aF+fwyL1rlSPyN4v5YILL9ql2WSZHy/LMa9FMxlUqqbW2FG6AOFn00AfRTc7bepHvpzQQwQivg==",
+ "dev": true,
+ "dependencies": {
+ "fd-slicer": "~0.3.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/natives": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
+ "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
+ "deprecated": "This module relies on Node.js's internals and will break at some point. Do not use it, and update to graceful-fs@4.x.",
+ "dev": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/ncp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
+ "dev": true,
+ "bin": {
+ "ncp": "bin/ncp"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "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
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+ "dev": true
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "dev": true,
+ "dependencies": {
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
+ }
+ },
+ "node_modules/node-version": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz",
+ "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.2.1.tgz",
+ "integrity": "sha512-M3FKiLXCn89jYxrajO7OnvesSmz4oX8zTMQgk8ipiW/LqBmobpoyCCqzEQ9+F9Jw6yf4QoKyA4R6twa2FiUDGg==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "~0.3.0",
+ "ps-tree": "~0.0.3",
+ "update-notifier": "~0.1.8"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/nodemon/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==",
+ "dev": true
+ },
+ "node_modules/nodemon/node_modules/minimatch": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true,
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/optimist": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz",
+ "integrity": "sha512-Wy7E3cQDpqsTIFyW7m22hSevyTLxw850ahYv7FWsw4G6MIKVTZ8NSA95KBrQ95a4SMsMr1UGUUnwEFKhVaSzIg==",
+ "dev": true,
+ "dependencies": {
+ "wordwrap": ">=0.0.1 <0.1.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/optimist/node_modules/wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+ "dev": true
+ },
+ "node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "node_modules/param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==",
+ "dev": true,
+ "dependencies": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "node_modules/parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "dependencies": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pascal-case": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
+ "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "node_modules/path-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz",
+ "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "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
+ },
+ "node_modules/path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+ "dev": true
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.1.3.tgz",
+ "integrity": "sha512-oQiRXTFeL4KY2IAVuBsaokdEw4+WpKUu8qr/bFyKEpaqpcaflo3M/v5AORXbKxd1liRNtoOEfAV5FRjzrr1jJA==",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.32",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+ "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.4",
+ "debug": "^3.2.7",
+ "mkdirp": "^0.5.6"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/portfinder/node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/portfinder/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/pouchdb": {
+ "resolved": "../pouchdb",
+ "link": true
+ },
+ "node_modules/pouchdb-abstract-mapreduce": {
+ "resolved": "../pouchdb-abstract-mapreduce",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-http": {
+ "resolved": "../pouchdb-adapter-http",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-idb": {
+ "resolved": "../pouchdb-adapter-idb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-indexeddb": {
+ "resolved": "../pouchdb-adapter-indexeddb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-leveldb": {
+ "resolved": "../pouchdb-adapter-leveldb",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-leveldb-core": {
+ "resolved": "../pouchdb-adapter-leveldb-core",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-localstorage": {
+ "resolved": "../pouchdb-adapter-localstorage",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-memory": {
+ "resolved": "../pouchdb-adapter-memory",
+ "link": true
+ },
+ "node_modules/pouchdb-adapter-utils": {
+ "resolved": "../pouchdb-adapter-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-auth": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-auth",
+ "link": true
+ },
+ "node_modules/pouchdb-binary-utils": {
+ "resolved": "../pouchdb-binary-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-browser": {
+ "resolved": "../pouchdb-browser",
+ "link": true
+ },
+ "node_modules/pouchdb-bulkdocs-wrapper": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper",
+ "link": true
+ },
+ "node_modules/pouchdb-changes-filter": {
+ "resolved": "../pouchdb-changes-filter",
+ "link": true
+ },
+ "node_modules/pouchdb-changeslike-wrapper": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-changeslike-wrapper",
+ "link": true
+ },
+ "node_modules/pouchdb-checkpointer": {
+ "resolved": "../pouchdb-checkpointer",
+ "link": true
+ },
+ "node_modules/pouchdb-collate": {
+ "resolved": "../pouchdb-collate",
+ "link": true
+ },
+ "node_modules/pouchdb-collections": {
+ "resolved": "../pouchdb-collections",
+ "link": true
+ },
+ "node_modules/pouchdb-core": {
+ "resolved": "../pouchdb-core",
+ "link": true
+ },
+ "node_modules/pouchdb-crypto": {
+ "resolved": "../pouchdb-crypto",
+ "link": true
+ },
+ "node_modules/pouchdb-errors": {
+ "resolved": "../pouchdb-errors",
+ "link": true
+ },
+ "node_modules/pouchdb-express-router": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pouchdb-express-router/-/pouchdb-express-router-0.0.11.tgz",
+ "integrity": "sha512-ZCBvvgn5/nRevWgjIDJtEKN3hsDWDXWzjG1oSI9nqXRcf8E/Tyabgwd3OUvxVDnZlMUHAsm8qUwDhGHaM1jmCQ==",
+ "dev": true,
+ "dependencies": {
+ "bluebird": "~2.3.11",
+ "body-parser": "~1.9.2",
+ "express": "~4.10.2",
+ "extend": "~2.0.0",
+ "multiparty": "~4.0.0",
+ "nodemon": "~1.2.1",
+ "raw-body": "~1.3.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/accepts": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz",
+ "integrity": "sha512-8EKM6XlFgqSpDcxkT9yxCT8nDSWEVBD0UjgUWMCWh5kH9VU+ar2MhmDDYGxohXujPU8PPz88ukpkvfXFVWygHw==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.0.4",
+ "negotiator": "0.4.9"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/body-parser": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.9.3.tgz",
+ "integrity": "sha512-nVSZlzCeMgePYRfXhLbmkzP9NDTbLwNnMtSD82hx97swlLWZeD7Aw30ffhyET2sEGn6+mn0uWcUHiBOcVF1VOQ==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "1.0.0",
+ "depd": "~1.0.0",
+ "iconv-lite": "0.4.5",
+ "media-typer": "0.3.0",
+ "on-finished": "~2.1.1",
+ "qs": "2.3.3",
+ "raw-body": "1.3.1",
+ "type-is": "~1.5.3"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/body-parser/node_modules/raw-body": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.1.tgz",
+ "integrity": "sha512-x8EmVKh0fEOk/mlAl4P0NsLW6zH90FeXNGiOpFlvd1JPZH/3q4Wcngev7FI5Z5z8pjTn/1or0sAtxvF0558Dew==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "1",
+ "iconv-lite": "0.4.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
+ "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/content-disposition": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz",
+ "integrity": "sha512-PWzG8GssMHTPSLBoOeK5MvPPJeWU5ZVX8omvJC16BUH/nUX6J/jM/hgm/mrPWzTXVV3B3OoBhFdHXyGLU4TgUw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/cookie": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz",
+ "integrity": "sha512-+mHmWbhevLwkiBf7QcbZXHr0v4ZQQ/OgHk3fsQHrsMMiGzuvAmU/YMUR+ZfrO/BLAGIWFfx2Z7Oyso0tZR/wiA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/cookie-signature": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz",
+ "integrity": "sha512-Ym05XFKVD+EOB43QU3ovI/KvqFo5MP4BGsH+SkAMn2mdjLj2W4bOSyNsw1Ik1gI7CyDtR9Ae2TUFHexgaiEuZg==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
+ "integrity": "sha512-H21TaZQyic++ilBStWHntVpS2STWO37tzE0w0P5iAY1ntaPVtlZ3E6FcwltyZa6MYrEbKMxjEwXh3fBHlW8Qqw==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/debug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
+ "integrity": "sha512-KWau3VQmxO3YwQCjJzMPPusOtI0hx3UGsqnY7RS+QHQjUeawpOVtJvAdeTrI2Ja5DTR8KH3xaEN8c+ADbXJWeg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "0.7.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha512-OEWAMbCkK9IWQ8pfTvHBhCSqHgR+sk5pbiYqq0FqfARG4Cy+cRsCbITx6wh5pcsmfBPiJAcbd98tfdz5fnBbag==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha512-KB/AVLKRwZPOEo6/lxkDJ+Bv3jFRRrhmnRMPvpWwmIfUggpzGkQBqolyo8FRf833b/F5rzmy1uVN3fHBkjTxgw==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz",
+ "integrity": "sha512-n4X/DaHVKHyDy1Rwuzm1UPjTRIBSarj1BBZ5R5HLOFLn58yhw510qoF1zk94jjkw3mXScdsmMtYCNR1jsAJlEA==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
+ "integrity": "sha512-z6kAnok8fqVTra7Yu77dZF2Y6ETJlxH58wN38wNyuNQLm8xXdKnfNrlSmfXsTePWP03rRVUKHubtUwanwUi7+g==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "integrity": "sha512-Y+bhHICnjqZeY4I1kHDwvWTN0VcrI3ucWNbtofd0LLarRKEK8DkAL0uBdl3HCmf1HMjyrmgC/kqj+zXG5mYe7A==",
+ "dev": true,
+ "dependencies": {
+ "crc": "3.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/express": {
+ "version": "4.10.8",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.10.8.tgz",
+ "integrity": "sha512-w3euLVN0/Sfj9vHPF1gu5sHoE0fyPRv7OlqrQxdz8WbMzHnTThNmKDWUj6iivW/G0WmaF4GYmLadA4xrSQ6Euw==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.1.4",
+ "content-disposition": "0.5.0",
+ "cookie": "0.1.2",
+ "cookie-signature": "1.0.5",
+ "debug": "~2.1.1",
+ "depd": "~1.0.0",
+ "escape-html": "1.0.1",
+ "etag": "~1.5.1",
+ "finalhandler": "0.3.3",
+ "fresh": "0.2.4",
+ "media-typer": "0.3.0",
+ "merge-descriptors": "0.0.2",
+ "methods": "1.1.1",
+ "on-finished": "~2.2.0",
+ "parseurl": "~1.3.0",
+ "path-to-regexp": "0.1.3",
+ "proxy-addr": "~1.0.5",
+ "qs": "2.3.3",
+ "range-parser": "~1.0.2",
+ "send": "0.10.1",
+ "serve-static": "~1.7.2",
+ "type-is": "~1.5.5",
+ "utils-merge": "1.0.0",
+ "vary": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/express/node_modules/on-finished": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
+ "integrity": "sha512-9HvMYLv7im5uzOAcg1lon2cEUxycCF4OI+zPz1R/x3MvBv5s2F+DuxrGwkPe+UwvStDQpWbrkXfLZv12mHbl4A==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/finalhandler": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.3.tgz",
+ "integrity": "sha512-2Os1f3WIa2papf/sQ10h3NKjI+iadgTUIb2MfIUFcKFZgRSmQtBbYdhKct9wkWjoJA6+zIgIMDFtk4Fd0qKhdg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "~2.1.1",
+ "escape-html": "1.0.1",
+ "on-finished": "~2.2.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/finalhandler/node_modules/on-finished": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
+ "integrity": "sha512-9HvMYLv7im5uzOAcg1lon2cEUxycCF4OI+zPz1R/x3MvBv5s2F+DuxrGwkPe+UwvStDQpWbrkXfLZv12mHbl4A==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha512-Ua9xNhH0b8pwE3yRbFfXJvfdWF0UHNCdeyb2sbi9Ul/M+r3PTdrz7Cv4SCfZRMjmzEM9PhraqfZFbGTIg3OMyA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/fresh": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz",
+ "integrity": "sha512-mnBGgIFRNu54GtbkXy6+QKPYW/b5joAURorA8ELeJc/5BBNph6Go1NmHa9dt08ghFnhGuLenrUmNO8Za1CwEUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/iconv-lite": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.5.tgz",
+ "integrity": "sha512-LQ4GtDkFagYaac8u4rE73zWu7h0OUUmR0qVBOgzLyFSoJhoDG2xV9PZJWWyVVcYha/9/RZzQHUinFMbNKiOoAA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/ipaddr.js": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+ "integrity": "sha512-wBj+q+3uP78gMowwWgFLAYm/q4x5goyZmDsmuvyz+nd1u0D/ghgXXtc1OkgmTzSiWT101kiqGacwFk9eGQw6xQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/merge-descriptors": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz",
+ "integrity": "sha512-dYBT4Ep+t/qnPeJcnMymmhTdd4g8/hn48ciaDqLAkfRf8abzLPS6Rb6EBdz5CZCL8tzZuI5ps9MhGQGxk+EuKg==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/methods": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz",
+ "integrity": "sha512-jokk6GTgwlNnUGTSh6AjRRHwnQkDRC8tj39+zfzfZTDQURIOao9qiCO7o5r7fmog3I1MD6doJf71NmknZNoxdA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime-db": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz",
+ "integrity": "sha512-5aMAW7I4jZoZB27fXRuekqc4DVvJ7+hM8UcWrNj2mqibE54gXgPSonBYBdQW5hyaVNGmiYjY0ZMqn9fBefWYvA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/mime-types": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz",
+ "integrity": "sha512-2ZHUEstNkIf2oTWgtODr6X0Cc4Ns/RN/hktdozndiEhhAC2wxXejF1FH0XLHTEImE9h6gr/tcnr3YOnSGsxc7Q==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "~1.12.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz",
+ "integrity": "sha512-YmuMMkfOZzzAftlHwiQxFepJx/5rDaYi9o9QanyBCk485BRAyM/vB9XoYlZvglxE/pmAWOiQgrdoE10watiK9w==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/negotiator": {
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz",
+ "integrity": "sha512-fvi5GQce2TGDzanaTxNY3bboxjdce18sqwNylY439wkEkiJIyTMhGFMdlPCvDsIPa9IKIfhKwCMWEQ9YpZgb1Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/on-finished": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.1.tgz",
+ "integrity": "sha512-3ljOi5Zrf46pSbY/39CaJulZQN9XRfmeWqXkeWddhhKD7B4n7nOTisLdaZmAXI1P3A57peTj4pHokMY8X7ICCA==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/path-to-regexp": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz",
+ "integrity": "sha512-sd4vSOW+DCM6A5aRICI1CWaC7nufnzVpZfuh5T0VXshxxzFWuaFcvqKovAFLNGReOc+uZRptpcpPmn7CDvzLuA==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/proxy-addr": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+ "integrity": "sha512-iq6kR9KN32aFvXjDyC8nIrm203AHeIBPjL6dpaHgSdbpTO8KoPlD0xG92xwwtkCL9+yt1LE5VwpEk43TyP38Dg==",
+ "dev": true,
+ "dependencies": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz",
+ "integrity": "sha512-f5M0HQqZWkzU8GELTY8LyMrGkr3bPjKoFtTkwUEqJQbcljbeK8M7mliP9Ia2xoOI6oMerp+QPS7oYJtpGmWe/A==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha512-nDsRrtIxVUO5opg/A8T2S3ebULVIfuh8ECbh4w3N4mWxIiT3QILDJDUQayPqm2e8Q8NUa0RSUkGCfe33AfjR3Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/raw-body": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.4.tgz",
+ "integrity": "sha512-ZC2kBq6BsR0uK441H5SvGH9H+hRpTKVRjvlI6BhLOJrih3oGbGRYdFyyKKESw4/hjzJEr4cZkQgbuU52s63MOQ==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "1.0.0",
+ "iconv-lite": "0.4.8"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/raw-body/node_modules/iconv-lite": {
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz",
+ "integrity": "sha512-D90rbOiZuEJGtmIBK9wcRpW//ZKLD8bTPOAx5oEsu+O+HhSOstX/HCZFBvNkuyDuiNHunb81cfsqaYzZxcUMYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/send": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.10.1.tgz",
+ "integrity": "sha512-dSL7VfFGv0Du8qj0YntGl552UjWgZxTfFrBvngjc1wDPncyZnukfbGKWLW/Eo7qNlEbm6cUbLeCJBH9LJ/cDPQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "~2.1.0",
+ "depd": "~1.0.0",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.1",
+ "etag": "~1.5.0",
+ "fresh": "0.2.4",
+ "mime": "1.2.11",
+ "ms": "0.6.2",
+ "on-finished": "~2.1.1",
+ "range-parser": "~1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/send/node_modules/ms": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
+ "integrity": "sha512-/pc3eh7TWorTtbvXg8je4GvrvEqCfH7PA3P7iW01yL2E53FKixzgMBaQi0NOPbMJqY34cBSvR0tZtmlTkdUG4A==",
+ "dev": true
+ },
+ "node_modules/pouchdb-express-router/node_modules/serve-static": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.7.2.tgz",
+ "integrity": "sha512-/PaWqZFkjFYXqGLOs6nc0ameuFkzzU0MrdKt6oxdv7EZ7Dx2/X2LKMu7VZs8/oHt2//+bBI2z+Stq0EE0F9z1g==",
+ "dev": true,
+ "dependencies": {
+ "escape-html": "1.0.1",
+ "parseurl": "~1.3.0",
+ "send": "0.10.1",
+ "utils-merge": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/type-is": {
+ "version": "1.5.7",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz",
+ "integrity": "sha512-of68V0oUmVH4thGc1cLR3sKdICPsaL7kzpYc7FX1pcagY4eIllhyMqQcoOq289f+xj2orm8oPWwsCwxiCgVJbQ==",
+ "dev": true,
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.0.9"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/pouchdb-express-router/node_modules/vary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
+ "integrity": "sha512-yNsH+tC0r8quK2tg/yqkXqqaYzeKTkSqQ+8T6xCoWgOi/bU/omMYz+6k+I91JJJDeltJzI7oridTOq6OYkY0Tw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pouchdb-fetch": {
+ "resolved": "../pouchdb-fetch",
+ "link": true
+ },
+ "node_modules/pouchdb-find": {
+ "resolved": "../pouchdb-find",
+ "link": true
+ },
+ "node_modules/pouchdb-for-coverage": {
+ "resolved": "../pouchdb-for-coverage",
+ "link": true
+ },
+ "node_modules/pouchdb-generate-replication-id": {
+ "resolved": "../pouchdb-generate-replication-id",
+ "link": true
+ },
+ "node_modules/pouchdb-json": {
+ "resolved": "../pouchdb-json",
+ "link": true
+ },
+ "node_modules/pouchdb-lib": {
+ "resolved": "../pouchdb-lib",
+ "link": true
+ },
+ "node_modules/pouchdb-list": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-list",
+ "link": true
+ },
+ "node_modules/pouchdb-mapreduce": {
+ "resolved": "../pouchdb-mapreduce",
+ "link": true
+ },
+ "node_modules/pouchdb-mapreduce-utils": {
+ "resolved": "../pouchdb-mapreduce-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-md5": {
+ "resolved": "../pouchdb-md5",
+ "link": true
+ },
+ "node_modules/pouchdb-merge": {
+ "resolved": "../pouchdb-merge",
+ "link": true
+ },
+ "node_modules/pouchdb-monorepo": {
+ "resolved": "../..",
+ "link": true
+ },
+ "node_modules/pouchdb-node": {
+ "resolved": "../pouchdb-node",
+ "link": true
+ },
+ "node_modules/pouchdb-platform": {
+ "resolved": "",
+ "link": true
+ },
+ "node_modules/pouchdb-plugin-error": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-plugin-error",
+ "link": true
+ },
+ "node_modules/pouchdb-replication": {
+ "resolved": "../pouchdb-replication",
+ "link": true
+ },
+ "node_modules/pouchdb-replicator": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-replicator",
+ "link": true
+ },
+ "node_modules/pouchdb-req-http-query": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-req-http-query",
+ "link": true
+ },
+ "node_modules/pouchdb-rewrite": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-rewrite",
+ "link": true
+ },
+ "node_modules/pouchdb-route": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-route",
+ "link": true
+ },
+ "node_modules/pouchdb-seamless-auth": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-seamless-auth",
+ "link": true
+ },
+ "node_modules/pouchdb-security": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-security",
+ "link": true
+ },
+ "node_modules/pouchdb-selector-core": {
+ "resolved": "../pouchdb-selector-core",
+ "link": true
+ },
+ "node_modules/pouchdb-server": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-server",
+ "link": true
+ },
+ "node_modules/pouchdb-server-packages": {
+ "resolved": "../pouchdb-server-packages",
+ "link": true
+ },
+ "node_modules/pouchdb-show": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-show",
+ "link": true
+ },
+ "node_modules/pouchdb-size": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-size",
+ "link": true
+ },
+ "node_modules/pouchdb-system-db": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-system-db",
+ "link": true
+ },
+ "node_modules/pouchdb-update": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-update",
+ "link": true
+ },
+ "node_modules/pouchdb-utils": {
+ "resolved": "../pouchdb-utils",
+ "link": true
+ },
+ "node_modules/pouchdb-validation": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-validation",
+ "link": true
+ },
+ "node_modules/pouchdb-vhost": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-vhost",
+ "link": true
+ },
+ "node_modules/pouchdb-wrappers": {
+ "resolved": "../pouchdb-server-packages/packages/pouchdb-wrappers",
+ "link": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "asap": "~2.0.3"
+ }
+ },
+ "node_modules/promise-polyfill": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz",
+ "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==",
+ "dev": true
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dev": true,
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/ps-tree": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz",
+ "integrity": "sha512-FRHemqwOCUAt+U9Ni9bN/JfsFIBIm1Ho2Zr6Y/yWCgbfecrU4cEuYDebyv/pJpFBltArsJ3j4EgI89PR+BsXTA==",
+ "dev": true,
+ "dependencies": {
+ "event-stream": "~0.5"
+ }
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
+ "dev": true
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "dev": true
+ },
+ "node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.10.1.tgz",
+ "integrity": "sha512-SHTUV6gDlgMXg/AQUuLpTiBtW/etZ9JT6k6RCtCyqADquApLX0Aq5oK/s5UeTUAWBG50IExjIr587GqfXRfM4A==",
+ "dev": true,
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/readable-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==",
+ "dev": true,
+ "dependencies": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/recast/node_modules/esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/replace": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/replace/-/replace-1.2.1.tgz",
+ "integrity": "sha512-KZCBe/tPanwBlbjSMQby4l+zjSiFi3CLEP/6VLClnRYgJ46DZ5u9tmA6ceWeFS8coaUnU4ZdGNb/puUGMHNSRg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "2.4.2",
+ "minimatch": "3.0.4",
+ "yargs": "^15.3.1"
+ },
+ "bin": {
+ "replace": "bin/replace.js",
+ "search": "bin/search.js"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/replace/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
+ },
+ "node_modules/replace/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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/replace/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/replace/node_modules/yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha512-e7MIJshe1eZAmRqg4ryaO0N9G0fs+/gpDe5FlbnIFy6zZznRSwdRFrLp63if0Yt43vrI5wowOqHv1qJdVocdOQ==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.3.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1",
+ "uuid": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/request/node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/request/node_modules/qs": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.3.tgz",
+ "integrity": "sha512-f8CQ/sKJBr9vfNJBdGiPzTSPUufuWyvOFkCYJKN9voqPWuBuhdlSZM78dOHKigtZ0BwuktYGrRFW2DXXc/f2Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.11.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-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resumer": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
+ "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==",
+ "dev": true,
+ "dependencies": {
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.25.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz",
+ "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "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"
+ }
+ ]
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test/node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/secure-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
+ "dev": true
+ },
+ "node_modules/seedrandom": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
+ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
+ "dev": true
+ },
+ "node_modules/selenium-standalone": {
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.16.0.tgz",
+ "integrity": "sha512-tl7HFH2FOxJD1is7Pzzsl0pY4vuePSdSWiJdPn+6ETBkpeJDiuzou8hBjvWYWpD+eIVcOrmy3L0R3GzkdHLzDw==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.2",
+ "commander": "^2.19.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.1.1",
+ "lodash": "^4.17.11",
+ "minimist": "^1.2.0",
+ "mkdirp": "^0.5.1",
+ "progress": "2.0.3",
+ "request": "2.88.0",
+ "tar-stream": "2.0.0",
+ "urijs": "^1.19.1",
+ "which": "^1.3.1",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "selenium-standalone": "bin/selenium-standalone",
+ "start-selenium": "bin/start-selenium"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
+ "node_modules/selenium-standalone/node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/selenium-standalone/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/selenium-standalone/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
+ },
+ "node_modules/selenium-standalone/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/selenium-standalone/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/semver": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz",
+ "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "node_modules/sentence-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz",
+ "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3",
+ "upper-case-first": "^2.0.2"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+ "dev": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==",
+ "dev": true,
+ "dependencies": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "node_modules/shasum-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz",
+ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==",
+ "dev": true,
+ "dependencies": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "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,
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==",
+ "dev": true
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==",
+ "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
+ "dev": true,
+ "dependencies": {
+ "hoek": "2.x.x"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "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,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-on-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "dev": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sshpk/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==",
+ "dev": true,
+ "dependencies": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-http": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz",
+ "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/stream-http/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-to-array": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+ "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==",
+ "dev": true,
+ "dependencies": {
+ "any-promise": "^1.1.0"
+ }
+ },
+ "node_modules/stream-to-promise": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-1.1.1.tgz",
+ "integrity": "sha512-gumKCx55PzXz9UGYjWZshgzXd7L4nvw5ZNFkeUhvmmwk9OCnJNgH2DzTBCrCav+9yaHSPgTzuBwNqgVfiRC0Aw==",
+ "dev": true,
+ "dependencies": {
+ "bluebird": "~3.0.6",
+ "stream-to-array": "~2.3.0"
+ }
+ },
+ "node_modules/stream-to-promise/node_modules/bluebird": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.0.6.tgz",
+ "integrity": "sha512-Q3KyrySMNYZyK0j/YeJY4TRyp4t57dAu/KFsf3M5VymHssnymBPxIsh6tAy9RlHuqritQno+0Pikqvn2TnN/gw==",
+ "dev": true
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
+ "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/stringstream": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
+ "dev": true
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "node_modules/sublevel-pouchdb": {
+ "resolved": "../sublevel-pouchdb",
+ "link": true
+ },
+ "node_modules/sum-up": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
+ "integrity": "sha512-zw5P8gnhiqokJUWRdR6F4kIIIke0+ubQSGyYUY506GCbJWtV7F6Xuy0j6S125eSX2oF+a8KdivsZ8PlVEH0Mcw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sum-up/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "node_modules/tape": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.0.tgz",
+ "integrity": "sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw==",
+ "dev": true,
+ "dependencies": {
+ "deep-equal": "~1.1.1",
+ "defined": "~1.0.0",
+ "dotignore": "~0.1.2",
+ "for-each": "~0.3.3",
+ "function-bind": "~1.1.1",
+ "glob": "~7.1.6",
+ "has": "~1.0.3",
+ "inherits": "~2.0.4",
+ "is-regex": "~1.0.5",
+ "minimist": "~1.2.0",
+ "object-inspect": "~1.7.0",
+ "resolve": "~1.14.2",
+ "resumer": "~0.0.0",
+ "string.prototype.trim": "~1.2.1",
+ "through": "~2.3.8"
+ },
+ "bin": {
+ "tape": "bin/tape"
+ }
+ },
+ "node_modules/tape/node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/tape/node_modules/resolve": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
+ "dev": true,
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz",
+ "integrity": "sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^2.2.0",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/throw-max-listeners-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throw-max-listeners-error/-/throw-max-listeners-error-1.0.1.tgz",
+ "integrity": "sha512-QSNESRxK+kX6QX856nmsbBF+3Lk3EU0RqJ5JvUjIVUZLmq9X8TS7tRO8F3f5RpUe3CWHCv49weA8oyUEVonWfw==",
+ "dev": true
+ },
+ "node_modules/timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==",
+ "dev": true,
+ "dependencies": {
+ "process": "~0.11.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
+ "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==",
+ "dev": true
+ },
+ "node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha512-e0IoVDWx8SDHc/hwFTqJDQ7CCDTEeGhmcT9jkWJjoGQSpgBz20nAMr80E3Tpk7PatJ1b37DQDgJR3CNSzcMOZQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha512-f9Uv6ezcpvCQjJU0Zqbg+65qdcszv3qUQsZfjdRbWiZ7AMenrX1u0lNk9EoWWX6e1F+NULyg27mtdeZ5WhpljA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true
+ },
+ "node_modules/ua-parser-js": {
+ "version": "0.7.24",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz",
+ "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true,
+ "bin": {
+ "umd": "bin/cli.js"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ },
+ "bin": {
+ "undeclared-identifiers": "bin.js"
+ }
+ },
+ "node_modules/union": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
+ "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
+ "dev": true,
+ "dependencies": {
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/update-notifier": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.1.10.tgz",
+ "integrity": "sha512-1z+W2Knjv7TdhTQXia4MhFNYwpUfOPTL5lbLMMYL9X40yODpURN0nhrpXDBiY8bGEsrfA3YstoqPSxTfz7L7uQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^0.4.0",
+ "configstore": "^0.3.0",
+ "request": "^2.36.0",
+ "semver": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "~1.0.0",
+ "has-color": "~0.1.0",
+ "strip-ansi": "~0.1.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/update-notifier/node_modules/strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==",
+ "dev": true,
+ "bin": {
+ "strip-ansi": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/upper-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz",
+ "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/upper-case-first": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz",
+ "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "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,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/uri-js/node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/urijs": {
+ "version": "1.19.11",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
+ "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
+ "dev": true
+ },
+ "node_modules/url": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz",
+ "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
+ "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==",
+ "dev": true
+ },
+ "node_modules/url/node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==",
+ "dev": true,
+ "bin": {
+ "user-home": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/util/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/vargs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz",
+ "integrity": "sha512-d/j1kMUt0YjLCQPAI+VMZ7IKwNGjk8dSHMCrHq9txFOCcCIDoe8ck9FmPvABJgxIaZO1tabXmNojQG6mBkLLCw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.93"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/verror/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/verror/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true
+ },
+ "node_modules/vinyl": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+ "integrity": "sha512-4gFk9xrecazOTuFKcUYrE1TjHSYL63dio72D+q0d1mHF51FEcxTT2RHFpHbN5TNJgmPYHuVsBdhvXEOCDcytSA==",
+ "dev": true,
+ "dependencies": {
+ "clone-stats": "~0.0.1"
+ },
+ "engines": {
+ "node": ">= 0.9"
+ }
+ },
+ "node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ },
+ "node_modules/watch-glob": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/watch-glob/-/watch-glob-0.1.3.tgz",
+ "integrity": "sha512-NQyFjGi+3hGP6aBGcIo0N2F753zq90bFXuG2jwP5phGNkuaArwNtXQTZ91/qWWpjuDrtMtORCgFDO77+pZosHw==",
+ "dev": true,
+ "dependencies": {
+ "gaze": "~0.5.0",
+ "globule": "~0.2.0",
+ "lodash": "~2.4.1",
+ "vinyl": "~0.2.3"
+ }
+ },
+ "node_modules/watch-glob/node_modules/lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha512-Kak1hi6/hYHGVPmdyiZijoQyz5x2iGVzs6w9GYB/HiXEtylY7tIoYEROMjvM1d9nXJqPOrG2MNPMn01bJ+S0Rw==",
+ "dev": true,
+ "engines": [
+ "node",
+ "rhino"
+ ]
+ },
+ "node_modules/wd": {
+ "version": "1.11.4",
+ "resolved": "https://registry.npmjs.org/wd/-/wd-1.11.4.tgz",
+ "integrity": "sha512-FHL+ofdCoU2FGvDFser8rXI4GFwwcyAaUuvddtdctig2X0zVVT6p7FAXf7nS0z7wTwXtEuZXX7MrnVTvFPqJTQ==",
+ "dev": true,
+ "engines": [
+ "node"
+ ],
+ "hasInstallScript": true,
+ "dependencies": {
+ "archiver": "^3.0.0",
+ "async": "^2.0.0",
+ "lodash": "^4.0.0",
+ "mkdirp": "^0.5.1",
+ "q": "^1.5.1",
+ "request": "2.88.0",
+ "vargs": "^0.1.0"
+ },
+ "bin": {
+ "wd": "lib/bin.js"
+ }
+ },
+ "node_modules/wd/node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/wd/node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/wd/node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
+ "node_modules/wd/node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/wd/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/wd/node_modules/har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "deprecated": "this library is no longer supported",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wd/node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/wd/node_modules/oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/wd/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/wd/node_modules/request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/wd/node_modules/tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/wd/node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+ "dev": true
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xdg-basedir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-1.0.1.tgz",
+ "integrity": "sha512-ugGW++yvGoxr4IrSoxsieH2b/NlZbXsBaL85Off3z487yS9eiiRjrfdkBw1iBvzv/SK0XjjYy+KBix5PIseOtQ==",
+ "dev": true,
+ "dependencies": {
+ "user-home": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz",
+ "integrity": "sha512-7OGt4xXoWJQh5ulgZ78rKaqY7dNWbjfK+UKxGcIlaM2j7C4fqGchyv8CPvEWdRPrHp6Ula/YU8yGRpYGOHrI+g==",
+ "dev": true
+ },
+ "node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yauzl/node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/yauzl/node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zip-stream": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz",
+ "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==",
+ "dev": true,
+ "dependencies": {
+ "archiver-utils": "^2.1.0",
+ "compress-commons": "^2.1.1",
+ "readable-stream": "^3.4.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/zip-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ }
+ }
+}
diff --git a/packages/pouchdb-platform/package.json b/packages/pouchdb-platform/package.json
new file mode 100644
index 0000000000..295f1a29a6
--- /dev/null
+++ b/packages/pouchdb-platform/package.json
@@ -0,0 +1,65 @@
+{ "name": "pouchdb-platform",
+ "main": "./lib/index.js",
+ "module": "./src/index.js",
+ "workspaces": ["../*","../pouchdb-server-packages/packages/*","../../"],
+ "browser": "./browser.js",
+ "exports": {
+ "import": "./src/index.js", "require": "./lib/index.js", "browser": "./browser.js"
+ },
+ "devDependencies": {
+ "@rollup/plugin-alias": "5.0.0",
+ "@rollup/plugin-commonjs": "25.0.1",
+ "@rollup/plugin-eslint": "9.0.4",
+ "@rollup/plugin-inject": "5.0.3",
+ "@rollup/plugin-json": "6.0.0",
+ "@rollup/plugin-node-resolve": "15.1.0",
+ "@rollup/plugin-replace": "5.0.2",
+ "add-cors-to-couchdb": "0.0.6",
+ "body-parser": "1.19.0",
+ "browserify": "16.4.0",
+ "browserify-incremental": "3.1.1",
+ "builtin-modules": "3.1.0",
+ "bundle-collapser": "1.3.0",
+ "chai": "3.5.0",
+ "chai-as-promised": "5.3.0",
+ "change-case": "4.0.1",
+ "child-process-promise": "2.2.1",
+ "cssmin": "0.4.3",
+ "denodeify": "1.2.1",
+ "derequire": "2.1.1",
+ "es3ify": "0.2.2",
+ "eslint": "8.7.0",
+ "express": "4.17.0",
+ "express-pouchdb": "4.2.0",
+ "find-requires": "1.0.0",
+ "glob": "7.1.5",
+ "hash-wasm": "^4.9.0",
+ "http-server": "0.12.3",
+ "istanbul": "0.4.5",
+ "istanbul-coveralls": "1.0.3",
+ "less": "3.9.0",
+ "lodash.debounce": "4.0.8",
+ "lodash.flatten": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "marky": "1.2.0",
+ "median": "0.0.2",
+ "mkdirp": "0.5.1",
+ "mocha": "3.5.0",
+ "mockery": "2.1.0",
+ "ncp": "2.0.0",
+ "pouchdb-express-router": "0.0.11",
+ "query-string": "6.10.1",
+ "replace": "1.2.1",
+ "rimraf": "2.7.1",
+ "rollup": "3.25.1",
+ "seedrandom": "3.0.5",
+ "selenium-standalone": "6.16.0",
+ "stream-to-promise": "1.1.1",
+ "tape": "4.13.0",
+ "terser": "4.8.0",
+ "throw-max-listeners-error": "1.0.1",
+ "ua-parser-js": "0.7.24",
+ "watch-glob": "0.1.3",
+ "wd": "1.11.4"
+ }
+}
\ No newline at end of file
diff --git a/packages/pouchdb-platform/rollup.config.js b/packages/pouchdb-platform/rollup.config.js
new file mode 100644
index 0000000000..34c2c0eba5
--- /dev/null
+++ b/packages/pouchdb-platform/rollup.config.js
@@ -0,0 +1,68 @@
+// const rollup = require('rollup');
+const fs = require('node:fs');
+const nodeResolve = require('@rollup/plugin-node-resolve');
+const commonjs = require('@rollup/plugin-commonjs');
+const json = require('@rollup/plugin-json');
+const alias = require('@rollup/plugin-alias');
+const eslint = require('@rollup/plugin-eslint')({
+ include: ["*.js","*.mjs"],
+ exclude: [],
+ fix:true,
+});
+
+//const { resolve } = require('node:path/posix');
+//const pathResolve = (prefix)=>(name) => resolve(prefix,name);
+const customResolver = nodeResolve({
+ // Order matters Injection happens via local /node_modules
+ modulePaths: ['../','node_modules','../../node_modules'],
+ extensions: ['.mjs', '.js', '.jsx', '.json', '.sass', '.scss'],
+});
+
+const entries = [
+ { find: 'zlib', replacement: 'node:zlib'// path.resolve(projectRootDir, 'src')
+ // OR place `customResolver` here. See explanation below.
+ }
+];
+
+// Promise.resolve().then(async () =>
+// [(await rollup.rollup())].map(b=>[b.write({ dir: 'lib' })]));
+
+// .then(async ()=>(await rollup.rollup({
+// input: Object.fromEntries(fs.readdirSync('packages').map(pkg=>[pkg+'.browser',pkg])),
+// plugins: [
+// eslint,
+// alias({
+// customResolver, entries,
+// }),
+// nodeResolve({preferBuiltins: false, browser: true}), json(), commonjs()
+// ],
+// })).write({ dir: 'lib', }));
+
+module.exports = [{
+ input: Object.fromEntries(fs.readdirSync('../../packages').map(pkg=>[pkg,`../../packages/${pkg}/src/index.js`]).concat(
+ fs.readdirSync('../../packages/pouchdb/src/plugins').map(plg=>['plugin-'+plg,'../../packages/pouchdb/src/plugins/'+plg])
+ ).concat([
+ ['hash-wasm','hash-wasm']
+ ])),
+ plugins: [
+ eslint,
+ {
+ name: 'emit-module-package-file',
+ generateBundle() {
+ this.emitFile({ fileName: 'package.json', source: `{"type":"module"}`, type: 'asset' });
+ },
+ },
+ alias({
+ customResolver, entries,
+ }),
+ nodeResolve({
+ preferBuiltins: true,
+ // dedupe is not needed as we resolve via workspaces
+ // Order matters Injection happens via local /node_modules
+ modulePaths: ['../','node_modules','../../node_modules'],
+ // we do not resolve our own modules as this is a platform
+ resolveOnly: module => !module.includes('pouchdb-'),
+ }), json(), commonjs()
+ ],
+ output: [{ dir: 'lib' }]
+}];
\ No newline at end of file
diff --git a/packages/pouchdb-platform/src/documents.js b/packages/pouchdb-platform/src/documents.js
new file mode 100644
index 0000000000..e1c83b09ad
--- /dev/null
+++ b/packages/pouchdb-platform/src/documents.js
@@ -0,0 +1,2 @@
+// Implements Quarternion Documents. Compatible to CouchDB
+// and Couchbase.
diff --git a/packages/pouchdb-platform/src/environment.js b/packages/pouchdb-platform/src/environment.js
new file mode 100644
index 0000000000..42146da219
--- /dev/null
+++ b/packages/pouchdb-platform/src/environment.js
@@ -0,0 +1,2 @@
+// Interfaces
+export {};
\ No newline at end of file
diff --git a/packages/pouchdb-platform/src/index.js b/packages/pouchdb-platform/src/index.js
new file mode 100644
index 0000000000..5639c70fbc
--- /dev/null
+++ b/packages/pouchdb-platform/src/index.js
@@ -0,0 +1,17 @@
+export { default as assert } from 'node:assert';
+export { default as fs } from 'node:fs';
+export { default as buffer } from 'node:buffer';
+export { default as events } from 'node:events';
+export { default as crypto } from 'node:crypto';
+export { default as stream } from 'node:stream';
+export { default as http } from 'node:http';
+export { default as url } from 'node:url';
+export { default as https } from 'node:https';
+export { default as zlib } from 'node:zlib';
+export { default as util } from 'node:util';
+export { default as vm } from 'node:vm';
+export { default as path } from 'node:path';
+export { default as os } from 'node:os';
+
+// Creates
+import('./environment.js');
\ No newline at end of file
diff --git a/packages/pouchdb-platform/src/package.json b/packages/pouchdb-platform/src/package.json
new file mode 100644
index 0000000000..1632c2c4df
--- /dev/null
+++ b/packages/pouchdb-platform/src/package.json
@@ -0,0 +1 @@
+{"type": "module"}
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-replication/LICENSE b/packages/pouchdb-replication/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-replication/LICENSE
rename to packages/pouchdb-replication/LICENSE
diff --git a/packages/node_modules/pouchdb-replication/README.md b/packages/pouchdb-replication/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-replication/README.md
rename to packages/pouchdb-replication/README.md
diff --git a/packages/node_modules/pouchdb-replication/package.json b/packages/pouchdb-replication/package.json
similarity index 79%
rename from packages/node_modules/pouchdb-replication/package.json
rename to packages/pouchdb-replication/package.json
index 1cba168fd3..4ccbd7ba07 100644
--- a/packages/node_modules/pouchdb-replication/package.json
+++ b/packages/pouchdb-replication/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's replication and sync algorithm, as a plugin.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-replication/src/backoff.js b/packages/pouchdb-replication/src/backoff.js
similarity index 100%
rename from packages/node_modules/pouchdb-replication/src/backoff.js
rename to packages/pouchdb-replication/src/backoff.js
diff --git a/packages/node_modules/pouchdb-replication/src/getDocs.js b/packages/pouchdb-replication/src/getDocs.js
similarity index 100%
rename from packages/node_modules/pouchdb-replication/src/getDocs.js
rename to packages/pouchdb-replication/src/getDocs.js
diff --git a/packages/node_modules/pouchdb-replication/src/index.js b/packages/pouchdb-replication/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-replication/src/index.js
rename to packages/pouchdb-replication/src/index.js
diff --git a/packages/node_modules/pouchdb-replication/src/replicate.js b/packages/pouchdb-replication/src/replicate.js
similarity index 100%
rename from packages/node_modules/pouchdb-replication/src/replicate.js
rename to packages/pouchdb-replication/src/replicate.js
diff --git a/packages/node_modules/pouchdb-replication/src/replicateWrapper.js b/packages/pouchdb-replication/src/replicateWrapper.js
similarity index 100%
rename from packages/node_modules/pouchdb-replication/src/replicateWrapper.js
rename to packages/pouchdb-replication/src/replicateWrapper.js
diff --git a/packages/node_modules/pouchdb-replication/src/replication.js b/packages/pouchdb-replication/src/replication.js
similarity index 97%
rename from packages/node_modules/pouchdb-replication/src/replication.js
rename to packages/pouchdb-replication/src/replication.js
index 2ca732b70f..bcd0a29e75 100644
--- a/packages/node_modules/pouchdb-replication/src/replication.js
+++ b/packages/pouchdb-replication/src/replication.js
@@ -1,4 +1,4 @@
-import EE from 'events';
+import EE from 'node:events';
// We create a basic promise so the caller can cancel the replication possibly
// before we have actually started listening to changes etc
diff --git a/packages/node_modules/pouchdb-replication/src/sync.js b/packages/pouchdb-replication/src/sync.js
similarity index 99%
rename from packages/node_modules/pouchdb-replication/src/sync.js
rename to packages/pouchdb-replication/src/sync.js
index 2af71dfebc..297aed748f 100644
--- a/packages/node_modules/pouchdb-replication/src/sync.js
+++ b/packages/pouchdb-replication/src/sync.js
@@ -3,7 +3,7 @@ import {
replicate,
toPouch
} from './replicateWrapper';
-import EE from 'events';
+import EE from 'node:events';
import { clone } from 'pouchdb-utils';
export default sync;
diff --git a/packages/node_modules/pouchdb-selector-core/LICENSE b/packages/pouchdb-selector-core/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/LICENSE
rename to packages/pouchdb-selector-core/LICENSE
diff --git a/packages/node_modules/pouchdb-selector-core/README.md b/packages/pouchdb-selector-core/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/README.md
rename to packages/pouchdb-selector-core/README.md
diff --git a/packages/node_modules/pouchdb-selector-core/package.json b/packages/pouchdb-selector-core/package.json
similarity index 78%
rename from packages/node_modules/pouchdb-selector-core/package.json
rename to packages/pouchdb-selector-core/package.json
index a0fca98b1b..aca0c550f8 100644
--- a/packages/node_modules/pouchdb-selector-core/package.json
+++ b/packages/pouchdb-selector-core/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "PouchDB's core selector code",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Will Holley ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-selector-core/src/in-memory-filter.js b/packages/pouchdb-selector-core/src/in-memory-filter.js
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/src/in-memory-filter.js
rename to packages/pouchdb-selector-core/src/in-memory-filter.js
diff --git a/packages/node_modules/pouchdb-selector-core/src/index.js b/packages/pouchdb-selector-core/src/index.js
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/src/index.js
rename to packages/pouchdb-selector-core/src/index.js
diff --git a/packages/node_modules/pouchdb-selector-core/src/matches-selector.js b/packages/pouchdb-selector-core/src/matches-selector.js
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/src/matches-selector.js
rename to packages/pouchdb-selector-core/src/matches-selector.js
diff --git a/packages/node_modules/pouchdb-selector-core/src/utils.js b/packages/pouchdb-selector-core/src/utils.js
similarity index 100%
rename from packages/node_modules/pouchdb-selector-core/src/utils.js
rename to packages/pouchdb-selector-core/src/utils.js
diff --git a/packages/pouchdb-server-packages/.eslintrc.json b/packages/pouchdb-server-packages/.eslintrc.json
new file mode 100644
index 0000000000..17bf1ddb75
--- /dev/null
+++ b/packages/pouchdb-server-packages/.eslintrc.json
@@ -0,0 +1,71 @@
+{
+ "extends": "eslint:recommended",
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "module"
+ },
+ "env": {
+ "browser": true,
+ "node": true,
+ "mocha": true
+ },
+ "globals": {
+ "Map": true,
+ "Set": true,
+ "chrome": true,
+ "Promise": true,
+ "Uint8Array": true,
+ "ArrayBuffer": true,
+ "FileReaderSync": true,
+ "sqlitePlugin": true,
+ "emit": true,
+ "PouchDB": true,
+ "should": true,
+ "assert": true,
+ "testUtils": true,
+ "importScripts": true
+ },
+ "rules": {
+ "no-empty": 0,
+ "no-console": 0,
+ "semi": [
+ "error",
+ "always"
+ ],
+ "curly": [
+ "error",
+ "all"
+ ],
+ "space-unary-ops": [
+ "error",
+ {
+ "words": true
+ }
+ ],
+ "space-before-function-paren": [
+ "error",
+ {
+ "anonymous": "always",
+ "named": "never"
+ }
+ ],
+ "max-len": [
+ "error",
+ 100,
+ {
+ "ignoreComments": true,
+ "ignoreStrings": true,
+ "ignoreRegExpLiterals": true
+ }
+ ],
+ "curly": [
+ "error"
+ ],
+ "keyword-spacing": [
+ "error"
+ ],
+ "space-before-blocks": [
+ "error"
+ ]
+ }
+}
diff --git a/packages/pouchdb-server-packages/.gitignore b/packages/pouchdb-server-packages/.gitignore
new file mode 100644
index 0000000000..8020dc4656
--- /dev/null
+++ b/packages/pouchdb-server-packages/.gitignore
@@ -0,0 +1,14 @@
+testdb_*
+test_*
+_pouch_*
+_allDbs
+pouch__all_dbs__
+pouch__auth_sessions__
+npm-debug.log
+_users
+_replicator
+config.json
+log.txt
+/pouchdb
+/tmp
+pouchdb-tests
diff --git a/packages/pouchdb-server-packages/.gitrepo b/packages/pouchdb-server-packages/.gitrepo
new file mode 100644
index 0000000000..a8201ec0d4
--- /dev/null
+++ b/packages/pouchdb-server-packages/.gitrepo
@@ -0,0 +1,12 @@
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/stealify/git-subrepo#readme
+;
+[subrepo]
+ remote = https://github.com/pouchdb/pouchdb-server
+ branch = master
+ commit = 975ea2377957223dc828bcdb4f5d403a5cc9f709
+ parent = 8a88c8d69fb015d19a67824ad54816a4bb386907
+ method = merge
+ cmdver = 0a31831
diff --git a/packages/pouchdb-server-packages/.travis.yml b/packages/pouchdb-server-packages/.travis.yml
new file mode 100644
index 0000000000..6ea53af4b0
--- /dev/null
+++ b/packages/pouchdb-server-packages/.travis.yml
@@ -0,0 +1,85 @@
+dist: trusty
+
+language: node_js
+
+node_js:
+ - "6"
+
+sudo: false
+
+git:
+ depth: 30
+
+addons:
+ firefox: "47.0.2"
+
+script: travis_retry npm run $COMMAND
+
+before_install:
+- npm install -g npm@latest
+- npm -v
+
+before_script:
+ # Our test-browser.js script uses FIREFOX_BIN to find the Firefox binary
+ # See https://github.com/travis-ci/travis-ci/issues/4649
+ - echo "using firefox $(firefox --version)"
+ - export FIREFOX_BIN=$(which firefox)
+ # The next two lines are required for Firefox to run on Travis
+ - "export DISPLAY=:99.0"
+ - "sh -e /etc/init.d/xvfb start"
+ # Install PhantomJS and cache it
+ # See https://github.com/Medium/phantomjs#continuous-integration
+ - "export PHANTOMJS_VERSION=2.1.1"
+ - "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH"
+ - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi"
+ - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then wget https://github.com/Medium/phantomjs/releases/download/v$PHANTOMJS_VERSION/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2; fi"
+ - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi"
+ - "phantomjs --version"
+ # Fail early if there's a eslint problem
+ - npm run eslint
+
+env:
+ global:
+ - secure: "WYQbfTXYwPfqz7t3ycqpXIDQdZ7C9kQJAP+08OF0cuR8eqhm7HxCiu9LjSNqoLAdlDmc55ygeS16Kn3Oht3zZ/i2Y7Gm75HcQfzUIb1sDv1xVm3aQmqZDJfAQ/r7fN8upBCLii/W8IUkJr1k717MpbdsTerIjyfPOb27hw0kJTM="
+ - secure: "Ut9pRqzbVJHxg8vt1Cx0bTv4HAroBkvOLjtHF+11f/OzfNnAORIEPnJFHqGbOTozCPOizmzgwvCGqq9gYL8SakrfiI0wBfaL+lk0ub/FPuJ1+hwrLDU0Ju4O5reL0OSu0JB+OTmXfILuRQQkD9/7uwUEbLDFId4phSq3cz1UsK0="
+ - secure: "MiufQQKR/EBoS7kcau/I7oYenVilysEqwx37zdgLEKlEUe3SxVOe31uLZv/bhfLNZiRuLAfmIOZmhLGnhMf0LaBzR2yC5qhBxrVHcAiTuS3q6zxpzEf02jnu+hACvj1kJJEPjpOLpEVx7ghWL4McEO0qLbdtSbQlm2IkOX1ONg0="
+
+ matrix:
+ - COMMAND=unit-tests
+ - COMMAND=test-express-minimum
+ - CLIENT=node COMMAND=test-pouchdb
+ - CLIENT=node SERVER_ARGS=--in-memory COMMAND=test-pouchdb
+ - CLIENT=node SERVER_ARGS=--sqlite COMMAND=test-pouchdb
+ - CLIENT=node SERVER_ARGS="--level-backend memdown" COMMAND=test-pouchdb
+
+ # Test in firefox/phantomjs running on travis
+ - CLIENT=selenium:firefox COMMAND=test-pouchdb
+ - CLIENT=selenium:phantomjs COMMAND=test-pouchdb
+
+ # Run the mapreduce tests
+ - COMMAND=test-pouchdb TYPE=mapreduce CLIENT=node
+ - COMMAND=test-pouchdb TYPE=mapreduce CLIENT=selenium:firefox
+
+ # Test against the couchdb harness
+ - COMMAND=test-couchdb
+
+matrix:
+ fast_finish: true
+ include:
+ - node_js: "8"
+ env: CLIENT=node COMMAND=test-pouchdb
+ allow_failures:
+ - env: COMMAND=test-couchdb
+
+branches:
+ only:
+ - master
+ - /^greenkeeper/.*$/
+
+cache:
+ directories:
+ - $HOME/.npm
+ # See https://github.com/gr2m/selsa
+ - node_modules/selenium-standalone/.selenium
+ # See https://github.com/Medium/phantomjs#continuous-integration
+ - travis_phantomjs
diff --git a/packages/pouchdb-server-packages/CONTRIBUTING.md b/packages/pouchdb-server-packages/CONTRIBUTING.md
new file mode 100644
index 0000000000..07bb584b52
--- /dev/null
+++ b/packages/pouchdb-server-packages/CONTRIBUTING.md
@@ -0,0 +1,71 @@
+Contributing
+===
+
+Want to contribute to PouchDB Server? Great, you've come to the right place!
+This document contains everything you need to know to get started building,
+testing, and publishing the code.
+
+Monorepo
+---
+
+PouchDB Server is a monorepo, containing the packages `pouchdb-server` and `express-pouchdb`. It follows the same format as the [PouchDB monorepo](https://github.com/pouchdb/pouchdb), using the [alle](https://github.com/boennemann/alle) monorepo setup. You can read more about monorepos [here](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) and [here](https://gist.github.com/nolanlawson/457cdb309c9ec5b39f0d420266a9faa4).
+
+Conceptually `pouchdb-server` is a standalone CouchDB-esque server, whereas
+`express-pouchdb` is designed to be injectable into an existing Express app.
+`pouchdb-server` uses `express-pouchdb` under the hood.
+
+Testing
+---
+
+One of the primary benefits of **pouchdb-server** is the ability to run PouchDB's Node test suite against itself. To do that, you can simply,
+
+```bash
+$ npm run test-pouchdb
+```
+
+Whatever args you provide as `SERVER_ARGS` will be passed to `pouchdb-server` itself:
+
+```bash
+$ SERVER_ARGS='--in-memory' npm run test-pouchdb
+```
+
+Or to test in Firefox (IndexedDB):
+
+```bash
+$ CLIENT=selenium:firefox npm run test-pouchdb
+```
+
+Or to test in PhantomJS (WebSQL):
+
+```bash
+$ CLIENT=selenium:phantomjs ES5_SHIM=true npm run test-pouchdb
+```
+
+Additionally, we've started porting CouchDB's JavaScript test harness to
+[a simple Node module](https://github.com/nick-thompson/couchdb-harness), which can be run against PouchDB via **pouchdb-server**.
+
+```bash
+$ npm run test-couchdb
+```
+
+## Submitting a pull request
+
+Want to help me make this thing awesome? Great! Here's how you should get started.
+
+1. First, check whether your bugfix must be in `express-pouchdb` or `pouchdb-server`.
+2. Make your changes on a separate branch whose name reflects your changes,
+3. Run all tests to make sure your changes do not break anything
+4. To create a PR, push your changes to your fork, and open a pull request!
+5. For a PR, follow the commit message style guidelines in[PouchDB CONTRIBUTING.md](https://github.com/pouchdb/pouchdb/blob/master/CONTRIBUTING.md).
+
+## Release process
+
+`pouchdb-server` is a monorepo, meaning that when you publish, you need to publish all packages simultaneously. Versions are kept in sync across packages, for simplicity's sake.
+
+Release process:
+
+1. `npm version patch | minor | major` to change the version in the top-level `package.json`, which will apply to all packages in the release script
+2. `git push origin master --tags`
+3. `npm run release`
+
+This will search through all the sub-packages and automatically figure out the correct `dependencies` and `optionalDependencies`. To add a new dependency, just add it to the top-level `package.json` and it will be identified at release time.
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb-utils/LICENSE b/packages/pouchdb-server-packages/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb-utils/LICENSE
rename to packages/pouchdb-server-packages/LICENSE
diff --git a/packages/pouchdb-server-packages/README.md b/packages/pouchdb-server-packages/README.md
new file mode 100644
index 0000000000..ce4e211550
--- /dev/null
+++ b/packages/pouchdb-server-packages/README.md
@@ -0,0 +1,380 @@
+PouchDB Server [](https://travis-ci.org/pouchdb/pouchdb-server) [](https://greenkeeper.io/)
+=====
+
+PouchDB Server is a drop-in replacement for CouchDB, using PouchDB and
+Node.js. It is modeled after the single-node design of CouchDB 1.x,
+although it contains some CouchDB 2.x features such as
+[Mango queries](http://github.com/nolanlawson/pouchdb-find).
+
+PouchDB Server is much less battle-tested than CouchDB, but it does pass the full [PouchDB test suite](https://github.com/pouchdb/pouchdb/tree/master/tests).
+
+_For the `express-pouchdb` sub-package, skip to [express-pouchdb](#express-pouchdb)._
+
+This git repository is a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md), and is the source for many [pouchdb npm packages](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+For information about interacting with a PouchDB, see https://pouchdb.com/.
+
+Usage
+---
+
+Install:
+
+ npm install -g pouchdb-server
+
+Then run:
+
+ pouchdb-server
+
+Now you can view the [Fauxton](https://github.com/apache/couchdb-fauxton) web
+interface by opening `http://localhost:5984/_utils` in a browser.
+
+### Basic options
+
+PouchDB Server's default port is 5984. To change it:
+
+ pouchdb-server --port 3000
+
+By default, all files are written in the current directory. To use another one:
+
+ pouchdb-server --dir path/to/my/directory
+
+PouchDB Server can run fully in-memory (no changes are saved):
+
+ pouchdb-server --in-memory
+
+Or it can run using SQLite rather than LevelDB:
+
+ pouchdb-server --sqlite
+
+### Full options
+
+Most PouchDB Server options are available via the command line:
+
+```
+Usage: pouchdb-server [options]
+
+Options:
+ -p, --port Port on which to run the server. (Defaults to
+ /_config/httpd/port which defaults to 5984).
+ -d, --dir Where to store database files. (Defaults to
+ /_config/couchdb/database_dir which defaults to the
+ current directory).
+ -c, --config The location of the configuration file that backs
+ /_config. (Defaults to ./config.json).
+ -o, --host The address to bind the server to. (Defaults to
+ /_config/httpd/bind_address which defaults to
+ 127.0.0.1).
+ -m, --in-memory Use a pure in-memory database which will be deleted
+ upon restart. (Defaults to
+ /_config/pouchdb_server/in_memory which defaults to
+ false).
+ --sqlite Use PouchDB over SQLite instead of LevelDOWN.
+ (Defaults to /_config/pouchdb_server/sqlite which
+ defaults to false).
+ -r, --proxy Proxy requests to the specified host. Include a
+ trailing '/'. (Defaults to
+ /_config/pouchdb_server/proxy which defaults to
+ undefined).
+ -n, --no-stdout-logs Stops the log file from also being written to stdout.
+ (Defaults to /_config/pouchdb_server/no-stdout-logs
+ which defaults to false).
+ --no-color Disable coloring of logging output.
+ --level-backend Advanced - Alternate LevelDOWN backend (e.g. memdown,
+ riakdown, redisdown). Note that you'll need to
+ manually npm install it first. (Defaults to
+ /_config/pouchdb_server/level_backend which defaults
+ to undefined).
+ --level-prefix Advanced - Prefix to use for all database names,
+ useful for URLs in alternate backends, e.g.
+ riak://localhost:8087/ for riakdown. (Defaults to
+ /_config/pouchdb_server/level_prefix which defaults
+ to undefined).
+
+Examples:
+
+ pouchdb-server --level-backend riakdown --level-prefix riak://localhost:8087
+ Starts up a pouchdb-server that talks to Riak.
+ Requires: npm install riakdown
+
+ pouchdb-server --level-backend redisdown
+ Starts up a pouchdb-server that talks to Redis, on localhost:6379.
+ Requires: npm install redisdown
+
+ pouchdb-server --level-backend sqldown --level-prefix /tmp/
+ Starts up a pouchdb-server using SQLite, with files stored in /tmp/.
+ Requires: npm install sqldown sqlite3
+```
+
+### Configuration
+
+By default, you can configure PouchDB Server using a `config.json` file, which is
+typically expected at the root of wherever you run it, but may be specified with the `--config` option.
+
+Below are some examples of `config.json` options:
+
+#### log.level
+
+To change the log output level, you can create a `config.json` file containing e.g.:
+
+```json
+{
+ "log": {
+ "level": "none"
+ }
+}
+```
+
+The available values are `debug`, `info`, `warning`, `error`, and `none`. The default
+is `info`.
+
+#### log.file
+
+To choose the file where logs are written, you can create a `config.json` file containing e.g.:
+
+```json
+{
+ "log": {
+ "file": "/path/to/log.txt"
+ }
+}
+```
+
+By default, logs are written to `./log.txt`.
+
+### Automatic port configuration
+
+Due to conventions set by Heroku and others, if you have a `PORT` environment variable,
+`pouchdb-server` will pick up on that and use it instead of `5984` as the default.
+
+```bash
+export PORT=3000
+pouchdb-server # will run on port 3000
+```
+
+express-pouchdb
+-----
+
+The `express-pouchdb` module is a fully qualified [Express](http://expressjs.com/) application with routing defined to
+mimic most of the [CouchDB](http://couchdb.apache.org/) REST API, and whose behavior is handled by
+[PouchDB](http://pouchdb.com/).
+
+The intention is for `express-pouchdb` to be mounted into Express apps for
+extended usability. A simple example of this is
+[pouchdb-server](https://github.com/pouchdb/pouchdb-server) itself.
+
+### Usage
+
+Install the necessary packages:
+
+ npm install express-pouchdb pouchdb express
+
+Now here's a sample Express app, which we'll name `app.js`.
+
+```js
+var PouchDB = require('pouchdb');
+var express = require('express');
+var app = express();
+
+app.use('/db', require('express-pouchdb')(PouchDB));
+
+app.listen(3000);
+```
+
+Now we can run this script and find each of `express-pouchdb`'s routes
+at the `/db` path:
+
+ node app.js &
+ curl localhost:3000/db
+
+You should see:
+
+```json
+{
+ "express-pouchdb": "Welcome!",
+ "uuid": "c0da32be-957f-4934-861f-d1e3ed10e544",
+ "vendor": {
+ "name": "PouchDB authors",
+ "version": "2.2.6"
+ },
+ "version": "2.2.6"
+}
+```
+
+*Note:* `express-pouchdb` conflicts with some middleware. You can work
+around this by only enabling affected middleware for routes not handled
+by `express-pouchdb`. [body-parser](https://www.npmjs.com/package/body-parser)
+is the most important middleware known to be problematic.
+
+#### API
+
+`express-pouchdb` exports a single function that builds an express [application object](http://expressjs.com/4x/api.html#application). Its function signature is:
+
+``require('express-pouchdb')([PouchDB[, options]])``
+- ``PouchDB``: the PouchDB object used to access databases. Optional.
+- ``options``: Optional. These options are supported:
+ - ``configPath``: a path to the configuration file to use. Defaults to './config.json'.
+ - ``logPath``: a path to the log file to use. Defaults to './log.txt'.
+ - ``inMemoryConfig``: `true` if all configuration should be in-memory. Defaults to `false`.
+ - ``mode``: determines which parts of the HTTP API express-pouchdb offers are enabled. There are three values:
+ - ``'fullCouchDB'``: enables every part of the HTTP API, which makes express-pouchdb very close to a full CouchDB replacement. This is the default.
+ - ``'minimumForPouchDB'``: just exposes parts of the HTTP API that map 1-1 to the PouchDB api. This is the minimum required to make the PouchDB test suite run, and a nice start when you just need an HTTP API to replicate with.
+ - ``'custom'``: no parts of the HTTP API are enabled. You can add parts yourself using the ``opts.overrideMode`` discussed below.
+ - ``overrideMode``: Sometimes the preprogrammed modes are insufficient for your needs, or you chose the ``'custom'`` mode. In that case, you can set this to an object. This object can have the following properties:
+ - ``'include'``: a javascript array that specifies parts to include on top of the ones specified by ``opts.mode``. Optional.
+ - ``'exclude'``: a javascript array that specifies parts to exclude from the ones specified by ``opts.mode``. Optional.
+
+The application object returned contains some extra properties that
+offer additional functionality compared to an ordinary express
+application:
+
+- ``setPouchDB``: a function that allows changing the ``PouchDB`` object `express-pouchdb` uses on the fly. Takes one argument: the new ``PouchDB`` object to use.
+- ``couchConfig``: an object that provides programmatic access to the configuration file and HTTP API express-pouchdb offers. For an overview of available configuration options, take a look at Fauxton's configuration page. (``/_utils#_config``)
+- ``couchLogger``: an object that provides programmatic access to the log file and HTTP API `express-pouchdb` offers.
+
+#### Examples
+
+##### Example 1
+
+Builds an HTTP API that exposes a minimal HTTP interface, but adds
+Fauxton as a debugging tool.
+
+```javascript
+var app = require('express-pouchdb')({
+ mode: 'minimumForPouchDB',
+ overrideMode: {
+ include: ['routes/fauxton']
+ }
+});
+// when not specifying PouchDB as an argument to the main function, you
+// need to specify it like this before requests are routed to ``app``
+app.setPouchDB(require('pouchdb'));
+```
+
+##### Example 2
+
+builds a full HTTP API but excludes express-pouchdb's authentication
+logic (say, because it interferes with custom authentication logic used
+in our own express app):
+
+```javascript
+var app2 = require('express-pouchdb')(require('pouchdb'), {
+ mode: 'fullCouchDB', // specified for clarity. It's the default so not necessary.
+ overrideMode: {
+ exclude: [
+ 'routes/authentication',
+ // disabling the above, gives error messages which require you to disable the
+ // following parts too. Which makes sense since they depend on it.
+ 'routes/authorization',
+ 'routes/session'
+ ]
+ }
+});
+```
+
+#### Using your own PouchDB
+
+Since you pass in the `PouchDB` that you would like to use with
+`express-pouchdb`, you can drop `express-pouchdb` into an existing Node-based
+PouchDB application and get all the benefits of the HTTP interface
+without having to change your code.
+
+```js
+var express = require('express')
+ , app = express()
+ , PouchDB = require('pouchdb');
+
+app.use('/db', require('express-pouchdb')(PouchDB));
+
+var myPouch = new PouchDB('foo');
+
+// myPouch is now modifiable in your own code, and it's also
+// available via HTTP at /db/foo
+```
+
+#### PouchDB defaults
+
+When you use your own PouchDB code in tandem with `express-pouchdb`, the `PouchDB.defaults()` API can be very convenient for specifying some default settings for how PouchDB databases are created.
+
+For instance, if you want to use an in-memory [MemDOWN](https://github.com/rvagg/memdown)-backed pouch, you can simply do:
+
+```js
+var InMemPouchDB = PouchDB.defaults({db: require('memdown')});
+
+app.use('/db', require('express-pouchdb')(InMemPouchDB));
+
+var myPouch = new InMemPouchDB('foo');
+```
+
+Similarly, if you want to place all database files in a folder other than the `pwd`, you can do:
+
+```js
+var TempPouchDB = PouchDB.defaults({prefix: '/tmp/my-temp-pouch/'});
+
+app.use('/db', require('express-pouchdb')(TempPouchDB));
+
+var myPouch = new TempPouchDB('foo');
+```
+
+If you want express-pouchdb to proxy requests to another CouchDB-style
+HTTP API, you can use [http-pouchdb](https://www.npmjs.com/package/http-pouchdb):
+
+```javascript
+var TempPouchDB = require('http-pouchdb')(PouchDB, 'http://localhost:5984');
+app.use('/db', require('express-pouchdb')(TempPouchDB));
+```
+
+#### Functionality
+
+On top of the exposing everything PouchDB offers through a CouchDB-like
+interface, `express-pouchdb` also offers the following extra
+functionality found in CouchDB but not in PouchDB by default (depending
+on the mode used, of course):
+
+- [Fauxton][], a web interface for the HTTP API.
+- [Authentication][] and [authorisation][] support. HTTP basic
+ authentication and cookie authentication are available. Authorisation
+ is handled by [validation functions][] and [security documents][].
+- [Configuration][] support. You can modify configuration values
+ manually in the `config.json` file, or use the HTTP or Fauxton
+ interface.
+- [Replicator database][] support. This allows your replications to
+ persist past a restart of your application.
+- Support for [show][], [list][] and [update][] functions. These allow
+ you to serve non-json content straight from your database.
+- [Rewrite][] and [Virtual Host][] support, for nicer urls.
+
+[fauxton]: https://www.npmjs.com/package/fauxton
+[authentication]: http://docs.couchdb.org/en/latest/intro/security.html
+[authorisation]: http://docs.couchdb.org/en/latest/intro/overview.html#security-and-validation
+[validation functions]: http://docs.couchdb.org/en/latest/couchapp/ddocs.html#vdufun
+[security documents]: http://docs.couchdb.org/en/latest/api/database/security.html
+[configuration]: http://docs.couchdb.org/en/latest/config/intro.html#setting-parameters-via-the-http-api
+[replicator database]: http://docs.couchdb.org/en/latest/replication/replicator.html
+[show]: http://guide.couchdb.org/editions/1/en/show.html
+[list]: http://guide.couchdb.org/editions/1/en/transforming.html
+[update]: http://docs.couchdb.org/en/latest/couchapp/ddocs.html#update-functions
+[rewrite]: http://docs.couchdb.org/en/latest/api/ddoc/rewrites.html
+[virtual host]: http://docs.couchdb.org/en/latest/config/http.html#vhosts
+
+Getting Help
+------------
+
+The PouchDB community is active [on Slack](http://slack.pouchdb.com/), [on Freenode IRC](https://www.irccloud.com/invite?channel=pouchdb&hostname=irc.freenode.net&port=6697&ssl=1), [Slack](http://slack.pouchdb.com),in [the Google Groups mailing list](https://groups.google.com/forum/#!forum/pouchdb), and [on StackOverflow](http://stackoverflow.com/questions/tagged/pouchdb). Or you can [tweet @pouchdb](http://twitter.com/pouchdb)!
+
+If you think you've found a bug in PouchDB, please write a reproducible test case and file [a Github issue](https://github.com/pouchdb/pouchdb/issues). We recommend [bl.ocks.org](http://bl.ocks.org/) for code snippets, because some iframe-based services like JSFiddle and JSBin do not support IndexedDB in all browsers. You can start with [this template](https://gist.github.com/nolanlawson/816f138a51b86785d3e6).
+
+## Contributing
+
+See the [CONTRIBUTING.md](https://github.com/pouchdb/pouchdb-server/blob/master/CONTRIBUTING.md) file for how to get involved.
+
+## Contributors
+
+[These people](https://github.com/pouchdb/pouchdb-server/graphs/contributors) made PouchDB Server into what it is today!
+
+## Changelog
+
+`pouchdb-server` and `express-pouchdb` follow [semantic versioning](http://semver.org/). To see a changelog with all releases since v2.0.0, check out the [Github releases page](https://github.com/pouchdb/pouchdb-server/releases).
+
+## License
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/bin/express-pouchdb-minimum-for-pouchdb.js b/packages/pouchdb-server-packages/bin/express-pouchdb-minimum-for-pouchdb.js
new file mode 100755
index 0000000000..3ed37e942a
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/express-pouchdb-minimum-for-pouchdb.js
@@ -0,0 +1,16 @@
+// 'use strict'; is default when ESM
+
+var PouchDB = require('pouchdb');
+
+var app = require('../packages/node_modules/express-pouchdb')(PouchDB, {
+ mode: 'minimumForPouchDB',
+ // Interim overrides until the pouchdb test suite properly detects
+ // the distinction between the fullCouchDB/minimumForPouchDB modes.
+ overrideMode: {
+ 'include': [
+ 'validation',
+ 'routes/replicate'
+ ]
+ }
+});
+app.listen(6984);
diff --git a/packages/pouchdb-server-packages/bin/release.sh b/packages/pouchdb-server-packages/bin/release.sh
new file mode 100755
index 0000000000..be2011787d
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/release.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+
+set -e
+
+if [ ! -z $DRY_RUN ]; then
+ echo "Doing a dry run release..."
+elif [ ! -z $BETA ]; then
+ echo "Doing a beta release to npm..."
+else
+ echo "Doing a real release! Use DRY_RUN=1 for a dry run instead."
+fi
+
+#make sure deps are up to date
+#rm -fr node_modules
+npm install
+
+# get current version
+VERSION=$(node --eval "console.log(require('./package.json').version);")
+
+# Create a temporary build directory
+SOURCE_DIR=$(git name-rev --name-only HEAD)
+BUILD_DIR=build_"${RANDOM}"
+git checkout -b $BUILD_DIR
+
+# Update dependency versions inside each package.json (replace the "*")
+node bin/update-package-json-for-publish.js
+
+# Publish all modules with Lerna
+for pkg in $(ls packages); do
+ if [ ! -d "packages/$pkg" ]; then
+ continue
+ elif [ "true" = $(node --eval "console.log(require('./packages/$pkg/package.json').private);") ]; then
+ continue
+ fi
+ cd packages/$pkg
+ echo "Publishing $pkg..."
+ if [ ! -z $DRY_RUN ]; then
+ echo "Dry run, not publishing"
+ elif [ ! -z $BETA ]; then
+ npm publish --tag beta
+ else
+ npm publish
+ fi
+ cd -
+done
+
+# Build browser packages
+for pkg in $(ls packages); do
+ if [ "false" = $(node --eval "console.log(!!require('./package.json').browserPackages['$pkg']);") ]; then
+ continue
+ fi
+ module_name=$(node --eval "console.log(require('./package.json').browserPackages['$pkg']);")
+ browserify packages/$pkg -o packages/$pkg/dist/$pkg.js -s $module_name
+ uglifyjs packages/$pkg/dist/$pkg.js -o packages/$pkg/dist/$pkg.min.js
+done
+
+# Create git tag, which is also the Bower/Github release
+git add -f ./packages/*/dist
+git commit -m "build $VERSION"
+
+# Only "publish" to GitHub/Bower if this is a non-beta non-dry run
+if [ -z $DRY_RUN ]; then
+ if [ -z $BETA ]; then
+ # Tag and push
+ git tag $VERSION
+ git push --tags git@github.com:pouchdb/pouchdb-server.git $VERSION
+
+ # Cleanup
+ git checkout $SOURCE_DIR
+ git branch -D $BUILD_DIR
+ fi
+fi
diff --git a/bin/set-version.js b/packages/pouchdb-server-packages/bin/set-version.js
similarity index 51%
rename from bin/set-version.js
rename to packages/pouchdb-server-packages/bin/set-version.js
index 9433bb92ec..1b02bb8d05 100755
--- a/bin/set-version.js
+++ b/packages/pouchdb-server-packages/bin/set-version.js
@@ -1,36 +1,25 @@
#!/usr/bin/env node
-'use strict';
+// 'use strict'; is default when ESM
// Set the version of all modules, since they're versioned together.
// Usage: npm run set-version -- [version]
// e.g. npm run set-version -- 1.2.3
var version = process.argv[process.argv.length - 1];
-var fs = require('fs');
-var path = require('path');
+var fs = require('node:fs');
+var path = require('node:path');
var packages = fs.readdirSync('packages/node_modules');
-var jsonFiles = packages.map(function (pkg) {
+packages.map(function (pkg) {
return path.resolve(__dirname, '../packages/node_modules', pkg, 'package.json');
}).concat([
- path.resolve(__dirname, '../packages/node_modules/pouchdb/component.json'),
- path.resolve(__dirname, '../packages/node_modules/pouchdb/bower.json'),
path.resolve(__dirname, '../package.json')
-]);
-
-jsonFiles.forEach(function (jsonFile) {
+]).forEach(function (jsonFile) {
var json = JSON.parse(fs.readFileSync(jsonFile), 'utf-8');
json.version = version;
fs.writeFileSync(jsonFile, JSON.stringify(json, null, ' ') + '\n', 'utf-8');
});
-var versionFile = path.resolve(__dirname,
- '../packages/node_modules/pouchdb-core/src/version.js');
-var versionFileContents = '// managed automatically by set-version.js\n' +
- 'export default "' + version + '";\n';
-
-fs.writeFileSync(versionFile, versionFileContents, 'utf-8');
-
console.log('done');
diff --git a/packages/pouchdb-server-packages/bin/test-couchdb.sh b/packages/pouchdb-server-packages/bin/test-couchdb.sh
new file mode 100755
index 0000000000..7c3babfff2
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/test-couchdb.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# use config file instead of command line option because
+# couchdb-harness depends on the fact that /_config/httpd/port equals
+# the port on which pouchdb-server is running.
+echo '{"httpd": {"port": 6984}}' > config.json
+./packages/node_modules/pouchdb-server/bin/pouchdb-server &
+export POUCHDB_SERVER_PID=$!
+./node_modules/couchdb-harness/bin/couchdb-harness -p 6984
+
+EXIT_STATUS=$?
+if [[ ! -z $POUCHDB_SERVER_PID ]]; then
+ kill $POUCHDB_SERVER_PID
+fi
+exit $EXIT_STATUS
diff --git a/packages/pouchdb-server-packages/bin/test-express-minimum.sh b/packages/pouchdb-server-packages/bin/test-express-minimum.sh
new file mode 100755
index 0000000000..39341d6941
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/test-express-minimum.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+node ./bin/express-pouchdb-minimum-for-pouchdb.js &
+POUCHDB_SERVER_PID=$!
+
+cd ./pouchdb-tests
+
+COUCH_HOST=http://127.0.0.1:6984 TIMEOUT=120000 npm run test-node
+
+EXIT_STATUS=$?
+if [[ ! -z $POUCHDB_SERVER_PID ]]; then
+ kill $POUCHDB_SERVER_PID
+fi
+exit $EXIT_STATUS
diff --git a/packages/pouchdb-server-packages/bin/test-pouchdb.sh b/packages/pouchdb-server-packages/bin/test-pouchdb.sh
new file mode 100755
index 0000000000..9b4fdc5edf
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/test-pouchdb.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+./packages/node_modules/pouchdb-server/bin/pouchdb-server -n -p 6984 $SERVER_ARGS &
+POUCHDB_SERVER_PID=$!
+
+cd ./pouchdb-tests
+
+COUCH_HOST=http://localhost:6984 TIMEOUT=120000 npm run test-node
+
+EXIT_STATUS=$?
+if [[ ! -z $POUCHDB_SERVER_PID ]]; then
+ kill $POUCHDB_SERVER_PID
+fi
+exit $EXIT_STATUS
\ No newline at end of file
diff --git a/packages/pouchdb-server-packages/bin/test-setup.sh b/packages/pouchdb-server-packages/bin/test-setup.sh
new file mode 100755
index 0000000000..a4af0c51d4
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/test-setup.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Check out PouchDB itself from master and build it, so that we can
+# run its test suite.
+# Note: this will start to fail randomly if something changes in
+# PouchDB master. In those cases, just pin it to a specific Git commit.
+
+DIRECTORY='pouchdb-tests'
+
+if [ ! -d "$DIRECTORY" ]; then
+ # Control will enter here if $DIRECTORY exists.
+ git clone --single-branch --branch master \
+ --depth 500 \
+ https://github.com/pouchdb/pouchdb.git ${DIRECTORY}
+fi
+
+cd "$DIRECTORY"
+git checkout de54c62f99d028593059e615b5702131864b6dd4 # 6.4.1
+npm install
+cd ..
diff --git a/packages/pouchdb-server-packages/bin/unit-tests.sh b/packages/pouchdb-server-packages/bin/unit-tests.sh
new file mode 100755
index 0000000000..47126e1b1f
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/unit-tests.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+./packages/node_modules/pouchdb-server/bin/pouchdb-server -m -n -p 5984 $SERVER_ARGS &
+POUCHDB_SERVER_PID=$!
+
+COUCH_HOST=http://localhost:5984 TIMEOUT=120000 mocha ./tests/**/* $1
+
+EXIT_STATUS=$?
+if [[ ! -z $POUCHDB_SERVER_PID ]]; then
+ kill $POUCHDB_SERVER_PID
+fi
+exit $EXIT_STATUS
diff --git a/packages/pouchdb-server-packages/bin/update-package-json-for-publish.js b/packages/pouchdb-server-packages/bin/update-package-json-for-publish.js
new file mode 100644
index 0000000000..5bcc1bc5da
--- /dev/null
+++ b/packages/pouchdb-server-packages/bin/update-package-json-for-publish.js
@@ -0,0 +1,83 @@
+// 'use strict'; is default when ESM
+
+// Update all the dependencies inside packages/node_modules/*/package.json
+// to reflect the true dependencies (automatically determined by require())
+// and update the version numbers to reflect the version from the top-level
+// package.json.
+
+var fs = require('node:fs');
+var path = require('node:path');
+var glob = require('glob');
+var findRequires = require('find-requires');
+var builtinModules = require('builtin-modules');
+var uniq = require('lodash.uniq');
+var flatten = require('lodash.flatten');
+
+var topPkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
+var modules = fs.readdirSync('./packages/node_modules');
+var version = topPkg.version;
+
+modules.forEach(function (mod) {
+ var pkgDir = path.join('./packages/node_modules', mod);
+ var pkgPath = path.join(pkgDir, 'package.json');
+ var pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
+
+ // all packages get the same version as the top package.json
+ pkg.version = version;
+
+ // for the dependencies, find all require() calls
+ var srcFiles = glob.sync(path.join(pkgDir, 'lib/**/*.js'));
+ var uniqDeps = uniq(flatten(srcFiles.map(function (srcFile) {
+ var code = fs.readFileSync(srcFile, 'utf8');
+ try {
+ return findRequires(code);
+ } catch (e) {
+ return []; // happens if this is an es6 module, parsing fails
+ }
+ }))).filter(function (dep) {
+ // some modules require() themselves, e.g. for plugins
+ return dep !== pkg.name &&
+ // exclude built-ins like 'inherits', 'node:fs', etc.
+ builtinModules.indexOf(dep) === -1;
+ }).sort();
+
+ //find dependencies and igonore if we referencing a local file
+ var newPkg = uniqDeps.reduce(function (deps, dep) {
+ if (/^\.\//.test(dep) || /^\.\.\//.test(dep)) {
+ return deps; // do nothing its a local file
+ }
+
+ if (dep[0] !== '@') {
+ dep = dep.split('/')[0]; // split colors/safe to be colors
+ }
+
+ if (topPkg.dependencies[dep]) {
+ if (modules.indexOf(dep) !== -1) { // core pouchdb-* module
+ deps.dependencies[dep] = topPkg.version;
+ } else {
+ deps.dependencies[dep] = topPkg.dependencies[dep];
+ }
+ } else if (topPkg.optionalDependencies[dep]) {
+ deps.optionalDependencies[dep] = topPkg.optionalDependencies[dep];
+ } else {
+ throw new Error('Unknown dependency ' + dep);
+ }
+
+ return deps;
+ }, {
+ dependencies: {},
+ optionalDependencies: {}
+ });
+
+ // special case – `pouchdb-fauxton` is included using `require.resolve()`,
+ // meaning that `find-requires` doesn't find it. so we have to do it manually
+ if (pkg.name === 'express-pouchdb') {
+ newPkg.dependencies['pouchdb-fauxton'] =
+ topPkg.dependencies['pouchdb-fauxton'];
+ }
+
+ Object.assign(pkg, newPkg);
+
+ var jsonString = JSON.stringify(pkg, null, ' ') + '\n';
+ fs.writeFileSync(pkgPath, jsonString, 'utf8');
+});
diff --git a/packages/pouchdb-server-packages/examples/todos/app.js b/packages/pouchdb-server-packages/examples/todos/app.js
new file mode 100644
index 0000000000..4754ff6f69
--- /dev/null
+++ b/packages/pouchdb-server-packages/examples/todos/app.js
@@ -0,0 +1,19 @@
+
+/**
+ * Module dependencies.
+ */
+
+var express = require('express')
+ , path = require('node:path')
+ , morgan = require('morgan');
+
+var app = express();
+
+
+app.use(morgan('dev'));
+app.use(express.static(path.join(__dirname, 'public')));
+app.use('/db', require('../../'));
+
+
+app.listen(3000);
+console.log("Express server listening on port " + 3000);
diff --git a/packages/pouchdb-server-packages/examples/todos/public/images/bg.png b/packages/pouchdb-server-packages/examples/todos/public/images/bg.png
new file mode 100644
index 0000000000..b2a7600825
Binary files /dev/null and b/packages/pouchdb-server-packages/examples/todos/public/images/bg.png differ
diff --git a/packages/pouchdb-server-packages/examples/todos/public/index.html b/packages/pouchdb-server-packages/examples/todos/public/index.html
new file mode 100644
index 0000000000..17115ee562
--- /dev/null
+++ b/packages/pouchdb-server-packages/examples/todos/public/index.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+ VanillaJS • TodoMVC
+
+
+
+
+
+
+
+
+
diff --git a/packages/pouchdb-server-packages/examples/todos/public/scripts/app.js b/packages/pouchdb-server-packages/examples/todos/public/scripts/app.js
new file mode 100644
index 0000000000..d2b2ea254b
--- /dev/null
+++ b/packages/pouchdb-server-packages/examples/todos/public/scripts/app.js
@@ -0,0 +1,168 @@
+(function() {
+
+ // 'use strict'; is default when ESM
+
+ var ENTER_KEY = 13;
+ var newTodoDom = document.getElementById('new-todo');
+ var syncDom = document.getElementById('sync-wrapper');
+
+ // EDITING STARTS HERE (you dont need to edit anything above this line)
+
+ var db = new PouchDB('todos');
+ var remoteCouch = window.location.href + 'db/todos';
+
+ db.info(function(err, info) {
+ db.changes({
+ since: info.update_seq,
+ continuous: true,
+ onChange: showTodos
+ });
+ });
+
+ // We have to create a new todo document and enter it in the database
+ function addTodo(text) {
+ var todo = {
+ _id: new Date().toISOString(),
+ title: text,
+ completed: false
+ };
+ db.put(todo, function callback (err, result) {
+ if (!err) {
+ console.log('Successfully posted a todo!');
+ }
+ });
+ }
+
+ // Show the current list of todos by reading them from the database
+ function showTodos() {
+ db.allDocs({
+ include_docs: true,
+ descending: true
+ }, function(err, doc) {
+ redrawTodosUI(doc.rows);
+ });
+ }
+
+ function checkboxChanged(todo, event) {
+ todo.completed = event.target.checked;
+ db.put(todo);
+ }
+
+ // User pressed the delete button for a todo, delete it
+ function deleteButtonPressed(todo) {
+ db.remove(todo);
+ }
+
+ // The input box when editing a todo has blurred, we should save
+ // the new title or delete the todo if the title is empty
+ function todoBlurred(todo, event) {
+ var trimmedText = event.target.value.trim();
+ if (!trimmedText) {
+ db.remove(todo);
+ } else {
+ todo.title = trimmedText;
+ db.put(todo);
+ }
+ }
+
+ // Initialise a sync with the remote server
+ function sync() {
+ syncDom.setAttribute('data-sync-state', 'syncing');
+ var opts = {continuous: true, complete: syncError};
+ db.replicate.to(remoteCouch, opts);
+ db.replicate.from(remoteCouch, opts);
+ }
+
+ // EDITING STARTS HERE (you dont need to edit anything below this line)
+
+ // There was some form or error syncing
+ function syncError() {
+ syncDom.setAttribute('data-sync-state', 'error');
+ }
+
+ // User has double clicked a todo, display an input so they can edit the title
+ function todoDblClicked(todo) {
+ var div = document.getElementById('li_' + todo._id);
+ var inputEditTodo = document.getElementById('input_' + todo._id);
+ div.className = 'editing';
+ inputEditTodo.focus();
+ }
+
+ // If they press enter while editing an entry, blur it to trigger save
+ // (or delete)
+ function todoKeyPressed(todo, event) {
+ if (event.keyCode === ENTER_KEY) {
+ var inputEditTodo = document.getElementById('input_' + todo._id);
+ inputEditTodo.blur();
+ }
+ }
+
+ // Given an object representing a todo, this will create a list item
+ // to display it.
+ function createTodoListItem(todo) {
+ var checkbox = document.createElement('input');
+ checkbox.className = 'toggle';
+ checkbox.type = 'checkbox';
+ checkbox.addEventListener('change', checkboxChanged.bind(this, todo));
+
+ var label = document.createElement('label');
+ label.appendChild( document.createTextNode(todo.title));
+ label.addEventListener('dblclick', todoDblClicked.bind(this, todo));
+
+ var deleteLink = document.createElement('button');
+ deleteLink.className = 'destroy';
+ deleteLink.addEventListener( 'click', deleteButtonPressed.bind(this, todo));
+
+ var divDisplay = document.createElement('div');
+ divDisplay.className = 'view';
+ divDisplay.appendChild(checkbox);
+ divDisplay.appendChild(label);
+ divDisplay.appendChild(deleteLink);
+
+ var inputEditTodo = document.createElement('input');
+ inputEditTodo.id = 'input_' + todo._id;
+ inputEditTodo.className = 'edit';
+ inputEditTodo.value = todo.title;
+ inputEditTodo.addEventListener('keypress', todoKeyPressed.bind(this, todo));
+ inputEditTodo.addEventListener('blur', todoBlurred.bind(this, todo));
+
+ var li = document.createElement('li');
+ li.id = 'li_' + todo._id;
+ li.appendChild(divDisplay);
+ li.appendChild(inputEditTodo);
+
+ if (todo.completed) {
+ li.className += 'complete';
+ checkbox.checked = true;
+ }
+
+ return li;
+ }
+
+ function redrawTodosUI(todos) {
+ var ul = document.getElementById('todo-list');
+ ul.innerHTML = '';
+ todos.forEach(function(todo) {
+ ul.appendChild(createTodoListItem(todo.doc));
+ });
+ }
+
+ function newTodoKeyPressHandler( event ) {
+ if (event.keyCode === ENTER_KEY) {
+ addTodo(newTodoDom.value);
+ newTodoDom.value = '';
+ }
+ }
+
+ function addEventListeners() {
+ newTodoDom.addEventListener('keypress', newTodoKeyPressHandler, false);
+ }
+
+ addEventListeners();
+ showTodos();
+
+ if (remoteCouch) {
+ sync();
+ }
+
+})();
diff --git a/packages/pouchdb-server-packages/examples/todos/public/scripts/pouchdb-nightly.min.js b/packages/pouchdb-server-packages/examples/todos/public/scripts/pouchdb-nightly.min.js
new file mode 100644
index 0000000000..ef9a7e955d
--- /dev/null
+++ b/packages/pouchdb-server-packages/examples/todos/public/scripts/pouchdb-nightly.min.js
@@ -0,0 +1,3 @@
+!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.PouchDB=e():"undefined"!=typeof global?global.PouchDB=e():"undefined"!=typeof self&&(self.PouchDB=e())}(function(){var define,module,exports;return function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);throw new Error("Cannot find module '"+a+"'")}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;at&&a.push(e)}),merge.traverseRevTree(o,function(e,t,n,r,o){var i=t+"-"+n;"available"===o.status&&-1!==a.indexOf(i)&&(o.status="missing",s.push(i))}),customApi._doCompaction(e,o,s,n)})}var api={},customApi=Pouch.adapters[opts.adapter](opts,function(e,t){if(e)return callback&&callback(e),void 0;for(var n in api)t.hasOwnProperty(n)||(t[n]=api[n]);opts.name===Pouch.prefix+Pouch.ALL_DBS?callback(e,t):Pouch.open(opts,function(e){callback(e,t)})}),auto_compaction=opts.auto_compaction===!0;api.post=function(e,t,n){return"function"==typeof t&&(n=t,t={}),"object"!=typeof e||Array.isArray(e)?call(n,errors.NOT_AN_OBJECT):customApi.bulkDocs({docs:[e]},t,autoCompact(yankError(n)))},api.put=function(e,t,n){return"function"==typeof t&&(n=t,t={}),"object"!=typeof e?call(n,errors.NOT_AN_OBJECT):"_id"in e?customApi.bulkDocs({docs:[e]},t,autoCompact(yankError(n))):call(n,errors.MISSING_ID)},api.putAttachment=function(e,t,n,r,o,i){function a(e){e._attachments=e._attachments||{},e._attachments[t]={content_type:o,data:r},api.put(e,i)}return api.taskqueue.ready()?("function"==typeof o&&(i=o,o=r,r=n,n=null),"undefined"==typeof o&&(o=r,r=n,n=null),api.get(e,function(t,r){return t&&t.error===errors.MISSING_DOC.error?(a({_id:e}),void 0):t?(call(i,t),void 0):r._rev!==n?(call(i,errors.REV_CONFLICT),void 0):(a(r),void 0)}),void 0):(api.taskqueue.addTask("putAttachment",arguments),void 0)},api.removeAttachment=function(e,t,n,r){api.get(e,function(e,o){return e?(call(r,e),void 0):o._rev!==n?(call(r,errors.REV_CONFLICT),void 0):o._attachments?(delete o._attachments[t],0===Object.keys(o._attachments).length&&delete o._attachments,api.put(o,r),void 0):call(r,null)})},api.remove=function(e,t,n){"function"==typeof t&&(n=t,t={}),void 0===t&&(t={}),t.was_delete=!0;var r={_id:e._id,_rev:e._rev};return r._deleted=!0,customApi.bulkDocs({docs:[r]},t,yankError(n))},api.revsDiff=function(e,t,n){function r(e,t){s[e]||(s[e]={missing:[]}),s[e].missing.push(t)}function o(t,n){var o=e[t].slice(0);merge.traverseRevTree(n,function(e,n,i,a,s){var u=n+"-"+i,c=o.indexOf(u);-1!==c&&(o.splice(c,1),"available"!==s.status&&r(t,u))}),o.forEach(function(e){r(t,e)})}"function"==typeof t&&(n=t,t={});var i=Object.keys(e),a=0,s={};i.map(function(t){customApi._getRevisionTree(t,function(r,u){if(r&&"not_found"===r.error&&"missing"===r.reason)s[t]={missing:e[t]};else{if(r)return call(n,r);o(t,u)}return++a===i.length?call(n,null,s):void 0})})},api.compact=function(e,t){"function"==typeof e&&(t=e,e={}),api.changes({complete:function(e,n){if(e)return call(t),void 0;var r=n.results.length;return r?(n.results.forEach(function(e){compactDocument(e.id,0,function(){r--,r||call(t)})}),void 0):(call(t),void 0)}})},api.get=function(e,t,n){function r(){var r=[],i=o.length;return i?(o.forEach(function(o){api.get(e,{rev:o,revs:t.revs},function(e,t){e?r.push({missing:o}):r.push({ok:t}),i--,i||call(n,null,r)})}),void 0):call(n,null,r)}if(!api.taskqueue.ready())return api.taskqueue.addTask("get",arguments),void 0;"function"==typeof t&&(n=t,t={});var o=[];{if(!t.open_revs)return customApi._get(e,t,function(e,r){if(e)return call(n,e);var o=r.doc,i=r.metadata,a=r.ctx;if(t.conflicts){var s=merge.collectConflicts(i);s.length&&(o._conflicts=s)}if(t.revs||t.revs_info){var u=merge.rootToLeaf(i.rev_tree),c=arrayFirst(u,function(e){return-1!==e.ids.map(function(e){return e.id}).indexOf(o._rev.split("-")[1])});if(c.ids.splice(c.ids.map(function(e){return e.id}).indexOf(o._rev.split("-")[1])+1),c.ids.reverse(),t.revs&&(o._revisions={start:c.pos+c.ids.length-1,ids:c.ids.map(function(e){return e.id})}),t.revs_info){var d=c.pos+c.ids.length;o._revs_info=c.ids.map(function(e){return d--,{rev:d+"-"+e.id,status:e.opts.status}})}}if(t.local_seq&&(o._local_seq=r.metadata.seq),t.attachments&&o._attachments){var l=o._attachments,f=Object.keys(l).length;if(0===f)return call(n,null,o);Object.keys(l).forEach(function(e){customApi._getAttachment(l[e],{encode:!0,ctx:a},function(t,r){o._attachments[e].data=r,--f||call(n,null,o)})})}else{if(o._attachments)for(var p in o._attachments)o._attachments[p].stub=!0;call(n,null,o)}});if("all"===t.open_revs)customApi._getRevisionTree(e,function(e,t){e&&(t=[]),o=merge.collectLeaves(t).map(function(e){return e.rev}),r()});else{if(!Array.isArray(t.open_revs))return call(n,utils.error(errors.UNKNOWN_ERROR,"function_clause"));o=t.open_revs;for(var i=0;i1&&"_design"!==d[0]&&"_local"!==d[0]||d.length>2&&"_design"===d[0]&&"_local"!==d[0])&&(c.binary=!0),n(c,function(e,t,n){return e?u.call(o,e):(u.call(o,null,t,n),void 0)})},l.remove=function(e,t,o){return l.taskqueue.ready()?("function"==typeof t&&(o=t,t={}),n({headers:s.headers,method:"DELETE",url:i(s,r(e._id))+"?rev="+e._rev},o),void 0):(l.taskqueue.addTask("remove",arguments),void 0)},l.getAttachment=function(e,t,n,o){"function"==typeof n&&(o=n,n={}),void 0===n.auto_encode&&(n.auto_encode=!0),n.auto_encode&&(e=r(e)),n.auto_encode=!1,l.get(e+"/"+t,n,o)},l.removeAttachment=function(e,t,o,a){return l.taskqueue.ready()?(n({headers:s.headers,method:"DELETE",url:i(s,r(e)+"/"+t)+"?rev="+o},a),void 0):(l.taskqueue.addTask("removeAttachment",arguments),void 0)},l.putAttachment=function(e,t,o,a,u,c){if(!l.taskqueue.ready())return l.taskqueue.addTask("putAttachment",arguments),void 0;"function"==typeof u&&(c=u,u=a,a=o,o=null),"undefined"==typeof u&&(u=a,a=o,o=null);var d=r(e)+"/"+t,f=i(s,d);o&&(f+="?rev="+o);var p={headers:s.headers,method:"PUT",url:f,processData:!1,body:a,timeout:6e4};p.headers["Content-Type"]=u,n(p,c)},l.put=function(e,t,o){if(!l.taskqueue.ready())return l.taskqueue.addTask("put",arguments),void 0;if("function"==typeof t&&(o=t,t={}),"object"!=typeof e)return u.call(o,c.NOT_AN_OBJECT);if(!("_id"in e))return u.call(o,c.MISSING_ID);var a=[];t&&"undefined"!=typeof t.new_edits&&a.push("new_edits="+t.new_edits),a=a.join("&"),""!==a&&(a="?"+a),n({headers:s.headers,method:"PUT",url:i(s,r(e._id))+a,body:e},o)},l.post=function(e,t,n){return l.taskqueue.ready()?("function"==typeof t&&(n=t,t={}),"object"!=typeof e?u.call(n,c.NOT_AN_OBJECT):("_id"in e?l.put(e,t,n):p.list.length>0?(e._id=p.list.pop(),l.put(e,t,n)):p.get(function(r){return r?u.call(n,c.UNKNOWN_ERROR):(e._id=p.list.pop(),l.put(e,t,n),void 0)}),void 0)):(l.taskqueue.addTask("post",arguments),void 0)},l.bulkDocs=function(e,t,r){return l.taskqueue.ready()?("function"==typeof t&&(r=t,t={}),t||(t={}),"undefined"!=typeof t.new_edits&&(e.new_edits=t.new_edits),n({headers:s.headers,method:"POST",url:i(s,"_bulk_docs"),body:e},r),void 0):(l.taskqueue.addTask("bulkDocs",arguments),void 0)},l.allDocs=function(e,t){if(!l.taskqueue.ready())return l.taskqueue.addTask("allDocs",arguments),void 0;"function"==typeof e&&(t=e,e={});var r,o=[],a="GET";e.conflicts&&o.push("conflicts=true"),e.descending&&o.push("descending=true"),e.include_docs&&o.push("include_docs=true"),e.startkey&&o.push("startkey="+encodeURIComponent(JSON.stringify(e.startkey))),e.endkey&&o.push("endkey="+encodeURIComponent(JSON.stringify(e.endkey))),e.limit&&o.push("limit="+e.limit),"undefined"!=typeof e.skip&&o.push("skip="+e.skip),o=o.join("&"),""!==o&&(o="?"+o),"undefined"!=typeof e.keys&&(a="POST",r=JSON.stringify({keys:e.keys})),n({headers:s.headers,method:a,url:i(s,"_all_docs"+o),body:r},t)},l.changes=function(e){var t=25;if(!l.taskqueue.ready()){var r=l.taskqueue.addTask("changes",arguments);return{cancel:function(){return r.task?r.task.cancel():(r.parameters[0].aborted=!0,void 0)}}}if("latest"===e.since){var o;return l.info(function(t,n){e.aborted||(e.since=n.update_seq,o=l.changes(e))}),{cancel:function(){return o?o.cancel():(e.aborted=!0,void 0)}}}var a={},d="undefined"!=typeof e.limit?e.limit:!1;0===d&&(d=1);var f=d;if(e.style&&(a.style=e.style),(e.include_docs||e.filter&&"function"==typeof e.filter)&&(a.include_docs=!0),e.continuous&&(a.feed="longpoll"),e.conflicts&&(a.conflicts=!0),e.descending&&(a.descending=!0),e.filter&&"string"==typeof e.filter&&(a.filter=e.filter,"_view"===e.filter&&e.view&&"string"==typeof e.view&&(a.view=e.view)),e.query_params&&"object"==typeof e.query_params)for(var p in e.query_params)e.query_params.hasOwnProperty(p)&&(a[p]=e.query_params[p]);var v,h,m,_,g=function(r,o){a.since=r,e.continuous||_||(_=m),a.limit=!d||f>t?t:f;var u="?"+Object.keys(a).map(function(e){return e+"="+a[e]}).join("&"),c={headers:s.headers,method:"GET",url:i(s,"_changes"+u),timeout:null};h=r,e.aborted||(v=n(c,o))},y=10,b=0,k={results:[]},w=function(n,r){if(r&&r.results){k.last_seq=r.last_seq;var o={};o.query=e.query_params,r.results=r.results.filter(function(t){f--;var n=u.filterChange(e)(t);return n&&(k.results.push(t),u.call(e.onChange,t)),n})}else n&&(e.aborted=!0,u.call(e.complete,n,null));r&&r.last_seq&&(h=r.last_seq);var i=r&&r.results.length||0;_-=t;var a=d&&0>=f||r&&!i&&0>=_||i&&r.last_seq===m||e.descending&&0!==h;if(e.continuous||!a){n?b+=1:b=0;var s=1<p&&u.call(e.complete,n||c.UNKNOWN_ERROR,null),setTimeout(function(){g(h,w)},l)}else u.call(e.complete,null,k)};return e.continuous?g(e.since||0,w):l.info(function(t,n){return t?u.call(e.complete,t):(m=n.update_seq,g(e.since||0,w),void 0)}),{cancel:function(){e.aborted=!0,v.abort()}}},l.revsDiff=function(e,t,r){return l.taskqueue.ready()?("function"==typeof t&&(r=t,t={}),n({headers:s.headers,method:"POST",url:i(s,"_revs_diff"),body:e},function(e,t){u.call(r,e,t)}),void 0):(l.taskqueue.addTask("revsDiff",arguments),void 0)},l.close=function(e){return l.taskqueue.ready()?(u.call(e,null),void 0):(l.taskqueue.addTask("close",arguments),void 0)},l.replicateOnServer=function(e,r,i){if(!l.taskqueue.ready())return l.taskqueue.addTask("replicateOnServer",arguments),i;var a=o(e.id()),c={source:s.db,target:a.protocol===s.protocol&&a.authority===s.authority?a.db:a.source};r.continuous&&(c.continuous=!0),r.create_target&&(c.create_target=!0),r.doc_ids&&(c.doc_ids=r.doc_ids),r.filter&&"string"==typeof r.filter&&(c.filter=r.filter),r.query_params&&(c.query_params=r.query_params);var d,f={},p={headers:s.headers,method:"POST",url:s.protocol+"://"+s.host+(80===s.port?"":":"+s.port)+"/_replicate",body:c};i.cancel=function(){this.cancelled=!0,d&&!f.ok&&d.abort(),f._local_id&&(p.body={replication_id:f._local_id}),p.body.cancel=!0,n(p,function(e,n,o){return e?u.call(t,e):(u.call(r.complete,null,f,o),void 0)})},i.cancelled||(d=n(p,function(e,n,o){return e?u.call(t,e):(f.ok=!0,n._local_id&&(f._local_id=n._local_id),u.call(r.complete,null,n,o),void 0)}))},l}var u=e("../utils"),c=e("../deps/errors");n.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},s.destroy=function(e,t,n){var r=o(e,t);t=t||{},"function"==typeof t&&(n=t,t={}),t.headers=r.headers,t.method="DELETE",t.url=i(r,""),u.ajax(t,n)},s.valid=function(){return!0},t.exports=s},{"../deps/errors":7,"../utils":14}],3:[function(e,t){"use strict";function n(e){return function(t){o.call(e,{status:500,error:t.type,reason:t.target})}}function r(e,t){function s(e){e.createObjectStore(l,{keyPath:"id"}).createIndex("seq","seq",{unique:!0}),e.createObjectStore(f,{autoIncrement:!0}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0}),e.createObjectStore(p,{keyPath:"digest"}),e.createObjectStore(v,{keyPath:"id",autoIncrement:!1}),e.createObjectStore(h)}function u(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n),o=0;t>o;o++)r[o]=e.charCodeAt(o);return n}function c(e,t){return e._bulk_seq-t._bulk_seq}var d=1,l="document-store",f="by-sequence",p="attach-store",v="meta-store",h="detect-blob-support",m=e.name,_=window.indexedDB.open(m,d);"openReqList"in r||(r.openReqList={}),r.openReqList[m]=_;var g=null,y=null,b={},k=null;return _.onupgradeneeded=function(e){for(var t=e.target.result,n=e.oldVersion;n!==e.newVersion;)0===n&&s(t),n++},_.onsuccess=function(e){k=e.target.result,k.onversionchange=function(){k.close()};var n=k.transaction([v,h],"readwrite"),r=n.objectStore(v).get(v);r.onsuccess=function(e){var r=e.target.result||{id:v};m+"_id"in r?y=r[m+"_id"]:(y=o.uuid(),r[m+"_id"]=y,n.objectStore(v).put(r));try{n.objectStore(h).put(o.createBlob(),"key"),g=!0}catch(i){g=!1}finally{o.call(t,null,b)}}},_.onerror=n(t),b.type=function(){return"idb"},b.id=function(){return y},b._bulkDocs=function(e,t,s){function d(e){var t=e.target.result;t.updateSeq=(t.updateSeq||0)+x,N.objectStore(v).put(t)}function h(){if(!C.length)return N.objectStore(v).get(v).onsuccess=d,void 0;var e=C.shift(),t=N.objectStore(l).get(e.metadata.id);t.onsuccess=function(t){var n=t.target.result;n?q(n,e):S(e)}}function _(){var e=[];A.sort(c),A.forEach(function(t){if(delete t._bulk_seq,t.error)return e.push(t),void 0;var n=t.metadata,a=i.winningRev(n);e.push({ok:!0,id:n.id,rev:a}),o.isLocalId(n.id)||(r.Changes.notify(m),r.Changes.notifyLocalWindows(m))}),o.call(s,null,e)}function y(e,t){if(e.stub)return t();if("string"==typeof e.data){var n;try{n=atob(e.data)}catch(r){var i=o.error(a.BAD_ARG,"Attachments need to be base64 encoded");return o.call(s,i)}if(e.digest="md5-"+o.Crypto.MD5(n),g){var c=e.content_type;n=u(n),e.data=o.createBlob([n],{type:c})}return t()}var d=new FileReader;d.onloadend=function(){e.digest="md5-"+o.Crypto.MD5(this.result),g||(e.data=btoa(this.result)),t()},d.readAsBinaryString(e.data)}function b(e){function t(){n++,C.length===n&&e()}if(!C.length)return e();var n=0;C.forEach(function(e){function n(){o++,o===r.length&&t()}var r=e.data&&e.data._attachments?Object.keys(e.data._attachments):[];if(!r.length)return t();var o=0;for(var i in e.data._attachments)y(e.data._attachments[i],n)})}function w(e,t){function n(e){a||(e?(a=e,o.call(t,a)):s===u.length&&i())}function r(e){s++,n(e)}function i(){e.data._doc_id_rev=e.data._id+"::"+e.data._rev;var n=N.objectStore(f).put(e.data);n.onsuccess=function(n){e.metadata.seq=n.target.result,delete e.metadata.rev;var r=N.objectStore(l).put(e.metadata);r.onsuccess=function(){A.push(e),o.call(t)}}}var a=null,s=0;e.data._id=e.metadata.id,e.data._rev=e.metadata.rev,x++,o.isDeleted(e.metadata,e.metadata.rev)&&(e.data._deleted=!0);var u=e.data._attachments?Object.keys(e.data._attachments):[];for(var c in e.data._attachments)if(e.data._attachments[c].stub)s++,n();else{var d=e.data._attachments[c].data;delete e.data._attachments[c].data;var p=e.data._attachments[c].digest;O(e,p,d,r)}u.length||i()}function q(e,t){var n=i.merge(e.rev_tree,t.metadata.rev_tree[0],1e3),r=o.isDeleted(e),s=r&&o.isDeleted(t.metadata)||!r&&R&&"new_leaf"!==n.conflicts;return s?(A.push(E(a.REV_CONFLICT,t._bulk_seq)),h()):(t.metadata.rev_tree=n.tree,w(t,h),void 0)}function S(e){return"was_delete"in t&&o.isDeleted(e.metadata)?(A.push(a.MISSING_DOC),h()):(w(e,h),void 0)}function E(e,t){return e._bulk_seq=t,e}function O(e,t,n,r){{var i=N.objectStore(p);i.get(t).onsuccess=function(a){var s=a.target.result&&a.target.result.refs||{},u=[e.metadata.id,e.metadata.rev].join("@"),c={digest:t,body:n,refs:s};c.refs[u]=!0;i.put(c).onsuccess=function(){o.call(r)}}}}var R=t.new_edits,T=e.docs,C=T.map(function(e,t){var n=o.parseDoc(e,R);return n._bulk_seq=t,n}),D=C.filter(function(e){return e.error});if(D.length)return o.call(s,D[0]);var N,A=[],x=0;b(function(){N=k.transaction([l,f,p,v],"readwrite"),N.onerror=n(s),N.ontimeout=n(s),N.oncomplete=_,h()})},b._get=function(e,t,n){function r(){o.call(n,c,{doc:s,metadata:u,ctx:d})}var s,u,c,d;d=t.ctx?t.ctx:k.transaction([l,f,p],"readonly"),d.objectStore(l).get(e).onsuccess=function(e){if(u=e.target.result,!u)return c=a.MISSING_DOC,r();if(o.isDeleted(u)&&!t.rev)return c=o.error(a.MISSING_DOC,"deleted"),r();var n=i.winningRev(u),l=u.id+"::"+(t.rev?t.rev:n),p=d.objectStore(f).index("_doc_id_rev");p.get(l).onsuccess=function(e){return s=e.target.result,s&&s._doc_id_rev&&delete s._doc_id_rev,s?(r(),void 0):(c=a.MISSING_DOC,r())}}},b._getAttachment=function(e,t,n){var r,i;i=t.ctx?t.ctx:k.transaction([l,f,p],"readonly");var a=e.digest,s=e.content_type;i.objectStore(p).get(a).onsuccess=function(e){var i=e.target.result.body;if(t.encode)if(g){var a=new FileReader;a.onloadend=function(){r=btoa(this.result),o.call(n,null,r)},a.readAsBinaryString(i)}else r=i,o.call(n,null,r);else g?r=i:(i=u(atob(i)),r=o.createBlob([i],{type:s})),o.call(n,null,r)}},b._allDocs=function(e,t){var n="startkey"in e?e.startkey:!1,r="endkey"in e?e.endkey:!1,a="descending"in e?e.descending:!1;a=a?"prev":null;var s=n&&r?window.IDBKeyRange.bound(n,r):n?window.IDBKeyRange.lowerBound(n):r?window.IDBKeyRange.upperBound(r):null,u=k.transaction([l,f],"readonly");u.oncomplete=function(){"keys"in e&&(e.keys.forEach(function(e){e in v?p.push(v[e]):p.push({key:e,error:"not_found"})}),e.descending&&p.reverse()),o.call(t,null,{total_rows:p.length,offset:e.skip,rows:"limit"in e?p.slice(e.skip,e.limit+e.skip):e.skip>0?p.slice(e.skip):p})};var c=u.objectStore(l),d=a?c.openCursor(s,a):c.openCursor(s),p=[],v={};d.onsuccess=function(t){function n(t,n){if(o.isLocalId(t.id))return r["continue"]();var a={id:t.id,key:t.id,value:{rev:i.winningRev(t)}};if(e.include_docs){a.doc=n,a.doc._rev=i.winningRev(t),a.doc._doc_id_rev&&delete a.doc._doc_id_rev,e.conflicts&&(a.doc._conflicts=i.collectConflicts(t));for(var s in a.doc._attachments)a.doc._attachments[s].stub=!0}"keys"in e?e.keys.indexOf(t.id)>-1&&(o.isDeleted(t)&&(a.value.deleted=!0,a.doc=null),v[a.id]=a):o.isDeleted(t)||p.push(a),r["continue"]()}if(t.target.result){var r=t.target.result,a=r.value;if(e.include_docs){var s=u.objectStore(f).index("_doc_id_rev"),c=i.winningRev(a),d=a.id+"::"+c;s.get(d).onsuccess=function(e){n(r.value,e.target.result)}}else n(a)}}},b._info=function(e){function t(e){o=e.target.result&&e.target.result.updateSeq||0}function n(e){var n=e.target.result;return n?(n.value.deleted!==!0&&r++,n["continue"](),void 0):(i.objectStore(v).get(v).onsuccess=t,void 0)}var r=0,o=0,i=k.transaction([l,v],"readonly");i.oncomplete=function(){e(null,{db_name:m,doc_count:r,update_seq:o})},i.objectStore(l).openCursor().onsuccess=n},b._changes=function(e){function t(){p=k.transaction([l,f]),p.oncomplete=a;var t;t=c?p.objectStore(f).openCursor(window.IDBKeyRange.lowerBound(e.since,!0),c):p.objectStore(f).openCursor(window.IDBKeyRange.lowerBound(e.since,!0)),t.onsuccess=n,t.onerror=s}function n(t){if(!t.target.result){for(var n=0,r=v.length;r>n;n++){var a=v[n];a&&_.push(a)}return!1}var s=t.target.result,u=s.value._id,c=h[u];if(void 0!==c)return v[c].seq=s.key,v.push(v[c]),v[c]=null,h[u]=v.length-1,s["continue"]();var m=p.objectStore(l);m.get(s.value._id).onsuccess=function(t){var n=t.target.result;if(o.isLocalId(n.id))return s["continue"]();d= "'+u+'"'),c&&(p+=(u?" AND ":" WHERE ")+d+'.id <= "'+c+'"'),p+=" ORDER BY "+d+".id "+(f?"DESC":"ASC")),b.transaction(function(t){t.executeSql(p,[],function(t,n){for(var r=0,u=n.rows.length;u>r;r++){var c=n.rows.item(r),d=JSON.parse(c.metadata),l=JSON.parse(c.data);if(!i.isLocalId(d.id)){if(c={id:d.id,key:d.id,value:{rev:a.winningRev(d)}},e.include_docs){c.doc=l,c.doc._rev=a.winningRev(d),e.conflicts&&(c.doc._conflicts=a.collectConflicts(d));for(var f in c.doc._attachments)c.doc._attachments[f].stub=!0}"keys"in e?e.keys.indexOf(d.id)>-1&&(i.isDeleted(d)&&(c.value.deleted=!0,c.doc=null),s[c.id]=c):i.isDeleted(d)||o.push(c)}}})},r(t),function(){"keys"in e&&(e.keys.forEach(function(e){e in s?o.push(s[e]):o.push({key:e,error:"not_found"})}),e.descending&&o.reverse()),i.call(t,null,{total_rows:o.length,offset:e.skip,rows:"limit"in e?o.slice(e.skip,e.limit+e.skip):e.skip>0?o.slice(e.skip):o})})},_._changes=function(e){function t(){var t="SELECT "+d+".id, "+l+".seq, "+l+".json AS data, "+d+".json AS metadata FROM "+l+" JOIN "+d+" ON "+l+".seq = "+d+".winningseq WHERE "+d+".seq > "+e.since+" ORDER BY "+d+".seq "+(r?"DESC":"ASC");b.transaction(function(n){n.executeSql(t,[],function(t,n){for(var r=0,o=0,u=n.rows.length;u>o;o++){var c=n.rows.item(o),d=JSON.parse(c.metadata);if(!i.isLocalId(d.id)){r=200&&p.status<300){var r;r=e.binary?i([p.response||""],{type:p.getResponseHeader("Content-Type")}):p.responseText,n(a,r,p,t)}else n(s,p,t)},e.timeout>0&&(l=setTimeout(c,e.timeout)),p.send(e.body),{abort:c}}return e.json&&(e.binary||(e.headers.Accept="application/json"),e.headers["Content-Type"]=e.headers["Content-Type"]||"application/json"),e.binary&&(e.encoding=null,e.json=!1),e.processData||(e.json=!1),r(e,function(r,o,i){if(r)return r.status=o?o.statusCode:400,n(s,r,t);var u=o.headers["content-type"],c=i||"";e.binary||!e.json&&e.processData||"object"==typeof c||!(/json/.test(u)||/^[\s]*\{/.test(c)&&/\}[\s]*$/.test(c))||(c=JSON.parse(c)),o.statusCode>=200&&o.statusCode<300?n(a,c,o,t):(e.binary&&(c=JSON.parse(c.toString())),c.status=o.statusCode,n(t,c))})}var r=e("request"),o=e("./extend.js"),i=e("./blob.js");t.exports=n},{"./blob.js":6,"./extend.js":8,request:16}],6:[function(e,t){function n(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(n){if("TypeError"!==n.name)throw n;for(var r=window.BlobBuilder||window.MSBlobBuilder||window.MozBlobBuilder||window.WebKitBlobBuilder,o=new r,i=0;id;d++)if(null!=(e=arguments[d]))for(t in e)n=c[t],r=e[t],c!==r&&(f&&r&&(o(r)||(s=p(r)))?(s?(s=!1,u=n&&p(n)?n:[]):u=n&&o(n)?n:{},c[t]=a(f,u,r)):void 0!==r&&(p(e)&&i(r)||(c[t]=r)));return c}for(var s={},u=["Boolean","Number","String","Function","Array","Date","RegExp","Object","Error"],c=0;c>>32-t}function n(e,t){var n,r,o,i,a;return o=2147483648&e,i=2147483648&t,n=1073741824&e,r=1073741824&t,a=(1073741823&e)+(1073741823&t),n&r?2147483648^a^o^i:n|r?1073741824&a?3221225472^a^o^i:1073741824^a^o^i:a^o^i}function i(e,t,n){return e&t|~e&n}function a(e,t,n){return e&n|t&~n}function s(e,t,n){return e^t^n}function u(e,t,n){return t^(e|~n)}function c(e,r,o,a,s,u,c){return e=n(e,n(n(i(r,o,a),s),c)),n(t(e,u),r)}function d(e,r,o,i,s,u,c){return e=n(e,n(n(a(r,o,i),s),c)),n(t(e,u),r)}function l(e,r,o,i,a,u,c){return e=n(e,n(n(s(r,o,i),a),c)),n(t(e,u),r)}function f(e,r,o,i,a,s,c){return e=n(e,n(n(u(r,o,i),a),c)),n(t(e,s),r)}function p(e){for(var t,n=e.length,r=n+8,o=(r-r%64)/64,i=16*(o+1),a=Array(i-1),s=0,u=0;n>u;)t=(u-u%4)/4,s=u%4*8,a[t]=a[t]|e.charCodeAt(u)<>>29,a}function v(e){var t,n,r="",o="";for(n=0;3>=n;n++)t=e>>>8*n&255,o="0"+t.toString(16),r+=o.substr(o.length-2,2);return r}if(!r.browser)return o.createHash("md5").update(e).digest("hex");var h,m,_,g,y,b,k,w,q,S=Array(),E=7,O=12,R=17,T=22,C=5,D=9,N=14,A=20,x=4,j=11,I=16,L=23,B=6,M=10,P=15,U=21;for(S=p(e),b=1732584193,k=4023233417,w=2562383102,q=271733878,h=0;hr;r++)i[r]=o[0|Math.random()*t];else{var a;for(i[8]=i[13]=i[18]=i[23]="-",i[14]="4",r=0;36>r;r++)i[r]||(a=0|16*Math.random(),i[r]=o[19==r?3&a|8:a])}return i.join("")}n.CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),t.exports=n},{}],11:[function(e,t){function n(e,t,r){if(!(this instanceof n))return new n(e,t,r);("function"==typeof t||"undefined"==typeof t)&&(r=t,t={}),"object"==typeof e&&(t=e,e=void 0),"undefined"==typeof r&&(r=function(){});var o=n.parseAdapter(t.name||e);if(t.originalName=e,t.name=t.name||o.name,t.adapter=t.adapter||o.adapter,!n.adapters[t.adapter])throw"Adapter is missing";if(!n.adapters[t.adapter].valid())throw"Invalid Adapter";var a=new i(t,function(e,t){if(e)return r&&r(e),void 0;for(var o in n.plugins){var i=n.plugins[o](t);for(var a in i)a in t||(t[a]=i[a])}t.taskqueue.ready(!0),t.taskqueue.execute(t),r(null,t)});for(var s in a)this[s]=a[s];for(var u in n.plugins){var c=n.plugins[u](this);for(var d in c)d in this||(this[d]=c[d])}}var r=e("__browserify_process"),o=e("./utils"),i=e("./adapter")(n);n.adapters={},n.plugins={},n.prefix="_pouch_",n.parseAdapter=function(e){var t,r=e.match(/([a-z\-]*):\/\/(.*)/);if(r){if(e=/http(s?)/.test(r[1])?r[1]+"://"+r[2]:r[2],t=r[1],!n.adapters[t].valid())throw"Invalid adapter";return{name:e,adapter:r[1]}}for(var o=["idb","leveldb","websql"],i=0;i0;){var o=n.pop(),i=o.tree1,a=o.tree2;(i[1].status||a[1].status)&&(i[1].status="available"===i[1].status||"available"===a[1].status?"available":"missing");for(var s=0;s0;){var p=f.pop();0!==p.diff?p.ids&&p.ids[2].forEach(function(e,t){f.push({ids:e,diff:p.diff-1,parent:p.ids,parentIdx:t})}):p.ids[0]===c.ids[0]&&l.push(p)}var v=l[0];v?(o=r(v.ids,c.ids),v.parent[2][v.parentIdx]=o.tree,i.push({pos:u.pos,ids:u.ids}),a=a||o.conflicts,s=!0):i.push(e)}else i.push(e)}),s||i.push(t),i.sort(function(e,t){return e.pos-t.pos}),{tree:i,conflicts:a||"internal_node"}):{tree:[t],conflicts:"new_leaf"}}function i(e,t){var r=s.rootToLeaf(e).map(function(e){var r=e.ids.slice(-t);return{pos:e.pos+(e.ids.length-r.length),ids:n(r)}});return r.reduce(function(e,t){return o(e,t,!0).tree},[r.shift()])}var a=e("./deps/extend"),s={};s.merge=function(e,t,n){e=a(!0,[],e),t=a(!0,{},t);var r=o(e,t);return{tree:i(r.tree,n),conflicts:r.conflicts}},s.winningRev=function(e){var t=[];return s.traverseRevTree(e.rev_tree,function(e,n,r,o,i){e&&t.push({pos:n,id:r,deleted:!!i.deleted})}),t.sort(function(e,t){return e.deleted!==t.deleted?e.deleted>t.deleted?1:-1:e.pos!==t.pos?t.pos-e.pos:e.id0;){var r=n.pop(),o=r.pos,i=r.ids,a=t(0===i[2].length,o,i[0],r.ctx,i[1]);i[2].forEach(function(e){n.push({pos:o+1,ids:e,ctx:a})})}},s.collectLeaves=function(e){var t=[];return s.traverseRevTree(e,function(e,n,r,o,i){e&&t.unshift({rev:n+"-"+r,pos:n,opts:i})}),t.sort(function(e,t){return t.pos-e.pos}),t.map(function(e){delete e.pos}),t},s.collectConflicts=function(e){var t=s.winningRev(e),n=s.collectLeaves(e.rev_tree),r=[];return n.forEach(function(e){e.rev===t||e.opts.deleted||r.push(e.rev)}),r},s.rootToLeaf=function(e){var t=[];return s.traverseRevTree(e,function(e,n,r,o,i){if(o=o?o.slice(0):[],o.push({id:r,opts:i}),e){var a=n+1-o.length;t.unshift({pos:a,ids:o})}return o}),t},t.exports=s},{"./deps/extend":8}],13:[function(e,t,n){"use strict";function r(){var e=this;this.cancelled=!1,this.cancel=function(){e.cancelled=!0}}function o(e){var t=[],n={},r=!1;return n.enqueue=function(e,o){t.push({fun:e,args:o}),r||n.process()},n.process=function(){if(!r&&t.length&&!e.cancelled){r=!0;var n=t.shift();n.fun.apply(null,n.args)}},n.notifyRequestComplete=function(){r=!1,n.process()},n}function i(e,t,n){var r=n.filter?n.filter.toString():"";return"_local/"+d.Crypto.MD5(e.id()+t.id()+r)}function a(e,t,n,r){t.get(n,function(t,o){t&&404===t.status?r(null,0):e.get(n,function(e,t){e&&404===e.status||o.last_seq!==t.last_seq?r(null,0):r(null,t.last_seq)})})}function s(e,t,n,r,o){function i(e,t){e.get(n,function(o,i){o&&404===o.status&&(i={_id:n}),i.last_seq=r,e.put(i,t)})}i(t,function(){i(e,function(){o()})})}function u(e,t,n,r){function u(r,o,i){if(n.onChange)for(var a=0;i>a;a++)n.onChange.apply(this,[O]);w-=i,O.docs_written+=i,s(e,t,y,q,function(){_.notifyRequestComplete(),m()})}function c(){if(!g.length)return _.notifyRequestComplete();var e=g.length;t.bulkDocs({docs:g},{new_edits:!1},function(t,n){u(t,n,e)}),g=[]}function l(t,n){e.get(t,{revs:!0,rev:n,attachments:!0},function(e,t){O.docs_read++,_.notifyRequestComplete(),g.push(t),_.enqueue(c)})}function f(e){return function(t,o){if(_.notifyRequestComplete(),t)return S&&r.cancel(),d.call(n.complete,t,null),void 0;if(0===Object.keys(o).length){for(var i in e)w-=e[i];return m(),void 0}var a=function(e){_.enqueue(l,[s,e])};for(var s in o){var u=e[s]-o[s].missing.length;w-=u,o[s].missing.forEach(a)}}}function p(e,n){t.revsDiff(e,f(n))}function v(e){q=e.seq,b.push(e);var t={};t[e.id]=e.changes.map(function(e){return e.rev});var n={};n[e.id]=e.changes.length,w+=e.changes.length,_.enqueue(p,[t,n])}function h(){k=!0,m()}function m(){k&&0===w&&(O.end_time=new Date,d.call(n.complete,null,O))}var _=new o(r),g=[],y=i(e,t,n),b=[],k=!1,w=0,q=0,S=n.continuous||!1,E=n.doc_ids,O={ok:!0,start_time:new Date,docs_read:0,docs_written:0};a(e,t,y,function(t,o){if(t)return d.call(n.complete,t);if(q=o,!r.cancelled){var i={continuous:S,since:q,style:"all_docs",onChange:v,complete:h,doc_ids:E};n.filter&&(i.filter=n.filter),n.query_params&&(i.query_params=n.query_params);var a=e.changes(i);if(n.continuous){var s=r.cancel;r.cancel=function(){s(),a.cancel()}}}})}function c(e,t){return"string"==typeof e?new l(e,t):(t(null,e),void 0)}var d=e("./utils"),l=e("./index");n.replicate=function(e,t,n,o){n instanceof Function&&(o=n,n={}),void 0===n&&(n={}),n.complete||(n.complete=o);var i=new r;return c(e,function(e,r){return e?d.call(o,e):(c(t,function(e,t){if(e)return d.call(o,e);if(n.server){if("function"!=typeof r.replicateOnServer)return d.call(o,{error:"Server replication not supported for "+r.type()+" adapter"});if(r.type()!==t.type())return d.call(o,{error:"Server replication for different adapter types ("+r.type()+" and "+t.type()+") is not supported"});r.replicateOnServer(t,n,i)}else u(r,t,n,i)}),void 0)}),i}},{"./index":11,"./utils":14}],14:[function(e,t,n){function r(e){return/^_/.test(e)?/^_(design|local)/.test(e):!0}function o(){return"undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage&&"undefined"!=typeof chrome.storage.local}var i=e("./merge");n.extend=e("./deps/extend"),n.ajax=e("./deps/ajax"),n.createBlob=e("./deps/blob");var a=e("./deps/uuid");n.Crypto=e("./deps/md5.js");var s=e("./deps/buffer"),u=e("./deps/errors");n.error=function(e,t){return n.extend({},e,{reason:t})};var c=["_id","_rev","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree"];n.uuids=function(e,t){"object"!=typeof t&&(t={});for(var n=t.length,r=t.radix,o=[];o.push(a(n,r))=0&&(t=t.split("-")[1]);var n=!1;return i.traverseRevTree(e.rev_tree,function(e,r,o,i,a){o===t&&(n=!!a.deleted)}),n},n.filterChange=function(e){return function(t){var n={},r=e.filter&&"function"==typeof e.filter;if(n.query=e.query_params,e.filter&&r&&!e.filter.call(this,t.doc,n))return!1;if(e.doc_ids&&-1===e.doc_ids.indexOf(t.id))return!1;if(e.include_docs)for(var o in t.doc._attachments)t.doc._attachments[o].stub=!0;else delete t.doc;return!0}},n.processChanges=function(e,t,r){t=t.filter(n.filterChange(e)),e.limit&&e.limito.since&&!o.cancelled&&(o.since=e.seq,n.call(o.onChange,e))}})})},e},n.atob="undefined"!=typeof window&&"atob"in window?function(e){return atob(e)}:function(e){var t=new s(e,"base64");if(t.toString("base64")!==e)throw"Cannot base64 encode full string";return t.toString("binary")},n.btoa="undefined"!=typeof window&&"btoa"in window?function(e){return btoa(e)}:function(e){return new s(e,"binary").toString("base64")},t.exports=n},{"./deps/ajax":5,"./deps/blob":6,"./deps/buffer":16,"./deps/errors":7,"./deps/extend":8,"./deps/md5.js":9,"./deps/uuid":10,"./merge":12}],15:[function(e,t){t.exports="1.0.0"},{}],16:[function(){},{}],17:[function(e,t){var n=t.exports={};n.nextTick=function(){var e="undefined"!=typeof window&&window.setImmediate,t="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener("message",function(e){if(e.source===window&&"process-tick"===e.data&&(e.stopPropagation(),n.length>0)){var t=n.shift();t()}},!0),function(e){n.push(e),window.postMessage("process-tick","*")}}return function(e){setTimeout(e,0)}}(),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.binding=function(){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(){throw new Error("process.chdir is not supported")}},{}],18:[function(require,module,exports){"use strict";function MapReduce(db){function viewQuery(fun,options){function sum(e){return e.reduce(function(e,t){return e+t
+},0)}function emit(e,t){var n={id:current.doc._id,key:e,value:t};if(!(options.startkey&&pouchCollate(e,options.startkey)<0||options.endkey&&pouchCollate(e,options.endkey)>0||options.key&&0!==pouchCollate(e,options.key))){if(num_started++,options.include_docs){if(t&&"object"==typeof t&&t._id)return db.get(t._id,function(e,t){t&&(n.doc=t),results.push(n),checkComplete()}),void 0;n.doc=current.doc}results.push(n)}}function checkComplete(){if(completed&&results.length==num_started){if(results.sort(function(e,t){return pouchCollate(e.key,t.key)}),options.descending&&results.reverse(),options.reduce===!1)return options.complete(null,{total_rows:results.length,offset:options.skip,rows:"limit"in options?results.slice(options.skip,options.limit+options.skip):options.skip>0?results.slice(options.skip):results});var e=[];results.forEach(function(t){var n=e[e.length-1]||null;return n&&0===pouchCollate(n.key[0][0],t.key)?(n.key.push([t.key,t.id]),n.value.push(t.value),void 0):(e.push({key:[[t.key,t.id]],value:[t.value]}),void 0)}),e.forEach(function(e){e.value=fun.reduce(e.key,e.value),e.value="undefined"==typeof e.value?null:e.value,e.key=e.key[0][0]}),options.complete(null,{total_rows:e.length,offset:options.skip,rows:"limit"in options?e.slice(options.skip,options.limit+options.skip):options.skip>0?e.slice(options.skip):e})}}if(options.complete){options.skip||(options.skip=0),fun.reduce||(options.reduce=!1);var builtInReduce={_sum:function(e,t){return sum(t)},_count:function(e,t,n){return n?sum(t):t.length},_stats:function(e,t){return{sum:sum(t),min:Math.min.apply(null,t),max:Math.max.apply(null,t),count:t.length,sumsqr:function(){var e=0;for(var n in t)"number"==typeof t[n]&&(e+=t[n]*t[n]);return e}()}}},results=[],current=null,num_started=0,completed=!1;eval("fun.map = "+fun.map.toString()+";"),fun.reduce&&(builtInReduce[fun.reduce]&&(fun.reduce=builtInReduce[fun.reduce]),eval("fun.reduce = "+fun.reduce.toString()+";")),db.changes({conflicts:!0,include_docs:!0,onChange:function(e){"deleted"in e||(current={doc:e.doc},fun.map.call(this,e.doc))},complete:function(){completed=!0,checkComplete()}})}}function httpQuery(e,t,n){var r=[],o=void 0,i="GET";if("undefined"!=typeof t.reduce&&r.push("reduce="+t.reduce),"undefined"!=typeof t.include_docs&&r.push("include_docs="+t.include_docs),"undefined"!=typeof t.limit&&r.push("limit="+t.limit),"undefined"!=typeof t.descending&&r.push("descending="+t.descending),"undefined"!=typeof t.startkey&&r.push("startkey="+encodeURIComponent(JSON.stringify(t.startkey))),"undefined"!=typeof t.endkey&&r.push("endkey="+encodeURIComponent(JSON.stringify(t.endkey))),"undefined"!=typeof t.key&&r.push("key="+encodeURIComponent(JSON.stringify(t.key))),"undefined"!=typeof t.group&&r.push("group="+t.group),"undefined"!=typeof t.group_level&&r.push("group_level="+t.group_level),"undefined"!=typeof t.skip&&r.push("skip="+t.skip),"undefined"!=typeof t.keys&&(i="POST",o=JSON.stringify({keys:t.keys})),r=r.join("&"),r=""===r?"":"?"+r,"string"==typeof e){var a=e.split("/");return db.request({method:i,url:"_design/"+a[0]+"/_view/"+a[1]+r,body:o},n),void 0}var s=JSON.parse(JSON.stringify(e,function(e,t){return"function"==typeof t?t+"":t}));db.request({method:"POST",url:"_temp_view"+r,body:s},n)}return this instanceof MapReduce?(this.query=function(e,t,n){if("function"==typeof t&&(n=t,t={}),n&&(t.complete=n),"http"===db.type())return"function"==typeof e?httpQuery({map:e},t,n):httpQuery(e,t,n);if("object"==typeof e)return viewQuery(e,t);if("function"==typeof e)return viewQuery({map:e},t);var r=e.split("/");db.get("_design/"+r[0],function(e,o){return e?(n&&n(e),void 0):o.views[r[1]]?(viewQuery({map:o.views[r[1]].map,reduce:o.views[r[1]].reduce},t),void 0):(n&&n({error:"not_found",reason:"missing_named_view"}),void 0)})},void 0):new MapReduce(db)}var pouchCollate=require("pouchdb-collate");MapReduce._delete=function(){},module.exports=MapReduce},{"pouchdb-collate":19}],19:[function(e,t){"use strict";function n(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++){var o=a(e[r],t[r]);if(0!==o)return o}return e.length===t.length?0:e.length>t.length?1:-1}function r(e,t){return e===t?0:e>t?1:-1}function o(e,t){for(var n=Object.keys(e),r=Object.keys(t),o=Math.min(n.length,r.length),i=0;o>i;i++){var s=a(n[i],r[i]);if(0!==s)return s;if(s=a(e[n[i]],t[r[i]]),0!==s)return s}return n.length===r.length?0:n.length>r.length?1:-1}function i(e){var t=["boolean","number","string","object"];return-1!==t.indexOf(typeof e)?null===e?1:t.indexOf(typeof e)+2:Array.isArray(e)?4.5:void 0}function a(e,t){var a=i(e),s=i(t);return a-s!==0?a-s:null===e?0:"number"==typeof e?e-t:"boolean"==typeof e?t>e?-1:1:"string"==typeof e?r(e,t):Array.isArray(e)?n(e,t):"object"==typeof e?o(e,t):void 0}t.exports=a},{}]},{},[11])(11)});
\ No newline at end of file
diff --git a/packages/pouchdb-server-packages/examples/todos/public/styles/base.css b/packages/pouchdb-server-packages/examples/todos/public/styles/base.css
new file mode 100644
index 0000000000..4a05fc23b0
--- /dev/null
+++ b/packages/pouchdb-server-packages/examples/todos/public/styles/base.css
@@ -0,0 +1,424 @@
+html,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: none;
+ font-size: 100%;
+ vertical-align: baseline;
+ font-family: inherit;
+ color: inherit;
+ -webkit-appearance: none;
+ /*-moz-appearance: none;*/
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+}
+
+body {
+ font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ line-height: 1.4em;
+ background: #eaeaea url('../images/bg.png');
+ color: #4d4d4d;
+ width: 550px;
+ margin: 0 auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -ms-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased;
+ font-smoothing: antialiased;
+}
+
+#todoapp {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.9);
+ margin: 130px 0 40px 0;
+ border: 1px solid #ccc;
+ position: relative;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.2),
+ 0 25px 50px 0 rgba(0, 0, 0, 0.15);
+}
+
+#todoapp:before {
+ content: '';
+ border-left: 1px solid #f5d6d6;
+ border-right: 1px solid #f5d6d6;
+ width: 2px;
+ position: absolute;
+ top: 0;
+ left: 40px;
+ height: 100%;
+}
+
+#todoapp input::-webkit-input-placeholder {
+ font-style: italic;
+}
+
+#todoapp input:-moz-placeholder {
+ font-style: italic;
+ color: #a9a9a9;
+}
+
+#todoapp h1 {
+ position: absolute;
+ top: -120px;
+ width: 100%;
+ font-size: 70px;
+ font-weight: bold;
+ text-align: center;
+ color: #b3b3b3;
+ color: rgba(255, 255, 255, 0.3);
+ text-shadow: -1px -1px rgba(0, 0, 0, 0.2);
+ -webkit-text-rendering: optimizeLegibility;
+ -moz-text-rendering: optimizeLegibility;
+ -ms-text-rendering: optimizeLegibility;
+ -o-text-rendering: optimizeLegibility;
+ text-rendering: optimizeLegibility;
+}
+
+#header {
+ padding-top: 15px;
+ border-radius: inherit;
+}
+
+#header:before {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 15px;
+ z-index: 2;
+ border-bottom: 1px solid #6c615c;
+ background: #8d7d77;
+ background: -webkit-gradient(linear, left top, left bottom, from(rgba(132, 110, 100, 0.8)),to(rgba(101, 84, 76, 0.8)));
+ background: -webkit-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
+ background: -moz-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
+ background: -o-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
+ background: -ms-linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
+ background: linear-gradient(top, rgba(132, 110, 100, 0.8), rgba(101, 84, 76, 0.8));
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');
+ border-top-left-radius: 1px;
+ border-top-right-radius: 1px;
+}
+
+#new-todo,
+.edit {
+ position: relative;
+ margin: 0;
+ width: 100%;
+ font-size: 24px;
+ font-family: inherit;
+ line-height: 1.4em;
+ border: 0;
+ outline: none;
+ color: inherit;
+ padding: 6px;
+ border: 1px solid #999;
+ box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ -o-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -ms-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased;
+ font-smoothing: antialiased;
+}
+
+#new-todo {
+ padding: 16px 16px 16px 60px;
+ border: none;
+ background: rgba(0, 0, 0, 0.02);
+ z-index: 2;
+ box-shadow: none;
+}
+
+#main {
+ position: relative;
+ z-index: 2;
+ border-top: 1px dotted #adadad;
+}
+
+label[for='toggle-all'] {
+ display: none;
+}
+
+#toggle-all {
+ position: absolute;
+ top: -42px;
+ left: -4px;
+ width: 40px;
+ text-align: center;
+ border: none; /* Mobile Safari */
+}
+
+#toggle-all:before {
+ content: '»';
+ font-size: 28px;
+ color: #d9d9d9;
+ padding: 0 25px 7px;
+}
+
+#toggle-all:checked:before {
+ color: #737373;
+}
+
+#todo-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+#todo-list li {
+ position: relative;
+ font-size: 24px;
+ border-bottom: 1px dotted #ccc;
+}
+
+#todo-list li:last-child {
+ border-bottom: none;
+}
+
+#todo-list li.editing {
+ border-bottom: none;
+ padding: 0;
+}
+
+#todo-list li.editing .edit {
+ display: block;
+ width: 506px;
+ padding: 13px 17px 12px 17px;
+ margin: 0 0 0 43px;
+}
+
+#todo-list li.editing .view {
+ display: none;
+}
+
+#todo-list li .toggle {
+ text-align: center;
+ width: 40px;
+ /* auto, since non-WebKit browsers doesn't support input styling */
+ height: auto;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto 0;
+ border: none; /* Mobile Safari */
+ -webkit-appearance: none;
+ /*-moz-appearance: none;*/
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+}
+
+#todo-list li .toggle:after {
+ content: '✔';
+ line-height: 43px; /* 40 + a couple of pixels visual adjustment */
+ font-size: 20px;
+ color: #d9d9d9;
+ text-shadow: 0 -1px 0 #bfbfbf;
+}
+
+#todo-list li .toggle:checked:after {
+ color: #85ada7;
+ text-shadow: 0 1px 0 #669991;
+ bottom: 1px;
+ position: relative;
+}
+
+#todo-list li label {
+ word-break: break-word;
+ padding: 15px;
+ margin-left: 45px;
+ display: block;
+ line-height: 1.2;
+ -webkit-transition: color 0.4s;
+ -moz-transition: color 0.4s;
+ -ms-transition: color 0.4s;
+ -o-transition: color 0.4s;
+ transition: color 0.4s;
+}
+
+#todo-list li.completed label {
+ color: #a9a9a9;
+ text-decoration: line-through;
+}
+
+#todo-list li .destroy {
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 10px;
+ bottom: 0;
+ width: 40px;
+ height: 40px;
+ margin: auto 0;
+ font-size: 22px;
+ color: #a88a8a;
+ -webkit-transition: all 0.2s;
+ -moz-transition: all 0.2s;
+ -ms-transition: all 0.2s;
+ -o-transition: all 0.2s;
+ transition: all 0.2s;
+}
+
+#todo-list li .destroy:hover {
+ text-shadow: 0 0 1px #000, 0 0 10px rgba(199, 107, 107, 0.8);
+ -webkit-transform: scale(1.3);
+ -moz-transform: scale(1.3);
+ -ms-transform: scale(1.3);
+ -o-transform: scale(1.3);
+ transform: scale(1.3);
+}
+
+#todo-list li .destroy:after {
+ content: '✖';
+}
+
+#todo-list li:hover .destroy {
+ display: block;
+}
+
+#todo-list li .edit {
+ display: none;
+}
+
+#todo-list li.editing:last-child {
+ margin-bottom: -1px;
+}
+
+#footer {
+ color: #777;
+ padding: 0 15px;
+ position: absolute;
+ right: 0;
+ bottom: -31px;
+ left: 0;
+ height: 20px;
+ z-index: 1;
+}
+
+#footer:before {
+ content: '';
+ position: absolute;
+ right: 0;
+ bottom: 31px;
+ left: 0;
+ height: 50px;
+ z-index: -1;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3),
+ 0 6px 0 -3px rgba(255, 255, 255, 0.8),
+ 0 7px 1px -3px rgba(0, 0, 0, 0.3),
+ 0 43px 0 -6px rgba(255, 255, 255, 0.8),
+ 0 44px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+#todo-count {
+ float: left;
+ text-align: left;
+}
+
+#filters {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ position: absolute;
+ right: 0;
+ left: 0;
+}
+
+#filters li {
+ display: inline;
+}
+
+#filters li a {
+ color: #83756f;
+ margin: 2px;
+ text-decoration: none;
+}
+
+#filters li a.selected {
+ font-weight: bold;
+}
+
+#clear-completed {
+ float: right;
+ position: relative;
+ line-height: 20px;
+ text-decoration: none;
+ background: rgba(0, 0, 0, 0.1);
+ font-size: 11px;
+ padding: 0 10px;
+ border-radius: 3px;
+ box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.2);
+}
+
+#clear-completed:hover {
+ background: rgba(0, 0, 0, 0.15);
+ box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.3);
+}
+
+#info {
+ margin: 65px auto 0;
+ color: #a6a6a6;
+ font-size: 12px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
+ text-align: center;
+}
+
+#info a {
+ color: inherit;
+}
+
+/*
+ Hack to remove background from Mobile Safari.
+ Can't use it globally since it destroys checkboxes in Firefox and Opera
+*/
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ #toggle-all,
+ #todo-list li .toggle {
+ background: none;
+ }
+
+ #todo-list li .toggle {
+ height: 40px;
+ }
+
+ #toggle-all {
+ top: -56px;
+ left: -15px;
+ width: 65px;
+ height: 41px;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ -webkit-appearance: none;
+ appearance: none;
+ }
+}
+
+.hidden{
+ display:none;
+}
+
+#sync-error, #sync-success {
+ display: none;
+}
+
+[data-sync-state=syncing] #sync-success {
+ display: block;
+}
+
+[data-sync-state=error] #sync-error {
+ display: block;
+}
diff --git a/packages/pouchdb-server-packages/favicon.ico b/packages/pouchdb-server-packages/favicon.ico
new file mode 100644
index 0000000000..99c00b837e
Binary files /dev/null and b/packages/pouchdb-server-packages/favicon.ico differ
diff --git a/packages/pouchdb-server-packages/package-lock.json b/packages/pouchdb-server-packages/package-lock.json
new file mode 100644
index 0000000000..9048590bf6
--- /dev/null
+++ b/packages/pouchdb-server-packages/package-lock.json
@@ -0,0 +1,9218 @@
+{
+ "name": "pouchdb-server-monorepo",
+ "version": "4.2.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pouchdb-server-monorepo",
+ "version": "4.2.0",
+ "dependencies": {
+ "@gerhobbelt/nomnom": "^1.8.4-24",
+ "base64url": "^3.0.0",
+ "basic-auth": "^2.0.0",
+ "basic-authorization-header": "^0.2.7",
+ "bluebird": "^3.4.7",
+ "body-parser": "^1.16.1",
+ "colors": "^1.0.3",
+ "compression": "^1.6.2",
+ "cookie-parser": "^1.4.3",
+ "corser": "~2.0.0",
+ "couchdb-calculate-session-id": "^1.1.0",
+ "couchdb-log-parse": "^0.0.4",
+ "crypto-lite": "^0.2.0",
+ "denodeify": "^1.2.1",
+ "equals": "^1.0.5",
+ "express": "^4.14.1",
+ "extend": "^3.0.2",
+ "get-folder-size": "^2.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "is-empty": "^1.2.0",
+ "killable": "^1.0.0",
+ "mkdirp": "^0.5.0",
+ "multiparty": "^4.1.3",
+ "object-assign": "^4.1.0",
+ "on-finished": "^2.3.0",
+ "pouchdb": "^7.0.0",
+ "pouchdb-adapter-http": "^7.0.0",
+ "pouchdb-adapter-leveldb-core": "^7.0.0",
+ "pouchdb-adapter-memory": "^7.0.0",
+ "pouchdb-all-dbs": "^1.0.2",
+ "pouchdb-collections": "^7.0.0",
+ "pouchdb-core": "^7.0.0",
+ "pouchdb-fauxton": "^0.0.6",
+ "pouchdb-find": "^7.0.0",
+ "pouchdb-mapreduce": "^7.0.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-replication": "^7.0.0",
+ "promise-nodify": "^1.0.2",
+ "random-uuid-v4": "0.0.8",
+ "raw-body": "^2.2.0",
+ "sanitize-filename": "^1.6.1",
+ "secure-random": "^1.1.1",
+ "serve-favicon": "~2.5.0",
+ "sqlite3": "^5.1.6",
+ "tail": "^2.0.2",
+ "uuid": "^3.0.1",
+ "wordwrap": "1.0.0",
+ "xhr2": "^0.2.0",
+ "xmlhttprequest-cookie": "^0.9.2"
+ },
+ "devDependencies": {
+ "assert": "^2.0.0",
+ "browserify": "^16.3.0",
+ "builtin-modules": "^3.0.0",
+ "chai": "^4.1.2",
+ "couchdb-harness": "*",
+ "eslint": "4.18.2",
+ "find-requires": "^0.2.2",
+ "fs-extra": "^8.1.0",
+ "glob": "^7.1.1",
+ "jsondown": "^1.0.0",
+ "locket": "1.0.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.uniq": "^4.5.0",
+ "medeadown": "^1.1.1",
+ "memdown": "^1.2.4",
+ "mocha": "^5.0.0",
+ "navigator": "^1.0.1",
+ "sqldown": "^2.1.0",
+ "supertest": "^3.0.0",
+ "uglify-es": "^3.3.8"
+ },
+ "optionalDependencies": {
+ "pouchdb-adapter-leveldb": "^7.0.0",
+ "pouchdb-adapter-node-websql": "^7.0.0"
+ }
+ },
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+ "optional": true
+ },
+ "node_modules/@gerhobbelt/linewrap": {
+ "version": "0.2.2-3",
+ "resolved": "https://registry.npmjs.org/@gerhobbelt/linewrap/-/linewrap-0.2.2-3.tgz",
+ "integrity": "sha512-u2eUbXgNtqckBI4gxds/uiUNoytT+qIqpePmVDI5isW8A18uB3Qz1P+UxAHgFafGOZWJNrpR0IKnZhl7QhaUng==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/@gerhobbelt/nomnom": {
+ "version": "1.8.4-31",
+ "resolved": "https://registry.npmjs.org/@gerhobbelt/nomnom/-/nomnom-1.8.4-31.tgz",
+ "integrity": "sha512-Ih0OLfetFcT5KFB4VruQcosf6RB56rYDEpSs12OWyXpF22BFs+ovX/epghaN8tTlOSCHpPmjwOx4va8Dzz/B9w==",
+ "dependencies": {
+ "@gerhobbelt/linewrap": "0.2.2-3",
+ "chalk": "4.1.0",
+ "exit": "0.1.2"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz",
+ "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "optional": true,
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/@npmcli/fs/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/fs/node_modules/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "optional": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "deprecated": "This functionality has been moved to @npmcli/fs",
+ "optional": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "optional": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "optional": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/abend": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/abend/-/abend-1.0.11.tgz",
+ "integrity": "sha512-WdxoXvQPrKPz1TV3g20CFFyfZ+mux3xV42++JanQJFW9Zymxft5S9uSmXBpdvghblXD1ul1udzuEWqPxy9rAyQ==",
+ "dev": true
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/abstract-leveldown": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz",
+ "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "catering": "^2.0.0",
+ "is-buffer": "^2.0.5",
+ "level-concat-iterator": "^3.0.0",
+ "level-supports": "^2.0.1",
+ "queue-microtask": "^1.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^3.0.4"
+ }
+ },
+ "node_modules/acorn-jsx/node_modules/acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-node/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/advance": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/advance/-/advance-1.0.5.tgz",
+ "integrity": "sha512-98eUtnxA5Ty/Oa5EmtOGEMBYzYasoAr2xce19bngNh6MnBFLJGXiIsvVzZj+XYKXljErvZYvp6cybfTfsWklgQ==",
+ "dev": true
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agent-base/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=="
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
+ "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
+ "optional": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^2.0.0",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agentkeepalive/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==",
+ "optional": true
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "optional": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
+ "dev": true,
+ "dependencies": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==",
+ "dev": true,
+ "peerDependencies": {
+ "ajv": "^5.0.0"
+ }
+ },
+ "node_modules/amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+ "engines": {
+ "node": ">=0.4.2"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/append-stream": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/append-stream/-/append-stream-1.2.2.tgz",
+ "integrity": "sha512-bx5Iwh7r20PUFdFK6jy/uOAAullvEg3QkmQLVZuDUEstpKMtVjHXuaR0Q52tuki08EXygiy2mL13sJXwFk0KtQ==",
+ "dev": true
+ },
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/argsarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
+ "integrity": "sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg=="
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/assert": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
+ "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
+ "dev": true,
+ "dependencies": {
+ "es6-object-assign": "^1.1.0",
+ "is-nan": "^1.2.1",
+ "object-is": "^1.0.1",
+ "util": "^0.12.0"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/b-tree": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/b-tree/-/b-tree-1.1.0.tgz",
+ "integrity": "sha512-KJ2zNxboxNrB2Rh/etXjlahbUIh46/XusvN5ZZoQ2JxRzKKX06O0aawXLIXu7rY0V7BcBGGN5TE1BCPXgiW8/A==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "2.0.x",
+ "magazine": "4.0.x",
+ "sequester": "1.0.x"
+ }
+ },
+ "node_modules/b-tree/node_modules/cadence": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/cadence/-/cadence-2.0.4.tgz",
+ "integrity": "sha512-z3Ch9UwX8NXFIq/Bgfn0yEIRsRuo00oPPQRbUsqFcNm9sMFbr8iE4me8YUlNcTyY/EzhJ7e3Aka9k3AYCUcOBQ==",
+ "dev": true
+ },
+ "node_modules/babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/babel-code-frame/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base62": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz",
+ "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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"
+ }
+ ]
+ },
+ "node_modules/base64url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/basic-auth-token": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/basic-auth-token/-/basic-auth-token-0.4.2.tgz",
+ "integrity": "sha512-83xWdZGpzPNjB8zrsvNEEvpLxjeaQFrzKJxxa5eFFNWHTJmvb8o9zAbs5j8Fdk0xlyLloCuNLFvMbQU63GvreA=="
+ },
+ "node_modules/basic-auth/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/basic-authorization-header": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/basic-authorization-header/-/basic-authorization-header-0.2.7.tgz",
+ "integrity": "sha512-ULWccPPIijGiKcT0l7i9lo7q97DNmGVQ3MmFTa6GSfMI8NaDf+lUjI9wCVffaR7Nzt52QgtVgpPwVWMph8rAfw==",
+ "dependencies": {
+ "basic-auth-token": "^0.4.2"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true
+ },
+ "node_modules/browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "dependencies": {
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "JSONStream": "^1.0.3",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "bin": {
+ "browser-pack": "bin/cmd.js"
+ }
+ },
+ "node_modules/browser-pack/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/browser-pack/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browser-pack/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/browser-pack/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browser-pack/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browser-resolve": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
+ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.17.0"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "node_modules/browserify": {
+ "version": "16.5.2",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz",
+ "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==",
+ "dev": true,
+ "dependencies": {
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^2.0.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "~5.2.1",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "JSONStream": "^1.0.3",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp-classic": "^0.5.2",
+ "module-deps": "^6.2.3",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "browserify": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/browserify/node_modules/assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ }
+ },
+ "node_modules/browserify/node_modules/assert/node_modules/inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
+ "dev": true
+ },
+ "node_modules/browserify/node_modules/assert/node_modules/util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
+ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
+ "dev": true,
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "node_modules/browserify/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
+ },
+ "node_modules/browserify/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/browserify/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/browserify/node_modules/readable-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/browserify/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/browserify/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/browserify/node_modules/util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "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"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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=="
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "15.3.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+ "optional": true,
+ "dependencies": {
+ "@npmcli/fs": "^1.0.0",
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cacache/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cacache/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "optional": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/cached-path-relative": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz",
+ "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==",
+ "dev": true
+ },
+ "node_modules/cadence": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/cadence/-/cadence-1.0.12.tgz",
+ "integrity": "sha512-9YJbhySTUaMBKz3IVcXbpw70K7swnBlD/LFY59zfwZ5U5sHXvZQUCCHSPdENdCKQ4XmN+GpFJrGF/yBZ73jMMw==",
+ "dev": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/catering": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
+ "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chai": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
+ "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^4.1.2",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==",
+ "dev": true
+ },
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "deprecated": "CircularJSON is in maintenance only, flatted is its successor.",
+ "dev": true
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
+ "dev": true
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==",
+ "dev": true,
+ "dependencies": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
+ },
+ "node_modules/commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==",
+ "dependencies": {
+ "commander": "^2.5.0",
+ "detective": "^4.3.1",
+ "glob": "^5.0.15",
+ "graceful-fs": "^4.1.2",
+ "iconv-lite": "^0.4.5",
+ "mkdirp": "^0.5.0",
+ "private": "^0.1.6",
+ "q": "^1.1.2",
+ "recast": "^0.11.17"
+ },
+ "bin": {
+ "commonize": "bin/commonize"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commoner/node_modules/detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dependencies": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ }
+ },
+ "node_modules/commoner/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dependencies": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compression/node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/compression/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/concat-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/concat-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+ },
+ "node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
+ "dev": true
+ },
+ "node_modules/constrain": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/constrain/-/constrain-1.0.1.tgz",
+ "integrity": "sha512-DBNb9tRR41BpioE72Z2OI1LQd8mqttGoG6rn7cR7GdBy/JFObolJulDqttp2QGXgPIX8xh1eqGbe+kBPoIuV9A==",
+ "dev": true
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-parser": {
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
+ "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/cookiejar": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
+ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
+ "dev": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/couchdb-calculate-session-id": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/couchdb-calculate-session-id/-/couchdb-calculate-session-id-1.1.3.tgz",
+ "integrity": "sha512-7RJSTHf8cmeS07oB90LB1Kx7Yxbz/WQJOq9YEKpKJ6Eamca4ovXczMoZs6DlEu01j6DUgW6Z7zQpMxvYaOxskQ==",
+ "dependencies": {
+ "aproba": "^1.0.1",
+ "base64url": "^3.0.0",
+ "crypto-lite": "^0.2.0"
+ }
+ },
+ "node_modules/couchdb-harness": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/couchdb-harness/-/couchdb-harness-0.1.6.tgz",
+ "integrity": "sha512-MBCZGb0qaQrKH9N/Hs40EiQJE5W/vX0aBdjOt1iee4fLkNSGOiO1v/N2TM2Q6Ublyab3A9VGK6pxmB7o4rNHlg==",
+ "dev": true,
+ "dependencies": {
+ "colors": "^1.0.3",
+ "glob": "~3.1.21",
+ "optimist": "~0.3.5",
+ "which": "^1.0.8"
+ },
+ "bin": {
+ "couchdb-harness": "bin/couchdb-harness"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha512-ANhy2V2+tFpRajE3wN4DhkNQ08KDr0Ir1qL12/cUe5+a7STEK8jkW4onUYuY8/06qAFuT5je7mjAqzx0eKI2tQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "~1.2.0",
+ "inherits": "1",
+ "minimatch": "~0.2.11"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha512-iiTUZ5vZ+2ZV+h71XAgwCSu6+NAizhFU3Yw8aC/hH5SQ3SnISqEqAek40imAFGtDcwJKNhXvSY+hzIolnLwcdQ==",
+ "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/couchdb-harness/node_modules/inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha512-Al67oatbRSo3RV5hRqIoln6Y5yMVbJSIn4jEJNL7VCImzq/kLr7vvb6sFRJXqr8rpHc/2kJOM+y0sPKN47VdzA==",
+ "dev": true
+ },
+ "node_modules/couchdb-harness/node_modules/lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==",
+ "dev": true
+ },
+ "node_modules/couchdb-harness/node_modules/minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/couchdb-log-parse": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/couchdb-log-parse/-/couchdb-log-parse-0.0.4.tgz",
+ "integrity": "sha512-RJc8FT9n2DpP1kQG70vOmWF78rLJK3bZgJW/GLfoNppEa+lPOjSVYergHvCkJHf2DexFx6t8nEY7AbAQBqNQow=="
+ },
+ "node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "dependencies": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/crypto-lite": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-lite/-/crypto-lite-0.2.0.tgz",
+ "integrity": "sha512-g80sI65b5Gfg4BltF1GMdyjwiGWtQPnEMDmu1/QAA4S1UY+jmuZM5iopakOuUnkn6TUPJYsacKEeALnbd68r1Q=="
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
+ "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
+ "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "optional": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deferred-leveldown": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
+ "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.1",
+ "inherits": "^2.0.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
+ "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
+ "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deferred-leveldown/node_modules/level-supports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
+ "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ },
+ "node_modules/denodeify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
+ "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg=="
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/deps-sort": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
+ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==",
+ "dev": true,
+ "dependencies": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "deps-sort": "bin/cmd.js"
+ }
+ },
+ "node_modules/deps-sort/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/deps-sort/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/deps-sort/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/deps-sort/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/deps-sort/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/des.js": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+ "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/designate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/designate/-/designate-1.0.2.tgz",
+ "integrity": "sha512-gBQ8k5h2uZlIoBOONrD5x+QNqO8U575uCdHgLW1d23nZF7uXEzxbxUwENPZX0DlfvDr72n/Evdx+iaTAhrYr9g==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.0.x"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
+ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/dilute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dilute/-/dilute-1.0.1.tgz",
+ "integrity": "sha512-p4w4/Py1TUy2VCIkddPfSHiQ9iJAosVKmMp3Dgbp6DNySWSMqBLI0LExmrTBmnB6hkjwV2ptlGB7iY6aZGu5bQ==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.0.x"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.2"
+ }
+ },
+ "node_modules/double-ended-queue": {
+ "version": "2.1.0-0",
+ "license": "MIT"
+ },
+ "node_modules/duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/duplexer2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexer2/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/duplexer2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/encode": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encode/-/encode-1.0.1.tgz",
+ "integrity": "sha512-bvetMbCSOIhB7VpKUbuZ3YjQLNFhJHXE+XZYquwr6yz0iEGC2wUJ4PcBmWEgZZ6HXiJ7SVwHTQAtKfw5Yi+f4w==",
+ "dev": true
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/encoding-down": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
+ "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
+ "dependencies": {
+ "abstract-leveldown": "^6.2.1",
+ "inherits": "^2.0.3",
+ "level-codec": "^9.0.0",
+ "level-errors": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/abstract-leveldown": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz",
+ "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/encoding-down/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
+ "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding-down/node_modules/level-supports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
+ "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/end-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz",
+ "integrity": "sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==",
+ "dependencies": {
+ "write-stream": "~0.4.3"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/equals": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/equals/-/equals-1.0.5.tgz",
+ "integrity": "sha512-wI15a6ZoaaXPv+55+Vh2Kqn3+efKRv8QPtcGTjW5xmanMnQzESdAt566jevtMZyt3W/jwLDTzXpMph5ECDJ2zg==",
+ "dependencies": {
+ "jkroso-type": "1"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "optional": true
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/es3ify": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz",
+ "integrity": "sha512-QQ6yXmQM/cfWYj9/DM3hPRcHBZdWCoJU+35CoaMqw53sH2uqr29EZ0ne1PF/3LIG/cmawn1SbCPqcZE+siHmwg==",
+ "dependencies": {
+ "esprima": "^2.7.1",
+ "jstransform": "~11.0.0",
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/es3ify/node_modules/esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "node_modules/es6-object-assign": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
+ "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==",
+ "dev": true
+ },
+ "node_modules/es6-set": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz",
+ "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "^3.1.3",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/es6-set/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
+ "dev": true
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz",
+ "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.2",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/eslint/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
+ },
+ "node_modules/eslint/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esniff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz",
+ "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.12"
+ }
+ },
+ "node_modules/espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esprima-fb": {
+ "version": "15001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz",
+ "integrity": "sha512-59dDGQo2b3M/JfKIws0/z8dcXH2mnVHkfSPRhCYS91JNGfGNwr7GsSF6qzWZuOGvw5Ii0w9TtylrX07MGmlOoQ==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/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,
+ "engines": {
+ "node": ">=4.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,
+ "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,
+ "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,
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.1",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express/node_modules/body-parser": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/raw-body": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dev": true,
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
+ "dev": true
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "dependencies": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
+ "dev": true
+ },
+ "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
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
+ "node_modules/fetch-cookie": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.11.0.tgz",
+ "integrity": "sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==",
+ "dependencies": {
+ "tough-cookie": "^2.3.3 || ^3.0.1 || ^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-requires": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-0.2.4.tgz",
+ "integrity": "sha512-olqOq6aUynTkqgBc8Ip1Dfh9PxIECFa+ITdJ53dPv4Ep6rLKRHzj0TmFNi3SA2k9ExWwVoLqZxa81z5uagXMSw==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "~0.10.46",
+ "esniff": "~1.1"
+ },
+ "bin": {
+ "find-requires": "bin/find-requires"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.2.1.tgz",
+ "integrity": "sha512-uv8a0ezsjAT99zkSJsJtx1scyee6jS2iC4T50n6McAudpZD5rHsGsdvgO+kd73hSh3v/ZiW/8dDfLb2p9yxptw==",
+ "dev": true,
+ "dependencies": {
+ "glob": "~4.3.0"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/glob": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz",
+ "integrity": "sha512-kOq1ncUyUvkZdl7BgKa3n6zAOiN05pzleOxESuc8bFoXKRhYsrZM6z79O5DKe9JGChHhSZloUsD/hZrUXByxgQ==",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/findup-sync/node_modules/minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==",
+ "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz",
+ "integrity": "sha512-HV3vdzzmQpuvpF5ghGNEKLSk3XrOmhuxWW96cO85B8JUm7iwcE8gLVl2fygaiwHFRXRiIUmEfIGMN6sQIn226g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "dependencies": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/formidable": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
+ "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==",
+ "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
+ "dev": true,
+ "funding": {
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g=="
+ },
+ "node_modules/gar": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz",
+ "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w=="
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/gauge/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gauge/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gauge/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gauge/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "node_modules/get-folder-size": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz",
+ "integrity": "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==",
+ "dependencies": {
+ "gar": "^1.0.4",
+ "tiny-each-async": "2.0.3"
+ },
+ "bin": {
+ "get-folder-size": "bin/get-folder-size"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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=="
+ },
+ "node_modules/growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/hash-base/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hashmap": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/hashmap/-/hashmap-2.4.0.tgz",
+ "integrity": "sha512-Ngj48lhnxJdnBAEVbubKBJuN1elfVLZJs94ZixRi98X3GCU4v6pgj9qRkHt6H8WaVJ69Wv0r1GhtS7hvF9zCgg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/header-case-normalizer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/header-case-normalizer/-/header-case-normalizer-1.0.3.tgz",
+ "integrity": "sha512-wKAlzwV5I4m/am8J9eUN3S7WyXJufzMAKjmNScCbqlUF2J42kx8Nx8blw/L9z3tGklVuTYUo1dhohpG6RaV7LA=="
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/homogenize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/homogenize/-/homogenize-1.0.0.tgz",
+ "integrity": "sha512-Bhez5sXwIKl+yT2kUJxxH5xcKxTHFBbwcdLB0X3R3MvXbkx7dhD/tk6WFbd804XyU3HWAWelZkGaQCbyrQMq4g==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+ "optional": true
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "optional": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http-proxy-agent/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==",
+ "optional": true
+ },
+ "node_modules/https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+ "dev": true
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/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=="
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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"
+ }
+ ]
+ },
+ "node_modules/ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "node_modules/ignore-walk": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
+ "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==",
+ "optional": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
+ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "optional": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "optional": true
+ },
+ "node_modules/inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "node_modules/inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "node_modules/inquirer/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/inquirer/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
+ },
+ "node_modules/inquirer/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inquirer/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/insert-module-globals": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz",
+ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "JSONStream": "^1.0.3",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "insert-module-globals": "bin/cmd.js"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/insert-module-globals/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/insert-module-globals/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/insert-module-globals/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/insert-module-globals/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.5.2.tgz",
+ "integrity": "sha512-xnOhtonBuNA5lcWD6yxNC6ezoF5zAOZAgVXXofDwdHKiBEuTP87PVcCq1epXXAdhTVWRy1slpkQvJydqAQjpsw==",
+ "dev": true
+ },
+ "node_modules/ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
+ "optional": true
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "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"
+ }
+ ],
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-empty": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
+ "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w=="
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "optional": true
+ },
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+ "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "devOptional": true
+ },
+ "node_modules/jkroso-type": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jkroso-type/-/jkroso-type-1.1.1.tgz",
+ "integrity": "sha512-zZgay+fPG6PgMUrpyFADmQmvLo39+AZa7Gc5pZhev2RhDxwANEq2etwD8d0e6rTg5NkwOIlQmaEmns3draC6Ng=="
+ },
+ "node_modules/js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==",
+ "dev": true,
+ "dependencies": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/jsondown": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/jsondown/-/jsondown-1.0.0.tgz",
+ "integrity": "sha512-p6XxPaq59aXwcdDQV3ISMA5xk+1z6fJuctcwwSdR9iQgbYOcIrnknNrhcMGG+0FaUfKHGkdDpQNaZrovfBoyOw==",
+ "dev": true,
+ "dependencies": {
+ "memdown": "1.4.1",
+ "mkdirp": "0.5.1"
+ },
+ "peerDependencies": {
+ "abstract-leveldown": "*"
+ }
+ },
+ "node_modules/jsondown/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
+ "dev": true
+ },
+ "node_modules/jsondown/node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ]
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jstransform": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
+ "integrity": "sha512-LGm87w0A8E92RrcXt94PnNHkFqHmgDy3mKHvNZOG7QepKCTCH/VB6S+IEN+bT4uLN3gVpOT0vvOOVd96osG71g==",
+ "dependencies": {
+ "base62": "^1.1.0",
+ "commoner": "^0.10.1",
+ "esprima-fb": "^15001.1.0-dev-harmony-fb",
+ "object-assign": "^2.0.0",
+ "source-map": "^0.4.2"
+ },
+ "bin": {
+ "jstransform": "bin/jstransform"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/jstransform/node_modules/object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha512-CdsOUYIh5wIiozhJ3rLQgmUTgcyzFwZZrqhkKhODMoGtPKM+wt0h0CNIoauJWMsS9822EdzPsF/6mb4nLvPN5g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jstransform/node_modules/source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==",
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/keydir": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/keydir/-/keydir-2.1.1.tgz",
+ "integrity": "sha512-rt1Exz7sUtnCbHCynHVwMrl9yob2mZNjquklaKpfZVn13NRrBkKcU8R+TN9dWLysdHJj5seVmszqcZBr8fmheA==",
+ "dev": true,
+ "dependencies": {
+ "ltgt": "^1.0.2"
+ }
+ },
+ "node_modules/keydir/node_modules/ltgt": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-1.2.0.tgz",
+ "integrity": "sha512-wLF2plQvNn6724QfbwVcd3bJ9PIIvkTGyxZyICZyr2jEa64gbU5UpfooC9FfPmgTvwuKtfMhFJUTQTGTWx+TYg==",
+ "dev": true
+ },
+ "node_modules/killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
+ },
+ "node_modules/knex": {
+ "version": "0.8.6",
+ "resolved": "https://registry.npmjs.org/knex/-/knex-0.8.6.tgz",
+ "integrity": "sha512-QtVFrrswtEUzdzQyu0fChxxg3Sqy1cadOxiKtpUv0dpbRZbQiBuz9gEAQCS/3xWAV4tkyqz7Agh2lBYlrJWpZA==",
+ "dev": true,
+ "dependencies": {
+ "bluebird": "^2.9.24",
+ "chalk": "^1.0.0",
+ "commander": "^2.2.0",
+ "debug": "^2.1.3",
+ "inherits": "~2.0.1",
+ "interpret": "^0.5.2",
+ "liftoff": "~2.0.0",
+ "lodash": "^3.7.0",
+ "minimist": "~1.1.0",
+ "mkdirp": "^0.5.0",
+ "pool2": "^1.1.0",
+ "readable-stream": "^1.1.12",
+ "tildify": "~1.0.0",
+ "v8flags": "^2.0.2"
+ },
+ "bin": {
+ "knex": "lib/bin/cli.js"
+ }
+ },
+ "node_modules/knex/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/bluebird": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==",
+ "dev": true
+ },
+ "node_modules/knex/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==",
+ "dev": true
+ },
+ "node_modules/knex/node_modules/minimist": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
+ "integrity": "sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg==",
+ "dev": true
+ },
+ "node_modules/knex/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/knex/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/labeled-stream-splicer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "node_modules/level": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz",
+ "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==",
+ "dependencies": {
+ "level-js": "^5.0.0",
+ "level-packager": "^5.1.0",
+ "leveldown": "^5.4.0"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/level"
+ }
+ },
+ "node_modules/level-codec": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
+ "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
+ "dependencies": {
+ "buffer": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-codec/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/level-concat-iterator": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz",
+ "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "catering": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/level-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
+ "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
+ "dependencies": {
+ "errno": "~0.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-iterator-stream": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
+ "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0",
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-iterator-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/level-iterator-stream/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/level-js": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz",
+ "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==",
+ "dependencies": {
+ "abstract-leveldown": "~6.2.3",
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.3",
+ "ltgt": "^2.1.2"
+ }
+ },
+ "node_modules/level-js/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
+ "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-js/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/level-js/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
+ "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-js/node_modules/level-supports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
+ "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-packager": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
+ "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
+ "dependencies": {
+ "encoding-down": "^6.3.0",
+ "levelup": "^4.3.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/level-supports": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz",
+ "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/level-write-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz",
+ "integrity": "sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==",
+ "dependencies": {
+ "end-stream": "~0.1.0"
+ }
+ },
+ "node_modules/leveldown": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz",
+ "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "abstract-leveldown": "~6.2.1",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "~4.1.0"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/leveldown-open": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/leveldown-open/-/leveldown-open-1.0.3.tgz",
+ "integrity": "sha512-WB/MrNWI8Ygs/zmP6KBZPwOtFFCiEVMgH3J4jg8U4yw8OdaA8d6aAx1IAkNwic7tJ0BYLe109Hoj2PEIA5xPSQ==",
+ "dev": true
+ },
+ "node_modules/leveldown/node_modules/abstract-leveldown": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
+ "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "immediate": "^3.2.3",
+ "level-concat-iterator": "~2.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leveldown/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/leveldown/node_modules/level-concat-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
+ "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leveldown/node_modules/level-supports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
+ "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levelup": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
+ "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
+ "dependencies": {
+ "deferred-leveldown": "~5.3.0",
+ "level-errors": "~2.0.0",
+ "level-iterator-stream": "~4.0.0",
+ "level-supports": "~1.0.0",
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levelup/node_modules/level-supports": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
+ "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "dependencies": {
+ "xtend": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+ "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/lie/node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
+ },
+ "node_modules/liftoff": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.0.3.tgz",
+ "integrity": "sha512-G4NWz0klE5nFGGVKXdoik2U2vUtwcyuatbnEr0CJXbmOxX0yS6O+5tkpH9TvS1bMdWe0jMihi0acccNqQm28BA==",
+ "dev": true,
+ "dependencies": {
+ "extend": "~2.0.0",
+ "findup-sync": "~0.2.0",
+ "flagged-respawn": "~0.3.0",
+ "minimist": "~1.1.0",
+ "resolve": "~1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/liftoff/node_modules/extend": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz",
+ "integrity": "sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==",
+ "dev": true
+ },
+ "node_modules/liftoff/node_modules/minimist": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
+ "integrity": "sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg==",
+ "dev": true
+ },
+ "node_modules/liftoff/node_modules/resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
+ "dev": true
+ },
+ "node_modules/locket": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/locket/-/locket-1.0.0.tgz",
+ "integrity": "sha512-dPeIDHTNQtejeQ73EDyaMa7QSNimsPfTrKkVXcpXTKBHblY0qow+aR3Yz3PEOy0ZDUQ8HhJMvynkpBipJC5VIQ==",
+ "dev": true,
+ "dependencies": {
+ "abstract-leveldown": "2.4.1",
+ "b-tree": "1.x",
+ "cadence": "1.x",
+ "constrain": "1.x",
+ "mkdirp": "0.5.1",
+ "mvcc": "1.x",
+ "pair": "1.x",
+ "reactor": "1.x",
+ "rimraf": "2.5.1",
+ "sequester": "1.x",
+ "timezone": "0.0.48",
+ "vestibule": "1.x"
+ }
+ },
+ "node_modules/locket/node_modules/abstract-leveldown": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz",
+ "integrity": "sha512-sW2ic/lpOHcEhqCrUNgjN0EMhzsqNF8WO8YE5q3n/v3eVUBX24O/gAUMwwFj2BtC/DibKFXn/vA4WYhYt+NNnw==",
+ "dev": true,
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/locket/node_modules/glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/locket/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
+ "dev": true
+ },
+ "node_modules/locket/node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/locket/node_modules/rimraf": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.1.tgz",
+ "integrity": "sha512-CNymZDrSR9PfkqZnBWaIki7Wlba4c7GzSkSKsHHvjXswXmJA1hM8ZHFrNWIt4L/WcR9kOwvsJZpbxV4fygtXag==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^6.0.1"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "dev": true
+ },
+ "node_modules/lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/loupe": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
+ "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/lru-cache/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true
+ },
+ "node_modules/ltgt": {
+ "version": "2.2.1",
+ "license": "MIT"
+ },
+ "node_modules/magazine": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/magazine/-/magazine-4.0.0.tgz",
+ "integrity": "sha512-X0lHse2f0MLraR3C4fap6CfJRj/+7GTpBxhHFFite3+DOWYKzD/3exYysW7Mdb0zm5OfpgvkvDoD96cw4nn39A==",
+ "dev": true
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+ "optional": true,
+ "dependencies": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/medea": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/medea/-/medea-1.0.3.tgz",
+ "integrity": "sha512-ivY40GFAnL4Z8R4jahsHtqoKZQsltfCAieMRwXAibx0cXzt6tynwJNKq0E8GjZMQ9T41WUwit7prmkhoC0GLjg==",
+ "dev": true,
+ "dependencies": {
+ "append-stream": "^1.1.0",
+ "async": "^0.9.0",
+ "buffer-crc32": "~0.2.1",
+ "buffer-equal": "0.0.1",
+ "es6-map": "^0.1.1",
+ "mkdirp": "^0.5.0",
+ "monotonic-timestamp": "0.0.8",
+ "pidlockfile": "^1.1.1",
+ "rimraf": "~2.2.2",
+ "run-parallel": "^1.0.0"
+ }
+ },
+ "node_modules/medea/node_modules/rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==",
+ "dev": true,
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/medeadown": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/medeadown/-/medeadown-1.1.9.tgz",
+ "integrity": "sha512-uSnGsowo7snXPc+Fbu6upf401mQN45Ob8K2yZcEa9q9qJupVyqsiOn7pwmGi6t05GezS3SL2Psf4qOGd6pBOzA==",
+ "dev": true,
+ "dependencies": {
+ "abstract-leveldown": "3.0.x",
+ "keydir": "^2.1.1",
+ "leveldown-open": "^1.0.3",
+ "medea": "^1.0.3"
+ }
+ },
+ "node_modules/medeadown/node_modules/abstract-leveldown": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz",
+ "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==",
+ "dev": true,
+ "dependencies": {
+ "xtend": "~4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memdown": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
+ "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==",
+ "dependencies": {
+ "abstract-leveldown": "~2.7.1",
+ "functional-red-black-tree": "^1.0.1",
+ "immediate": "^3.2.3",
+ "inherits": "~2.0.1",
+ "ltgt": "~2.2.0",
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/memdown/node_modules/abstract-leveldown": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
+ "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/memdown/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "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==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-collect/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.12"
+ }
+ },
+ "node_modules/minipass-fetch/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-flush/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-pipeline/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "node_modules/mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
+ "dev": true,
+ "dependencies": {
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
+ "he": "1.1.1",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "supports-color": "5.4.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dev": true,
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/module-deps": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz",
+ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",
+ "dev": true,
+ "dependencies": {
+ "browser-resolve": "^2.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "JSONStream": "^1.0.3",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "bin": {
+ "module-deps": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/module-deps/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/module-deps/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/module-deps/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/module-deps/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/monotonic-timestamp": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/monotonic-timestamp/-/monotonic-timestamp-0.0.8.tgz",
+ "integrity": "sha512-3fQw+dAni/JJ4rkvMY7EZOz+tM+yuhrY3tKLJk74YOp/DQR0Ip+9yiKzZrC40uQ+Kin86s5TOjmL6UmxljOAfA==",
+ "dev": true
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/multiparty": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz",
+ "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==",
+ "dependencies": {
+ "http-errors": "~1.8.1",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/multiparty/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/multiparty/node_modules/http-errors": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/multiparty/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==",
+ "dev": true
+ },
+ "node_modules/mvcc": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mvcc/-/mvcc-1.0.0.tgz",
+ "integrity": "sha512-BY0WQLJTJPjtLCU0VPFy0xMLK3cquCDu7HGniMU05DUykLY2EoQe1L4GHysNgAfZIBGrOosnx8xJoMSAW69MhQ==",
+ "dev": true,
+ "dependencies": {
+ "advance": "1.x",
+ "designate": "1.x",
+ "dilute": "1.x",
+ "homogenize": "1.x",
+ "revise": "1.x",
+ "riffle": "1.x",
+ "splice": "1.x",
+ "twiddle": "1.x"
+ }
+ },
+ "node_modules/nan": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+ "optional": true
+ },
+ "node_modules/napi-macros": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
+ "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/navigator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/navigator/-/navigator-1.0.1.tgz",
+ "integrity": "sha512-fSy6/kUueQt6Ecr3w81rB+gWPRcf0WvzOodfV9EaYGZzCr2wk+3kwvfovMLDSxucKXBZ+jldOilWd6ZrIha4Jw==",
+ "dev": true,
+ "engines": {
+ "node": ">= v0.2.0"
+ }
+ },
+ "node_modules/needle": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
+ "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+ "optional": true,
+ "dependencies": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "needle": "bin/needle"
+ },
+ "engines": {
+ "node": ">= 4.4.x"
+ }
+ },
+ "node_modules/needle/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/needle/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "optional": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+ "dev": true
+ },
+ "node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ=="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+ "optional": true,
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^9.1.0",
+ "nopt": "^5.0.0",
+ "npmlog": "^6.0.0",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^2.0.2"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz",
+ "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/node-gyp/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/are-we-there-yet": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/gauge": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.3",
+ "console-control-strings": "^1.1.0",
+ "has-unicode": "^2.0.1",
+ "signal-exit": "^3.0.7",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.5"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/npmlog": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "^3.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^4.0.3",
+ "set-blocking": "^2.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "optional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/node-gyp/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "optional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/node-gyp/node_modules/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "optional": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-gyp/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "optional": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "optional": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/node-gyp/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "optional": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/node-pre-gyp": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
+ "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
+ "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "optional": true,
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "optional": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/fs-minipass": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+ "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
+ "optional": true,
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "optional": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/minipass": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+ "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/minizlib": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+ "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "optional": true,
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "optional": true,
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "optional": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "optional": true
+ },
+ "node_modules/node-pre-gyp/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "optional": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "optional": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/tar": {
+ "version": "4.4.19",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
+ "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
+ "optional": true,
+ "dependencies": {
+ "chownr": "^1.1.4",
+ "fs-minipass": "^1.2.7",
+ "minipass": "^2.9.0",
+ "minizlib": "^1.3.3",
+ "mkdirp": "^0.5.5",
+ "safe-buffer": "^5.2.1",
+ "yallist": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=4.5"
+ }
+ },
+ "node_modules/node-pre-gyp/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "optional": true
+ },
+ "node_modules/noop-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz",
+ "integrity": "sha512-pQ8vODlgXt2e7A3mIbFDlizkr46r75V+BJxVAyat8Jl7YmI513gG5cfyRL0FedKraoZ+VAouI1h4/IWpus5pcQ==",
+ "optional": true
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm-bundled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
+ "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
+ "optional": true,
+ "dependencies": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
+ "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
+ "optional": true
+ },
+ "node_modules/npm-packlist": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
+ "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
+ "optional": true,
+ "dependencies": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/operation": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/operation/-/operation-1.6.5.tgz",
+ "integrity": "sha512-d1OqFpA+QBTsRgXli8L/m9hRlQMJoRbRCiOPIYmZWXzYNtOLFzHkD68+dgCxvzctBdLJnE1AOrg3s1YaIlqz1g==",
+ "dev": true
+ },
+ "node_modules/optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
+ "dev": true,
+ "dependencies": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "node_modules/optimist/node_modules/wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
+ "dev": true
+ },
+ "node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "optional": true,
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "optional": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pair": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/pair/-/pair-1.0.1.tgz",
+ "integrity": "sha512-Eo78L9GbK71WjJqTVCW3PgDRH4vU+vbK4MiVkt/qhRrL0tD00c7FfP5PNtA5khRwD3IOW4Rqd3EFkhfHEmA+3Q==",
+ "dev": true,
+ "dependencies": {
+ "encode": "1.0.x"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "node_modules/parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==",
+ "dev": true,
+ "dependencies": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "node_modules/parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "dependencies": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
+ "dev": true
+ },
+ "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
+ },
+ "node_modules/path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/pidlockfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pidlockfile/-/pidlockfile-1.1.1.tgz",
+ "integrity": "sha512-ajekn/eYVndTnBFntsBhWebdOn4V1+8FHv3YC6X6LxOcVs78UQNaI9ebU2Q72dzZP/B2h5EPs+ymGKPwuFPafA==",
+ "dev": true
+ },
+ "node_modules/pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pool2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/pool2/-/pool2-1.4.1.tgz",
+ "integrity": "sha512-xeupv37OAWA0aL9awuwOeLFfvW6qV4GRyZqnJEmHwI2jpd65aC0JPK+sgo1jQe0sU+zmSJg9cd8YHC7svBTAnQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^2.1.3",
+ "double-ended-queue": "^2.1.0-0",
+ "hashmap": "^2.0.1",
+ "simple-backoff": "^1.0.0"
+ }
+ },
+ "node_modules/pouchdb": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "argsarray": "0.0.1",
+ "buffer-from": "1.1.2",
+ "clone-buffer": "1.0.0",
+ "double-ended-queue": "2.1.0-0",
+ "fetch-cookie": "0.11.0",
+ "immediate": "3.3.0",
+ "inherits": "2.0.4",
+ "level": "6.0.1",
+ "level-codec": "9.0.2",
+ "level-write-stream": "1.0.0",
+ "leveldown": "5.6.0",
+ "levelup": "4.4.0",
+ "ltgt": "2.2.1",
+ "node-fetch": "2.6.7",
+ "readable-stream": "1.1.14",
+ "spark-md5": "3.0.2",
+ "through2": "3.0.2",
+ "uuid": "8.3.2",
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "node_modules/pouchdb-abstract-mapreduce": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-mapreduce-utils": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-http": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-leveldb": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "level": "6.0.1",
+ "level-write-stream": "1.0.0",
+ "leveldown": "5.6.0",
+ "pouchdb-adapter-leveldb-core": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1",
+ "through2": "3.0.2"
+ }
+ },
+ "node_modules/pouchdb-adapter-leveldb-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "buffer-from": "1.1.2",
+ "double-ended-queue": "2.1.0-0",
+ "levelup": "4.4.0",
+ "pouchdb-adapter-utils": "7.3.1",
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-json": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1",
+ "pouchdb-sublevel": "7.3.1",
+ "through2": "3.0.2"
+ }
+ },
+ "node_modules/pouchdb-adapter-memory": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "memdown": "1.4.1",
+ "pouchdb-adapter-leveldb-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz",
+ "integrity": "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-adapter-websql-core": "7.0.0",
+ "pouchdb-utils": "7.0.0",
+ "websql": "1.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-binary-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz",
+ "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==",
+ "optional": true,
+ "dependencies": {
+ "buffer-from": "1.1.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-collections": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz",
+ "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-errors": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz",
+ "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==",
+ "optional": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-md5": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz",
+ "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "spark-md5": "3.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/pouchdb-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz",
+ "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.0.6",
+ "inherits": "2.0.3",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/spark-md5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+ "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-node-websql/node_modules/uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "optional": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/pouchdb-adapter-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz",
+ "integrity": "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-adapter-utils": "7.0.0",
+ "pouchdb-binary-utils": "7.0.0",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-json": "7.0.0",
+ "pouchdb-merge": "7.0.0",
+ "pouchdb-utils": "7.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-adapter-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz",
+ "integrity": "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "pouchdb-merge": "7.0.0",
+ "pouchdb-utils": "7.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-binary-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz",
+ "integrity": "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==",
+ "optional": true,
+ "dependencies": {
+ "buffer-from": "1.1.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-collections": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz",
+ "integrity": "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-errors": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz",
+ "integrity": "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==",
+ "optional": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-json": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz",
+ "integrity": "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==",
+ "optional": true,
+ "dependencies": {
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-md5": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz",
+ "integrity": "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==",
+ "optional": true,
+ "dependencies": {
+ "pouchdb-binary-utils": "7.0.0",
+ "spark-md5": "3.0.0"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-merge": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz",
+ "integrity": "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/pouchdb-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz",
+ "integrity": "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.0.6",
+ "inherits": "2.0.3",
+ "pouchdb-collections": "7.0.0",
+ "pouchdb-errors": "7.0.0",
+ "pouchdb-md5": "7.0.0",
+ "uuid": "3.2.1"
+ }
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/spark-md5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+ "integrity": "sha512-BpPFB0Oh83mi+6DRcFwxPx96f3OL8Tkq3hdvaHuXaQUsy5F3saI3zIPNQ/UsTQgyAXIHnML1waeCe1WoCPXbpQ==",
+ "optional": true
+ },
+ "node_modules/pouchdb-adapter-websql-core/node_modules/uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "optional": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/pouchdb-all-dbs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pouchdb-all-dbs/-/pouchdb-all-dbs-1.1.1.tgz",
+ "integrity": "sha512-UUnsdmcnRSQ8MAOYSJjfTwKkQNb/6fvOfd/f7dNNivWZ2YDYVuMfgw1WQdL634yEtcXTxAENZ/EyLRdzPCB41A==",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "es3ify": "^0.2.2",
+ "inherits": "~2.0.1",
+ "pouchdb-promise": "6.4.3",
+ "tiny-queue": "^0.2.0"
+ }
+ },
+ "node_modules/pouchdb-binary-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "buffer-from": "1.1.2"
+ }
+ },
+ "node_modules/pouchdb-changes-filter": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-selector-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-checkpointer": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-collate": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "node_modules/pouchdb-collections": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "node_modules/pouchdb-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.4",
+ "pouchdb-changes-filter": "7.3.1",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-merge": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-errors": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4"
+ }
+ },
+ "node_modules/pouchdb-fauxton": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/pouchdb-fauxton/-/pouchdb-fauxton-0.0.6.tgz",
+ "integrity": "sha512-eClyvP5HKoj7Nc3BXHSJo03GV+14jeLVqLba/s32I1jH79I3oh2AIqVlqH+gxaPrMXcHOpho/R+CBD44/LkZEA=="
+ },
+ "node_modules/pouchdb-fetch": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "abort-controller": "3.0.0",
+ "fetch-cookie": "0.11.0",
+ "node-fetch": "2.6.7"
+ }
+ },
+ "node_modules/pouchdb-find": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-abstract-mapreduce": "7.3.1",
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-fetch": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "pouchdb-selector-core": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-generate-replication-id": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-md5": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-json": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "node_modules/pouchdb-mapreduce": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-abstract-mapreduce": "7.3.1",
+ "pouchdb-mapreduce-utils": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-mapreduce-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-md5": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-binary-utils": "7.3.1",
+ "spark-md5": "3.0.2"
+ }
+ },
+ "node_modules/pouchdb-merge": {
+ "version": "7.3.1",
+ "license": "Apache-2.0"
+ },
+ "node_modules/pouchdb-promise": {
+ "version": "6.4.3",
+ "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-6.4.3.tgz",
+ "integrity": "sha512-ruJaSFXwzsxRHQfwNHjQfsj58LBOY1RzGzde4PM5CWINZwFjCQAhZwfMrch2o/0oZT6d+Xtt0HTWhq35p3b0qw==",
+ "dependencies": {
+ "lie": "3.1.1"
+ }
+ },
+ "node_modules/pouchdb-replication": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4",
+ "pouchdb-checkpointer": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-generate-replication-id": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-selector-core": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "pouchdb-collate": "7.3.1",
+ "pouchdb-utils": "7.3.1"
+ }
+ },
+ "node_modules/pouchdb-utils": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.3.0",
+ "inherits": "2.0.4",
+ "pouchdb-collections": "7.3.1",
+ "pouchdb-errors": "7.3.1",
+ "pouchdb-md5": "7.3.1",
+ "uuid": "8.3.2"
+ }
+ },
+ "node_modules/pouchdb-utils/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/pouchdb/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "devOptional": true
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
+ "optional": true
+ },
+ "node_modules/promise-nodify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/promise-nodify/-/promise-nodify-1.0.2.tgz",
+ "integrity": "sha512-j9RWp/40Ttja+wxiEjS5Ud5liHQxAA5K+STc9Vh09mF4zpNEuXTR35U6Uk5qVCsf6qp2v5UnLWa7SNmZ6M1ewQ=="
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "optional": true,
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw=="
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
+ "dev": true
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/random-uuid-v4": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/random-uuid-v4/-/random-uuid-v4-0.0.8.tgz",
+ "integrity": "sha512-KXQm6yiEMSmXRXPtb18oQuKtCmlT1YMbTavc/8p6PdEIldCAoMNDwF+0NvVnTa0w7kOSu+o2KTxkVEu7Vxen6g=="
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "optional": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/reactor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reactor/-/reactor-1.0.1.tgz",
+ "integrity": "sha512-8vA2vJ/Yqu8tA7/96a2Cs4Kf4EMmVx/DLjtSINGodBUtJUBlZxeNWTt+fduK6li+I4HefQGyCwLy5jPjJoLkmw==",
+ "dev": true,
+ "dependencies": {
+ "abend": "1.x",
+ "operation": "1.x",
+ "turnstile": "1.x"
+ }
+ },
+ "node_modules/read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/read-only-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/read-only-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/read-only-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/read-only-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "1.1.14",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==",
+ "dependencies": {
+ "ast-types": "0.9.6",
+ "esprima": "~3.1.0",
+ "private": "~0.1.5",
+ "source-map": "~0.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/recast/node_modules/esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==",
+ "dev": true,
+ "dependencies": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.11.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-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "optional": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/revise": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/revise/-/revise-1.0.0.tgz",
+ "integrity": "sha512-pL20qkaZGtQb8Ar+en/EG3kwwg/784aR2G/TgxIRY5mGTg2mO3V1tTru9XPwOx0auynFO/fni2o7aent9RYizA==",
+ "dev": true
+ },
+ "node_modules/riffle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/riffle/-/riffle-1.0.0.tgz",
+ "integrity": "sha512-fPgD3fz7Mism3q9grlnX4fEdC0vVLxOJSIm2St1fFcC/O8NavjNMk4Hy7xZMJ4UDTdqQEKRwGrc10mHIbF/xlA==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "devOptional": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==",
+ "dev": true
+ },
+ "node_modules/rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==",
+ "dev": true,
+ "dependencies": {
+ "rx-lite": "*"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "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/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/sanitize-filename": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz",
+ "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==",
+ "dependencies": {
+ "truncate-utf8-bytes": "^1.0.0"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "optional": true
+ },
+ "node_modules/secure-random": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/secure-random/-/secure-random-1.1.2.tgz",
+ "integrity": "sha512-H2bdSKERKdBV1SwoqYm6C0y+9EA94v6SUBOWO8kDndc4NoUih7Dv6Tsgma7zO1lv27wIvjlD0ZpMQk7um5dheQ=="
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "devOptional": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/sequester": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/sequester/-/sequester-1.0.7.tgz",
+ "integrity": "sha512-gQaPhfKhXyLJz0b1VgWXMfvE9n0FJBDRQm7hsrCOyI+M0WG4g7H7xKBrwMmkUX8N/xHZENxBX2380cRh/8Es2Q==",
+ "dev": true
+ },
+ "node_modules/serve-favicon": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
+ "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==",
+ "dependencies": {
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "ms": "2.1.1",
+ "parseurl": "~1.3.2",
+ "safe-buffer": "5.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-favicon/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "node_modules/serve-favicon/node_modules/safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==",
+ "dev": true,
+ "dependencies": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "node_modules/shasum-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz",
+ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==",
+ "dev": true,
+ "dependencies": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==",
+ "dev": true
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/simple-backoff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/simple-backoff/-/simple-backoff-1.1.0.tgz",
+ "integrity": "sha512-3eB7B9fmtgXVlwkaKLYLreq2CNHn5/6rtU5A5WmMUAqjMDMFBZmFTUcH7AByDaS1GeJH2ouiXo4Exmr3Si3R4g==",
+ "dev": true
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "optional": true,
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "optional": true,
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+ "optional": true,
+ "dependencies": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.3",
+ "socks": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/socks-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/socks-proxy-agent/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==",
+ "optional": true
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spark-md5": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+ "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+ },
+ "node_modules/splice": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/splice/-/splice-1.0.0.tgz",
+ "integrity": "sha512-QXD9l0HVoeNMRfWZsE1MEnTP+AAM0eEDLxC2OBERPrI24wujCqaojDklzBicDdcon/l6ecfXcnTXOJz6bIGSbw==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.x"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/sqldown": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sqldown/-/sqldown-2.1.0.tgz",
+ "integrity": "sha512-35BqCuZWdldSuGX9zEAM9/1U8DkxStCu2hkEXs/BOgMa4uKhrZl1ZQhNt9WYwyJ4ioU7nBY2BeO9zULoOvpoew==",
+ "dev": true,
+ "dependencies": {
+ "abstract-leveldown": "^2.1.0",
+ "bluebird": "^2.3.11",
+ "debug": "^2.2.0",
+ "double-ended-queue": "^2.0.0-0",
+ "es3ify": "^0.1.3",
+ "inherits": "^2.0.1",
+ "knex": "^0.8.3",
+ "through2": "^0.6.3"
+ }
+ },
+ "node_modules/sqldown/node_modules/abstract-leveldown": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
+ "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
+ "dev": true,
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/base62": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
+ "integrity": "sha512-QtExujIOq/F672OkHmDi3CdkphOA1kSQ38gv03Ro3cplYQk831dq9GM3Q1oXAxpR5HNJjGjjjT2pHtBGAJu1jw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/sqldown/node_modules/bluebird": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
+ "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==",
+ "dev": true
+ },
+ "node_modules/sqldown/node_modules/double-ended-queue": {
+ "version": "2.0.0-0",
+ "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.0.0-0.tgz",
+ "integrity": "sha512-t5ouWOpItmHrm0J0+bX/cFrIjBFWnJkk5LbIJq6bbU/M4aLX2c3LrM4QYsBptwvlPe3WzdpQefQ0v1pe/A5wjg==",
+ "dev": true
+ },
+ "node_modules/sqldown/node_modules/es3ify": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
+ "integrity": "sha512-CzrDTeqaMBrtjfNhIoHtf2GcjhyozGyJ478x6C+WeLMm+WSQOZ3/qb0MO0TnHqmUTdVRAkGroPmx+cWqMhomKQ==",
+ "dev": true,
+ "dependencies": {
+ "esprima-fb": "~3001.0001.0000-dev-harmony-fb",
+ "jstransform": "~3.0.0",
+ "through": "~2.3.4"
+ }
+ },
+ "node_modules/sqldown/node_modules/esprima-fb": {
+ "version": "3001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
+ "integrity": "sha512-a3RFiCVBiy8KdO6q/C+8BQiP/sRk8XshBU3QHHDP8tNzjYwR3FKBOImu+PXfVhPoZL0JKtJLBAOWlDMCCFY8SQ==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/jstransform": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
+ "integrity": "sha512-sMwqW0EdQk2A5NjddlcSSLp6t7pIknOrJtxPU3kMN82RJXPGbdC3fcM5VhIsApNKL1hpeH38iSQsJRbgprPQZg==",
+ "dev": true,
+ "dependencies": {
+ "base62": "0.1.1",
+ "esprima-fb": "~3001.1.0-dev-harmony-fb",
+ "source-map": "0.1.31"
+ },
+ "engines": {
+ "node": ">=0.8.8"
+ }
+ },
+ "node_modules/sqldown/node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/sqldown/node_modules/source-map": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
+ "integrity": "sha512-qFALUiKHo35Duky0Ubmb5YKj9b3c6CcgGNGeI60sd6Nn3KaY7h9fclEOcCVk0hwszwYYP6+X2/jpS5hHqqVuig==",
+ "dev": true,
+ "dependencies": {
+ "amdefine": ">=0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/sqldown/node_modules/through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/sqlite3": {
+ "version": "5.1.6",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "node-addon-api": "^4.2.0",
+ "tar": "^6.1.11"
+ },
+ "optionalDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependencies": {
+ "node-gyp": "8.x"
+ },
+ "peerDependenciesMeta": {
+ "node-gyp": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "optional": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/ssri/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "optional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-browserify/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/stream-browserify/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-browserify/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/stream-browserify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==",
+ "dev": true,
+ "dependencies": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-combiner2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/stream-combiner2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-combiner2/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/stream-combiner2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/stream-http": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz",
+ "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/stream-http/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/stream-http/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-splicer/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/stream-splicer/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/stream-splicer/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/stream-splicer/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "0.10.31",
+ "license": "MIT"
+ },
+ "node_modules/string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dependencies": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "node_modules/pouchdb-sublevel": {
+ "version": "7.3.1",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "inherits": "2.0.4",
+ "level-codec": "9.0.2",
+ "ltgt": "2.2.1",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "node_modules/superagent": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+ "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+ "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "^1.2.0",
+ "cookiejar": "^2.1.0",
+ "debug": "^3.1.0",
+ "extend": "^3.0.0",
+ "form-data": "^2.3.1",
+ "formidable": "^1.2.0",
+ "methods": "^1.1.1",
+ "mime": "^1.4.1",
+ "qs": "^6.5.1",
+ "readable-stream": "^2.3.5"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/superagent/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/superagent/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/superagent/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/superagent/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/superagent/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/superagent/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/supertest": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz",
+ "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==",
+ "dev": true,
+ "dependencies": {
+ "methods": "^1.1.2",
+ "superagent": "^3.8.3"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "node_modules/table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "node_modules/table/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/table/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
+ },
+ "node_modules/table/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tail": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/tail/-/tail-2.2.6.tgz",
+ "integrity": "sha512-IQ6G4wK/t8VBauYiGPLx+d3fA5XjSVagjWV5SIYzvEvglbQjwEcukeYI68JOPpdydjxhZ9sIgzRlSmwSpphHyw==",
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.1.15",
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
+ },
+ "node_modules/through2": {
+ "version": "3.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "node_modules/through2/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/through2/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/tildify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.0.0.tgz",
+ "integrity": "sha512-3Tu0EzUZpMeGRxUrajQPKBhYrpQLIA42RtQsaIaJ75zvaAov6d0ArxVEKoz+ZYSVOa7XnEvbjkzJDSawIntYIA==",
+ "dev": true,
+ "dependencies": {
+ "user-home": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==",
+ "dev": true,
+ "dependencies": {
+ "process": "~0.11.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/timezone": {
+ "version": "0.0.48",
+ "resolved": "https://registry.npmjs.org/timezone/-/timezone-0.0.48.tgz",
+ "integrity": "sha512-3Ag7ON+ojeJv8tK2f+T33UTKub6vrS4DA51Prwgz2Ym5C0RsLBgcM9SeOHP0GaO58QgYXLqWLkshRYJ3H+YwVw==",
+ "dev": true
+ },
+ "node_modules/tiny-each-async": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz",
+ "integrity": "sha512-5ROII7nElnAirvFn8g7H7MtpfV1daMcyfTGQwsn/x2VtyV+VPiO5CjReCJtWLvoKTDEDmZocf3cNPraiMnBXLA=="
+ },
+ "node_modules/tiny-queue": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz",
+ "integrity": "sha512-EijGsv7kzd9I9g0ByCl6h42BWNGUZrlCSejfrb3AKeHC33SGbASu1VDf5O3rRiiUOhAC9CHdZxFPbZu0HmR70A=="
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/truncate-utf8-bytes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
+ "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
+ "dependencies": {
+ "utf8-byte-length": "^1.0.1"
+ }
+ },
+ "node_modules/tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "node_modules/turnstile": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/turnstile/-/turnstile-1.0.1.tgz",
+ "integrity": "sha512-nUKLiGTwVHeTXYZEKOEFhj1n6CCmXtL+nnTPGyuq5o1cuVNRsy9AnVh3gSyksonrq8gWS0fRkcYcu62XcO2U3g==",
+ "dev": true,
+ "dependencies": {
+ "cadence": "1.x",
+ "operation": "1.x"
+ }
+ },
+ "node_modules/twiddle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/twiddle/-/twiddle-1.0.0.tgz",
+ "integrity": "sha512-pBlZGEhlw/bBwCyWILvBNRK6g3+rhP76pscWMC+gdmTc5QyjIULEN4LewhjmHFEOwU27S0mfxh9aaXLeKxX/5Q==",
+ "dev": true
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true
+ },
+ "node_modules/uglify-es": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+ "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0",
+ "dev": true,
+ "dependencies": {
+ "commander": "~2.13.0",
+ "source-map": "~0.6.1"
+ },
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uglify-es/node_modules/commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+ "dev": true
+ },
+ "node_modules/uglify-es/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "dependencies": {
+ "random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true,
+ "bin": {
+ "umd": "bin/cli.js"
+ }
+ },
+ "node_modules/undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+ "dev": true,
+ "dependencies": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ },
+ "bin": {
+ "undeclared-identifiers": "bin.js"
+ }
+ },
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "optional": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "optional": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/url": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz",
+ "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha512-aggiKfEEubv3UwRNqTzLInZpAOmKzwdHqEBmW/hBA/mt99eg+b4VrX6i+IRLxU8+WJYfa33rGwRseg4eElUgsQ==",
+ "dev": true,
+ "bin": {
+ "user-home": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/utf8-byte-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
+ "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA=="
+ },
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha512-SKfhk/LlaXzvtowJabLZwD4K6SGRYeoxA7KJeISlUMAB/NT4CBkZjMq3WceX2Ckm4llwqYVo8TICgsDYCBU2tA==",
+ "dev": true,
+ "dependencies": {
+ "user-home": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vestibule": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/vestibule/-/vestibule-1.6.0.tgz",
+ "integrity": "sha512-UYS3LA9t1LuF8iXnKmlrqjv/a8oHQDCQI8LsAIUKv86tt8wqXJdFp+undP1/7alHrGDUj1Diec5/eD68Y+r3Hg==",
+ "dev": true
+ },
+ "node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ },
+ "node_modules/vuvuzela": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz",
+ "integrity": "sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ=="
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/websql": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz",
+ "integrity": "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==",
+ "optional": true,
+ "dependencies": {
+ "argsarray": "^0.0.1",
+ "immediate": "^3.2.2",
+ "noop-fn": "^1.0.0",
+ "sqlite3": "^4.0.0",
+ "tiny-queue": "^0.2.1"
+ }
+ },
+ "node_modules/websql/node_modules/sqlite3": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz",
+ "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.11.0"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^0.5.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/write-stream": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz",
+ "integrity": "sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==",
+ "dependencies": {
+ "readable-stream": "~0.0.2"
+ }
+ },
+ "node_modules/write-stream/node_modules/readable-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz",
+ "integrity": "sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw=="
+ },
+ "node_modules/xhr2": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz",
+ "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/xmlhttprequest-cookie": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-cookie/-/xmlhttprequest-cookie-0.9.9.tgz",
+ "integrity": "sha512-39xloHdqRonNUa68sTiCqOfXK1AKAEPU0mKCfNsDL+D6zkQoz8DNqJpN/vitCOo1xUvHiHH8K8Z3RiM7wMkxpQ==",
+ "dependencies": {
+ "xmlhttprequest": ">=1.8.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ }
+ }
+}
diff --git a/packages/pouchdb-server-packages/package.json b/packages/pouchdb-server-packages/package.json
new file mode 100644
index 0000000000..5deb0e9b1d
--- /dev/null
+++ b/packages/pouchdb-server-packages/package.json
@@ -0,0 +1,105 @@
+{
+ "name": "pouchdb-server-packages",
+ "private": true,
+ "version": "4.2.0",
+ "module": "src/index.js",
+ "workspaces": ["../../","packages"],
+ "scripts": {
+ "unit-tests": "./bin/unit-tests.sh",
+ "test-pouchdb": "./bin/test-setup.sh && ./bin/test-pouchdb.sh",
+ "test-couchdb": "./bin/test-couchdb.sh",
+ "eslint": "eslint bin/ packages/node_modules/**/src tests/",
+ "test-express-minimum": "./bin/test-setup.sh && ./bin/test-express-minimum.sh",
+ "release": "./bin/release.sh"
+ },
+ "dependencies": {
+ "@gerhobbelt/nomnom": "^1.8.4-24",
+ "base64url": "^3.0.0",
+ "basic-auth": "^2.0.0",
+ "basic-authorization-header": "^0.2.7",
+ "bluebird": "^3.4.7",
+ "body-parser": "^1.16.1",
+ "colors": "^1.0.3",
+ "compression": "^1.6.2",
+ "cookie-parser": "^1.4.3",
+ "corser": "~2.0.0",
+ "couchdb-calculate-session-id": "^1.1.0",
+ "couchdb-log-parse": "^0.0.4",
+ "crypto-lite": "^0.2.0",
+ "denodeify": "^1.2.1",
+ "equals": "^1.0.5",
+ "express": "^4.14.1",
+ "extend": "^3.0.2",
+ "get-folder-size": "^2.0.0",
+ "header-case-normalizer": "^1.0.3",
+ "is-empty": "^1.2.0",
+ "killable": "^1.0.0",
+ "mkdirp": "^0.5.0",
+ "multiparty": "^4.1.3",
+ "object-assign": "^4.1.0",
+ "on-finished": "^2.3.0",
+ "pouchdb": "^7.0.0",
+ "pouchdb-adapter-http": "^7.0.0",
+ "pouchdb-adapter-leveldb-core": "^7.0.0",
+ "pouchdb-adapter-memory": "^7.0.0",
+ "pouchdb-all-dbs": "^1.0.2",
+ "pouchdb-collections": "^7.0.0",
+ "pouchdb-core": "^7.0.0",
+ "pouchdb-fauxton": "^0.0.6",
+ "pouchdb-find": "^7.0.0",
+ "pouchdb-mapreduce": "^7.0.0",
+ "pouchdb-promise": "^6.4.1",
+ "pouchdb-replication": "^7.0.0",
+ "promise-nodify": "^1.0.2",
+ "random-uuid-v4": "0.0.8",
+ "raw-body": "^2.2.0",
+ "sanitize-filename": "^1.6.1",
+ "secure-random": "^1.1.1",
+ "serve-favicon": "~2.5.0",
+ "sqlite3": "^5.1.6",
+ "tail": "^2.0.2",
+ "uuid": "^3.0.1",
+ "wordwrap": "1.0.0",
+ "xhr2": "^0.2.0",
+ "xmlhttprequest-cookie": "^0.9.2"
+ },
+ "devDependencies": {
+ "assert": "^2.0.0",
+ "browserify": "^16.3.0",
+ "builtin-modules": "^3.0.0",
+ "chai": "^4.1.2",
+ "couchdb-harness": "*",
+ "eslint": "4.18.2",
+ "find-requires": "^0.2.2",
+ "fs-extra": "^8.1.0",
+ "glob": "^7.1.1",
+ "jsondown": "^1.0.0",
+ "locket": "1.0.0",
+ "lodash.flatten": "^4.4.0",
+ "lodash.uniq": "^4.5.0",
+ "medeadown": "^1.1.1",
+ "memdown": "^1.2.4",
+ "mocha": "^5.0.0",
+ "navigator": "^1.0.1",
+ "sqldown": "^2.1.0",
+ "supertest": "^3.0.0",
+ "uglify-es": "^3.3.8"
+ },
+ "optionalDependencies": {
+ "pouchdb-adapter-leveldb": "^7.0.0",
+ "pouchdb-adapter-node-websql": "^7.0.0"
+ },
+ "browserPackages": {
+ "http-pouchdb": "buildHTTPPouchDB",
+ "pouchdb-auth": "Auth",
+ "pouchdb-list": "List",
+ "pouchdb-replicator": "Replicator",
+ "pouchdb-rewrite": "Rewrite",
+ "pouchdb-seamless-auth": "SeamlessAuth",
+ "pouchdb-security": "Security",
+ "pouchdb-show": "Show",
+ "pouchdb-update": "Update",
+ "pouchdb-validation": "Validation",
+ "pouchdb-vhost": "VirtualHost"
+ }
+}
diff --git a/packages/pouchdb-server-packages/packages/couchdb-eval/README.md b/packages/pouchdb-server-packages/packages/couchdb-eval/README.md
new file mode 100644
index 0000000000..332cfdeeea
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-eval/README.md
@@ -0,0 +1,18 @@
+couchdb-eval
+============
+
+Compiles a piece of code to a function object, providing a CouchDB-like
+JavaScript context. Written to be used for (and developed alongside)
+PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/couchdb-eval/package.json b/packages/pouchdb-server-packages/packages/couchdb-eval/package.json
new file mode 100644
index 0000000000..db23bf64e9
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-eval/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "couchdb-eval",
+ "description": "Compiles a piece of code to a function object, providing a CouchDB-like JavaScript context.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "eval"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/couchdb-objects/README.md b/packages/pouchdb-server-packages/packages/couchdb-objects/README.md
new file mode 100644
index 0000000000..682505360d
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-objects/README.md
@@ -0,0 +1,17 @@
+couchdb-objects
+===============
+
+Aids in the construction of JSON objects as used by CouchDB. Written to
+be used for (and developed alongside) PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/couchdb-objects/package.json b/packages/pouchdb-server-packages/packages/couchdb-objects/package.json
new file mode 100644
index 0000000000..eab1da9053
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-objects/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "couchdb-objects",
+ "description": "Aids in the construction of JSON objects as used by CouchDB.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "object"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/couchdb-render/README.md b/packages/pouchdb-server-packages/packages/couchdb-render/README.md
new file mode 100644
index 0000000000..06e31ef06e
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-render/README.md
@@ -0,0 +1,18 @@
+couchdb-render
+==============
+
+Given the code of a CouchDB show/list function (and some other stuff),
+this module runs it and returns the result. Written to be used for (and
+developed alongside) PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/couchdb-render/package.json b/packages/pouchdb-server-packages/packages/couchdb-render/package.json
new file mode 100644
index 0000000000..4f46fe4e49
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-render/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "couchdb-render",
+ "description": "Given the code of a CouchDB show/list function (and some other stuff), this module runs it and returns the result.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "render",
+ "show",
+ "list"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/couchdb-resp-completer/README.md b/packages/pouchdb-server-packages/packages/couchdb-resp-completer/README.md
new file mode 100644
index 0000000000..d458fd5106
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-resp-completer/README.md
@@ -0,0 +1,18 @@
+couchdb-resp-completer
+======================
+
+Builds a complete CouchDB-like response object from a very marginal one.
+(Can be just a string at first.) Written to be used for (and developed
+alongside) PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/couchdb-resp-completer/package.json b/packages/pouchdb-server-packages/packages/couchdb-resp-completer/package.json
new file mode 100644
index 0000000000..1988ddba34
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/couchdb-resp-completer/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "couchdb-resp-completer",
+ "description": "Builds a complete CouchDB-like response object from a very marginal one. (Can be just a string at first.)",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "response",
+ "object"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/express-pouchdb/README.md b/packages/pouchdb-server-packages/packages/express-pouchdb/README.md
new file mode 100644
index 0000000000..af78cdb320
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/express-pouchdb/README.md
@@ -0,0 +1,18 @@
+express-pouchdb
+===============
+
+An Express submodule with a CouchDB-style REST interface to PouchDB.
+
+For full documentation, see [the PouchDB Server readme](https://github.com/pouchdb/pouchdb-server#readme).
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/express-pouchdb/package.json b/packages/pouchdb-server-packages/packages/express-pouchdb/package.json
new file mode 100644
index 0000000000..87a1c9ed60
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/express-pouchdb/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "express-pouchdb",
+ "description": "Express submodule with a CouchDB-style REST interface to PouchDB.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb"
+ ],
+ "license": "Apache-2.0",
+ "main": "lib/index.js",
+ "files": [
+ "lib"
+ ]
+}
diff --git a/packages/pouchdb-server-packages/packages/http-pouchdb/README.md b/packages/pouchdb-server-packages/packages/http-pouchdb/README.md
new file mode 100644
index 0000000000..d04cdebd54
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/http-pouchdb/README.md
@@ -0,0 +1,62 @@
+http-pouchdb
+============
+
+Access remote CouchDB databases like you would access your local PouchDB
+ones. Tested support for ``new PouchDB('name')``,
+``PouchDB.replicate('name', 'name')``, ``PouchDB.destroy('name')`` and,
+as a bonus, ``PouchDB.allDbs()``.
+
+Example
+-------
+
+```bash
+npm install pouchdb http-pouchdb
+```
+
+```javascript
+var PouchDB = require('pouchdb');
+var HttpPouchDB = require('http-pouchdb')(PouchDB, 'http://localhost:5984');
+
+var db = new HttpPouchdb('_users');
+console.log(HttpPouchDB.isHTTPPouchDB) //-> true
+// 'db' will be backed by http://localhost:5984/_users ; You can use it
+// like any PouchDB database.
+```
+
+API
+---
+
+**NodeJS package name:** `http-pouchdb`
+
+**Browser object name:** `window.buildHTTPPouchDB`
+
+Browser usage
+-------------
+
+```html
+
+
+
+```
+
+API
+---
+
+- ``module.exports = function (PouchDB, name, opts) -> PouchDB2``
+- ``name``: The base url you want to use. Needs a trailing '/'.
+- ``opts``: ``opts.headers`` and ``opts.auth``.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/http-pouchdb/package.json b/packages/pouchdb-server-packages/packages/http-pouchdb/package.json
new file mode 100644
index 0000000000..32033485e8
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/http-pouchdb/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "http-pouchdb",
+ "description": "Access remote CouchDB databases like you would access your local PouchDB ones.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "http",
+ "remote",
+ "local"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js",
+ "browser": {
+ "xhr2": false
+ }
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-auth/README.md b/packages/pouchdb-server-packages/packages/pouchdb-auth/README.md
new file mode 100644
index 0000000000..a4645e2da8
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-auth/README.md
@@ -0,0 +1,289 @@
+pouchdb-auth
+=============
+
+A PouchDB plug-in that simulates CouchDB's authentication daemon.
+
+Includes a users db that functions like CouchDB's. Also works in the browser.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-auth`
+
+**Browser object name:** `window.Auth`
+
+```
+# npm install --save pouchdb-auth
+var PouchDB = require('pouchdb')
+var Auth = require('pouchdb-auth')
+PouchDB.plugin(Auth)
+
+var db = new PouchDB('_users')
+```
+
+`pouchdb-auth` adds 3 methods to the PouchDB API
+
+1. `db.hashAdminPasswords(admins)`
+2. `db.generateSecret()`
+3. `db.useAsAuthenticationDB()`
+4. `db.stopUsingAsAuthenticationDB`
+
+### db.hashAdminPasswords(admins[, options[, callback]])
+
+`admins` is an object in the form of `'username': 'password'`.
+
+Returns a promise, unless `callback` is passed.
+Resolves with object with all values being hashed.
+
+```js
+db.hashAdminPasswords({ 'admin': 'secret' }
+.then(function (hashed) {
+ // hashed.admin now looks like '-pbkdf2-243ba92f8f575c70d3d607b408…21731411301c11cb1d81481f51d1108,10'
+})
+```
+
+- `options.iterations`: The number of pbkdf2 iterations to use when hashing the
+ passwords. Defaults to CouchDB's 10.
+
+See below ("How it works") for more background information
+
+### db.generateSecret()
+
+Generates a secret that you can use for useAsAuthenticationDB(). This is a
+synchronous method.
+
+### db.useAsAuthenticationDB([options[, callback]])
+
+This function transforms the database on which it is called into an
+authentication database. It does that by installing strict validation
+rules, making sure passwords are hashed in user documents before
+they're written into the db, and by adding the following methods
+to the db (documented below):
+
+- `db.signUp(username, password[, options[, callback]])`
+- `db.logIn(username, password[, options[, callback]])`
+- `db.logOut([options[, callback]])`
+- `db.session([options[, callback]])`
+- `db.multiUserLogIn([callback])`
+- `db.multiUserSession([sessionID[, callback]])`
+
+- `options.isOnlineAuthDB`: If `true`, password hashing, keeping
+ track of the session and doc validation is all handled by the
+ CouchDB on the other end. Defaults to `true` if called on an http
+ database, otherwise `false`. An online db currently doesn't provide the
+ `db.multiUser*` methods.
+- `options.timeout`: By default, a session is valid for 600 seconds. If you want
+ to renew the session, call ``db.session()`` within this time window, or set
+ the expiration time higher (or to 0, which sets it to infinite), by changing
+ this value.
+- `options.secret`: To calculate the session keys, a secret is necessary. You
+ can pass in your own using this parameter. Otherwise, a random one is
+ generated for the authentication db.
+- `options.admins` (optional): Allows to pass in an admins object that looks
+ like the one defined in CouchDB's `_config`.
+- `options.iterations`: The number of pbkdf2 iterations to use when hashing the
+ passwords. Defaults to CouchDB's 10.
+
+Returns a promise, unless `callback` is passed. Resolves with nothing.
+
+```js
+db.useAsAuthenticationDB()
+.then(function () {
+ // db is now ready to be used as users database, with all behavior
+ // of CouchDB's `_users` database applied
+
+})
+```
+
+### db.stopUsingAsAuthenticationDB()
+
+Removes custom behavior and methods applied by `db.useAsAuthenticationDB()`.
+
+Returns nothing. This is a synchronous method.
+
+```js
+db.stopUsingAsAuthenticationDB();
+```
+
+
+### db.signUp(username, password[, options[, callback]])
+
+A small helper function: pretty much equivalent to saving a
+CouchDB user document with the passed in values in the database
+using PouchDB.
+
+`username` and `password` are both strings and required.
+
+`options.roles` (optional) is an array of strings with roles
+names, used for authorizing access to databases, see "How it
+works" below.
+
+Returns a promise, unless `callback` is passed. Resolves with
+[put](http://pouchdb.com/api.html#create_document) response.
+
+```js
+db.signUp('john', 'secret')
+.then(function (response) {
+ // {
+ // ok: true,
+ // id: 'org.couchdb.user:john',
+ // rev: '1-A6157A5EA545C99B00FF904EEF05FD9F'
+ // }
+})
+```
+
+### db.logIn(username, password[, callback])
+
+Tries to get the user specified by `username` from the database,
+if its `password` (after hashing) matches, the user is considered
+to be logged in. This fact is then stored in memory, allowing the
+other methods (`db.logOut` & `db.session`) to use it later on.
+
+Returns a promise, unless `callback` is passed. Resolves with `name`
+and `roles`. If username and/or password is incorrect, rejects with
+`unauthorized` error.
+
+```js
+db.logIn('john', 'secret')
+.then(function (response) {
+ // {
+ // ok: true,
+ // name: 'john',
+ // roles: ['roles', 'here']
+ // }
+});
+
+db.logIn('john', 'wrongsecret')
+.catch(function (error) {
+ // error.name === `unauthorized`
+ // error.status === 401
+ // error.message === 'Name or password is incorrect.'
+});
+```
+
+
+### db.logOut(callback)
+
+Removes the current session.
+
+Returns a promise that resolves to `{ok: true}`, to match a CouchDB logout. This
+method never fails, it works even if there is no session.
+
+```js
+db.logOut()
+.then(function (resp) {
+ // { ok: true }
+});
+```
+
+### db.session([callback])
+
+Reads the current session from the db.
+
+Returns a promise, unless `callback` is passed. Note that
+`db.session()` does not return an error if the current
+user has no valid session, just like CouchDB returns a `200` status to a
+`GET /_session` request. To determine whether the current user has a valid
+session or not, check if `response.userCtx.name` is set.
+
+```js
+db.session()
+.then(function (response) {
+ // {
+ // "ok": true,
+ // "userCtx": {
+ // "name": null,
+ // "roles": [],
+ // },
+ // "info": {
+ // "authentication_handlers": ["api"]
+ // }
+ // }
+})
+```
+
+### db.multiUserLogIn(username, password[, callback])
+
+This works the same as ``db.logIn()``, but returns an extra property
+(``sessionID``), so multiple sessions can be managed at the same time. You pass
+in this property to the ``db.multiUserSession`` function as a reminder which
+session you are talking about.
+
+As a matter of fact, the normal functions are just a small wrapper over the
+``db.multiUser*`` functions. They just store and re-use the last sessionID
+internally.
+
+```js
+db.multiUserLogIn('john', 'secret')
+.then(response) {
+ // {
+ // ok: true,
+ // name: 'username',
+ // roles: ['roles', 'here'],
+ // sessionID: 'amFuOjU2Njg4MkI5OkEK3-1SRseo6yNRHfk-mmk6zOxm'
+ // }
+});
+```
+
+### db.multiUserSession(sessionID[, callback])
+
+The same as ``db.session()``, but supporting multiple sessions at the same time.
+Pass in a ``sessionID`` obtained from a ``db.multiUserLogIn()`` call. If
+``sessionID`` is not given, a normal non-logged in session will be returned.
+A new updated ``sessionID`` is generated and included to prevent the session
+from expiring.
+
+```js
+db.multiUserSession('amFuOjU2Njg4MkI5OkEK3-1SRseo6yNRHfk-mmk6zOxm')
+.then(response) {
+ // {
+ // "ok": true,
+ // "userCtx": {
+ // "name": 'john',
+ // "roles": [],
+ // },
+ // "info": {
+ // "authentication_handlers": ["api"]
+ // },
+ // sessionID: 'some-new-session-id'
+ // }
+}
+```
+
+### db.multiUserLogOut()
+
+Contrary to what you might expect, this method **does not exist**. Multi user
+logouts are as simple as just forgetting the ``sessionID``. That is the only
+thing the ``db.logOut()`` method does internally. No other state is kept.
+
+How it works
+------------
+
+First, make sure you understand how the `_users` database works in
+CouchDB. A good start is [the CouchDB documentation on the
+authentication database](http://docs.couchdb.org/en/latest/intro/security.html#authentication-database)
+
+Admin users are not stored in the `_users` database, but in the `[admins]` section
+of couch.ini, see http://docs.couchdb.org/en/latest/config/auth.html
+
+When setting passwords clear text, CouchDB will automatically overwrite
+them with hashed passwords on restart. the ``hashAdminPasswords`` function
+can be used to emulate that behaviour with PouchDB-Auth.
+
+The `roles` property of `_users` documents is used by CouchDB to determine access to databases,
+which can be set in the `_security` setting of each database. There are now default roles by CouchDB,
+so you are free to set your own (With the excepion of system roles starting with a `_`). The
+`roles` property can only be changed by CouchDB admin users. More on authorization in CouchDB:
+http://docs.couchdb.org/en/latest/intro/security.html#authorization
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-auth/package.json b/packages/pouchdb-server-packages/packages/pouchdb-auth/package.json
new file mode 100644
index 0000000000..3f8e4fdfe6
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-auth/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-auth",
+ "description": "A PouchDB plug-in that simulates CouchDB's authentication daemon. Includes a users db that functions like CouchDB's.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "users",
+ "authentication",
+ "auth"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/README.md b/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/README.md
new file mode 100644
index 0000000000..465a040477
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/README.md
@@ -0,0 +1,16 @@
+pouchdb-bulkdocs-wrapper
+========================
+
+Helper function that makes wrapping bulkDocs using pouchdb-wrappers easier.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/package.json b/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/package.json
new file mode 100644
index 0000000000..4e56ca8e0a
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-bulkdocs-wrapper/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "pouchdb-bulkdocs-wrapper",
+ "description": "Helper function that makes wrapping bulkDocs using pouchdb-wrappers easier.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "wrap",
+ "wrapper",
+ "wrappers",
+ "bulkDocs"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/README.md b/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/README.md
new file mode 100644
index 0000000000..039e42a3fb
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/README.md
@@ -0,0 +1,17 @@
+pouchdb-changeslike-wrapper
+===========================
+
+Helper function that makes wrapping changes(), sync(), replicate() etc.
+using pouchdb-wrappers easier.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/package.json b/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/package.json
new file mode 100644
index 0000000000..4eb002cbb3
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-changeslike-wrapper/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "pouchdb-changeslike-wrapper",
+ "description": "Helper function that makes wrapping changes(), sync(), replicate() etc. using pouchdb-wrappers easier.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "wrap",
+ "wrapper",
+ "wrappers",
+ "changes",
+ "replicate",
+ "sync"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-list/README.md b/packages/pouchdb-server-packages/packages/pouchdb-list/README.md
new file mode 100644
index 0000000000..762e0877c9
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-list/README.md
@@ -0,0 +1,42 @@
+pouchdb-list
+============
+
+A PouchDB plug-in that allows you to re-use your CouchDB list functions
+on the client side. A browser version is available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-list`
+
+**Browser object name:** `window.List`
+
+First, make sure you understand how list functions work in CouchDB. A
+good start is [the CouchDB guide entry on lists](http://guide.couchdb.org/draft/transforming.html).
+
+### List.list(listPath[, options[, callback]])
+
+Runs a list function on a view. Both are specified via the `listPath` parameter.
+
+`listPath`: a url of the form `"designDocName/listFuncName/viewName"`
+
+`options`: this object is supplemented with defaults until a complete
+[CouchDB request object](http://docs.couchdb.org/en/latest/json-structure.html#request-object)
+has been formed, which is then passed into the list function.
+
+**Returns**: When succesful, the list function's result in the form of a
+[CouchDB response object](http://docs.couchdb.org/en/latest/json-structure.html#response-object).
+Otherwise, an error object with one of the following statuses: 400, 404, 406
+or 500.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-list/package.json b/packages/pouchdb-server-packages/packages/pouchdb-list/package.json
new file mode 100644
index 0000000000..8f3fcf5ce3
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-list/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "pouchdb-list",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB list functions on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "list",
+ "design"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/README.md b/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/README.md
new file mode 100644
index 0000000000..17ab490520
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/README.md
@@ -0,0 +1,16 @@
+pouchdb-plugin-error
+====================
+
+A PouchDB-like error object, for use by plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/package.json b/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/package.json
new file mode 100644
index 0000000000..baa4562998
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-plugin-error/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "pouchdb-plugin-error",
+ "description": "A PouchDB-like error object, for use by plug-ins.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "error"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-replicator/README.md b/packages/pouchdb-server-packages/packages/pouchdb-replicator/README.md
new file mode 100644
index 0000000000..cd2963fc34
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-replicator/README.md
@@ -0,0 +1,45 @@
+pouchdb-replicator
+==================
+
+A PouchDB plug-in that simulates CouchDB's replicator database daemon. A
+browser version is available.
+
+Version 2.0.0 onward uses prefixed replication fields (_replication_state
+instead of replication_state). This requires a version of PouchDB in which
+[issue 2442](https://github.com/pouchdb/pouchdb/issues/2442) is solved.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-replicator`
+
+**Browser object name:** `window.Replicator`
+
+First, make sure you understand the CouchDB replicator database. A good
+starting point is [its documentation](http://docs.couchdb.org/en/latest/replication/replicator.html).
+
+### Replicator.startReplicator([callback])
+
+Starts a CouchDB-like replication 'daemon' which listens on the
+current database like CouchDB does on the ``_replicator`` database.
+
+This allows you to persist replications past a page refresh, and
+provides an alternative api for :js:func:`PouchDB.replicate` and
+friends.
+
+### Replicator.stopReplicator([callback])
+
+Stops the 'daemon' that :js:func:`Replicator.startReplicator`
+started.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-replicator/package.json b/packages/pouchdb-server-packages/packages/pouchdb-replicator/package.json
new file mode 100644
index 0000000000..055d74773b
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-replicator/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-replicator",
+ "description": "A PouchDB plug-in that simulates CouchDB's replicator database daemon.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "replication",
+ "replicator",
+ "replicate"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/README.md b/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/README.md
new file mode 100644
index 0000000000..18d28ba645
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/README.md
@@ -0,0 +1,18 @@
+pouchdb-req-http-query
+======================
+
+Given a CouchDB request object, make a similar http request on a given
+PouchDB database. Written to be used for (and developed alongside)
+PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/package.json b/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/package.json
new file mode 100644
index 0000000000..deebabc647
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-req-http-query/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "pouchdb-req-http-query",
+ "description": "Given a CouchDB request object, make a similar http request on a given PouchDB database.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "http",
+ "request"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js",
+ "browser": {
+ "xmlhttprequest-cookie": false
+ }
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-rewrite/README.md b/packages/pouchdb-server-packages/packages/pouchdb-rewrite/README.md
new file mode 100644
index 0000000000..7e2ed4f9f2
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-rewrite/README.md
@@ -0,0 +1,57 @@
+pouchdb-rewrite
+===============
+
+A PouchDB plug-in that allows you to re-use your CouchDB rewrites on the
+client side. A browser version is available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-rewrite`
+
+**Browser object name:** `window.Rewrite`
+
+First, make sure you understand CouchDB rewrites. A good starting point
+is [the rewrite documentation](http://docs.couchdb.org/en/latest/api/ddoc/rewrites.html).
+
+### Rewrite.rewrite(rewritePath[, options[, callback]])
+
+Figures out where to redirect to, and then executes the corresponding
+PouchDB function, with the appropriate arguments gotten from the
+request object that has been generated from the `options`
+parameter.
+
+`rewritePath`: a path of the form `"designDocName/rewrite/path"`. Specifies
+the design document to use the rewrites from, and the path you'd find in
+CouchDB after the `/_rewrite` part of the URL. Keep in mind that you can't
+specify a query parameter in the url form (i.e. no `?a=b`). Instead use the
+`options.query` parameter.
+
+`options`: A CouchDB request object stub. Important properties of those for
+rewrites are `options.query` and `options.method`. An additional boolean option
+is available: `options.withValidation`, if true, this function routes to
+`db.validating*` functions instead of `db.*` functions if relevant.
+
+**Returns**: whatever output the function that the rewrite routed to produced.
+Or, in the case of an 'http' database, a CouchDB response object.
+
+### Rewrite.rewriteResultRequestObject(rewritePath[, options[, callback]])
+
+See the `Rewrite.rewrite` function for information on the parameters.
+The difference with it is that this function doesn't try to route the rewrite
+to a function.
+
+**Returns**: A CouchDB request object that points to the resource obtained by
+following the redirect.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-rewrite/package.json b/packages/pouchdb-server-packages/packages/pouchdb-rewrite/package.json
new file mode 100644
index 0000000000..0e351bef0a
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-rewrite/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "pouchdb-rewrite",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB rewrites on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "rewrite",
+ "design"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-route/README.md b/packages/pouchdb-server-packages/packages/pouchdb-route/README.md
new file mode 100644
index 0000000000..9755d94a03
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-route/README.md
@@ -0,0 +1,18 @@
+pouchdb-route
+=============
+
+Given a CouchDB request object, return the response of PouchDB's
+equivalent function. Written to be used for (and developed alongside)
+PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-route/package.json b/packages/pouchdb-server-packages/packages/pouchdb-route/package.json
new file mode 100644
index 0000000000..7f69a8864d
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-route/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-route",
+ "description": "Given a CouchDB request object, return the response of PouchDB's equivalent function.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "request",
+ "route",
+ "routing"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/README.md b/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/README.md
new file mode 100644
index 0000000000..b216f79b3e
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/README.md
@@ -0,0 +1,104 @@
+pouchdb-seamless-auth
+=====================
+
+Seamless switching between online (CouchDB) and offline (PouchDB)
+authentication.
+
+**WARNING**: This plug-in stores password hashes in a local PouchDB. In
+for example internet cafes, this is not a smart thing to do. In your
+app, you should include a checkbox 'I trust this computer' and only use
+**pouchdb-seamless-auth** when it is checked. Otherwise, you can fall
+back to **pouchdb-auth**. This functionality might be implemented as
+part of the plug-in in the future.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-seamless-auth`
+
+**Browser object name:** `window.SeamlessAuth`
+
+This plug-in provides a convenience layer on top of the PouchDB Auth
+plug-in. By default, it users a local database named `_users` as
+backend for its log in, log out and get session actions. But, when you
+set a remote database, that local database is synced with the given
+database. In other words, it allows you to let your user log in one
+time using the remote database, and from that moment on you can also the
+session functions while offline! Very handy when using a per-user
+database set up that PouchDB syncs.
+
+Instead of passing this plug-in to the `PouchDB.plugin()` function, install
+it like this:
+
+``javascript
+//NodeJS
+require("pouchdb-seamless-auth")(PouchDB)
+
+//Browser
+SeamlessAuth(PouchDB)
+``
+
+After that is finished (a promise is returned to help determine when that is),
+all functions documented below are available on the `PouchDB` object.
+
+### PouchDB.setSeamlessAuthRemoteDB(remoteName[, remoteOptions[, callback]])
+
+Set a remote database to be seamlessly synced to.
+
+**Parameters**:
+
+- *string* remoteName: The url to the remote database. Passed to the
+ `PouchDB` constructor as the first argument.
+- *object* remoteOptions: Options to pass on to the `PouchDB` constructor
+ as its second argument.
+- *function* callback: An alternative for the returned promise.
+
+**Returns**: a promise, which resolves to nothing when the remote database is
+completely set up.
+
+### PouchDB.unsetSeamlessAuthRemoteDB()
+
+A synchronous function. Undos what `PouchDB.setSeamlessAuthRemoteDB()` did.
+
+**Returns**: nothing.
+
+### PouchDB.seamlessSession([opts[, callback]])
+
+See **pouchdb-auth**'s `db.session()`.
+
+### PouchDB.seamlessLogIn(username, password, [opts[, callback]])
+
+See **pouchdb-auth**'s `db.logIn()`.
+
+### PouchDB.seamlessLogOut([opts[, callback]])
+
+See **pouchdb-auth**'s `db.logOut()`.
+
+### PouchDB.seamlessSignUp(username, password, [opts[, callback]])
+
+See **pouchdb-auth**'s `db.signUp()`.
+
+### PouchDB.invalidateSeamlessAuthCache()
+
+Used to invalidate the cache manually.
+
+This is a synchronous function. Because an application might call
+`PouchDB.seamlessSession()` a lot of times, that method is cached. For most
+of the time, you don't have to worry about that, because log in, log out and
+sign up all invalidate that cache, making it pretty much unnoticable. There is
+one known exception: when changing the user document in `_users` manually.
+Call this to invalidate the cache when you do that.
+
+**Returns**: nothing.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/package.json b/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/package.json
new file mode 100644
index 0000000000..bcf6ef593e
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-seamless-auth/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "pouchdb-seamless-auth",
+ "description": "Seamless switching between online (CouchDB) and offline (PouchDB) authentication.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "users",
+ "authentication",
+ "auth",
+ "seamless",
+ "online",
+ "offline"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-security/README.md b/packages/pouchdb-server-packages/packages/pouchdb-security/README.md
new file mode 100644
index 0000000000..dff350545e
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-security/README.md
@@ -0,0 +1,62 @@
+pouchdb-security
+================
+
+PouchDB database access restrictions using a security document. Like
+_security in CouchDB (and when used on an http database, that url is
+checked.)
+
+API
+---
+
+**NodeJS package name:** `pouchdb-security`
+
+**Browser object name:** `window.Security`
+
+First, make sure you understand how security objects work in CouchDB.
+A good start is [their HTTP documentation](http://docs.couchdb.org/en/latest/api/database/security.html).
+
+### Security.putSecurity(secObj[, callback])
+
+Equivalent to PUTting a document to /db/_security in CouchDB.
+Replaces the current security object for the database with the given
+one.
+
+For example:
+
+```javascript
+{
+ "admins": {
+ "names": [
+ "your_name"
+ ],
+ "roles": []
+ },
+ "members": {
+ "names": [],
+ "roles": [
+ "app_users"
+ ]
+ }
+}
+```
+
+**Returns**: `{ok: true}`.
+
+### Security.getSecurity([callback])
+
+Equivalent to going to /db/_security in CouchDB.
+
+**Returns**: the security object for the current database.
+(`{}` when none has been set, like in CouchDB.)
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-security/package.json b/packages/pouchdb-server-packages/packages/pouchdb-security/package.json
new file mode 100644
index 0000000000..3cdbda1fb9
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-security/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "pouchdb-security",
+ "description": "PouchDB database access restrictions using a security document.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "security",
+ "access",
+ "online",
+ "offline"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-server/README.md b/packages/pouchdb-server-packages/packages/pouchdb-server/README.md
new file mode 100644
index 0000000000..a82fbcce0b
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-server/README.md
@@ -0,0 +1,18 @@
+pouchdb-server
+==============
+
+A drop-in replacement for CouchDB, built on Node.js and PouchDB.
+
+For full documentation, see [the PouchDB Server readme](https://github.com/pouchdb/pouchdb-server#readme).
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-server/bin/pouchdb-server b/packages/pouchdb-server-packages/packages/pouchdb-server/bin/pouchdb-server
new file mode 100755
index 0000000000..cec1dd2894
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-server/bin/pouchdb-server
@@ -0,0 +1,7 @@
+#!/usr/bin/env node
+
+// The only reason this file exists is for backwards compatibility, because
+// otherwise we break folks doing:
+// `./node_modules/pouchdb-server/bin/pouchdb-server`.
+
+require('../lib/index.js');
\ No newline at end of file
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-server/favicon.ico b/packages/pouchdb-server-packages/packages/pouchdb-server/favicon.ico
new file mode 100644
index 0000000000..99c00b837e
Binary files /dev/null and b/packages/pouchdb-server-packages/packages/pouchdb-server/favicon.ico differ
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-server/package.json b/packages/pouchdb-server-packages/packages/pouchdb-server/package.json
new file mode 100644
index 0000000000..f172702b3f
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-server/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "pouchdb-server",
+ "description": "A drop-in replacement for CouchDB, built on Node.js and PouchDB",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb"
+ ],
+ "license": "Apache-2.0",
+ "main": "lib/index.js",
+ "files": [
+ "lib",
+ "bin/pouchdb-server",
+ "favicon.ico"
+ ],
+ "bin": {
+ "pouchdb-server": "./bin/pouchdb-server"
+ }
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-show/README.md b/packages/pouchdb-server-packages/packages/pouchdb-show/README.md
new file mode 100644
index 0000000000..0fa1262c72
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-show/README.md
@@ -0,0 +1,35 @@
+pouchdb-show
+============
+
+A PouchDB plug-in that allows you to re-use your CouchDB show functions
+on the client side. A browser version is available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-show`
+
+**Browser object name:** `window.Show`
+
+First, make sure you understand how show functions work in CouchDB. A
+good start is [the CouchDB guide entry on shows](http://guide.couchdb.org/draft/formats.html)
+
+### Show.show(showPath[, options[, callback]])
+
+Similar to the `List.list` function, but then for show
+functions. Only differences are documented.
+
+`showPath`: specifies the show (and optionally the document) to use.
+Has the following form: `designDocName/showName[/docId]`
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-show/package.json b/packages/pouchdb-server-packages/packages/pouchdb-show/package.json
new file mode 100644
index 0000000000..fba3f19a50
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-show/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "pouchdb-show",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB show functions on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "show",
+ "design"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-size/README.md b/packages/pouchdb-server-packages/packages/pouchdb-size/README.md
new file mode 100644
index 0000000000..1c345e48b2
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-size/README.md
@@ -0,0 +1,48 @@
+pouchdb-size
+============
+
+Adds disk_size to info()'s output for your *down backed PouchDB's.
+
+Tested with leveldown, sqldown, jsondown, locket and medeadown. When it
+can't determine the database size, it falls back to the default
+``info()`` output.
+
+Example
+-------
+
+```javascript
+//index.js
+var PouchDB = require('pouchdb');
+PouchDB.plugin(require('pouchdb-size'));
+
+var db = new PouchDB('test');
+db.installSizeWrapper();
+db.info().then(function (resp) {
+ //resp will contain disk_size
+})
+```
+
+API
+---
+
+### db.installSizeWrapper()
+
+wraps ``db.info()`` in such a way that it will include a ``disk_size``
+property in its output for supported database backends.
+
+### `db.getDiskSize([callback])
+
+like PouchDB, this method both returns a Promise and accepts a
+callback. Either returns an error or the disk size of the current db.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-size/package.json b/packages/pouchdb-server-packages/packages/pouchdb-size/package.json
new file mode 100644
index 0000000000..0653295dc7
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-size/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "pouchdb-size",
+ "description": "Adds disk_size to info()'s output for your leveldown backed PouchDB's.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "size",
+ "disk_size",
+ "info",
+ "filesize"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-system-db/README.md b/packages/pouchdb-server-packages/packages/pouchdb-system-db/README.md
new file mode 100644
index 0000000000..4be2a1863c
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-system-db/README.md
@@ -0,0 +1,17 @@
+pouchdb-system-db
+=================
+
+Protects PouchDB system databases by wrapping their methods. Written to
+be used for (and developed alongside) PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-system-db/package.json b/packages/pouchdb-server-packages/packages/pouchdb-system-db/package.json
new file mode 100644
index 0000000000..a38c6be1f7
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-system-db/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "pouchdb-system-db",
+ "description": "Protects PouchDB system databases by wrapping their methods.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "system",
+ "database",
+ "protect",
+ "protection"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-update/README.md b/packages/pouchdb-server-packages/packages/pouchdb-update/README.md
new file mode 100644
index 0000000000..a5285dea22
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-update/README.md
@@ -0,0 +1,26 @@
+pouchdb-update
+==============
+
+A PouchDB plug-in that allows you to re-use your CouchDB update
+functions on the client side. A browser version is available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-update`
+
+**Browser object name:** `window.Update`
+
+See also [pouchdb-update's documentation](http://pythonhosted.org/Python-PouchDB/js-plugins.html#pouchdb-update-plug-in)
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-update/package.json b/packages/pouchdb-server-packages/packages/pouchdb-update/package.json
new file mode 100644
index 0000000000..9ecf260d85
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-update/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-update",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB update functions on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "update",
+ "design",
+ "handler"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-validation/README.md b/packages/pouchdb-server-packages/packages/pouchdb-validation/README.md
new file mode 100644
index 0000000000..77b794ba8d
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-validation/README.md
@@ -0,0 +1,27 @@
+pouchdb-validation
+==================
+
+A PouchDB plug-in that allows you to re-use your CouchDB
+validate_doc_update functions on the client side. A browser version is
+available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-validation`
+
+**Browser object name:** `window.Validation`
+
+See [pouchdb-validation's documentation](http://pythonhosted.org/Python-PouchDB/js-plugins.html#pouchdb-validation-plug-in)
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-validation/package.json b/packages/pouchdb-server-packages/packages/pouchdb-validation/package.json
new file mode 100644
index 0000000000..87197b91c7
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-validation/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-validation",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB validate_doc_update functions on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "validation",
+ "validate",
+ "validate_doc_update"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-vhost/README.md b/packages/pouchdb-server-packages/packages/pouchdb-vhost/README.md
new file mode 100644
index 0000000000..b3bbbb23ae
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-vhost/README.md
@@ -0,0 +1,32 @@
+pouchdb-vhost
+=============
+
+A PouchDB plug-in that allows you to re-use your CouchDB vhost config on
+the client side. A browser version is available.
+
+API
+---
+
+**NodeJS package name:** `pouchdb-vhost`
+
+**Browser object name:** `window.VirtualeHost`
+
+This plug-in is a single function which requires a ``PouchDB`` object as
+its first argument. Following that, these extra methods become
+available.
+
+### PouchDB.virtualHost(req, vhosts[, options[, callback]])
+
+### PouchDB.resolveVirtualHost(req, vhosts)
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-vhost/package.json b/packages/pouchdb-server-packages/packages/pouchdb-vhost/package.json
new file mode 100644
index 0000000000..5f74724ad5
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-vhost/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "pouchdb-vhost",
+ "description": "A PouchDB plug-in that allows you to re-use your CouchDB vhost config on the client side.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "vhost",
+ "design"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-wrappers/README.md b/packages/pouchdb-server-packages/packages/pouchdb-wrappers/README.md
new file mode 100644
index 0000000000..04b361416f
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-wrappers/README.md
@@ -0,0 +1,19 @@
+pouchdb-wrappers
+================
+
+Makes wrapping PouchDB functions a lot easier. Handy for writing
+plug-ins.
+
+Written to be used for (and developed alongside) PouchDB plug-ins.
+
+Source
+------
+
+PouchDB Server and its sub-packages are distributed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md).
+
+For a full list of packages, see [the GitHub source](https://github.com/pouchdb/pouchdb-server/tree/master/packages/node_modules).
+
+License
+-------
+
+The Apache 2 License. See [the LICENSE file](https://github.com/pouchdb/pouchdb-server/blob/master/LICENSE) for more information.
diff --git a/packages/pouchdb-server-packages/packages/pouchdb-wrappers/package.json b/packages/pouchdb-server-packages/packages/pouchdb-wrappers/package.json
new file mode 100644
index 0000000000..60a26812ee
--- /dev/null
+++ b/packages/pouchdb-server-packages/packages/pouchdb-wrappers/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "pouchdb-wrappers",
+ "description": "Makes wrapping PouchDB functions a lot easier.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/pouchdb/pouchdb-server.git"
+ },
+ "keywords": [
+ "pouch",
+ "pouchdb",
+ "couch",
+ "couchdb",
+ "wrap",
+ "wrapper",
+ "wrappers"
+ ],
+ "license": "Apache-2.0",
+ "author": "Marten de Vries",
+ "main": "lib/index.js"
+}
diff --git a/packages/pouchdb-server-packages/src/index.js b/packages/pouchdb-server-packages/src/index.js
new file mode 100644
index 0000000000..55d9fc6ae9
--- /dev/null
+++ b/packages/pouchdb-server-packages/src/index.js
@@ -0,0 +1 @@
+export const server = {};
\ No newline at end of file
diff --git a/packages/pouchdb-server-packages/tests/express-pouchdb/test.js b/packages/pouchdb-server-packages/tests/express-pouchdb/test.js
new file mode 100644
index 0000000000..7d3438fd80
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/express-pouchdb/test.js
@@ -0,0 +1,383 @@
+"use strict";
+
+/*globals before */
+
+var buildApp = require('../../packages/node_modules/express-pouchdb'),
+ PouchDB = require('pouchdb'),
+ express = require('express'),
+ request = require('supertest'),
+ Promise = require('bluebird'),
+ fse = Promise.promisifyAll(require('fs-extra')),
+ memdown = require('memdown'),
+ assert = require('assert');
+
+var TEST_DATA = __dirname + '/testdata/';
+var LARGE_TIMEOUT = 5000;
+
+var expressApp, expressApp2;
+
+var customApp = buildApp(PouchDB.defaults({
+ db: memdown,
+ prefix: 'c'
+}), {
+ mode: 'custom',
+ overrideMode: {
+ include: ['routes/404']
+ }
+});
+
+var coreApp = buildApp(PouchDB.defaults({
+ db: memdown,
+ prefix: 'd'
+}), {
+ mode: 'minimumForPouchDB',
+ overrideMode: {
+ include: ['routes/fauxton']
+ }
+});
+
+var inMemoryConfigApp = buildApp(PouchDB.defaults({
+ db: memdown,
+ prefix: 'e'
+}), {
+ inMemoryConfig: true
+});
+
+before(function (done) {
+ this.timeout(LARGE_TIMEOUT);
+ cleanUp().then(function () {
+ return fse.mkdirsAsync(TEST_DATA + 'a');
+ }).then(function () {
+ return fse.mkdirsAsync(TEST_DATA + 'b');
+ }).then(function () {
+ expressApp = buildApp(PouchDB.defaults({
+ prefix: TEST_DATA + 'a/'
+ }));
+ expressApp2 = buildApp(PouchDB.defaults({
+ prefix: TEST_DATA + 'b/',
+ }), {
+ configPath: TEST_DATA + 'b-config.json',
+ logPath: TEST_DATA + 'b-log.txt'
+ });
+ done();
+ }).catch(done);
+});
+
+after(function (done) {
+ cleanUp().then(function () {
+ done();
+ }).catch(done);
+});
+
+function cleanUp() {
+ return Promise.all([
+ fse.removeAsync(TEST_DATA),
+ fse.removeAsync('./config.json'),
+ fse.removeAsync('./log.txt')
+ ]);
+}
+
+describe('config', function () {
+ it('should not create empty config file', function (done) {
+ fse.exists('./config.json', function (exists) {
+ if (exists) {
+ return done(new Error("config.json should not have been created!"));
+ }
+ done();
+ });
+ });
+ it('should support in memory config', function (done) {
+ // make sure the file is written to disk.
+ inMemoryConfigApp.couchConfig.set('demo', 'demo', true, function () {
+ fse.exists('./config.json', function (exists) {
+ if (exists) {
+ return done(new Error("config.json exists!"));
+ }
+ done();
+ });
+ });
+ });
+ it('should have ./config.json as default config path', function (done) {
+ expressApp.couchConfig.set('demo', 'demo', true, function () {
+ fse.exists('./config.json', function (exists) {
+ if (!exists) {
+ return done(new Error("config.json doesn't exist!"));
+ }
+ done();
+ });
+ });
+ });
+ it('should support setting admins', function (done) {
+ var cleanUpTest = function () {
+ return fse.removeAsync(TEST_DATA + 'one-shot');
+ };
+ fse.mkdirsAsync(TEST_DATA + 'one-shot').then(function () {
+ // Creates a single usage app.
+ var oneShotExpressApp = buildApp(PouchDB.defaults({
+ prefix: TEST_DATA + 'one-shot/',
+ }), {
+ configPath: TEST_DATA + 'one-shot/config.json',
+ logPath: TEST_DATA + 'one-shot/log.txt'
+ });
+ // Set up an admin.
+ return new Promise(function (resolve, reject) {
+ oneShotExpressApp.couchConfig.set('admins', 'admin', 'pass', function (err) {
+ if (err) { reject(err); }
+ resolve();
+ });
+ });
+ }).then(function () {
+ // Read the config file.
+ return fse.readFile(TEST_DATA + 'one-shot/config.json');
+ }).then(function (data) {
+ var config = JSON.parse(data.toString());
+ if (!config.admins['admin']) {
+ // Make sure the admin has been created.
+ throw new Error("Admin does not exist");
+ } else if (config.admins['admin'] === 'pass') {
+ // Also make sure the password has been hashed.
+ throw new Error("Admin's password is not hashed");
+ }
+ }).then(
+ // Whatever happened, clean up.
+ function () {
+ return cleanUpTest().then(done);
+ },
+ function (err) {
+ return cleanUpTest().then(function () {
+ throw err;
+ });
+ }
+ );
+ });
+ it('should support setting a different config path', function (done) {
+ // make sure the file is written to disk.
+ expressApp2.couchConfig.set('demo', 'demo', true, function () {
+ fse.exists(TEST_DATA + 'b-config.json', function (exists) {
+ if (!exists) {
+ return done(new Error("b-config.json doesn't exist!"));
+ }
+ done();
+ });
+ });
+ });
+ it('should support setting a different log path', function (done) {
+ // make sure the file is written to disk.
+ expressApp2.couchConfig.set('demo', 'demo', true, function () {
+ fse.exists(TEST_DATA + 'b-log.txt', function (exists) {
+ if (!exists) {
+ return done(new Error("b-log.txt doesn't exist!"));
+ }
+ done();
+ });
+ });
+ });
+ it('should support externally adding a default', function () {
+ expressApp.couchConfig.registerDefault('a', 'b', 'c');
+ return request(expressApp)
+ .get('/_config')
+ .expect(200)
+ .then(function (res) {
+ var a = JSON.parse(res.text).a;
+ if (!(typeof a === "object" && a.b === "c")) {
+ throw new Error("Default not shown");
+ }
+ });
+ });
+ it('should support externally getting a config value', function (done) {
+ request(expressApp)
+ .put('/_config/test/a')
+ .send('"b"')
+ .expect(200)
+ .end(function () {
+ if (expressApp.couchConfig.get('test', 'a') !== 'b') {
+ return done(new Error("Can't read setting that's just been set"));
+ }
+ done();
+ });
+ });
+ it('should support external listeners to a config change', function () {
+ var changed = false;
+ expressApp.couchConfig.on('test2.a', function () {
+ changed = true;
+ });
+ return request(expressApp)
+ .put('/_config/test2/a')
+ .send('"b"')
+ .expect(200)
+ .then(function () {
+ if (!changed) {
+ throw new Error("Didn't get notice of the setting change");
+ }
+ });
+ });
+});
+
+var prefixes = ['/', '/db/'];
+
+prefixes.forEach(function (prefix) {
+ describe('basics for ' + prefix, function () {
+ it('GET / should respond with a welcome page', function (done) {
+ var app = express();
+ app.use(prefix, expressApp);
+
+ testWelcome(app, done, prefix);
+ });
+ it('GET / should respond with adapters', function () {
+ var app = express();
+ app.use(prefix, expressApp);
+ return request(app)
+ .get(prefix)
+ .expect(200)
+ .then(function (res) {
+ var json = JSON.parse(res.text);
+ assert.deepEqual(json['pouchdb-adapters'], ['leveldb']);
+ });
+ });
+ });
+});
+
+function testWelcome(app, done, path) {
+ request(app)
+ .get(path)
+ .expect(200)
+ .then((res) => {
+ if (!/Welcome!/.test(res.text)) {
+ throw new Error("No 'Welcome!' in response");
+ }
+ })
+ .then(done, done);
+}
+
+describe('modes', function () {
+ it('should always return a 404 in our custom configuration', function () {
+ return request(customApp)
+ .get('/')
+ .expect(404)
+ .then(function (res) {
+ if (JSON.parse(res.text).error !== 'not_found') {
+ throw new Error("Wrong response body");
+ }
+ });
+ });
+ it('should generate a functioning core app', function (done) {
+ testWelcome(coreApp, done, '/');
+ });
+ it('should throw an error when given an invalid mode', function () {
+ assertException(function () {
+ buildApp(PouchDB, {mode: 'unexisting-mode'});
+ }, /Unknown mode: unexisting-mode/);
+ });
+ it('should throw an error when a not included part is excluded', function () {
+ assertException(function () {
+ buildApp(PouchDB, {overrideMode: {exclude: ['abc']}});
+ }, /exclude contains the not included part 'abc'/);
+ });
+ it('should throw an error when an unknown part is included', function () {
+ assertException(function () {
+ buildApp(PouchDB, {overrideMode: {include: ['abc']}});
+ }, /include contains the unknown part 'abc'/);
+ });
+});
+
+describe('redirects', function () {
+ it('GET /_utils should redirect to /_utils/', function (done) {
+ request(coreApp)
+ .get('/_utils')
+ .expect(301)
+ .end(done);
+ });
+ it('GET /_utils/ should return fauxton', function () {
+ return request(coreApp)
+ .get('/_utils/')
+ .expect(200)
+ .then(function (res) {
+ if (!/Fauxton requires<\/strong> JavaScript to be enabled.<\/p>/.test(res.text)) {
+ throw new Error('No "Fauxton requires JavaScript to be enabled.
" in response');
+ }
+ });
+ });
+});
+
+describe('endpoints', function () {
+ it("should be on the 'secured' whitelist (pouchdb/pouchdb-server#290)", function () {
+ // https://stackoverflow.com/a/14934933
+ var unguardedRoutes = inMemoryConfigApp._router.stack.filter(function (layer) {
+ if (layer.route) {
+ return typeof {
+ // A lookup that maps [a route we know is never exposed to a user
+ // without proper authorization] to [the file, module or other reason
+ // that the route is secured (the value of which is given here only
+ // for human convenience)].
+ //
+ // Before adding to this list, make sure of the following:
+ // - the security document is respected
+ // - validation documents are respected
+ // - extra system database restrictions (_users & _replicator) are
+ // handled correctly
+ //
+ '/_config': 'routes/authorization.js',
+ '/_config/:section': 'routes/authorization.js',
+ '/_config/:section/:key': 'routes/authorization.js',
+ '/_log': 'routes/authorization.js',
+ '/_active_tasks': 'routes/authorization.js',
+ '/_db_updates': 'routes/authorization.js',
+ '/_restart': 'routes/authorization.js',
+ '/': 'publicly accessible API',
+ '/_session': 'publicly accessable API',
+ '/_utils': 'publicly accessable API',
+ '/_membership': 'publicly accessable API',
+ '/_cluster_setup': 'publically accessable API',
+ '/_uuids': 'publically accessable API',
+ '/_all_dbs': 'publically accessable API',
+ '/_replicate': 'publically accessable API',
+ '/_stats': 'publically accessable API',
+ '/:db': 'pouchdb-security',
+ '/:db/*': 'pouchdb-security + pouchdb-system-db + pouchdb-validation',
+ '/:db/_ensure_full_commit': 'db.js: for now at least',
+ '/:db/_bulk_docs': 'pouchdb-security + pouchdb-validation',
+ '/:db/_all_docs': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_bulk_get': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_changes': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_compact': 'pouchdb-security',
+ '/:db/_revs_diff': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_security': 'pouchdb-security',
+ '/:db/_query': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_view_cleanup': 'pouhdb-security',
+ '/:db/_temp_view': 'pouchdb-security + pouchdb-system-db',
+ '/:db/:id(*)': 'pouchdb-security + pouchdb-validation',
+ '/:db/:id': 'pouchdb-security + pouchdb-validation + pouchdb-system-db',
+ '/:db/_index': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_index/:ddoc/:type/:name': 'pouchdb-security',
+ '/:db/_find': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_explain': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_design/:id/_view/:view': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_design/:id/_info': 'ddoc-info.js itself (at least for now)',
+ '/:db/_design/:id/_show/:func*': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_design/:id/_list/:func/:view': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_design/:id/_list/:func/:id2/:view': 'pouchdb-security + pouchdb-system-db',
+ '/:db/_design/:id/_update/:func*': 'pouchdb-security + pouchdb-validation',
+ '/:db/_design/:id/:attachment(*)': 'pouchdb-security + pouchdb-validation + pouchdb-system-db',
+ '/:db/:id/:attachment(*)': 'pouchdb-security + pouchdb-validation + pouchdb-system-db',
+ }[layer.route.path] === 'undefined';
+ }
+ }).map(function (layer) {
+ return layer.route.path;
+ });
+ var msg = "Not on the whitelist:\n\n" + unguardedRoutes.join('\n');
+ assert.equal(unguardedRoutes.length, 0, msg);
+ });
+});
+
+function assertException(func, re) {
+ var e;
+ try {
+ func();
+ } catch (err) {
+ if (re.test(err.toString())) {
+ return;
+ }
+ e = err;
+ }
+ throw (e || new Error('no error was thrown'));
+}
diff --git a/packages/pouchdb-server-packages/tests/http-pouchdb/test.js b/packages/pouchdb-server-packages/tests/http-pouchdb/test.js
new file mode 100644
index 0000000000..9e946514ed
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/http-pouchdb/test.js
@@ -0,0 +1,94 @@
+const {PouchDB} = require('../testutils');
+const buildHTTPPouchDB = require('../../packages/node_modules/http-pouchdb');
+const should = require('chai').should();
+
+var HTTPPouchDB = buildHTTPPouchDB(PouchDB, 'http://localhost:5984/');
+var HTTPPouchDBWithAuth = buildHTTPPouchDB(PouchDB, 'http://localhost:5984/', {
+ auth: {
+ username: 'john',
+ password: 'smith'
+ }
+});
+var XMLHttpRequest = require('xhr2');
+var Promise = require('bluebird');
+
+describe('isHTTPPouchDB', function () {
+ it('should be set on the HTTPPouchDB object', function () {
+ HTTPPouchDB.isHTTPPouchDB.should.be.ok;
+ });
+ it('should not be set on the PouchDB object', function () {
+ should.not.exist(PouchDB.isHTTPPouchDB);
+ });
+});
+
+describe('constructor', function () {
+ it('should create remote databases for normal db names', function () {
+ var users = new HTTPPouchDB('_users');
+
+ return users.info().then(function (info) {
+ info.should.have.property('db_name');
+ });
+ });
+});
+
+describe('destroy', function () {
+ it("should be possible using the 'class method'", function (done) {
+ new HTTPPouchDB('test');
+ HTTPPouchDB.destroy('test', done);
+ });
+ it('should be possible using the method', function (done) {
+ var db = new HTTPPouchDB('test');
+ db.destroy(done);
+ });
+});
+
+describe('replicate', function () {
+ it('should work', function () {
+ HTTPPouchDB.replicate('test-a', 'test-b').on('complete', function (resp) {
+ resp.status.should.equal('complete');
+
+ return dbShouldExist('test-a').then(function () {
+ return dbShouldExist('test-b');
+ }).then(function () {
+ return new PouchDB('http://localhost:5984/test-a').destroy();
+ }).then(function () {
+ return new PouchDB('test-b').destroy();
+ });
+ });
+ });
+});
+
+function dbShouldExist(name) {
+ return new Promise(function (resolve) {
+ var xhr = new XMLHttpRequest();
+ xhr.onload = function () {
+ xhr.status.should.equal(200);
+ resolve();
+ };
+ xhr.open('HEAD', 'http://localhost:5984/' + name);
+ xhr.send();
+ });
+}
+
+describe('allDbs', function () {
+ it('should return the remote db list', function (done) {
+ HTTPPouchDB.allDbs(function (err, dbs) {
+ should.not.exist(err);
+ dbs.should.contain('_users');
+ dbs.should.contain('_replicator');
+
+ done();
+ });
+ });
+
+ it('should make use of opts.auth', function (done) {
+ HTTPPouchDBWithAuth.allDbs(function (err, dbs) {
+ should.not.exist(err);
+ should.exist(dbs);
+ dbs.error.should.equal('unauthorized');
+ dbs.reason.should.equal('Name or password is incorrect.');
+
+ done();
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/mocha.opts b/packages/pouchdb-server-packages/tests/mocha.opts
new file mode 100644
index 0000000000..d52764dd91
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/mocha.opts
@@ -0,0 +1,2 @@
+--colors
+-R spec
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-auth/functionality.js b/packages/pouchdb-server-packages/tests/pouchdb-auth/functionality.js
new file mode 100644
index 0000000000..20577e872e
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-auth/functionality.js
@@ -0,0 +1,441 @@
+const {setup, teardown, should, shouldThrowError} = require('./utils');
+const extend = require('extend');
+
+let db;
+
+function shouldBeAdminParty(session) {
+ session.info.should.eql({
+ "authentication_handlers": ["api"],
+ "authentication_db": "test"
+ });
+ session.userCtx.should.eql({
+ "name": null,
+ "roles": ["_admin"]
+ });
+ session.ok.should.be.ok;
+}
+
+function shouldNotBeLoggedIn(session) {
+ session.info.should.eql({
+ authentication_handlers: ["api"],
+ authentication_db: "test"
+ });
+ session.userCtx.should.eql({
+ name: null,
+ roles: []
+ });
+ session.ok.should.be.ok;
+}
+
+function shouldBeSuccesfulLogIn(data, roles) {
+ var copy = extend({}, data);
+ // irrelevant
+ delete copy.sessionID;
+ copy.should.eql({
+ "ok": true,
+ "name": "username",
+ "roles": roles
+ });
+}
+
+function shouldBeLoggedIn(session, roles) {
+ session.userCtx.should.eql({
+ "name": "username",
+ "roles": roles
+ });
+ session.info.authenticated.should.equal("api");
+}
+
+describe('SyncAuthTests', () => {
+ beforeEach((done) => {
+ db = setup();
+ db.useAsAuthenticationDB({isOnlineAuthDB: false})
+
+ .then(done);
+ });
+ afterEach(teardown);
+
+ it('should test the daemon', () => {
+ // handled by beforeEach and afterEach
+ });
+
+ it('should not allow stopping usage as an auth db twice', () => {
+ let error;
+ db.stopUsingAsAuthenticationDB();
+
+ try {
+ db.stopUsingAsAuthenticationDB();
+ } catch (error_) {
+ error = error_;
+ }
+
+ should.exist(error);
+ error.message.should.match(/Not an authentication database/i);
+ });
+
+ it('should not allow using a db as an auth db twice', () => {
+ let error;
+
+ try {
+ db.useAsAuthenticationDB();
+ } catch (error_) {
+ error = error_;
+ }
+
+ should.exist(error);
+ error.message.should.match(/Already in use as an authentication database/i);
+ });
+
+ it('should have working db methods', () => {
+ return db.signUp("username", "password", {roles: ["test"]})
+
+ .then((signUpData) => {
+ signUpData.rev.indexOf("1-").should.equal(0);
+ signUpData.ok.should.be.ok;
+ signUpData.id.should.equal("org.couchdb.user:username");
+
+ return db.get("org.couchdb.user:username");
+ })
+
+ .then((doc) => {
+ doc._rev.indexOf("1-").should.equal(0);
+ doc.should.have.property("derived_key");
+ doc.iterations.should.equal(10);
+ doc.name.should.equal("username");
+ doc.password_scheme.should.equal("pbkdf2");
+ doc.roles.should.eql(["test"]);
+ doc.should.have.property("salt");
+ doc.type.should.equal("user");
+
+ doc.should.not.have.property("password");
+
+ return db.session();
+ })
+
+ .then((session) => {
+ shouldBeAdminParty(session);
+
+ return db.logIn("username", "password");
+ })
+
+ .then((logInData) => {
+ shouldBeSuccesfulLogIn(logInData, ["test"]);
+
+ return db.session();
+ })
+
+ .then((session2) => {
+ shouldBeLoggedIn(session2, ["test"]);
+
+ return db.multiUserSession();
+ })
+
+ .then((session3) => {
+ shouldBeAdminParty(session3);
+
+ return db.logOut();
+ })
+
+ .then((logOutData) => {
+ logOutData.ok.should.be.ok;
+
+ return db.session();
+ })
+
+ .then((session4) => {
+ shouldBeAdminParty(session4);
+
+ return db.logOut();
+ })
+
+ .then((logOutData2) => {
+ logOutData2.ok.should.be.ok;
+
+ return shouldThrowError(() => db.logIn("username", "wrongPassword"));
+ })
+
+ .then((error) => {
+ error.status.should.equal(401);
+ error.name.should.equal("unauthorized");
+ error.message.should.equal("Name or password is incorrect.");
+ });
+ });
+
+ it('should support sign up without roles', () => {
+ return db.signUp("username", "password")
+
+ .then((result) => {
+ result.ok.should.be.ok;
+
+ return db.get("org.couchdb.user:username");
+ })
+
+ .then((resp2) => {
+ resp2.roles.should.eql([]);
+ });
+ });
+
+ it('should validate docs', () => {
+ return shouldThrowError(() => db.post({}))
+
+ .then((error) => {
+ error.status.should.equal(403);
+
+ return db.bulkDocs([{}]);
+ })
+
+ .then((resp) => {
+ resp[0].status.should.equal(403);
+ });
+ });
+
+ it('should handle conflicting logins', () => {
+ const doc1 = {
+ _id: "org.couchdb.user:test",
+ _rev: "1-blabla",
+ type: "user",
+ name: "test",
+ roles: []
+ };
+ const doc2 = extend({}, doc1);
+ doc2._rev = "2-something";
+
+ //generate conflict
+ return db.bulkDocs([doc1, doc2], {new_edits: false})
+
+ .then(() => {
+ return shouldThrowError(() => db.logIn("test", "unimportant"));
+ })
+
+ .then((error) => {
+ error.status.should.equal(401);
+ error.name.should.equal("unauthorized");
+ error.message.should.contain("conflict");
+ });
+ });
+
+ it('should not accept invalid session ids', () => {
+ shouldThrowError(() => db.multiUserSession('invalid-session-id'))
+
+ .then((error) => {
+ error.status.should.equal(400);
+ error.name.should.equal('bad_request');
+ error.message.should.contain('Malformed');
+ });
+ });
+
+ it('should hash plain-text passwords in bulkDocs', () => {
+ // https://github.com/pouchdb/express-pouchdb/issues/297
+ db.bulkDocs({docs: [{
+ _id: "org.couchdb.user:testuser",
+ name:"testuser",
+ password:"test",
+ type:"user",
+ roles:[]
+ }]})
+
+ .then((response) => {
+ return db.get(response[0].id);
+ })
+
+ .then((doc) => {
+ should.not.exist(doc.password);
+ });
+ });
+});
+
+describe('AsyncAuthTests', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+ it('should suport the basics', (done) => {
+ function cb(error) {
+ db.stopUsingAsAuthenticationDB();
+ done(error);
+ }
+ db.useAsAuthenticationDB(cb);
+ });
+});
+
+describe('AsyncAuthTestsWithoutDaemon', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('should be impossible to use the various exposed methods', () => {
+ should.not.exist(db.signUp);
+ should.not.exist(db.session);
+ should.not.exist(db.logIn);
+ should.not.exist(db.logOut);
+ });
+
+ it('should hash admin passwords', () => {
+ const admins = {
+ test: "-pbkdf2-0abe2dcd23e0b6efc39004749e8d242ddefe46d1,16a1031881b31991f21a619112b1191fb1c41401be1f31d5,10",
+ test2: "test"
+ };
+
+ return db.hashAdminPasswords(admins)
+
+ .then((response) => {
+ response.test.should.equal(admins.test);
+ //10 is the default amount of iterations
+ response.test2.indexOf("-pbkdf2-").should.equal(0);
+ response.test2.lastIndexOf(",10").should.equal(response.test2.length - 3);
+ });
+ });
+
+ it('should support changing admin passwords hash iterations', () => {
+ return db.hashAdminPasswords({
+ abc: "test"
+ }, {iterations: 11})
+
+ .then((response) => {
+ response.abc.indexOf("-pbkdf2-").should.equal(0);
+ response.abc.lastIndexOf(",11").should.equal(response.abc.length - 3);
+ });
+ });
+});
+
+describe('No automated test setup', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('should support admin logins', () => {
+ const opts = {
+ admins: {
+ username: '-pbkdf2-37508a1f1c5c19f38779fbe029ae99ee32988293,885e6e9e9031e391d5ef12abbb6c6aef,10'
+ },
+ secret: db.generateSecret()
+ };
+
+ return db.useAsAuthenticationDB(opts)
+
+ .then(() => {
+ return db.multiUserSession();
+ })
+
+ .then((sessionData) => {
+ shouldNotBeLoggedIn(sessionData);
+
+ return db.multiUserLogIn('username', 'test');
+ })
+
+ .then((logInData) => {
+ shouldBeSuccesfulLogIn(logInData, ['_admin']);
+
+ db.stopUsingAsAuthenticationDB();
+ return db.useAsAuthenticationDB({/* no admins */})
+
+ .then(() => logInData.sessionID);
+ })
+
+ .then((sessionID) => {
+ return db.multiUserSession(sessionID);
+ })
+
+ .then((sessionData) => {
+ //if admins not supplied, there's no session (admin party!)
+ shouldBeAdminParty(sessionData);
+
+ db.stopUsingAsAuthenticationDB();
+ return db.useAsAuthenticationDB(opts);
+ })
+
+ .then(() => {
+ return db.multiUserLogIn('username', 'test');
+ })
+
+ .then((logInData) => {
+ return db.multiUserSession(logInData.sessionID);
+ })
+
+ .then((sessionData) => {
+ //otherwise there is
+ shouldBeLoggedIn(sessionData, ["_admin"]);
+
+ return db.multiUserSession();
+ })
+
+ .then((sessionData) => {
+ //check if logout works (i.e. forgetting the session id.)
+ shouldNotBeLoggedIn(sessionData);
+ });
+ });
+
+ it('should handle invalid admins field on login', () => {
+ const admins = {
+ username: "-pbkdf2-37508a1f1c5c19f38779fbe029ae99ee32988293,885e6e9e9031e391d5ef12abbb6c6aef,10",
+ username2: 'this-is-no-hash'
+ };
+
+ return db.useAsAuthenticationDB({admins: admins})
+
+ .then(() => {
+ return db.session();
+ })
+
+ .then((sessionData) => {
+ shouldNotBeLoggedIn(sessionData);
+
+ return shouldThrowError(() => db.logIn("username2", "test"));
+ })
+
+ .then((error) => {
+ error.status.should.equal(401);
+
+ return db.session();
+ })
+
+ .then((sessionData) => {
+ shouldNotBeLoggedIn(sessionData);
+ });
+ });
+
+ it('should not accept timed out sessions', () => {
+ // example stolen from calculate-couchdb-session-id's test suite. That
+ // session timed out quite a bit ago.
+
+ return db.useAsAuthenticationDB({
+ secret: '4ed13457964f05535fbb54c0e9f77a83',
+ timeout: 3600,
+ admins: {
+ // password 'test'
+ 'jan': '-pbkdf2-2be978bc2be874f755d8899cfddad18ed78e3c09,d5513283df4f649c72757a91aa30bdde,10'
+ }
+ })
+
+ .then(() => {
+ const sessionID = 'amFuOjU2Njg4MkI5OkEK3-1SRseo6yNRHfk-mmk6zOxm';
+ return db.multiUserSession(sessionID);
+ })
+
+ .then((sessionData) => {
+ shouldNotBeLoggedIn(sessionData);
+ });
+ });
+
+ it('should account for roles set in user doc even for server admins', () => {
+ return db.useAsAuthenticationDB({
+ admins: {
+ username: '-pbkdf2-37508a1f1c5c19f38779fbe029ae99ee32988293,885e6e9e9031e391d5ef12abbb6c6aef,10'
+ }
+ })
+ .then(() => db.logIn('username', 'test'))
+ .then(() => db.session())
+ .then((session) => {
+ session.userCtx.name.should.equal('username');
+ session.userCtx.roles.should.deep.equal(['_admin']);
+ })
+ .then(() => db.signUp('username', 'password', {roles: ['test']}))
+ .then(() => db.session())
+ .then((session) => {
+ session.userCtx.name.should.equal('username');
+ session.userCtx.roles.should.deep.equal(['_admin', 'test']);
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-auth/http.js b/packages/pouchdb-server-packages/tests/pouchdb-auth/http.js
new file mode 100644
index 0000000000..c06dfd44b5
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-auth/http.js
@@ -0,0 +1,112 @@
+const {BASE_URL, HTTP_AUTH, PouchDB, should, shouldThrowError} = require('./utils');
+
+describe('SyncHTTPAuthTests', () => {
+ it('should work with http dbs', () => {
+ const db = new PouchDB(BASE_URL + "/_users", {auth: HTTP_AUTH});
+
+ return db.useAsAuthenticationDB()
+
+ .then((response) => {
+ should.not.exist(response);
+
+ return db.signUp("username", "password", {roles: ["test"]});
+ })
+
+ .then((signUpData) => {
+ signUpData.rev.indexOf("1-").should.equal(0);
+ signUpData.ok.should.be.ok;
+ signUpData.id.should.equal("org.couchdb.user:username");
+
+ return db.get("org.couchdb.user:username");
+ })
+
+ .then((doc) => {
+ doc._rev.indexOf("1-").should.equal(0);
+ doc.should.have.property("derived_key");
+ doc.iterations.should.equal(10);
+ doc.name.should.equal("username");
+ doc.password_scheme.should.equal("pbkdf2");
+ doc.roles.should.eql(["test"]);
+ doc.should.have.property("salt");
+ doc.type.should.equal("user");
+
+ doc.should.not.have.property("password");
+
+ return db.session();
+ })
+
+ .then((session) => {
+ //basic auth active
+ shouldBeAdmin(session);
+
+ return db.logIn("username", "password");
+ })
+
+ .then((logInData) => {
+ logInData.should.eql({
+ ok: true,
+ name: "username",
+ roles: ["test"]
+ });
+
+ return db.session();
+ })
+
+ .then((session2) => {
+ session2.userCtx.should.eql({
+ name: "username",
+ roles: ["test"]
+ });
+ session2.info.authenticated.should.equal("cookie");
+
+ return db.logOut();
+ })
+
+ .then((logOutData) => {
+ logOutData.ok.should.be.ok;
+
+ return db.session();
+ })
+
+ .then((/*session3*/) => {
+ // TODO: session is {name: "username",roles: ["test"]}, but shoudl be admin?
+ // shouldBeAdmin(session3);
+
+ return db.logOut();
+ })
+
+ .then((logOutData2) => {
+ logOutData2.ok.should.be.ok;
+
+ return shouldThrowError(() => db.logIn("username", "wrongPassword"));
+ })
+
+ .then((error) => {
+ error.status.should.equal(401);
+ error.name.should.equal("unauthorized");
+ error.message.should.equal("Name or password is incorrect.");
+
+ return db.get("org.couchdb.user:username");
+ })
+
+ .then((doc) => {
+ return db.remove(doc);
+ })
+
+ .then((removeResponse) => {
+ removeResponse.ok.should.be.ok;
+
+ db.stopUsingAsAuthenticationDB();
+ });
+ });
+
+ function shouldBeAdmin(session) {
+ session.info.authentication_handlers.should.contain("cookie");
+ session.info.authentication_db.should.equal("_users");
+ session.userCtx.should.eql({
+ name: (HTTP_AUTH || {}).username || null,
+ roles: ["_admin"]
+ });
+ session.ok.should.be.ok;
+ }
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-auth/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-auth/signatures.js
new file mode 100644
index 0000000000..94113570b5
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-auth/signatures.js
@@ -0,0 +1,40 @@
+const {setup, teardown, Auth} = require('./utils');
+
+describe('hashAdminPasswords', () => {
+ it('should return a promise', () => {
+ return Auth.hashAdminPasswords({})
+
+ .then((response) => {
+ response.should.eql({});
+ });
+ });
+ it('should return a promise and accept a callback', () => {
+ const cb = () => {};
+
+ return Auth.hashAdminPasswords({}, cb)
+
+ .then((response) => {
+ response.should.eql({});
+ });
+ });
+});
+
+describe('workflow', () => {
+ let db;
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('should not throw and methods should return promises', () => {
+ return db.useAsAuthenticationDB()
+
+ .then(() => {
+ return db.session(() => {});
+ })
+
+ .then(() => {
+ db.stopUsingAsAuthenticationDB();
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-auth/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-auth/utils.js
new file mode 100644
index 0000000000..30d8f34e7b
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-auth/utils.js
@@ -0,0 +1,9 @@
+const Auth = require('../../packages/node_modules/pouchdb-auth');
+const stuff = require('../testutils');
+const extend = require('extend');
+
+stuff.PouchDB.plugin(Auth);
+
+module.exports = extend({Auth}, stuff, {
+ BASE_URL: process.env.COUCH_HOST || stuff.BASE_URL
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-list/features.js b/packages/pouchdb-server-packages/tests/pouchdb-list/features.js
new file mode 100644
index 0000000000..fe04d103d4
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-list/features.js
@@ -0,0 +1,139 @@
+const {setup, teardown, listDocument, shouldThrowError, should} = require('./utils');
+
+let db;
+
+describe('Async list tests', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put(listDocument).then(() => {
+ return db.put({_id: 'testdoc'});
+ });
+ });
+ afterEach(teardown);
+
+ it('args', done => {
+ db.list('test/args/ids', {query: {a: 'b'}}, (error, resp) => {
+ const [head, req] = JSON.parse(resp.body).args;
+ head.offset.should.equal(0);
+ should.equal(req.id, null);
+ req.query.a.should.equal('b');
+
+ done(error);
+ });
+ });
+});
+
+describe('Sync list tests with empty design docs', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put({_id: '_design/test'});
+ });
+ afterEach(teardown);
+
+ it('test', () => {
+ return shouldThrowError(() => {
+ return db.list('test/test/test');
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ error.name.should.equal('not_found');
+ });
+ });
+});
+
+describe('Sync list tests', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put(listDocument).then(() => db.put({_id: 'testdoc'}));
+ });
+ afterEach(teardown);
+
+ it('couch eval', () => {
+ return db.list('test/test-coucheval/ids')
+
+ .then((resp) => {
+ resp.code.should.equal(200);
+ resp.body.should.equal('6 - Hello World!');
+ });
+ });
+
+ it('args', () => {
+ return db.list('test/args/ids', {query: {a: 'b'}})
+
+ .then((resp) => {
+ const [head, req] = JSON.parse(resp.body).args;
+ head.offset.should.equal(0);
+ head.total_rows.should.equal(1);
+
+ should.equal(req.id, null);
+ req.raw_path.should.equal('/test/_design/test/_list/args/ids?a=b');
+ req.requested_path.should.eql(['test', '_design', 'test', '_list', 'args', 'ids?a=b']);
+ req.path.should.eql(['test', '_design', 'test', '_list', 'args', 'ids']);
+ // and one at random, to check if the rest (shared with show) is still ok.
+ req.peer.should.equal('127.0.0.1');
+ });
+ });
+
+ it('unexisting design doc', () => {
+ return shouldThrowError(() => {
+ return db.list('unexisting/args/ids');
+ })
+
+ .then((error) => {
+ error.name.should.equal('not_found');
+ });
+ });
+
+ it('unexisting list function', () => {
+ return shouldThrowError(() => {
+ return db.list('test/unexisting/ids');
+ })
+
+ .then((error) => {
+ error.toString().should.be.ok;
+ error.name.should.equal('not_found');
+ error.message.should.equal('missing list function unexisting on design doc _design/test');
+ });
+ });
+
+ it('unexisting view', () => {
+ return shouldThrowError(() => {
+ return db.list('test/args/unexisting');
+ })
+
+ .then((error) => {
+ error.name.should.equal('not_found');
+ });
+ });
+
+ it('list api', () => {
+ return db.list('test/use-list-api/ids')
+
+ .then((resp) => {
+ resp.headers['Transfer-Encoding'].should.equal('chunked');
+ resp.code.should.equal(500);
+ const [row1, row2] = resp.body.split('\n');
+ JSON.parse(row1).should.eql({id: 'testdoc', key: 'testdoc', value: 'value'});
+ row2.should.equal('testHello World!');
+ });
+ });
+
+ it('wrong content type', () => {
+ // CouchDB only supports application/json here. It's a CouchDB restriction:
+ // probably best to emulate it...
+
+ return shouldThrowError(() => {
+ return db.list('test/args/ids', {
+ headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+ body: 'hello=world'
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(400);
+ error.name.should.equal('bad_request');
+ error.message.should.equal('invalid_json');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-list/http.js b/packages/pouchdb-server-packages/tests/pouchdb-list/http.js
new file mode 100644
index 0000000000..9823cdd81a
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-list/http.js
@@ -0,0 +1,47 @@
+const {setupHTTP, teardown, listDocument, shouldThrowError, should} = require('./utils');
+
+let db;
+
+describe('http', () => {
+ beforeEach(() => {
+ db = setupHTTP();
+ return db.put(listDocument);
+ });
+ afterEach(teardown);
+
+ it('list basics', () => {
+ return db.list('test/args/ids', {query: {a: 'b'}})
+
+ .then((resp) => {
+ const [head, req] = JSON.parse(resp.body).args;
+ head.offset.should.equal(0);
+ head.total_rows.should.equal(0);
+
+ should.equal(req.id, null);
+ req.raw_path.should.equal('/pouchdb-plugin-helper-db/_design/test/_list/args/ids?a=b');
+ req.requested_path.should.eql(['pouchdb-plugin-helper-db', '_design', 'test', '_list', 'args', 'ids?a=b']);
+ req.path.should.eql(['pouchdb-plugin-helper-db', '_design', 'test', '_list', 'args', 'ids']);
+ // and one at random, to check if the rest (shared with show) is still ok.
+ req.peer.should.equal('127.0.0.1');
+ });
+ });
+
+ it('wrong list content type', () => {
+ // CouchDB only supports application/json here. It's a CouchDB restriction:
+ // this check is here in case it ever changes. - then PouchDB-List's
+ // simulation of it can stop.
+
+ shouldThrowError(() => {
+ return db.list('test/args/ids', {
+ headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+ body:'value=hello'
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(400);
+ error.name.should.equal('bad_request');
+ error.message.should.equal('invalid_json');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-list/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-list/signatures.js
new file mode 100644
index 0000000000..07b6e58424
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-list/signatures.js
@@ -0,0 +1,15 @@
+const {setup, teardown} = require('./utils');
+
+let db;
+
+describe('signatures', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+ it('list', () => {
+ const promise = db.list('test/test/test', () => {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-list/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-list/utils.js
new file mode 100644
index 0000000000..1f2c9fbc8b
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-list/utils.js
@@ -0,0 +1,36 @@
+const stuff = require('../testutils');
+const List = require('../../packages/node_modules/pouchdb-list');
+
+stuff.PouchDB.plugin(List);
+
+stuff.listDocument = {
+ _id: '_design/test',
+ views: {
+ ids: {
+ map: `function (doc) {
+ emit(doc._id, "value");
+ }`
+ }
+ },
+ lists: {
+ args: `function (head, req) {
+ return toJSON({args: [head, req]});
+ }`,
+ 'use-list-api': `function (head, req) {
+ start({code: 500});
+ send(JSON.stringify(getRow()));
+ send("\\n");
+ send("test");
+ return "Hello World!";
+ }`,
+ 'test-coucheval': `function (head, req) {
+ var result = sum([1, 2, 3]);
+ return result + " - " + require("lib/thingy").data;
+ }`
+ },
+ lib: {
+ thingy: `exports.data = 'Hello World!';`
+ }
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-replicator/test.js b/packages/pouchdb-server-packages/tests/pouchdb-replicator/test.js
new file mode 100644
index 0000000000..56e297f9c9
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-replicator/test.js
@@ -0,0 +1,329 @@
+const Promise = require('bluebird');
+global.Promise = Promise; //use bluebird for all promises
+const {PouchDB, setup, teardown, should} = require('../testutils');
+const Replicator = require('../../packages/node_modules/pouchdb-replicator');
+const extend = require('extend');
+
+PouchDB.plugin(Replicator);
+
+const replicationDocument = {
+ "_id": "my_replication",
+ "source": "a",
+ "target": "b",
+ "continuous": true
+};
+
+let db;
+
+describe('replicator url helper', () => {
+ const createSafeUrl = Replicator.createSafeUrl;
+
+ it("handles string", () => {
+ const db = "db-name";
+ const out = createSafeUrl(db);
+ out.should.equal(db);
+ });
+
+ it("handles name object", () => {
+ const db = {
+ name: "db-name"
+ };
+
+ const out = createSafeUrl(db);
+ out.should.equal(db);
+ });
+
+ it("returns url without auth", () => {
+ const source = {
+ headers: {},
+ url: 'http://dev:5984/animaldb-clone'
+ };
+
+ const out = createSafeUrl(source);
+ out.should.equal(source.url);
+ });
+
+ it("returns url with auth", () => {
+ const source = {
+ headers: {
+ Authorization: "Basic dGVzdGVyOnRlc3RlcnBhc3M="
+ },
+ url: 'http://dev:5984/animaldb-clone'
+ };
+
+ const out = createSafeUrl(source);
+ out.should.equal('http://tester:testerpass@dev:5984/animaldb-clone');
+ });
+
+});
+
+describe('async replicator tests', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+
+ afterEach(teardown);
+
+ it('basic', done => {
+ db.startReplicator((err, res) => {
+ if (err) { return done(err); }
+
+
+ should.not.exist(res);
+ db.stopReplicator((err, res) => {
+ should.not.exist(res);
+ done(err);
+ });
+ });
+ });
+});
+
+describe('sync replicator tests', () => {
+ beforeEach(() => {
+ db = setup();
+
+ return db.startReplicator().then((err, res) => {
+ should.not.exist(res);
+ });
+ });
+
+ afterEach(() => {
+ return db.stopReplicator()
+ .then((err, res) => {
+ should.not.exist(res);
+ return new PouchDB('a').destroy();
+ }).then(() => {
+ return new PouchDB('b').destroy();
+ })
+ .then(teardown);
+ });
+
+ it('basic', () => {
+ // let beforeEach & afterEach do their job
+ });
+
+ it('start twice', () => {
+ return db.startReplicator()
+ .then(() => {
+ throw "should not get here";
+ }).catch(err => {
+ err.status.should.equal(500);
+ err.name.should.equal('already_active');
+ });
+ });
+
+ it('stop twice', () => {
+ // stop
+ return db.stopReplicator().then(() => {
+ return db.stopReplicator()
+ .then(() => {
+ throw "should not get here";
+ }).catch(err => {
+ err.toString().should.contain('500');
+ err.toString().should.contain('already_inactive');
+ return db.startReplicator();
+ });
+ });
+ });
+
+ function replicationCompletion(db, name) {
+ return new Promise (resolve => {
+ const check = (doc) => {
+ if (doc._replication_state === 'completed') {
+ resolve(doc);
+ return true;
+ }
+
+ return async(resolve);
+ };
+ const async = () => db.get(name).then(check);
+
+ async();
+ });
+ }
+
+ it('replication validation', () => {
+ return db.post({}).catch(err => {
+ err.status.should.equal(403);
+ });
+ });
+
+ it('simple replication', () => {
+ const dbSource = new PouchDB('a');
+ return dbSource.put({_id: 'test'})
+ .then(() => {
+ const repDoc = extend({}, replicationDocument);
+ delete repDoc.continuous;
+ return db.put(repDoc);
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return replicationCompletion(db, 'my_replication');
+ })
+ .then(() => {
+ // fails if the document isn't there.
+ return new PouchDB('b').get('test');
+ })
+ .then (doc => {
+ return doc.should.exist;
+ })
+ .catch(() => {
+ throw "should not be here";
+ });
+ });
+
+ it('change replication', () => {
+ let dbC;
+
+ return new PouchDB('a').put({_id: 'test'})
+ .then (() => {
+ const repDoc = extend({}, replicationDocument);
+ delete repDoc.continuous;
+ return db.put(repDoc);
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return replicationCompletion(db, 'my_replication');
+ })
+ .then (doc => {
+ doc.source = 'b';
+ doc.target = 'c';
+ delete doc._replication_state;
+ return db.put(doc);
+ })
+ .then (resp2 => {
+ resp2.ok.should.be.ok;
+ return replicationCompletion(db, 'my_replication');
+ })
+ .then (() => {
+ dbC = new PouchDB('c');
+ return dbC.get('test');
+ })
+ .then (() => {
+ return dbC.destroy();
+ });
+
+ });
+
+ function replicationRunning(db, name) {
+ return new Promise (resolve => {
+ const check = (doc) => {
+ if (doc._replication_id) {
+ resolve(doc);
+ return true;
+ }
+
+ return async();
+ };
+ const async = () => db.get(name).then(check);
+
+ async();
+ });
+ }
+
+ it('delete replication', () => {
+ const dbA = new PouchDB('a');
+ let dbB;
+ return dbA.put({_id: 'test1'})
+ .then(() => {
+ return db.put(replicationDocument);
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return replicationRunning(db, 'my_replication');
+ })
+ .then(doc => {
+ return db.remove(doc);
+ })
+ .then(resp2 => {
+ resp2.ok.should.be.ok;
+ return dbA.put({_id: 'test2'});
+ })
+ .then(() => {
+ dbB = new PouchDB('b');
+ return dbB.get('test1');
+ })
+ .then(() => {
+ return dbB.get('test2');
+ })
+ // .then(() => {
+ // throw "should not get here";
+ // })
+ .catch(err => {
+ err.status.should.equal(404);
+ });
+
+ });
+
+ function replicationTriggered(db, name) {
+ return new Promise (resolve => {
+ const check = (doc) => {
+ if (doc._replication_state === 'triggered') {
+ resolve(doc);
+ return true;
+ }
+
+ return async();
+ };
+ const async = () => db.get(name).then(check);
+
+ async();
+ });
+ }
+
+ it('double replication', () => {
+ return db.put(replicationDocument)
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return replicationTriggered(db, 'my_replication');
+ })
+ .then(() => {
+ const repDoc = extend({}, replicationDocument);
+ repDoc._id = 'my_replication2';
+ return db.put(repDoc);
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return replicationRunning(db, 'my_replication');
+ })
+ .then(doc => {
+ doc.should.have.property('_replication_state');
+ return replicationRunning(db, 'my_replication2');
+ })
+ .then(doc => {
+ doc.should.not.have.property('_replication_state');
+ });
+ });
+
+ function replicationError(db, name) {
+ return new Promise (resolve => {
+ const check = (doc) => {
+ if (doc._replication_state === 'error') {
+ resolve(doc);
+ return true;
+ }
+
+ return async();
+ };
+ const async = () => db.get(name).then(check);
+
+ async();
+ });
+ }
+
+ it('replication error', () => {
+ const repDoc = extend({}, replicationDocument);
+ // unlikely couchdb port
+ repDoc.source = 'http://localhost:3423/test';
+ // FIXME: https://github.com/pouchdb/pouchdb-replicator/issues/2
+ repDoc.retry = false;
+
+ return db.put(repDoc)
+ .then(() => {
+ return replicationError(db, 'my_replication');
+ })
+ .then(doc => {
+ doc._replication_state.should.equal('error');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-rewrite/features.js b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/features.js
new file mode 100644
index 0000000000..6ccacb9a7e
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/features.js
@@ -0,0 +1,886 @@
+const {setup, rewriteDocument, teardown, shouldThrowError, checkUuid} = require('./utils');
+
+let db;
+
+describe('Async rewrite tests', () => {
+ beforeEach(done => {
+ db = setup();
+ db.put(rewriteDocument, done);
+ });
+ afterEach(teardown);
+
+ it('basic url', done => {
+ db.rewriteResultRequestObject('test/test/all', {query: {'k': 'v'}}, (err, req) => {
+ req.raw_path.should.equal('/test/_design/test/_list/test/ids?k=v');
+ done(err);
+ });
+ });
+
+ it('basic response', done => {
+ db.rewrite('test/test/all', err => {
+ err.status.should.equal(404);
+ err.name.should.equal('not_found');
+ err.message.should.contain('view named ids');
+
+ done();
+ });
+ });
+});
+
+describe('sync rewrite tests', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ function putRewrites(rewrites) {
+ return db.put({
+ _id: '_design/test',
+ rewrites: rewrites
+ });
+ }
+
+ it('empty from rewrite', () => {
+ return putRewrites([
+ {
+ to: '_show/redirect',
+ from: ''
+ },
+ {
+ to: '_show/page/*',
+ from: '/page/*'
+ }
+ ])
+
+ .then(() => {
+ return db.rewriteResultRequestObject('test/page/index');
+ })
+
+ .then(({path}) => {
+ path.should.eql(['test', '_design', 'test', '_show', 'page', 'index']);
+ });
+ });
+
+ it('missing from rewrite', () => {
+ return putRewrites([
+ {
+ to: '1234mytest'
+ }
+ ])
+
+ .then(() => {
+ return db.rewriteResultRequestObject('test/abc');
+ })
+
+ .then(({path}) => {
+ path.should.eql(['test', '_design', 'test', '1234mytest']);
+
+ return shouldThrowError(() => {
+ return db.rewrite('test');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ });
+ });
+
+ it('high up path', () => {
+ return putRewrites([{
+ from: '/highup',
+ // should be sufficiently high up.
+ to: '../../../../../..'
+ }])
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/highup');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ error.message.should.equal('missing');
+ });
+ });
+
+ it('bad path', () => {
+ return putRewrites([{from: '/badpath', to: '../../a/b/c'}])
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/badpath');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ });
+ });
+
+ it('attachment rewrite', () => {
+ return putRewrites([{from: '/attachment', to: '/attachment'}])
+
+ .then((ddocResp) => {
+ return db.rewrite('test/attachment/', {
+ method: 'PUT',
+ withValidation: true,
+ body: new Buffer('Hello World', 'ascii'),
+ headers: {'Content-Type': 'text/plain'},
+ query: {rev: ddocResp.rev}
+ });
+ })
+
+ .then((response) => {
+ response.ok.should.be.ok;
+
+ return db.rewrite('test/attachment', {
+ method: 'DELETE',
+ withValidation: false,
+ query: {rev: response.rev}
+ });
+ })
+
+ .then((response2) => {
+ response2.ok.should.be.ok;
+
+ return shouldThrowError(() => {
+ return db.rewrite('test/attachment', {
+ method: 'POST',
+ // not sure if it would be required. Playing safe here.
+ // Not that it should ever reach the rev check.
+ query: {rev: response2.rev}
+ });
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(405);
+ error.name.should.equal('method_not_allowed');
+ error.message.should.contain('POST');
+ });
+ });
+
+ it('local doc rewrite', () => {
+ return putRewrites([{from: '/doc', to: '.././../_local/test'}])
+
+ .then(() => {
+ return db.rewrite('test/doc', {
+ method: 'PUT',
+ body: '{"_id": "test"}',
+ withValidation: true
+ });
+ })
+
+ .then((response) => {
+ response.ok.should.be.ok;
+ });
+ });
+
+ it('all dbs rewrite', () => {
+ return putRewrites([{from: '/alldbs', to: '../../../_all_dbs'}])
+
+ .then(() => {
+ return db.rewrite('test/alldbs');
+ })
+
+ .then((response) => {
+ response.should.be.instanceof(Array);
+
+ return db.rewriteResultRequestObject('test/alldbs');
+ })
+
+ .then((response2) => {
+ response2.path.should.eql(['_all_dbs']);
+ });
+ });
+
+ it('post doc rewrite', () => {
+ return putRewrites([{from: 'postdoc', to: '../../', method: 'POST'}])
+
+ .then(() => {
+ return db.rewrite('test/postdoc', {body:'{}', method:'POST'});
+ })
+
+ .then((response) => {
+ checkUuid(response.id);
+ response.rev.indexOf('1-').should.equal(0);
+ response.ok.should.be.ok;
+
+ return db.rewrite('test/postdoc', {body:'{}', method:'POST', withValidation: true});
+ })
+
+ .then((response2) => {
+ checkUuid(response2.id);
+ response2.rev.indexOf('1-').should.equal(0);
+ response2.ok.should.be.ok;
+ });
+ });
+
+ it('post doc using double rewrite', () => {
+ return putRewrites([
+ {from: 'rewrite1', to: '_rewrite/rewrite2'},
+ // POST to an existing doc -> 405
+ {from: 'rewrite2', to: '../../test', method: 'POST'}
+ ])
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/rewrite1', {body: '{}'});
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(405);
+ });
+ });
+
+ it('session rewrite', () => {
+ return putRewrites([{from: 'session', to: '../../../_session'}])
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/session', {
+ body: 'username=test&password=test',
+ method: 'POST'
+ });
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(401);
+
+ return shouldThrowError(() => {
+ return db.rewrite('test/session', {method: 'PUT'});
+ });
+ })
+
+ .then((error2) => {
+ error2.status.should.equal(405);
+ });
+ });
+
+ it('security rewrite', () => {
+ return putRewrites([{from: 'security', to: '../../_security'}])
+
+ .then(() => {
+ return db.rewrite('test/security');
+ })
+
+ .then((response) => {
+ response.should.eql({});
+
+ return shouldThrowError(() => {
+ return db.rewrite('test/security', {method: 'DELETE'});
+ });
+ })
+
+ .then((err) => {
+ err.status.should.equal(405);
+ });
+ });
+
+ it('replicate rewrite', () => {
+ return putRewrites([{from: 'replicate', to: '../../../_replicate'}])
+
+ .then(() => {
+ return db.rewrite('test/replicate', {
+ body: '{"source": "a", "target": "b"}'
+ });
+ })
+
+ .then((response) => {
+ response.ok.should.be.ok;
+ response.status.should.equal('complete');
+ });
+ });
+});
+
+describe('sync CouchDB based rewrite tests', () => {
+ /*
+ Based on CouchDB's rewrite test suite: rewrite.js. Not every test
+ has yet been ported, but a large amount has been.
+
+ Original test source:
+ https://github.com/apache/couchdb/blob/master/test/javascript/tests/rewrite.js
+ */
+
+ before(() => {
+ db = setup();
+ const designDoc = {
+ _id: '_design/test',
+ language: 'javascript',
+ _attachments: {
+ 'foo.txt': {
+ content_type: 'text/plain',
+ data: 'VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ='
+ }
+ },
+ rewrites: [
+ {
+ from: 'foo',
+ to: 'foo.txt'
+ },
+ {
+ from: 'foo2',
+ to: 'foo.txt',
+ method: 'GET'
+ },
+ {
+ from: 'hello/:id',
+ to: '_update/hello/:id',
+ method: 'PUT'
+ },
+ {
+ from: '/welcome',
+ to: '_show/welcome'
+ },
+ {
+ from: '/welcome/:name',
+ to: '_show/welcome',
+ query: {
+ name: ':name'
+ }
+ },
+ {
+ from: '/welcome2',
+ to: '_show/welcome',
+ query: {
+ name: 'user'
+ }
+ },
+ {
+ from: '/welcome3/:name',
+ to: '_update/welcome2/:name',
+ method: 'PUT'
+ },
+ {
+ from: '/welcome3/:name',
+ to: '_show/welcome2/:name',
+ method: 'GET'
+ },
+ {
+ from: '/welcome4/*',
+ to : '_show/welcome3',
+ query: {
+ name: '*'
+ }
+ },
+ {
+ from: '/welcome5/*',
+ to : '_show/*',
+ query: {
+ name: '*'
+ }
+ },
+ {
+ from: 'basicView',
+ to: '_view/basicView'
+ },
+ {
+ from: 'simpleForm/basicView',
+ to: '_list/simpleForm/basicView'
+ },
+ {
+ from: 'simpleForm/basicViewFixed',
+ to: '_list/simpleForm/basicView',
+ query: {
+ startkey: 3,
+ endkey: 8
+ }
+ },
+ {
+ from: 'simpleForm/basicViewPath/:start/:end',
+ to: '_list/simpleForm/basicView',
+ query: {
+ startkey: ':start',
+ endkey: ':end'
+ },
+ formats: {
+ start: 'int',
+ end: 'int'
+ }
+ },
+ {
+ from: 'simpleForm/complexView',
+ to: '_list/simpleForm/complexView',
+ query: {
+ key: [1, 2]
+ }
+ },
+ {
+ from: 'simpleForm/complexView2',
+ to: '_list/simpleForm/complexView',
+ query: {
+ key: ['test', {}]
+ }
+ },
+ {
+ from: 'simpleForm/complexView3',
+ to: '_list/simpleForm/complexView',
+ query: {
+ key: ['test', ['test', 'essai']]
+ }
+ },
+ {
+ from: 'simpleForm/complexView4',
+ to: '_list/simpleForm/complexView2',
+ query: {
+ key: {'c': 1}
+ }
+ },
+ {
+ from: 'simpleForm/complexView5/:a/:b',
+ to: '_list/simpleForm/complexView3',
+ query: {
+ key: [':a', ':b']
+ }
+ },
+ {
+ from: 'simpleForm/complexView6',
+ to: '_list/simpleForm/complexView3',
+ query: {
+ key: [':a', ':b']
+ }
+ },
+ {
+ from: 'simpleForm/complexView7/:a/:b',
+ to: '_view/complexView3',
+ query: {
+ key: [':a', ':b'],
+ include_docs: ':doc'
+ },
+ format: {
+ doc: 'bool'
+ }
+ },
+ {
+ from: '/',
+ to: '_view/basicView'
+ },
+ {
+ from: '/db/*',
+ to: '../../*'
+ }
+ ],
+ lists: {
+ simpleForm: `function(head, req) {
+ log('simpleForm');
+ send('');
+ var row, row_number = 0, prevKey, firstKey = null;
+ while (row = getRow()) {
+ row_number += 1;
+ if (!firstKey) firstKey = row.key;
+ prevKey = row.key;
+ send('\\n- Key: '+row.key
+ +' Value: '+row.value
+ +' LineNo: '+row_number+'
');
+ }
+ return '
FirstKey: '+ firstKey + ' LastKey: '+ prevKey+'
';
+ }`
+ },
+ shows: {
+ welcome: `function(doc,req) {
+ return 'Welcome ' + req.query['name'];
+ }`,
+ welcome2: `function(doc, req) {
+ return 'Welcome ' + doc.name;
+ }`,
+ welcome3: `function(doc,req) {
+ return 'Welcome ' + req.query['name'];
+ }`
+ },
+ updates: {
+ hello: `function(doc, req) {
+ if (!doc) {
+ if (req.id) {
+ return [{
+ _id : req.id
+ }, 'New World']
+ }
+ return [null, 'Empty World'];
+ }
+ doc.world = 'hello';
+ doc.edited_by = req.userCtx;
+ return [doc, 'hello doc'];
+ }`,
+ welcome2: `function(doc, req) {
+ if (!doc) {
+ if (req.id) {
+ return [{
+ _id: req.id,
+ name: req.id
+ }, 'New World']
+ }
+ return [null, 'Empty World'];
+ }
+ return [doc, 'hello doc'];
+ }`
+ },
+ views: {
+ basicView: {
+ map: `function(doc) {
+ if (doc.integer) {
+ emit(doc.integer, doc.string);
+ }
+
+ }`
+ },
+ complexView: {
+ map: `function(doc) {
+ if (doc.type == 'complex') {
+ emit([doc.a, doc.b], doc.string);
+ }
+ }`
+ },
+ complexView2: {
+ map: `function(doc) {
+ if (doc.type == 'complex') {
+ emit(doc.a, doc.string);
+ }
+ }`
+ },
+ complexView3: {
+ map: `function(doc) {
+ if (doc.type == 'complex') {
+ emit(doc.b, doc.string);
+ }
+ }`
+ }
+ }
+ };
+
+ function makeDocs(start, end) {
+ const docs = [];
+ for (let i = start; i < end; i++) {
+ docs.push({
+ _id: i.toString(),
+ integer: i,
+ string: i.toString()
+ });
+ }
+ return docs;
+ }
+
+ const docs1 = makeDocs(0, 10);
+ const docs2 = [
+ {a: 1, b: 1, string: 'doc 1', type: 'complex'},
+ {a: 1, b: 2, string: 'doc 2', type: 'complex'},
+ {a: 'test', b: {}, string: 'doc 3', type: 'complex'},
+ {a: 'test', b: ['test', 'essai'], string: 'doc 4', type: 'complex'},
+ {a: {'c': 1}, b: '', string: 'doc 5', type: 'complex'}
+ ];
+
+ return db.bulkDocs([designDoc].concat(docs1).concat(docs2));
+ });
+ after(teardown);
+
+ it('simple rewriting', () => {
+ // GET is the default http method
+ return db.rewrite('test/foo')
+
+ .then((response) => {
+ response.toString('ascii').should.equal('This is a base64 encoded text');
+ response.type.should.equal('text/plain');
+
+ return db.rewrite('test/foo2');
+ })
+
+ .then((response2) => {
+ response2.toString('ascii').should.equal('This is a base64 encoded text');
+ response2.type.should.equal('text/plain');
+ });
+ });
+
+ it('basic update', () => {
+ // hello update world
+ const doc = {word: 'plankton', name: 'Rusty'};
+ let docid;
+
+ return db.post(doc)
+
+ .then((response) => {
+ response.ok.should.be.ok;
+ docid = response.id;
+
+ return db.rewrite('test/hello/' + docid, {method: 'PUT'});
+ })
+
+ .then((response2) => {
+ response2.code.should.equal(201);
+ response2.body.should.equal('hello doc');
+ response2.headers['Content-Type'].should.contain('charset=utf-8');
+
+ return db.get(docid);
+ })
+
+ .then((doc2) => {
+ doc2.world.should.equal('hello');
+ });
+ });
+
+ it('basic show', () => {
+ return db.rewrite('test/welcome', {query: {name: 'user'}})
+
+ .then((response) => {
+ response.body.should.equal('Welcome user');
+
+ return db.rewrite('test/welcome/user');
+ })
+
+ .then((response2) => {
+ response2.body.should.equal('Welcome user');
+
+ return db.rewrite('test/welcome2');
+ })
+
+ .then((resp3) => {
+ resp3.body.should.equal('Welcome user');
+ });
+ });
+
+ it('welcome3/test', () => {
+ return db.rewrite('test/welcome3/test', {method: 'PUT'})
+
+ .then((response) => {
+ response.code.should.equal(201);
+ response.body.should.equal('New World');
+ response.headers['Content-Type'].should.contain('charset=utf-8');
+
+ return db.rewrite('test/welcome3/test');
+ })
+
+ .then((response2) => {
+ response2.body.should.equal('Welcome test');
+ });
+ });
+
+ it('welcome4/user', () => {
+ return db.rewrite('test/welcome4/user')
+
+ .then((response) => {
+ response.body.should.equal('Welcome user');
+ });
+ });
+
+ it('welcome5/welcome3', () => {
+ return db.rewrite('test/welcome5/welcome3')
+
+ .then((response) => {
+ response.body.should.equal('Welcome welcome3');
+ });
+ });
+
+ it('basic view', () => {
+ return db.rewrite('test/basicView')
+
+ .then((response) => {
+ response.total_rows.should.equal(9);
+ });
+ });
+
+ it('root rewrite', () => {
+ return db.rewrite('test/')
+
+ .then((response) => {
+ response.total_rows.should.equal(9);
+ });
+ });
+
+ it('simple form basic view', () => {
+ return db.rewrite('test/simpleForm/basicView', {
+ query: {startkey: 3, endkey: 8}
+ })
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.not.contain('Key: 1');
+ response.body.should.contain('FirstKey: 3');
+ response.body.should.contain('LastKey: 8');
+ });
+ });
+
+ it('simple form basic view fixed', () => {
+ return db.rewrite('test/simpleForm/basicViewFixed')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.not.contain('Key: 1');
+ response.body.should.contain('FirstKey: 3');
+ response.body.should.contain('LastKey: 8');
+ });
+ });
+
+ it('simple form basic view fixed different query', () => {
+ return db.rewrite('test/simpleForm/basicViewFixed', {
+ query: {startkey: 4}
+ })
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.not.contain('Key: 1');
+ response.body.should.contain('FirstKey: 3');
+ response.body.should.contain('LastKey: 8');
+ });
+ });
+
+ it('simple view basic view path', () => {
+ return db.rewrite('test/simpleForm/basicViewPath/3/8')
+
+ .then((response) => {
+ response.body.should.not.contain('Key: 1');
+ response.body.should.contain('FirstKey: 3');
+ response.body.should.contain('LastKey: 8');
+ });
+ });
+
+ it('simple form complex view', () => {
+ return db.rewrite('test/simpleForm/complexView')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ /FirstKey: [1, 2]/.test(response.body).should.be.ok;
+ });
+ });
+
+ it('simple form complex view 2', () => {
+ return db.rewrite('test/simpleForm/complexView2')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.contain('Value: doc 3');
+ });
+ });
+
+ it('simple form complex view 3', () => {
+ return db.rewrite('test/simpleForm/complexView3')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.contain('Value: doc 4');
+ });
+ });
+
+ it('simple form complex view 4', () => {
+ return db.rewrite('test/simpleForm/complexView4')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.contain('Value: doc 5');
+ });
+ });
+
+ it('simple form complex view 5 with args', () => {
+ return db.rewrite('test/simpleForm/complexView5/test/essai')
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.contain('Value: doc 4');
+ });
+ });
+
+ it('complex view 6 with query', () => {
+ return db.rewrite('test/simpleForm/complexView6',{
+ query: {a: 'test', b: 'essai'}
+ })
+
+ .then((response) => {
+ response.code.should.equal(200);
+ response.body.should.contain('Value: doc 4');
+ });
+ });
+
+ it('simple form complex view 7 with args and query', () => {
+ return db.rewrite('test/simpleForm/complexView7/test/essai', {
+ query: {doc: true}
+ })
+
+ .then((response) => {
+ response.rows[0].doc.should.be.an('object');
+ });
+ });
+
+ it('db with args', () => {
+ // The original test suite uses the 'meta' query parameter which PouchDB
+ // doesn't implement. revs_info could just be dropped in without further
+ // changes, though.
+ return db.rewrite('test/db/_design/test', {query: {revs_info: true}})
+
+ .then((response) => {
+ response._id.should.equal('_design/test');
+ response._revs_info.should.be.instanceof(Array);
+ });
+ });
+});
+
+describe('sync rewrite tests with invalid design doc', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('empty design doc', () => {
+ return db.put({_id: '_design/test'})
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/test/all');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ error.name.should.equal('rewrite_error');
+ error.message.should.equal('Invalid path.');
+ });
+ });
+
+ it('invalid rewrites', () => {
+ return db.put({_id: '_design/test', rewrites: 'Hello World!'})
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/test/all');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(400);
+ error.name.should.equal('rewrite_error');
+ });
+ });
+
+ it('missing to', () => {
+ return db.put({_id: '_design/test', rewrites: [
+ {from: '*'}
+ ]})
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/test/all');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(500);
+ error.name.should.equal('error');
+ error.message.should.equal('invalid_rewrite_target');
+ });
+ });
+
+ it('empty rewrites', () => {
+ return db.put({_id: '_design/test', rewrites: []})
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/test/all');
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ error.name.should.equal('not_found');
+ error.message.should.equal('missing');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-rewrite/http.js b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/http.js
new file mode 100644
index 0000000000..31947282eb
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/http.js
@@ -0,0 +1,22 @@
+const {setupHTTP, teardown, rewriteDocument, shouldThrowError} = require('./utils');
+
+let db;
+
+describe('http', () => {
+ beforeEach(() => {
+ db = setupHTTP();
+ return db.put(rewriteDocument);
+ });
+ afterEach(teardown);
+
+ it('rewrite', () => {
+ return shouldThrowError(() => {
+ return db.rewrite('test/test/all');
+ })
+
+ .then((error) => {
+ error.status.should.equal(404);
+ error.name.should.equal('not_found');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-rewrite/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/signatures.js
new file mode 100644
index 0000000000..fd4e07cdf7
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/signatures.js
@@ -0,0 +1,15 @@
+const {setup, teardown} = require('./utils');
+
+let db;
+
+describe('signatures', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+ it('rewrite', () => {
+ const promise = db.rewrite('test/test/test', () => {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-rewrite/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/utils.js
new file mode 100644
index 0000000000..529e648123
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-rewrite/utils.js
@@ -0,0 +1,39 @@
+const stuff = require('../testutils');
+const Rewrite = require('../../packages/node_modules/pouchdb-rewrite');
+
+const List = require('../../packages/node_modules/pouchdb-list');
+const Security = require('../../packages/node_modules/pouchdb-security');
+const Show = require('../../packages/node_modules/pouchdb-show');
+const Update = require('pouchdb-update');
+const Validation = require('pouchdb-validation');
+
+const AllDbs = require('pouchdb-all-dbs');
+const SeamlessAuth = require('pouchdb-seamless-auth');
+
+stuff.PouchDB.plugin(Rewrite);
+
+stuff.PouchDB.plugin(List);
+stuff.PouchDB.plugin(Security);
+stuff.PouchDB.plugin(Show);
+stuff.PouchDB.plugin(Update);
+stuff.PouchDB.plugin(Validation);
+
+AllDbs(stuff.PouchDB);
+SeamlessAuth(stuff.PouchDB);
+
+stuff.rewriteDocument = {
+ _id: '_design/test',
+ rewrites: [
+ {
+ from: '/test/all',
+ to: '_list/test/ids'
+ }
+ ]
+};
+
+stuff.checkUuid = uuid => {
+ uuid.should.be.a('string');
+ uuid.length.should.be.greaterThan(30);
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/features.js b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/features.js
new file mode 100644
index 0000000000..ce7f083c0b
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/features.js
@@ -0,0 +1,106 @@
+const {waitUntilReady, cleanup, PouchDB, should, BASE_URL, HTTP_AUTH} = require('./utils');
+
+const url = BASE_URL + '/_users';
+
+describe('sync seamless auth tests without remote', () => {
+ before(waitUntilReady);
+ afterEach(cleanup);
+
+ it('test', () => {
+ return PouchDB.seamlessSignUp('username', 'password')
+ .then((resp) => resp.ok.should.be.ok)
+ .then(() => PouchDB.seamlessSession())
+ .then((resp) => {
+ resp.info.authentication_db.should.equal('_users');
+ should.equal(resp.userCtx.name, null);
+ })
+ .then(() => PouchDB.seamlessLogIn('username', 'password'))
+ .then((resp) => resp.name.should.equal('username'))
+ .then(() => PouchDB.seamlessLogOut())
+ .then((resp) => resp.ok.should.be.ok);
+ });
+});
+
+describe('sync seamless auth tests with remote', () => {
+ let remoteDB, localDB;
+ before(waitUntilReady);
+ beforeEach(() => {
+ return PouchDB.setSeamlessAuthRemoteDB(url, {auth: HTTP_AUTH})
+ .then(() => {
+ remoteDB = new PouchDB(url, {auth: HTTP_AUTH});
+ localDB = new PouchDB('_users');
+ });
+ });
+ afterEach(() => {
+ // local
+ return cleanup()
+ .then(() => {
+ // remote
+ PouchDB.unsetSeamlessAuthRemoteDB();
+ return remoteDB.get('org.couchdb.user:username')
+ .then((db) => remoteDB.remove(db))
+ .catch(() => { /* already not there apparently */ });
+ });
+ });
+
+ it('test', () => {
+ return PouchDB.seamlessSignUp('username', 'password')
+ .then((resp) => {
+ resp.ok.should.be.ok;
+
+ function localGet() {
+ return localDB.get(resp.id)
+ // document not yet replicated
+ .catch(localGet);
+ }
+
+ return localGet()
+ .then((doc) => {
+ // check if online session
+ return PouchDB.seamlessLogIn('username', 'password')
+ .then((resp) => resp.name.should.equal('username'))
+
+ .then(() => PouchDB.seamlessSession())
+ .then((resp) => resp.info.authentication_handlers.should.contain('cookie'))
+
+ // update the local document and check if replicated back
+ .then(() => {
+ doc.abc = 1;
+ return localDB.put(doc);
+ });
+ })
+
+ // triggers the replication
+ .then(() => {
+ PouchDB.invalidateSeamlessAuthCache();
+ return PouchDB.seamlessSession();
+ })
+
+ .then(function remoteGet() {
+ return remoteDB.get(resp.id)
+ .catch(remoteGet);
+ })
+
+ // test caching code
+ .then(() => PouchDB.seamlessSession())
+ .then(() => PouchDB.seamlessSession())
+
+ // log out
+ .then(() => PouchDB.seamlessLogOut())
+ .then((resp) => resp.ok.should.be.ok);
+ });
+ });
+});
+
+describe('async seamless auth tests', () => {
+ before(waitUntilReady);
+ afterEach(cleanup);
+
+ it('set remote db', () => {
+ return PouchDB.setSeamlessAuthRemoteDB(url, {auth: HTTP_AUTH})
+ .then((resp) => {
+ should.not.exist(resp);
+ should.not.exist(PouchDB.unsetSeamlessAuthRemoteDB());
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/signatures.js
new file mode 100644
index 0000000000..5490665c1e
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/signatures.js
@@ -0,0 +1,13 @@
+const {waitUntilReady, cleanup, PouchDB} = require('./utils');
+
+describe('signatures', () => {
+ before(waitUntilReady);
+ afterEach(cleanup);
+
+ it('seamless auth', () => {
+ const promise = PouchDB.seamlessSession(() => {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ return promise;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/utils.js
new file mode 100644
index 0000000000..29baeb4211
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-seamless-auth/utils.js
@@ -0,0 +1,10 @@
+const stuff = require('../testutils');
+const SeamlessAuth = require('../../packages/node_modules/pouchdb-seamless-auth');
+
+stuff.waitUntilReady = () => SeamlessAuth(stuff.PouchDB);
+
+stuff.cleanup = () => {
+ return new stuff.PouchDB('_users').destroy();
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-security/features.js b/packages/pouchdb-server-packages/tests/pouchdb-security/features.js
new file mode 100644
index 0000000000..ef643736bf
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-security/features.js
@@ -0,0 +1,375 @@
+const {PouchDB, Security, setup, teardown} = require('./utils');
+
+let db;
+
+describe('Security tests', () => {
+
+ beforeEach(() => {
+ db = setup();
+ });
+
+ afterEach(teardown);
+
+ it('get when unset', () => {
+ return db.getSecurity()
+ .then(resp => {
+ resp.should.eql({});
+ });
+ });
+
+ it('put', () => {
+ const secObj = {members: {roles: 'test'}};
+ return db.putSecurity(secObj)
+ .then(resp => {
+ resp.should.eql({ok: true});
+ return db.getSecurity();
+ })
+ .then(resp => {
+ resp.should.eql(secObj);
+ });
+ });
+});
+
+describe('Installed security tests', () => {
+ const rightlessUser = {name: null, roles: []};
+ const before = () => {
+ db = setup();
+ db.installSecurityMethods();
+ return db.putSecurity({
+ admins: {
+ names: ['admin'],
+ roles: ['admin']
+ },
+ members: {
+ names: ['member'],
+ roles: ['member']
+ }
+ });
+ };
+
+ beforeEach(before);
+
+ afterEach(() => {
+ db.uninstallSecurityMethods();
+ return teardown();
+ });
+
+ it('basic', () => {
+ // lets setUp() and tearDown() do all the work...
+ });
+
+ it('double install', () => {
+ //1 install: setUp()
+ //2 install:
+ (()=> db.installSecurityMethods()).should.throw(Error);
+ });
+
+ it('double uninstall', () => {
+ //1 remove:
+ db.uninstallSecurityMethods();
+ //2 remove:
+ (() => db.uninstallSecurityMethods()).should.throw(Error);
+ //recover for tearDown()
+ db.installSecurityMethods();
+ });
+
+ it('all docs', () => {
+ return db.allDocs({userCtx: {
+ name: 'admin',
+ roles: []
+ }}).then(resp => {
+ resp.total_rows.should.equal(0);
+ return db.allDocs({userCtx: {
+ 'name': 'unknown',
+ 'roles': []
+ }});
+ }).catch(err => {
+ err.status.should.equal(401);
+ err.name.should.equal('unauthorized');
+ err.message.should.equal('You are not authorized to access this db.');
+ });
+ });
+
+ it('query', () => {
+ const userCtx = {
+ name: null,
+ roles: ['member']
+ };
+ return db.query({map: null}, {userCtx: userCtx})
+ .catch(err => {
+ err.status.should.equal(401);
+ return db.query('unexisting-view-func', {userCtx: userCtx});
+ })
+ .catch(err2 => {
+ err2.status.should.equal(404);
+ });
+ });
+
+ it('compact', () => {
+ //member may not compact
+ return db.compact({userCtx: {
+ name: 'member',
+ roles: []
+ }})
+ .catch(err => {
+ err.status.should.equal(401);
+ return db.compact({userCtx: {
+ name: 'admin',
+ roles: []
+ }});
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return db.compact();
+ })
+ .then(resp => {
+ //admin may compact
+ //server admin (admin party = default) may compact
+ resp.ok.should.be.ok;
+ });
+
+ });
+
+ it('doc modifications', () => {
+ return db.post({}, {userCtx: rightlessUser})
+ .catch(err => {
+ err.status.should.equal(401);
+ return db.post({});
+ })
+ .then(resp => {
+ return db.put({}, resp.id, resp.rev);
+
+ })
+ .then(resp2 => {
+ resp2.rev.indexOf('2-').should.equal(0);
+ return db.remove(resp2.id, resp2.rev);
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return db.bulkDocs([{}, {_id: '_design/test'}], {userCtx:{
+ name: null,
+ roles: ['a', 'member']
+ }});
+ })
+ .then(resp3 => {
+ let errorSeen = false;
+ let successSeen = false;
+ resp3.forEach(result => {
+ if (result.status === 401) {
+ errorSeen = true;
+ }
+ if ((result.rev || '').indexOf('1-') === 0) {
+ successSeen = true;
+ }
+ });
+ errorSeen.should.be.ok;
+ successSeen.should.be.ok;
+ });
+ });
+
+ it('post without login', () => {
+ return db.putSecurity({})
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return db.post({}, {userCtx: rightlessUser});
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ });
+ });
+
+ it('revs diff', () => {
+ return db.revsDiff({})
+ .then(resp => {
+ resp.should.eql({});
+ });
+ });
+
+ it('attachment', () => {
+ const buf = new Buffer('');
+ let resp;
+ return db.putAttachment('docId', 'attachmentId', buf, 'text/plain')
+ .then(resp1 => {
+ resp = resp1;
+ resp.ok.should.be.ok;
+ return db.getAttachment('docId', 'attachmentId');
+ })
+ .then(resp2 => {
+ resp2.type.should.equal('text/plain');
+ return db.putAttachment('docId', 'attachmentId', buf, 'text/plain', {userCtx: rightlessUser});
+ })
+ .catch(err => {
+ err.status.should.equal(401);
+ return db.removeAttachment(resp.id, 'attachmentId', resp.rev, {userCtx: rightlessUser});
+ })
+ .catch(err2 => {
+ err2.status.should.equal(401);
+ });
+ });
+
+ it('view cleanup', () => {
+ return db.viewCleanup({userCtx: rightlessUser})
+ .catch(err => {
+ err.status.should.equal(401);
+ });
+ });
+
+ it('get security', () => {
+ return db.getSecurity({userCtx: {name: 'member', roles: []}})
+ .then(resp => {
+ resp.should.have.property('admins');
+ });
+ });
+
+ it('replicate', () => {
+ return db.replicate.to('testb')
+ .then(resp => {
+ resp.ok.should.be.ok;
+ });
+ });
+
+ it('remove alternative signature', () => {
+ return db.remove('id', 'rev', {userCtx: rightlessUser})
+ .catch(err => {
+ err.status.should.equal(401);
+ });
+ });
+
+ it('show', () => {
+ return db.show('some/non-existing/values', {secObj: {
+ admins: {'names': ['unknown']}
+ }, userCtx: {
+ name: 'unknown',
+ roles: []
+ }})
+ .catch(err => {
+ err.status.should.equal(404); // not 401!
+ });
+ });
+
+ it('destroy', () => {
+ return db.destroy()
+ .then(resp => {
+ resp.ok.should.be.ok;
+ return before();
+ })
+ .then(() => {
+ return db.destroy({userCtx: rightlessUser});
+ })
+ .catch(err => {
+ err.status.should.equal(401);
+ });
+ });
+
+ it('changes', () => {
+ const result = db.changes({live: true, userCtx: {
+ name: 'marten',
+ roles: ['member']
+ }});
+ result.on('change', () => {});
+ result.cancel();
+ });
+});
+
+describe('Static security methdods installed', () => {
+ beforeEach(() => {
+ Security.installStaticSecurityMethods(PouchDB);
+ });
+ afterEach(() => {
+ Security.uninstallStaticSecurityMethods(PouchDB);
+ });
+
+ it('basic', () => {
+ // beforeEach() and afterEach()
+ });
+ it('installing twice', () => {
+ //1: beforeEach
+ //2:
+ (() => {
+ Security.installStaticSecurityMethods(PouchDB);
+ }).should.throw(/already installed/);
+ });
+
+ it('uninstalling twice', () => {
+ Security.uninstallStaticSecurityMethods(PouchDB);
+ (() => {
+ Security.uninstallStaticSecurityMethods(PouchDB);
+ }).should.throw(/not installed/);
+
+ // for afterEach
+ Security.installStaticSecurityMethods(PouchDB);
+ });
+
+ it('destroy', () => {
+ new PouchDB('test');
+ return PouchDB.destroy('test', {userCtx: {name: null, roles: []}})
+ .catch(err => {
+ err.status.should.equal(401);
+ // admin paty - should be no problem
+ return PouchDB.destroy({name: 'test'});
+ })
+ .then(resp => {
+ resp.ok.should.be.ok;
+ });
+
+ });
+
+ it('replicate', () => {
+ const db = new PouchDB('a');
+ return db.putSecurity({members: {names: ['hi!']}})
+ .then(() => {
+ return PouchDB.replicate(new PouchDB('a'), 'b', {userCtx: {name: null, roles: []}});
+ })
+ .catch(err => {
+ err.status.should.equal(401);
+ return PouchDB.replicate('a', 'b');
+ })
+ .then(resp => {
+ // admin party - should be no problem
+ resp.ok.should.be.ok;
+ });
+ });
+
+ it('new() alternate signature', () => {
+ return PouchDB.new({name: 'test', userCtx: {name: null, roles: []}})
+ .catch(err => {
+ err.status.should.equal(401);
+ });
+ });
+});
+
+describe('Async security tests', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('basic', done => {
+ const secObj = {members: {roles: 'test'}};
+
+ db.putSecurity(secObj, (err, resp) => {
+ if (err) {
+ return done(err);
+ }
+ resp.should.eql({ok: true});
+
+ db.getSecurity((err, resp2) => {
+ resp2.should.eql(secObj);
+ done(err);
+ });
+ });
+ });
+
+ it('put attachment', done => {
+ db.installSecurityMethods();
+
+ db.putAttachment('docId', 'attachmentId', new Buffer(''), 'text/plain', {userCtx: {
+ name: null,
+ roles: []
+ }}, (err, resp) => {
+ resp.ok.should.be.ok;
+ db.uninstallSecurityMethods();
+ done(err);
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-security/http.js b/packages/pouchdb-server-packages/tests/pouchdb-security/http.js
new file mode 100644
index 0000000000..d856270b7c
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-security/http.js
@@ -0,0 +1,28 @@
+const {setupHTTP, teardown} = require('./utils');
+
+describe('HTTP tests', () => {
+ let db;
+ beforeEach(() => {
+ db = setupHTTP();
+ });
+ afterEach(() => {
+ //restore security document so the db can be easily deleted.
+ return db.putSecurity({})
+ .then(teardown);
+ });
+
+ it('should function', () => {
+ return db.getSecurity()
+ .then(security => {
+ security.should.eql({});
+ return db.putSecurity({a: 1});
+ })
+ .then(resp => {
+ resp.should.eql({ok: true});
+ return db.getSecurity();
+ })
+ .then(security => {
+ security.should.eql({a: 1});
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-security/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-security/utils.js
new file mode 100644
index 0000000000..5226f40386
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-security/utils.js
@@ -0,0 +1,9 @@
+const Security = require('../../packages/node_modules/pouchdb-security');
+const Show = require('../../packages/node_modules/pouchdb-show');
+const stuff = require('../testutils');
+
+stuff.PouchDB.plugin(Security);
+stuff.Security = Security;
+stuff.PouchDB.plugin(Show);
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-show/features.js b/packages/pouchdb-server-packages/tests/pouchdb-show/features.js
new file mode 100644
index 0000000000..213546b2ad
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-show/features.js
@@ -0,0 +1,336 @@
+const {setup, teardown, showDocument, shouldThrowError, should, checkUserAgent, checkUuid} = require('./utils');
+
+let db;
+
+describe('Sync show tests', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put(showDocument);
+ });
+ afterEach(teardown);
+
+ it('should fail when given an invalid response object', () => {
+ return shouldThrowError(() => db.show('test/invalidRespObject'))
+ .then((err) => {
+ err.status.should.equal(500);
+ err.name.should.equal('external_response_error');
+ err.message.should.equal('Invalid data from external server: {<<"abc">>,<<"test">>}');
+ });
+ });
+
+ it('show without doc with a browser-like env', () => {
+ global.window = {navigator: require('navigator')};
+ const cleanup = () => { delete global.window; };
+ return db.show('test/myshow')
+ .then((result) => {
+ result.code.should.equal(200);
+ })
+ .then(cleanup, cleanup);
+ });
+
+ it('invalid return type and provides', () => {
+ return db.show('test/invalidReturnTypeAndProvides')
+ .then((result) => {
+ result.code.should.equal(200);
+ result.body.should.equal('');
+ });
+ });
+
+ it('throwing error', () => {
+ return shouldThrowError(() => db.show('test/throwingError'))
+ .then((err) => {
+ err.status.should.equal(500);
+ });
+ });
+
+ it('throwing error in provides', () => {
+ return shouldThrowError(() => db.show('test/throwingErrorInProvides'))
+ .then((err) => {
+ err.status.should.equal(500);
+ });
+ });
+
+ it('show without doc', () => {
+ return db.show('test/myshow')
+ .then((result) => {
+ result.code.should.equal(200);
+ result.headers['Content-Type'].should.equal('text/html; charset=utf-8');
+ result.headers.Vary.should.equal('Accept');
+ result.body.should.equal('no doc');
+ });
+ });
+
+ it('show with doc', () => {
+ return db.post({_id: 'mytest', description: 'Hello World!'})
+ .then(() => db.show('test/myshow/mytest'))
+ .then((result) => {
+ result.body.should.equal('Hello World!');
+ });
+ });
+
+ it('overwrite args', () => {
+ return db.show('test/args', {method: 'POST'})
+ .then((resp) => {
+ const req = JSON.parse(resp.body).args[1];
+ req.method.should.equal('POST');
+ });
+ });
+
+ it('overwrite header', () => {
+ return db.show('test/args', {headers: {Host: 'example.com'}})
+ .then((resp) => {
+ const req = JSON.parse(resp.body).args[1];
+ // check if the header update was succesful.
+ req.headers.Host.should.equal('example.com');
+ // check if other headers (test subject is Accept) are still set.
+ req.headers.Accept.should.equal('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
+ });
+ });
+
+ it('show args', () => {
+ return db.show('test/args')
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+
+ // test doc - well, the unavailability of it...
+ should.equal(doc, null);
+
+ // test request object
+ req.body.should.equal('undefined');
+ req.cookie.should.eql({});
+ req.form.should.eql({});
+
+ req.headers.Host.should.equal('localhost:5984');
+ req.headers.Accept.should.equal('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
+ req.headers['Accept-Language'].should.contain('en');
+ req.headers['Accept-Language'].should.contain('en-us');
+ checkUserAgent(req.headers['User-Agent']);
+
+ should.equal(req.id, null);
+ req.info.db_name.should.equal('test');
+ req.info.should.have.property('update_seq');
+ req.method.should.equal('GET');
+ req.path.should.eql(['test', '_design', 'test', '_show', 'args']);
+ req.peer.should.equal('127.0.0.1');
+ req.query.should.eql({});
+ req.raw_path.should.equal('/test/_design/test/_show/args');
+ req.requested_path.should.eql(['test', '_design', 'test', '_show', 'args']);
+ req.secObj.should.eql({});
+ req.userCtx.should.eql({
+ db: 'test',
+ name: null,
+ roles: [
+ '_admin'
+ ]
+ });
+ checkUuid(req.uuid);
+ });
+ });
+
+ it('unexisting doc', () => {
+ return db.show('test/args/abc')
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+ should.equal(doc, null);
+ req.id.should.equal('abc');
+ req.path.should.contain('abc');
+ });
+ });
+
+ it('with design doc as arg', () => {
+ return db.show('test/args/_design/test')
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+ req.id.should.equal('_design/test');
+ req.raw_path.should.equal('/test/_design/test/_show/args/_design/test');
+ doc.should.have.property('shows');
+ });
+ });
+
+ it('with fake design doc as arg', () => {
+ return db.show('test/args/_design')
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+ should.equal(doc, null);
+ req.id.should.equal('_design');
+ req.raw_path.should.equal('/test/_design/test/_show/args/_design');
+ });
+ });
+
+ it('setting query', () => {
+ return db.show('test/args', {query: {a: 1}})
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+ should.equal(doc, null);
+ req.raw_path.slice(-4).should.equal('?a=1');
+ req.requested_path.should.eql(['test', '_design', 'test', '_show', 'args?a=1']);
+ req.path.should.eql(['test', '_design', 'test', '_show', 'args']);
+ });
+ });
+
+ it('setting form', () => {
+ return db.show('test/args', {form: {a: 1}})
+ .then((resp) => {
+ const [doc, req] = JSON.parse(resp.body).args;
+ should.equal(doc, null);
+ req.body.should.equal('a=1');
+ req.headers['Content-Type'].should.equal('application/x-www-form-urlencoded');
+ req.headers['Content-Length'].should.equal('3');
+ req.method.should.equal('POST');
+ });
+ });
+
+ it('unexisting design doc', () => {
+ return shouldThrowError(() => db.show('abc/args'))
+ .then((err) => {
+ err.name.should.equal('not_found');
+ err.message.should.equal('missing');
+ });
+ });
+
+ it('unexisting show function', () => {
+ return shouldThrowError(() => db.show('test/unexisting-show'))
+ .then((err) => {
+ err.status.should.equal(404);
+ err.name.should.equal('not_found');
+ err.message.should.equal("missing show function unexisting-show on design doc _design/test");
+ });
+ });
+
+ it('providers default', () => {
+ return db.show('test/usingProviders')
+ .then((resp) => {
+ resp.code.should.equal(200);
+ resp.body.should.equal('Hello World!
');
+ resp.headers['Content-Type'].should.equal('text/html; charset=utf-8');
+ resp.headers.Vary.should.equal('Accept');
+ });
+ });
+
+ it('providers format', () => {
+ return db.show('test/usingProviders', {query: {format: 'json'}})
+ .then((resp) => {
+ resp.code.should.equal(200);
+ JSON.parse(resp.body).should.eql({message: 'Hello World!'});
+ resp.headers['Content-Type'].should.equal('application/json');
+ resp.headers.Vary.should.equal('Accept');
+ });
+ });
+
+ it('providers accept header', () => {
+ return db.show('test/usingProviders', {headers: {Accept: 'text/css,*/*;q=0.1'}})
+ .then((resp) => {
+ resp.body.should.equal("body {content: 'Hello World!'}");
+ resp.headers['Content-Type'].should.equal('text/css');
+ });
+ });
+
+ it('custom provider', () => {
+ return db.show('test/usingProviders', {headers: {Accept: 'application/octet-stream'}})
+ .then((resp) => {
+ resp.code.should.equal(200);
+ resp.should.not.have.property('body');
+ new Buffer(resp.base64, 'base64').toString('ascii').should.equal('Hello World!');
+ resp.headers['Content-Type'].should.equal('application/octet-stream; charset=ascii');
+ });
+ });
+
+ it('unexisting format', () => {
+ return shouldThrowError(() => db.show('test/usingProviders', {query: {format: 'text'}}))
+ .then((err) => {
+ err.status.should.equal(500);
+ err.name.should.equal('render_error');
+ err.message.should.equal("the format option is set to 'text', but there's no provider registered for that format.");
+ });
+ });
+
+ it('no matching provider', () => {
+ return shouldThrowError(() => db.show('test/usingProviders', {headers: {Accept: 'text/plain'}}))
+ .then((err) => {
+ err.status.should.equal(406);
+ err.name.should.equal('not_acceptable');
+ err.message.indexOf("Content-Type(s) text/plain not supported, try one of: ").should.equal(0);
+ err.message.should.contain('application/json');
+ });
+ });
+
+ it('old style json', () => {
+ return db.show('test/oldStyleJson')
+ .then((resp) => {
+ resp.headers['Content-Type'].should.equal('application/json');
+ JSON.parse(resp.body).should.eql({old_style: 'json'});
+ });
+ });
+
+ it('format when empty show function', () => {
+ return db.show('test/empty')
+ .then((resp) => {
+ resp.code.should.equal(200);
+ resp.headers['Content-Type'].should.equal('text/html; charset=utf-8');
+ resp.body.should.equal('');
+ });
+ });
+
+ it('no function', () => {
+ return shouldThrowError(() => db.show('test/nofunc'))
+ .then((err) => {
+ err.status.should.equal(500);
+ err.name.should.equal('compilation_error');
+ });
+ });
+
+ it('invalid syntax', () => {
+ return shouldThrowError(() => db.show('test/invalidsyntax'))
+ .then((err) => {
+ err.status.should.equal(500);
+ err.name.should.equal('compilation_error');
+ });
+ });
+
+ it('no doc with error response', () => {
+ return shouldThrowError(() => db.show('test/throwingError/some-doc'))
+ .then((err) => {
+ err.status.should.equal(404);
+ err.name.should.equal('not_found');
+ err.message.should.equal('document not found');
+ });
+ });
+});
+
+describe('Sync show tests with empty design doc', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put({_id: '_design/test'});
+ });
+ afterEach(teardown);
+
+ it('test', () => {
+ return shouldThrowError(() => db.show('test/test/test'))
+ .then((err) => {
+ err.status.should.equal(404);
+ });
+ });
+});
+
+describe('async show tests', () => {
+ beforeEach(() => {
+ db = setup();
+ return db.put(showDocument);
+ });
+ afterEach(teardown);
+
+ it('should work without doc', () => {
+ return db.show('test/myshow')
+ .then((result) => {
+ result.body.should.equal('no doc');
+ });
+ });
+
+ it('should fail with an unexisting ddoc', () => {
+ return db.show('abc/args')
+ .catch((err) => {
+ err.name.should.equal('not_found');
+ err.message.should.equal('missing');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-show/http.js b/packages/pouchdb-server-packages/tests/pouchdb-show/http.js
new file mode 100644
index 0000000000..c98f089f0d
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-show/http.js
@@ -0,0 +1,51 @@
+const {setupHTTP, teardown, showDocument, should, BASE_URL, checkUserAgent, checkUuid} = require('./utils');
+
+let db;
+
+describe('http', () => {
+ beforeEach(() => {
+ db = setupHTTP();
+ return db.put(showDocument);
+ });
+ afterEach(teardown);
+
+ it('show', () => {
+ return db.show('test/args', {body: 'Hello World!', headers: {'Content-Type': 'text/plain'}})
+ .then((resp) => {
+ resp.code.should.equal(200);
+ resp.headers['Content-Type'].should.equal('text/html; charset=utf-8');
+
+ const [doc, req] = JSON.parse(resp.body).args;
+
+ // test doc - well, the unavailability of it...
+ should.equal(doc, null);
+
+ // test request object
+ req.body.should.equal('Hello World!');
+ delete req.cookie['AuthSession']; // Ignore AuthSession
+ req.cookie.should.eql({});
+ req.form.should.eql({});
+
+ BASE_URL.should.contain(req.headers.Host);
+ req.headers.Accept.should.equal('*/*, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
+ req.headers['Content-Type'].should.equal('text/plain');
+ req.headers['Accept-Language'].should.contain('en');
+ req.headers['Accept-Language'].should.contain('en-us');
+ checkUserAgent(req.headers['User-Agent']);
+
+ should.equal(req.id, null);
+ req.info.db_name.should.equal('pouchdb-plugin-helper-db');
+ req.info.should.have.property('update_seq');
+ req.method.should.equal('POST');
+ req.path.should.eql(['pouchdb-plugin-helper-db', '_design', 'test', '_show', 'args']);
+ req.peer.should.equal('127.0.0.1');
+ req.query.should.eql({});
+ req.raw_path.should.equal('/pouchdb-plugin-helper-db/_design/test/_show/args');
+ req.requested_path.should.eql(['pouchdb-plugin-helper-db', '_design', 'test', '_show', 'args']);
+ req.secObj.should.eql({});
+ req.userCtx.db.should.equal('pouchdb-plugin-helper-db');
+ req.userCtx.should.have.property('name');
+ checkUuid(req.uuid);
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-show/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-show/signatures.js
new file mode 100644
index 0000000000..77116d34e8
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-show/signatures.js
@@ -0,0 +1,15 @@
+const {setup, teardown} = require('./utils');
+
+let db;
+
+describe('signatures', () => {
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+ it('show', () => {
+ const promise = db.show('test/test/test', () => {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-show/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-show/utils.js
new file mode 100644
index 0000000000..8832c9bdaa
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-show/utils.js
@@ -0,0 +1,76 @@
+const stuff = require('../testutils');
+const Show = require('../../packages/node_modules/pouchdb-show');
+
+stuff.PouchDB.plugin(Show);
+
+stuff.showDocument = {
+ _id: '_design/test',
+ shows: {
+ myshow: `function (doc, req) {
+ if (!doc) {
+ return {body: 'no doc'}
+ } else {
+ return {body: doc.description}
+ }
+ };\n`,
+ args: `function (doc, req) {
+ return toJSON({args: [doc, req]});
+ }`,
+ usingProviders: `function (doc, req) {
+ provides('json', function () {
+ return toJSON({message: 'Hello World!'});
+ });
+ provides('html', function () {
+ log({'type': 'is', 'html': 'for', 'this': 'func'})
+ return 'Hello World!
';
+ });
+ provides('css', function () {
+ return "body {content: 'Hello World!'}";
+ });
+ registerType('ascii-binary', 'application/octet-stream; charset=ascii');
+ provides('ascii-binary', function () {
+ return {
+ 'base64': 'SGVsbG8gV29ybGQh'
+ };
+ });
+ }`,
+ oldStyleJson: `function (doc, req) {
+ return {
+ json: {
+ old_style: 'json'
+ }
+ };
+ }`,
+ empty: `function (doc, req) {}`,
+ nofunc: `'Hello World!'`,
+ invalidsyntax: `function (doc, req)) {}`,
+ invalidReturnTypeAndProvides: `function (doc, req) {
+ provides('html', function () {
+ return 42;
+ });
+ }`,
+ throwingError: `function (doc, req) {
+ throw new Error('Hello World!')
+ }`,
+ throwingErrorInProvides: `function (doc, req) {
+ provides('text', function () {
+ throw new Error('Hello World!');
+ });
+ }`,
+ invalidRespObject: `function (doc, req) {
+ return {body: 'test', abc: 'test'};
+ }`
+ }
+};
+
+stuff.checkUserAgent = ua => {
+ ua.should.contain('Mozilla');
+ ua.should.contain('Gecko');
+};
+
+stuff.checkUuid = uuid => {
+ uuid.should.be.a('string');
+ uuid.length.should.be.greaterThan(30);
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-size/test.js b/packages/pouchdb-server-packages/tests/pouchdb-size/test.js
new file mode 100644
index 0000000000..4f43120c07
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-size/test.js
@@ -0,0 +1,144 @@
+var should = require('chai').should();
+var PouchDB = require('pouchdb');
+var memdown = require('memdown');
+var sqldown = require('sqldown');
+var medeadown = require('medeadown');
+var jsondown = require('jsondown');
+var locket = require('locket');
+var Promise = require('bluebird');
+var fse = Promise.promisifyAll(require("fs-extra"));
+
+PouchDB.plugin(require('pouchdb-size'));
+
+describe('pouchdb-size tests', function () {
+ before(function () {
+ return fse.mkdirAsync("b");
+ });
+
+ after(function () {
+ return new PouchDB("a").destroy().then(function () {
+ return new PouchDB('b/chello world!').destroy();
+ }).then(function () {
+ return fse.rmdirAsync("b");
+ }).then(function () {
+ return new PouchDB("e", {db: sqldown}).destroy();
+ }).then(function () {
+ return new PouchDB("./f", {db: medeadown}).destroy();
+ }).then(function () {
+ return fse.removeAsync("g");
+ }).then(function () {
+ return fse.removeAsync("h");
+ });
+ });
+
+ it("should work in the normal case", function () {
+ var db = new PouchDB('a');
+ db.installSizeWrapper();
+ var promise = db.info()
+ .then(function (info) {
+ info.disk_size.should.be.greaterThan(0);
+ });
+ promise.should.have.property("then");
+ return promise;
+ });
+
+ it("should work with a weird name and a prefix", function () {
+ var db = new PouchDB('hello world!', {prefix: "b/c"});
+ db.installSizeWrapper();
+ return db.info()
+ .then(function (info) {
+ info.disk_size.should.be.greaterThan(0);
+ });
+ });
+
+ it("shouldn't disrupt a non-leveldb leveldown adapter", function () {
+ var db = new PouchDB('d', {db: memdown});
+ db.installSizeWrapper();
+ var promise = db.info()
+ .then(function (info) {
+ should.not.exist(info.disk_size);
+ info.db_name.should.equal("d");
+
+ return db.getDiskSize()
+ .then(function (size) {
+ should.not.exist(size);
+ })
+ .catch(function (err) {
+ //getDiskSize() should provide a more solid error.
+ err.should.exist;
+ });
+ });
+ promise.should.have.property("then");
+ return promise;
+ });
+
+ it("shouldn't disrupt non-leveldown adapter", function (done) {
+ //mock object
+ var db = {
+ type: function () {
+ return "http";
+ }
+ };
+ PouchDB.prototype.getDiskSize.call(db, function (err, size) {
+ err.should.exist;
+ should.not.exist(size);
+ done();
+ });
+ });
+
+ // PouchDB doesn't create a directory with sqldown, only a sqlite file
+ // which means that at this point `pouchdb-size` is not compatible with
+ // sqldown.
+ it.skip("should work with sqldown", function () {
+ var db = new PouchDB("e", {db: sqldown});
+ db.installSizeWrapper();
+
+ return db.getDiskSize()
+ .then(function (size) {
+ size.should.be.greaterThan(0);
+ return db.info();
+ })
+ .then(function (info) {
+ info.db_name.should.equal("e");
+ info.disk_size.should.be.greaterThan(0);
+ });
+ });
+
+ it("should work with medeadown", function () {
+ // ./f instead of f is needed for medeadown.
+ var db = new PouchDB("./f", {db: medeadown});
+ db.installSizeWrapper();
+
+ return db.info()
+ .then(function (info) {
+ info.db_name.should.equal("./f");
+ info.disk_size.should.be.greaterThan(0);
+ });
+ });
+
+ it("should work with jsondown", function () {
+ var db = new PouchDB("g", {db: jsondown});
+ db.installSizeWrapper();
+
+ return db.getDiskSize()
+ .then(function (size) {
+ size.should.be.greaterThan(0);
+ return db.info();
+ })
+ .then(function (info) {
+ info.db_name.should.equal("g");
+ info.disk_size.should.be.greaterThan(0);
+ });
+ });
+
+ it("should work with locket", function () {
+ var db = new PouchDB("h", {db: locket});
+ db.installSizeWrapper();
+
+ return db.info()
+ .then(function (info) {
+ info.db_name.should.equal("h");
+ info.disk_size.should.be.greaterThan(0);
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-update/features.js b/packages/pouchdb-server-packages/tests/pouchdb-update/features.js
new file mode 100644
index 0000000000..69de6b21e6
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-update/features.js
@@ -0,0 +1,114 @@
+const {setup, setupWithDoc, teardown, updateDocument, should, shouldThrowError} = require('./utils');
+
+describe('Sync update tests', () => {
+ let db;
+
+ beforeEach(() => {
+ return setupWithDoc()
+
+ .then((result) => {
+ db = result.db;
+ return db.put(updateDocument);
+ });
+ });
+ afterEach(teardown);
+
+ it('args', () => {
+ return db.update('test/args/mytest', {query: {'a': 3}})
+
+ .then((response) => {
+ const [doc, req] = JSON.parse(response.body);
+ doc.test.should.be.ok;
+ req.id.should.equal('mytest');
+ req.raw_path.should.equal('/test/_design/test/_update/args/mytest?a=3');
+ });
+ });
+
+ it('args without doc', () => {
+ return db.update('test/args', {withValidation: true})
+
+ .then((response) => {
+ const [doc, req] = JSON.parse(response.body);
+ should.equal(doc, null);
+ req.should.not.have.property('withValidation');
+ });
+ });
+
+ it('missing function', () => {
+ shouldThrowError(() => {
+ return db.update('test/missing/mytest');
+ })
+
+ .then((error) => {
+ error.toString().should.be.ok;
+ error.name.should.equal('not_found');
+ error.message.should.equal('missing update function missing on design doc _design/test');
+ });
+ });
+
+ it('saving', () => {
+ db.update('test/save-adding-date', {body: JSON.stringify({
+ _id: 'test',
+ name: 'Today'
+ })})
+
+ .then((response) => {
+ response.body.should.equal('Hello World!');
+
+ return db.get('test');
+ })
+
+ .then((doc) => {
+ doc.updated.should.be.ok;
+ doc.name.should.equal('Today');
+ });
+ });
+});
+
+describe('Async update tests', () => {
+ let db;
+
+ beforeEach(() => {
+ db = setup();
+ return db.put(updateDocument);
+ });
+ afterEach(teardown);
+
+ it('exception', () => {
+ return db.update('test/exception')
+
+ .then(() => {
+ 'db.update("test/exception") should not resolve'.should.equal('');
+ })
+
+ .catch((error) => {
+ error.status.should.equal(500);
+ error.name.should.equal('ReferenceError');
+ error.message.should.contain('abc');
+ });
+ });
+});
+
+describe('Async update with empty design doc', () => {
+ let db;
+
+ beforeEach(() => {
+ db = setup();
+ return db.put({_id: '_design/test'});
+ });
+ afterEach(teardown);
+
+ it('basic', () => {
+ return db.update('test/missing')
+
+ .then(() => {
+ 'db.update("test/missing") should not resolve'.should.equal('');
+ })
+
+ .catch((error) => {
+ error.status.should.equal(404);
+ error.name.should.equal('not_found');
+ error.message.should.equal('missing update function missing on design doc _design/test');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-update/http.js b/packages/pouchdb-server-packages/tests/pouchdb-update/http.js
new file mode 100644
index 0000000000..b411c57a58
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-update/http.js
@@ -0,0 +1,21 @@
+const {setupHTTP, teardown, updateDocument, should} = require('./utils');
+
+let db;
+
+describe('http tests', () => {
+ beforeEach(() => {
+ db = setupHTTP();
+ return db.put(updateDocument);
+ });
+ afterEach(teardown);
+
+ it('update', () => {
+ return db.update('test/args/my-id')
+
+ .then((result) => {
+ const [doc, req] = JSON.parse(result.body);
+ should.not.exist(doc);
+ req.id.should.equal('my-id');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-update/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-update/signatures.js
new file mode 100644
index 0000000000..f1cf25f9ab
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-update/signatures.js
@@ -0,0 +1,15 @@
+const {setup, teardown} = require('./utils');
+
+describe('signature tests', () => {
+ let db;
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ it('update', () => {
+ const promise = db.update('test/test/test', () => {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-update/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-update/utils.js
new file mode 100644
index 0000000000..0e28999ac4
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-update/utils.js
@@ -0,0 +1,23 @@
+const stuff = require('../testutils');
+const Update = require('../../packages/node_modules/pouchdb-update');
+
+stuff.PouchDB.plugin(Update);
+
+stuff.updateDocument = {
+ _id: "_design/test",
+ updates: {
+ args: `function (doc, req) {
+ return [null, toJSON([doc, req])];
+ }`,
+ exception: `function (doc, req) {
+ return abc;
+ }`,
+ 'save-adding-date': `function (oldDoc, req) {
+ var doc = JSON.parse(req.body);
+ doc.updated = new Date();
+ return [doc, "Hello World!"];
+ }`
+ }
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-validation/features.js b/packages/pouchdb-server-packages/tests/pouchdb-validation/features.js
new file mode 100644
index 0000000000..7e89ccf17e
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-validation/features.js
@@ -0,0 +1,510 @@
+const {setup, setupWithDoc, setupWithDocAndAttachment, teardown, should, shouldThrowError, onlyTestValidationDoc} = require('./utils');
+
+describe('basic validation tests', () => {
+ let db;
+
+ beforeEach(() => {
+ db = setup();
+ return db.put(onlyTestValidationDoc);
+ });
+
+ afterEach(teardown);
+
+ it('should allow put', () => {
+ return db.validatingPut({_id: 'test'})
+
+ .then((doc) => {
+ doc.ok.should.be.ok;
+ });
+ });
+ it('should allow post', () => {
+ return db.validatingPost({_id: 'test'})
+
+ .then((doc) => {
+ doc.ok.should.be.ok;
+ });
+ });
+ it('should allow remove', () => {
+ return db.put({_id: 'test'})
+
+ .then((info) => {
+ return db.validatingRemove({
+ _id: 'test',
+ _rev: info.rev
+ });
+ })
+
+ .then((rmInfo) => {
+ rmInfo.ok.should.be.ok;
+ });
+ });
+ it('should allow bulkDocs', () => {
+ return db.validatingBulkDocs([
+ {
+ _id: 'test'
+ }
+ ])
+
+ .then((resp) => {
+ resp[0].should.be.ok;
+ });
+ });
+ it('should allow putAttachment', (cb) => {
+ function getCb(resp) {
+ resp.toString('ascii').should.equal('Hello world!');
+ cb();
+ }
+ function putCb(err, resp) {
+ resp.ok.should.be.ok;
+ db.getAttachment('test', 'test').then(getCb);
+ }
+ const blob = new Buffer('Hello world!', 'ascii');
+ db.validatingPutAttachment('test', 'test', blob, "text/plain", putCb);
+ });
+ it('should fail', () => {
+ //setup - put an attachment
+ const blob = new Buffer('Hello world!', 'ascii');
+ return db.putAttachment('mytest', 'test', blob, 'text/plain')
+
+ .then((resp) => {
+ return shouldThrowError(() => {
+ return db.validatingRemoveAttachment('mytest', 'test', resp.rev);
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(403);
+ error.name.should.equal('forbidden');
+ });
+ });
+});
+
+describe('unauthorized validation tests', () => {
+ let db;
+ let rev;
+
+ beforeEach(() => {
+ return setupWithDoc()
+
+ .then((data) => {
+ db = data.db;
+ rev = data.rev;
+
+ return db.put({
+ _id: '_design/test',
+ validate_doc_update: `function (newDoc, oldDoc, userCtx, secObj) {
+ if (newDoc._id !== 'test') {
+ throw({unauthorized: 'only a document named "test" is allowed.'});
+ }
+ }`
+ });
+ });
+ });
+ afterEach(teardown);
+
+ function checkError(err) {
+ err.name.should.equal('unauthorized');
+ err.message.should.equal('only a document named "test" is allowed.');
+ }
+
+ it('should fail an invalid put', () => {
+ return shouldThrowError(() => {
+ return db.validatingPut({_id: 'test_invalid'});
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid post', () => {
+ return shouldThrowError(() => {
+ return db.validatingPost({});
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid remove', () => {
+ return shouldThrowError(() => {
+ return db.validatingPost({
+ _id: 'mytest',
+ _rev: rev
+ });
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid bulkDocs', () => {
+ // Also tests validatingBulkDocs with docs: [] property (which is
+ // deprecated, but still supported).
+ return db.validatingBulkDocs({
+ docs: [
+ {
+ _id: 'test_invalid'
+ }
+ ]
+ })
+
+ .then((resp) => {
+ checkError(resp[0]);
+ });
+ });
+});
+
+describe('forbidden validation tests', () => {
+ let db;
+ let rev;
+
+ beforeEach(() => {
+ return setupWithDoc()
+
+ .then((data) => {
+ db = data.db;
+ rev = data.rev;
+
+ return db.put(onlyTestValidationDoc);
+ });
+ });
+ afterEach(teardown);
+
+ function checkError(err) {
+ err.name.should.equal('forbidden');
+ err.message.should.equal("only a document named 'test' is allowed.");
+ }
+
+ it('should fail an invalid put', () => {
+ return shouldThrowError(() => {
+ return db.validatingPut({_id: 'test_invalid'});
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid post', () => {
+ return shouldThrowError(() => {
+ return db.validatingPost({});
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid remove', () => {
+ return shouldThrowError(() => {
+ return db.validatingRemove({_id: 'mytest', _rev: rev});
+ })
+
+ .then(checkError);
+ });
+ it('should fail an invalid bulk docs', () => {
+ return db.validatingBulkDocs([
+ {
+ _id: 'test_invalid'
+ },
+ {}
+ ])
+
+ .then((resp) => {
+ checkError(resp[0]);
+ checkError(resp[1]);
+ });
+ });
+ it('should never fail a design doc', () => {
+ // A design doc is always valid, so no matter the validate_doc_update
+ // function, the stuff below should succeed.
+ return db.validatingPut({
+ _id: '_design/mytest'
+ })
+
+ .then((resp) => {
+ resp.ok.should.be.ok;
+ });
+ });
+ it('should never fail a local doc', () => {
+ // A local doc is always valid, so no matter the validate_doc_update
+ // function, the stuff below should succeed.
+ return db.validatingPut({
+ _id: '_local/mytest'
+ });
+ });
+});
+
+describe('compilation error validation tests', () => {
+ let db;
+
+ beforeEach(() => {
+ db = setup();
+ });
+ afterEach(teardown);
+
+ function checkError(err) {
+ err.name.should.equal('compilation_error');
+ err.message.should.contain('Expression does not eval to a function.');
+ }
+
+ it('should fail syntax error', () => {
+ return db.put({
+ "_id": "_design/test",
+ "validate_doc_update": `function (newDoc, oldDoc, userCtx, secObj) {
+ return;
+ }324j3lkl;`
+ })
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.validatingPut({_id: 'test'});
+ });
+ })
+
+ .then(checkError);
+ });
+
+ it('should fail a non-function', () => {
+ return db.put({
+ _id: '_design/test',
+ validate_doc_update: "'a string instead of a function'"
+ })
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.validatingPut({_id: 'test'});
+ });
+ })
+
+ .then(checkError);
+ });
+});
+
+describe('exception validation tests', () => {
+ let db;
+ beforeEach(() => {
+ db = setup();
+
+ return db.put({
+ _id: '_design/test',
+ validate_doc_update: `function (newDoc, oldDoc, userCtx, secObj) {
+ //reference error
+ test;
+ }`
+ });
+ });
+ afterEach(teardown);
+
+ it('should fail for put()', () => {
+ return shouldThrowError(() => {
+ return db.validatingPut({_id: 'test'});
+ })
+
+ .then((err) => {
+ err.name.should.equal('ReferenceError');
+ //'test' is the name of the missing variable.
+ err.message.should.contain('test');
+ });
+ });
+});
+
+describe('attachment validation tests', () => {
+ let db;
+ let rev;
+ const forbiddenDesignDoc = {
+ _id: '_design/test',
+ validate_doc_update: `function (newDoc, oldDoc, userCtx, secObj) {
+ throw({forbidden: JSON.stringify(newDoc)});
+ }`
+ };
+
+ beforeEach(() => {
+ return setupWithDocAndAttachment()
+
+ .then((info) => {
+ db = info.db;
+ rev = info.attRev;
+ });
+ });
+ afterEach(teardown);
+
+ it('should succesfully remove an attachment', () => {
+ return db.validatingRemoveAttachment('attachment_test', 'text', rev);
+ });
+ it('shouldn’t remove the attachment when forbidden', () => {
+ return db.put(forbiddenDesignDoc)
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.validatingRemoveAttachment('attachment_test', 'text', rev);
+ });
+ })
+
+ .then((err) => {
+ err.name.should.equal('forbidden');
+ // checks if the newDoc argument is filled in correctly
+ err.message.should.contain('"_attachments":{}');
+ });
+ });
+ it('should succesfully put an attachment', () => {
+ return db.validatingPutAttachment('attachment_test2', 'text', new Buffer('tést', 'UTF-8'), 'text/plain');
+ });
+ it("shouldn't put an attachment when forbidden", () => {
+ return db.put(forbiddenDesignDoc)
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.validatingPutAttachment('attachment_test2', 'text', new Buffer('tést', 'UTF-8'), 'text/plain');
+ });
+ })
+
+ .then((err) => {
+ err.name.should.equal('forbidden');
+ // checks if the newDoc argument is filled in correctly
+ err.message.should.contain('text/plain');
+ });
+ });
+});
+
+describe('validation args tests', () => {
+ let db;
+ let rev;
+
+ beforeEach(() => {
+ return setupWithDoc()
+
+ .then((info) => {
+ db = info.db;
+ rev = info.rev;
+
+ return db.put({
+ _id: '_design/test',
+ validate_doc_update: `function (newDoc, oldDoc, userCtx, secObj) {
+ throw({forbidden: JSON.stringify({
+ newDoc: newDoc,
+ oldDoc: oldDoc,
+ userCtx: userCtx,
+ secObj: secObj
+ })});
+ }`
+ });
+ });
+ });
+ afterEach(teardown);
+
+ it.skip('should have the right args with a new doc', () => {
+ const doc = {_id: 'test'};
+
+ return shouldThrowError(() => {
+ return db.validatingPut(doc);
+ })
+
+ .then((err) => {
+ const i = JSON.parse(err.message);
+ i.newDoc.should.eql(doc);
+ should.not.exist(i.oldDoc);
+
+ i.userCtx.should.eql({
+ db: 'test',
+ name: null,
+ roles: ['_admin']
+ });
+ i.secObj.should.eql({});
+ });
+ });
+ it('should have the right args with an existing doc', () => {
+ const doc = {_id: 'mytest', _rev: rev};
+
+ return shouldThrowError(() => {
+ return db.validatingPut(doc);
+ })
+
+ .then((err) => {
+ const i = JSON.parse(err.message);
+ i.oldDoc.test.should.be.ok;
+ i.oldDoc._revisions.should.have.property('ids');
+ i.newDoc._revisions.should.have.property('ids');
+ });
+ });
+ it('should support changing the userCtx', () => {
+ const theUserCtx = {
+ db: 'test',
+ name: 'pypouchtest',
+ roles: ['the_boss']
+ };
+
+ return shouldThrowError(() => {
+ return db.validatingPost({}, {userCtx: theUserCtx});
+ })
+
+ .then((err) => {
+ const i = JSON.parse(err.message);
+ i.userCtx.should.eql(theUserCtx);
+ });
+ });
+ it('should support changing the security object', () => {
+ const theSecObj = {
+ admins: {
+ names: ['the_boss'],
+ roles: []
+ },
+ members: {
+ names: [],
+ roles: []
+ }
+ };
+
+ return shouldThrowError(() => {
+ return db.validatingPost({}, {secObj: theSecObj});
+ })
+
+ .then((err) => {
+ const i = JSON.parse(err.message);
+ i.secObj.should.eql(theSecObj);
+ });
+ });
+});
+
+describe('install validation methods tests', () => {
+ let db;
+
+ beforeEach(() => {
+ db = setup();
+ return db.put(onlyTestValidationDoc);
+ });
+ afterEach(teardown);
+
+ it('basics should work', () => {
+ db.installValidationMethods();
+
+ return shouldThrowError(() => {
+ return db.put({_id: 'mytest'});
+ })
+
+ .then((err) => {
+ err.status.should.equal(403);
+
+ db.uninstallValidationMethods();
+
+ return db.put({_id: 'mytest'});
+ })
+
+ .then((resp) => {
+ resp.ok.should.be.ok;
+ });
+ });
+ it('should fail when installing twice', () => {
+ db.installValidationMethods();
+ return shouldThrowError(() => {
+ return db.installValidationMethods();
+ })
+
+ .then((err) => {
+ err.name.should.equal('already_installed');
+ });
+ });
+ it('should fail uninstalling when not installed', () => {
+ return shouldThrowError(() => {
+ return db.uninstallValidationMethods();
+ })
+
+ .then((err) => {
+ err.name.should.equal('already_not_installed');
+ });
+ });
+ it('should support reinstalling methods', () => {
+ for (let i = 0; i < 2; i++) {
+ db.installValidationMethods();
+ db.uninstallValidationMethods();
+ }
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-validation/http.js b/packages/pouchdb-server-packages/tests/pouchdb-validation/http.js
new file mode 100644
index 0000000000..e99b115093
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-validation/http.js
@@ -0,0 +1,43 @@
+const {setupHTTP, teardown, shouldThrowError, onlyTestValidationDoc} = require('./utils');
+
+let db;
+function before() {
+ db = setupHTTP();
+}
+
+describe('signature http tests', () => {
+ beforeEach(before);
+ afterEach(teardown);
+
+ it('should work with post', () => {
+ // Tests one special validation case to complete JS coverage
+ return db.validatingPost({});
+ });
+});
+
+describe('http tests', () => {
+ beforeEach(before);
+ afterEach(teardown);
+ //FIXME: re-enable (related to bug report)
+ it.skip('should work', () => {
+ return db.put(onlyTestValidationDoc)
+
+ .then(() => {
+ return shouldThrowError(() => {
+ return db.validatingPost({});
+ });
+ })
+
+ .then((error) => {
+ error.status.should.equal(403);
+ error.name.should.equal('forbidden');
+ error.message.should.equal("only a document named 'test' is allowed.");
+
+ return db.validatingPut({_id: 'test'});
+ })
+
+ .then((response) => {
+ response.ok.should.be.ok;
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-validation/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-validation/signatures.js
new file mode 100644
index 0000000000..55c4d58c49
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-validation/signatures.js
@@ -0,0 +1,8 @@
+const {setup, teardown} = require('./utils');
+
+describe('callback usage', () => {
+ it('should allow passing in a callback', () => {
+ const db = setup();
+ return db.validatingPost({}, () => {}).then(teardown);
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-validation/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-validation/utils.js
new file mode 100644
index 0000000000..7fa24c3fc4
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-validation/utils.js
@@ -0,0 +1,14 @@
+const Validation = require('../../packages/node_modules/pouchdb-validation');
+const stuff = require('../testutils');
+
+stuff.PouchDB.plugin(Validation);
+stuff.onlyTestValidationDoc = {
+ _id: '_design/test',
+ validate_doc_update: `function (newDoc, oldDoc, userCtx, secObj) {
+ if (newDoc._id !== "test") {
+ throw({forbidden: "only a document named 'test' is allowed."});
+ }
+ }`
+};
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-vhost/features.js b/packages/pouchdb-server-packages/tests/pouchdb-vhost/features.js
new file mode 100644
index 0000000000..3e7105daef
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-vhost/features.js
@@ -0,0 +1,134 @@
+/*
+ Based on: https://github.com/apache/couchdb/blob/5c94e815e60dc53db735243e0d532b03bbe319c3/test/etap/160-vhosts.t
+
+ Doesn't include the following subtests:
+
+ - doesn't make any sense in the current context:
+ - test_vhost_request_with_global()
+ - test_vhost_request_with_oauth
+ - an undocumented part of the api that can be duplicated with rewrites
+ - test_vhost_request_path1
+ - test_vhost_request_path2
+ - test_vhost_request_path3
+ - double with 'regular request'?
+ - test_vhost_request_to_root
+ - double with 'vhost request'
+ - testVHostRequestPath
+*/
+
+const {setup, teardown, PouchDB} = require('./utils');
+let db;
+
+describe('sync vhost tests', function () {
+ const vhosts = {
+ 'example.com': '/test',
+ '*.example.com': '/test/_design/doc1/_rewrite',
+ 'example.com/test': '/test',
+ 'example1.com': '/test/_design/doc1/_rewrite/',
+ ':appname.:dbname.example1.com': '/:dbname/_design/:appname/_rewrite/',
+ ':dbname.example1.com': '/:dbname',
+ '*.example2.com': '/*',
+ '*.example2.com/abc': '/*',
+ '*/abc': '/test/_design/doc1/_show/test',
+ 'example3.com': '/'
+ };
+
+ beforeEach(function () {
+ db = setup();
+ return db.put({
+ _id: 'doc1',
+ value: 666
+ }).then(function () {
+ return db.put({
+ _id: '_design/doc1',
+ shows: {
+ test: `function (doc, req) {
+ return {
+ json: {
+ requested_path: '/' + req.requested_path.join('/'),
+ path: '/' + req.path.join('/')
+ }
+ };
+ }`
+ },
+ rewrites: [{
+ from: '/',
+ to: '_show/test'
+ }]
+ });
+ });
+ });
+
+ afterEach(teardown);
+
+ function vhost(req) {
+ req.raw_path = req.raw_path || '/';
+ return PouchDB.virtualHost(req, vhosts);
+ }
+
+ function resolve(req) {
+ req.raw_path = req.raw_path || '/';
+ return PouchDB.resolveVirtualHost(req, vhosts);
+ }
+
+ it('regular request', function () {
+ // with no host headers, no vhost should be used
+ return resolve({}).should.equal('/');
+ });
+
+ it('vhost request', function () {
+ return vhost({headers:{host: 'example.com'}})
+ .then(function (info) {
+ info.should.have.property('db_name');
+ });
+ });
+
+ it('vhost request with QS', function () {
+ return vhost({raw_path: '/doc1?revs_info=true', headers: {host: 'example.com'}})
+ .then(function (doc) {
+ doc.should.have.property('_revs_info');
+ });
+ });
+
+ it('vhost requested path', function () {
+ return vhost({headers: {host: 'example1.com'}})
+ .then(function (resp) {
+ resp.json.requested_path.should.equal('/');
+ });
+ });
+
+ it('vhost requested path path', function () {
+ return vhost({headers: {Host: 'example1.com'}})
+ .then(function (resp) {
+ resp.json.path.should.equal('/test/_design/doc1/_show/test');
+ });
+ });
+
+ it('vhost request with wildcard', function () {
+ return vhost({headers: {host: 'test.example.com'}})
+ .then(function (resp) {
+ resp.json.path.should.equal('/test/_design/doc1/_show/test');
+ });
+ });
+
+ it('vhost request replace var', function () {
+ return vhost({headers: {host: 'test.example1.com'}})
+ .then(function (info) {
+ info.should.have.property('db_name');
+ });
+ });
+
+ it('vhost request replace var1', function () {
+ return vhost({headers: {Host: 'doc1.test.example1.com'}})
+ .then(function (resp) {
+ resp.json.path.should.equal('/test/_design/doc1/_show/test');
+ });
+ });
+
+ it('vhost request replace wildcard', function () {
+ return vhost({headers: {host: 'test.example2.com'}})
+ .then(function (info) {
+ info.should.have.property('db_name');
+ });
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-vhost/signatures.js b/packages/pouchdb-server-packages/tests/pouchdb-vhost/signatures.js
new file mode 100644
index 0000000000..09e5d91082
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-vhost/signatures.js
@@ -0,0 +1,9 @@
+const {PouchDB} = require('./utils');
+
+describe('signatures', function () {
+ it('vhost', function () {
+ const promise = PouchDB.virtualHost({raw_path: '/'}, {}, function () {});
+ promise.then.should.be.ok;
+ promise.catch.should.be.ok;
+ });
+});
diff --git a/packages/pouchdb-server-packages/tests/pouchdb-vhost/utils.js b/packages/pouchdb-server-packages/tests/pouchdb-vhost/utils.js
new file mode 100644
index 0000000000..819369321d
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/pouchdb-vhost/utils.js
@@ -0,0 +1,10 @@
+const stuff = require('../testutils');
+const Show = require('../../packages/node_modules/pouchdb-show');
+const Rewrite = require('pouchdb-rewrite');
+const VirtualHost = require('../../packages/node_modules/pouchdb-vhost');
+
+stuff.PouchDB.plugin(Show);
+stuff.PouchDB.plugin(Rewrite);
+VirtualHost(stuff.PouchDB);
+
+module.exports = stuff;
diff --git a/packages/pouchdb-server-packages/tests/testutils.js b/packages/pouchdb-server-packages/tests/testutils.js
new file mode 100644
index 0000000000..67df611754
--- /dev/null
+++ b/packages/pouchdb-server-packages/tests/testutils.js
@@ -0,0 +1,76 @@
+var fs = require('node:fs');
+var path = require('node:path');
+var Promise = require('pouchdb-promise');
+var chai = require('chai');
+
+exports.PouchDB = require('pouchdb').defaults({
+ db: require('memdown')
+});
+
+var testConfig;
+var home = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
+var confPath = path.join(home, '.pouchdb-plugin-helper-conf.json');
+try {
+ testConfig = JSON.parse(fs.readFileSync(confPath, {encoding: 'utf8'}));
+} catch (err) {
+ testConfig = {};
+}
+
+exports.should = chai.should();
+
+var db;
+
+exports.setup = function () {
+ db = new exports.PouchDB('test');
+ return db;
+};
+
+exports.setupWithDoc = function () {
+ exports.setup();
+ return db.put({
+ _id: 'mytest',
+ test: true
+ }).then(function (info) {
+ return {
+ db: db,
+ rev: info.rev
+ };
+ });
+};
+
+exports.setupWithDocAndAttachment = function () {
+ var res;
+ return exports.setupWithDoc().then(function (info) {
+ res = info;
+ var buffer = new Buffer('abcd', 'ascii');
+ return db.putAttachment('attachment_test', 'text', buffer, 'text/plain');
+ }).then(function (info) {
+ res.attRev = info.rev;
+ return res;
+ });
+};
+
+exports.teardown = function () {
+ return db.destroy();
+};
+
+exports.shouldThrowError = function (func) {
+ return Promise.resolve().then(function () {
+ return func();
+ }).then(function () {
+ 'No error thrown while it should have been'.should.equal('');
+ }).catch(function (err) {
+ return err;
+ });
+};
+
+exports.BASE_URL = testConfig.base_url || 'http://localhost:5984';
+exports.HTTP_AUTH = testConfig.username ? {
+ username: testConfig.username,
+ password: testConfig.password
+} : null;
+
+exports.setupHTTP = function () {
+ db = new exports.PouchDB(exports.BASE_URL + '/pouchdb-plugin-helper-db', {auth: exports.HTTP_AUTH});
+ return db;
+};
diff --git a/packages/node_modules/pouchdb/LICENSE b/packages/pouchdb-sublevel/LICENSE
similarity index 100%
rename from packages/node_modules/pouchdb/LICENSE
rename to packages/pouchdb-sublevel/LICENSE
diff --git a/packages/node_modules/sublevel-pouchdb/README.md b/packages/pouchdb-sublevel/README.md
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/README.md
rename to packages/pouchdb-sublevel/README.md
diff --git a/packages/node_modules/sublevel-pouchdb/package.json b/packages/pouchdb-sublevel/package.json
similarity index 94%
rename from packages/node_modules/sublevel-pouchdb/package.json
rename to packages/pouchdb-sublevel/package.json
index dbc3cfa2eb..a8f7cb1cd8 100644
--- a/packages/node_modules/sublevel-pouchdb/package.json
+++ b/packages/pouchdb-sublevel/package.json
@@ -1,5 +1,5 @@
{
- "name": "sublevel-pouchdb",
+ "name": "pouchdb-sublevel",
"version": "7.0.0-prerelease",
"description": "Fork of level-sublevel with ony the subset of the API that PouchDB uses",
"main": "./lib/index.js",
diff --git a/packages/node_modules/sublevel-pouchdb/src/NotFoundError.js b/packages/pouchdb-sublevel/src/NotFoundError.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/NotFoundError.js
rename to packages/pouchdb-sublevel/src/NotFoundError.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/batch.js b/packages/pouchdb-sublevel/src/batch.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/batch.js
rename to packages/pouchdb-sublevel/src/batch.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/index.js b/packages/pouchdb-sublevel/src/index.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/index.js
rename to packages/pouchdb-sublevel/src/index.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/legacyCodec.js b/packages/pouchdb-sublevel/src/legacyCodec.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/legacyCodec.js
rename to packages/pouchdb-sublevel/src/legacyCodec.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/nut.js b/packages/pouchdb-sublevel/src/nut.js
similarity index 99%
rename from packages/node_modules/sublevel-pouchdb/src/nut.js
rename to packages/pouchdb-sublevel/src/nut.js
index 71b5192b27..524ce706ba 100644
--- a/packages/node_modules/sublevel-pouchdb/src/nut.js
+++ b/packages/pouchdb-sublevel/src/nut.js
@@ -1,4 +1,4 @@
-import ltgt from 'ltgt';
+import * as ltgt from 'ltgt';
function isFunction(f) {
return 'function' === typeof f;
diff --git a/packages/node_modules/sublevel-pouchdb/src/pull.js b/packages/pouchdb-sublevel/src/pull.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/pull.js
rename to packages/pouchdb-sublevel/src/pull.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/readStream.js b/packages/pouchdb-sublevel/src/readStream.js
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/src/readStream.js
rename to packages/pouchdb-sublevel/src/readStream.js
diff --git a/packages/node_modules/sublevel-pouchdb/src/shell.js b/packages/pouchdb-sublevel/src/shell.js
similarity index 98%
rename from packages/node_modules/sublevel-pouchdb/src/shell.js
rename to packages/pouchdb-sublevel/src/shell.js
index a1dd8eaf81..f7ae4a8621 100644
--- a/packages/node_modules/sublevel-pouchdb/src/shell.js
+++ b/packages/pouchdb-sublevel/src/shell.js
@@ -1,4 +1,4 @@
-import events from 'events';
+import { events } from 'pouchdb-platform';
import NotFoundError from './NotFoundError';
var EventEmitter = events.EventEmitter;
diff --git a/packages/node_modules/sublevel-pouchdb/LICENSE b/packages/pouchdb-utils/LICENSE
similarity index 100%
rename from packages/node_modules/sublevel-pouchdb/LICENSE
rename to packages/pouchdb-utils/LICENSE
diff --git a/packages/node_modules/pouchdb-utils/README.md b/packages/pouchdb-utils/README.md
similarity index 100%
rename from packages/node_modules/pouchdb-utils/README.md
rename to packages/pouchdb-utils/README.md
diff --git a/packages/node_modules/pouchdb-utils/package.json b/packages/pouchdb-utils/package.json
similarity index 87%
rename from packages/node_modules/pouchdb-utils/package.json
rename to packages/pouchdb-utils/package.json
index e8db4b6010..e6ac65a676 100644
--- a/packages/node_modules/pouchdb-utils/package.json
+++ b/packages/pouchdb-utils/package.json
@@ -3,6 +3,11 @@
"version": "7.0.0-prerelease",
"description": "Unassorted utilities used by PouchDB.",
"main": "./lib/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"keywords": [],
"author": "Dale Harvey ",
"license": "Apache-2.0",
diff --git a/packages/node_modules/pouchdb-utils/src/assign.js b/packages/pouchdb-utils/src/assign.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/assign.js
rename to packages/pouchdb-utils/src/assign.js
diff --git a/packages/node_modules/pouchdb-utils/src/bulkGetShim.js b/packages/pouchdb-utils/src/bulkGetShim.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/bulkGetShim.js
rename to packages/pouchdb-utils/src/bulkGetShim.js
diff --git a/packages/node_modules/pouchdb-utils/src/changesHandler.js b/packages/pouchdb-utils/src/changesHandler.js
similarity index 97%
rename from packages/node_modules/pouchdb-utils/src/changesHandler.js
rename to packages/pouchdb-utils/src/changesHandler.js
index c42fefa2b4..b11960e9e9 100644
--- a/packages/node_modules/pouchdb-utils/src/changesHandler.js
+++ b/packages/pouchdb-utils/src/changesHandler.js
@@ -1,4 +1,4 @@
-import EventEmitter from 'events';
+import EventEmitter from 'node:events';
import hasLocalStorage from './env/hasLocalStorage';
import pick from './pick';
import nextTick from './nextTick';
diff --git a/packages/node_modules/pouchdb-utils/src/clone.js b/packages/pouchdb-utils/src/clone.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/clone.js
rename to packages/pouchdb-utils/src/clone.js
diff --git a/packages/node_modules/pouchdb-utils/src/cloneBinaryObject-browser.js b/packages/pouchdb-utils/src/cloneBinaryObject-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/cloneBinaryObject-browser.js
rename to packages/pouchdb-utils/src/cloneBinaryObject-browser.js
diff --git a/packages/node_modules/pouchdb-utils/src/cloneBinaryObject.js b/packages/pouchdb-utils/src/cloneBinaryObject.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/cloneBinaryObject.js
rename to packages/pouchdb-utils/src/cloneBinaryObject.js
diff --git a/packages/node_modules/pouchdb-utils/src/defaultBackOff.js b/packages/pouchdb-utils/src/defaultBackOff.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/defaultBackOff.js
rename to packages/pouchdb-utils/src/defaultBackOff.js
diff --git a/packages/node_modules/pouchdb-utils/src/env/hasLocalStorage-browser.js b/packages/pouchdb-utils/src/env/hasLocalStorage-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/env/hasLocalStorage-browser.js
rename to packages/pouchdb-utils/src/env/hasLocalStorage-browser.js
diff --git a/packages/node_modules/pouchdb-utils/src/env/hasLocalStorage.js b/packages/pouchdb-utils/src/env/hasLocalStorage.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/env/hasLocalStorage.js
rename to packages/pouchdb-utils/src/env/hasLocalStorage.js
diff --git a/packages/node_modules/pouchdb-utils/src/explainError-browser.js b/packages/pouchdb-utils/src/explainError-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/explainError-browser.js
rename to packages/pouchdb-utils/src/explainError-browser.js
diff --git a/packages/node_modules/pouchdb-utils/src/explainError.js b/packages/pouchdb-utils/src/explainError.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/explainError.js
rename to packages/pouchdb-utils/src/explainError.js
diff --git a/packages/node_modules/pouchdb-utils/src/filterChange.js b/packages/pouchdb-utils/src/filterChange.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/filterChange.js
rename to packages/pouchdb-utils/src/filterChange.js
diff --git a/packages/node_modules/pouchdb-utils/src/flatten.js b/packages/pouchdb-utils/src/flatten.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/flatten.js
rename to packages/pouchdb-utils/src/flatten.js
diff --git a/packages/node_modules/pouchdb-utils/src/functionName.js b/packages/pouchdb-utils/src/functionName.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/functionName.js
rename to packages/pouchdb-utils/src/functionName.js
diff --git a/packages/node_modules/pouchdb-utils/src/guardedConsole.js b/packages/pouchdb-utils/src/guardedConsole.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/guardedConsole.js
rename to packages/pouchdb-utils/src/guardedConsole.js
diff --git a/packages/node_modules/pouchdb-utils/src/index.js b/packages/pouchdb-utils/src/index.js
similarity index 96%
rename from packages/node_modules/pouchdb-utils/src/index.js
rename to packages/pouchdb-utils/src/index.js
index 60c928908b..773dd03b72 100644
--- a/packages/node_modules/pouchdb-utils/src/index.js
+++ b/packages/pouchdb-utils/src/index.js
@@ -1,6 +1,5 @@
import { v4 } from 'uuid';
-import adapterFun from './adapterFun';
import bulkGetShim from './bulkGetShim';
import changesHandler from './changesHandler';
import clone from './clone';
@@ -29,7 +28,6 @@ import rev from './rev';
var uuid = v4; // mimic old import, only v4 is ever used elsewhere
export {
- adapterFun,
assign,
bulkGetShim,
changesHandler,
diff --git a/packages/node_modules/pouchdb-utils/src/invalidIdError.js b/packages/pouchdb-utils/src/invalidIdError.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/invalidIdError.js
rename to packages/pouchdb-utils/src/invalidIdError.js
diff --git a/packages/node_modules/pouchdb-utils/src/isBinaryObject-browser.js b/packages/pouchdb-utils/src/isBinaryObject-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/isBinaryObject-browser.js
rename to packages/pouchdb-utils/src/isBinaryObject-browser.js
diff --git a/packages/node_modules/pouchdb-utils/src/isBinaryObject.js b/packages/pouchdb-utils/src/isBinaryObject.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/isBinaryObject.js
rename to packages/pouchdb-utils/src/isBinaryObject.js
diff --git a/packages/node_modules/pouchdb-utils/src/isPlainObject.js b/packages/pouchdb-utils/src/isPlainObject.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/isPlainObject.js
rename to packages/pouchdb-utils/src/isPlainObject.js
diff --git a/packages/node_modules/pouchdb-utils/src/isRemote.js b/packages/pouchdb-utils/src/isRemote.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/isRemote.js
rename to packages/pouchdb-utils/src/isRemote.js
diff --git a/packages/node_modules/pouchdb-utils/src/listenerCount.js b/packages/pouchdb-utils/src/listenerCount.js
similarity index 86%
rename from packages/node_modules/pouchdb-utils/src/listenerCount.js
rename to packages/pouchdb-utils/src/listenerCount.js
index 3627e3636c..820136c078 100644
--- a/packages/node_modules/pouchdb-utils/src/listenerCount.js
+++ b/packages/pouchdb-utils/src/listenerCount.js
@@ -1,4 +1,4 @@
-import EE from 'events';
+import EE from 'node:events';
function listenerCount(ee, type) {
return 'listenerCount' in ee ? ee.listenerCount(type) :
diff --git a/packages/node_modules/pouchdb-utils/src/nextTick-browser.js b/packages/pouchdb-utils/src/nextTick-browser.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/nextTick-browser.js
rename to packages/pouchdb-utils/src/nextTick-browser.js
diff --git a/packages/node_modules/pouchdb-utils/src/nextTick.js b/packages/pouchdb-utils/src/nextTick.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/nextTick.js
rename to packages/pouchdb-utils/src/nextTick.js
diff --git a/packages/node_modules/pouchdb-utils/src/normalizeDdocFunctionName.js b/packages/pouchdb-utils/src/normalizeDdocFunctionName.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/normalizeDdocFunctionName.js
rename to packages/pouchdb-utils/src/normalizeDdocFunctionName.js
diff --git a/packages/node_modules/pouchdb-utils/src/once.js b/packages/pouchdb-utils/src/once.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/once.js
rename to packages/pouchdb-utils/src/once.js
diff --git a/packages/node_modules/pouchdb-utils/src/parseDdocFunctionName.js b/packages/pouchdb-utils/src/parseDdocFunctionName.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/parseDdocFunctionName.js
rename to packages/pouchdb-utils/src/parseDdocFunctionName.js
diff --git a/packages/node_modules/pouchdb-utils/src/parseUri.js b/packages/pouchdb-utils/src/parseUri.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/parseUri.js
rename to packages/pouchdb-utils/src/parseUri.js
diff --git a/packages/node_modules/pouchdb-utils/src/pick.js b/packages/pouchdb-utils/src/pick.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/pick.js
rename to packages/pouchdb-utils/src/pick.js
diff --git a/packages/node_modules/pouchdb-utils/src/rev.js b/packages/pouchdb-utils/src/rev.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/rev.js
rename to packages/pouchdb-utils/src/rev.js
diff --git a/packages/node_modules/pouchdb-utils/src/scopeEval.js b/packages/pouchdb-utils/src/scopeEval.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/scopeEval.js
rename to packages/pouchdb-utils/src/scopeEval.js
diff --git a/packages/node_modules/pouchdb-utils/src/toPromise.js b/packages/pouchdb-utils/src/toPromise.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/toPromise.js
rename to packages/pouchdb-utils/src/toPromise.js
diff --git a/packages/node_modules/pouchdb-utils/src/upsert.js b/packages/pouchdb-utils/src/upsert.js
similarity index 100%
rename from packages/node_modules/pouchdb-utils/src/upsert.js
rename to packages/pouchdb-utils/src/upsert.js
diff --git a/packages/pouchdb/LICENSE b/packages/pouchdb/LICENSE
new file mode 100644
index 0000000000..f6cd2bc808
--- /dev/null
+++ b/packages/pouchdb/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/packages/node_modules/pouchdb/README.md b/packages/pouchdb/README.md
similarity index 100%
rename from packages/node_modules/pouchdb/README.md
rename to packages/pouchdb/README.md
diff --git a/packages/node_modules/pouchdb/bower.json b/packages/pouchdb/bower.json
similarity index 100%
rename from packages/node_modules/pouchdb/bower.json
rename to packages/pouchdb/bower.json
diff --git a/packages/node_modules/pouchdb/component.json b/packages/pouchdb/component.json
similarity index 100%
rename from packages/node_modules/pouchdb/component.json
rename to packages/pouchdb/component.json
diff --git a/packages/node_modules/pouchdb/package.json b/packages/pouchdb/package.json
similarity index 76%
rename from packages/node_modules/pouchdb/package.json
rename to packages/pouchdb/package.json
index 5bdc3568da..cc8bcf44ac 100644
--- a/packages/node_modules/pouchdb/package.json
+++ b/packages/pouchdb/package.json
@@ -2,8 +2,13 @@
"name": "pouchdb",
"version": "7.0.0-prerelease",
"description": "PouchDB is a pocket-sized database",
- "main": "./lib/index.js",
- "module": "./lib/index.es.js",
+ "main": "./src/index.js",
+ "module": "./src/index.js",
+ "exports": {
+ "import": "./src/index.js",
+ "require": "./lib/index.js",
+ "default": "./src/index.js"
+ },
"author": "Dale Harvey ",
"license": "Apache-2.0",
"repository": "https://github.com/pouchdb/pouchdb",
diff --git a/packages/pouchdb/src/index.js b/packages/pouchdb/src/index.js
new file mode 100644
index 0000000000..72db21ab87
--- /dev/null
+++ b/packages/pouchdb/src/index.js
@@ -0,0 +1,2 @@
+import PouchDB from './pouchdb.js';
+export default PouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb/src/plugins/find.js b/packages/pouchdb/src/plugins/find.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/find.js
rename to packages/pouchdb/src/plugins/find.js
diff --git a/packages/node_modules/pouchdb/src/plugins/fruitdown.js b/packages/pouchdb/src/plugins/fruitdown.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/fruitdown.js
rename to packages/pouchdb/src/plugins/fruitdown.js
diff --git a/packages/node_modules/pouchdb/src/plugins/indexeddb.js b/packages/pouchdb/src/plugins/indexeddb.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/indexeddb.js
rename to packages/pouchdb/src/plugins/indexeddb.js
diff --git a/packages/node_modules/pouchdb/src/plugins/localstorage.js b/packages/pouchdb/src/plugins/localstorage.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/localstorage.js
rename to packages/pouchdb/src/plugins/localstorage.js
diff --git a/packages/node_modules/pouchdb/src/plugins/memory.js b/packages/pouchdb/src/plugins/memory.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/memory.js
rename to packages/pouchdb/src/plugins/memory.js
diff --git a/packages/node_modules/pouchdb/src/plugins/websql.js b/packages/pouchdb/src/plugins/websql.js
similarity index 100%
rename from packages/node_modules/pouchdb/src/plugins/websql.js
rename to packages/pouchdb/src/plugins/websql.js
diff --git a/packages/node_modules/pouchdb/src/pouchdb-browser.js b/packages/pouchdb/src/pouchdb-browser.js
similarity index 76%
rename from packages/node_modules/pouchdb/src/pouchdb-browser.js
rename to packages/pouchdb/src/pouchdb-browser.js
index 535c07874a..03dd50f8b4 100644
--- a/packages/node_modules/pouchdb/src/pouchdb-browser.js
+++ b/packages/pouchdb/src/pouchdb-browser.js
@@ -1,5 +1,5 @@
// Pull from src because pouchdb-node/pouchdb-browser themselves
// are aggressively optimized and jsnext:main would normally give us this
// aggressive bundle.
-import PouchDB from 'pouchdb-browser/src/index';
+import PouchDB from '../../pouchdb-browser/src/index.js';
export default PouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb/src/pouchdb.js b/packages/pouchdb/src/pouchdb.js
similarity index 76%
rename from packages/node_modules/pouchdb/src/pouchdb.js
rename to packages/pouchdb/src/pouchdb.js
index b45409cdb5..ec08613771 100644
--- a/packages/node_modules/pouchdb/src/pouchdb.js
+++ b/packages/pouchdb/src/pouchdb.js
@@ -1,5 +1,5 @@
// Pull from src because pouchdb-node/pouchdb-browser themselves
// are aggressively optimized and jsnext:main would normally give us this
// aggressive bundle.
-import PouchDB from 'pouchdb-node/src/index';
+import PouchDB from '../../pouchdb-node/src/index.js';
export default PouchDB;
\ No newline at end of file
diff --git a/packages/node_modules/pouchdb/tonic-example.js b/packages/pouchdb/tonic-example.js
similarity index 78%
rename from packages/node_modules/pouchdb/tonic-example.js
rename to packages/pouchdb/tonic-example.js
index de5bc03fc2..eba35af92f 100644
--- a/packages/node_modules/pouchdb/tonic-example.js
+++ b/packages/pouchdb/tonic-example.js
@@ -1,38 +1,38 @@
// see documentation for more detail: http://pouchdb.com/api.html
-const PouchDB = require('pouchdb')
-require('pouchdb/extras/memory') /* this is used here just for compatibility with Tonic.
+const PouchDB = require('pouchdb');
+require('pouchdb/extras/memory'); /* this is used here just for compatibility with Tonic.
you can omit this line and the {adapter: 'memory'}
in the next, then your databases will be saved to disk or
browser storage.
*/
// create a database (here with memory storage):
-const db = new PouchDB('test', {adapter: 'memory'})
+const db = new PouchDB('test', {adapter: 'memory'});
// create a new doc with an _id of 'mydoc':
let response = await db.put({
_id: 'mydoc',
title: 'Heroes'
-})
+});
// update an existing doc using _rev
await db.put({
_id: 'mydoc',
_rev: response.rev,
title: "Sound and Vision",
-})
+});
// later you can fetch your doc
-console.log(await db.get('mydoc'))
+console.log(await db.get('mydoc'));
// or add many more docs
response = await db.bulkDocs([
{_id: 'myotherdoc', title: 'The Magisters', type: "fake band"},
{_id: 'another', title: 'Kowabunga', type: "fake band"},
{title: 'Without an _id', type: null}
-])
+]);
-console.log('bulkDocs response: ' + JSON.stringify(response, null, 2))
+console.log('bulkDocs response: ' + JSON.stringify(response, null, 2));
// and query them
await db.put({
@@ -41,10 +41,10 @@ await db.put({
fakebands: {
map: (function (doc) {
if (doc.type == "fake band") {
- emit(doc.title)
+ emit(doc.title);
}
}).toString()
}
}
-})
-await db.query('fakebands', {include_docs: true})
+});
+await db.query('fakebands', {include_docs: true});
diff --git a/tests/common-utils.js b/tests/common-utils.js
index 2488323029..5bf38589ea 100644
--- a/tests/common-utils.js
+++ b/tests/common-utils.js
@@ -101,7 +101,7 @@ commonUtils.loadPouchDBForNode = function (plugins) {
commonUtils.loadPouchDBForBrowser = function (plugins) {
var params = commonUtils.params();
- var scriptPath = '../../packages/node_modules/pouchdb/dist';
+ var scriptPath = '../../packages/pouchdb/dist';
var pouchdbSrc = params.src || `${scriptPath}/pouchdb.js`;
plugins = plugins.map((plugin) => {
@@ -181,7 +181,7 @@ commonUtils.createDocId = function (i) {
return 'doc_' + intString;
};
-var PouchForCoverage = require('../packages/node_modules/pouchdb-for-coverage');
+var PouchForCoverage = require('../packages/pouchdb-for-coverage');
var pouchUtils = PouchForCoverage.utils;
commonUtils.Promise = pouchUtils.Promise;
diff --git a/tests/component/test.ajax.js b/tests/component/test.ajax.js
index 541650e48d..00533bcecb 100644
--- a/tests/component/test.ajax.js
+++ b/tests/component/test.ajax.js
@@ -1,7 +1,7 @@
'use strict';
var http = require('http');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var should = require("chai").should();
describe('test.ajax.js', function () {
diff --git a/tests/component/test.auth.js b/tests/component/test.auth.js
index 81b4547476..19991ed2d6 100644
--- a/tests/component/test.auth.js
+++ b/tests/component/test.auth.js
@@ -1,7 +1,7 @@
'use strict';
var http = require('http');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var should = require("chai").should();
describe('test.auth.js', function () {
diff --git a/tests/component/test.deletion_error.js b/tests/component/test.deletion_error.js
index 62902b1c7c..71c635e4d5 100644
--- a/tests/component/test.deletion_error.js
+++ b/tests/component/test.deletion_error.js
@@ -1,6 +1,6 @@
'use strict';
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var express = require('express');
var bodyParser = require('body-parser');
diff --git a/tests/component/test.headers.js b/tests/component/test.headers.js
index 88fbfc7112..3f300918e7 100644
--- a/tests/component/test.headers.js
+++ b/tests/component/test.headers.js
@@ -1,7 +1,7 @@
'use strict';
var http = require('http');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var should = require("chai").should();
describe('test.headers.js', function () {
diff --git a/tests/component/test.params.js b/tests/component/test.params.js
index aaf81c32e9..7f8a1d2e41 100644
--- a/tests/component/test.params.js
+++ b/tests/component/test.params.js
@@ -3,7 +3,7 @@
var http = require('http');
var url = require('url');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var should = require("chai").should();
describe('test.params.js', function () {
diff --git a/tests/component/test.read_only_replication.js b/tests/component/test.read_only_replication.js
index d070878edd..0e861d4cbe 100644
--- a/tests/component/test.read_only_replication.js
+++ b/tests/component/test.read_only_replication.js
@@ -1,6 +1,6 @@
'use strict';
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var Checkpointer = PouchDB.utils.checkpointer;
var express = require('express');
diff --git a/tests/component/test.replication_perf_regression.js b/tests/component/test.replication_perf_regression.js
index eb36a6acee..3f98f682fe 100644
--- a/tests/component/test.replication_perf_regression.js
+++ b/tests/component/test.replication_perf_regression.js
@@ -1,6 +1,6 @@
'use strict';
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var express = require('express');
var bodyParser = require('body-parser');
diff --git a/tests/integration/browser.worker.js b/tests/integration/browser.worker.js
index b6087a4b99..91e909d215 100644
--- a/tests/integration/browser.worker.js
+++ b/tests/integration/browser.worker.js
@@ -3,9 +3,9 @@
var sourceFile = window.location.search.match(/[?&]sourceFile=([^&]+)/);
if (!sourceFile) {
- sourceFile = '../../packages/node_modules/pouchdb/dist/pouchdb.js';
+ sourceFile = '../../packages/pouchdb/dist/pouchdb.js';
} else {
- sourceFile = '../../packages/node_modules/pouchdb/dist/' + sourceFile[1];
+ sourceFile = '../../packages/pouchdb/dist/' + sourceFile[1];
}
// only running in Chrome and Firefox due to various bugs.
diff --git a/tests/integration/node.setup.js b/tests/integration/node.setup.js
index f304562cd8..38d24a9c47 100644
--- a/tests/integration/node.setup.js
+++ b/tests/integration/node.setup.js
@@ -24,4 +24,4 @@ chai.use(require('chai-as-promised'));
global.should = chai.should();
global.assert = chai.assert;
require('mkdirp').sync('./tmp');
-global.fs = require('fs');
+global.fs = require('node:fs');
diff --git a/tests/integration/test.aa.setup.js b/tests/integration/test.aa.setup.js
index 5cb9f595ed..9198fedeb2 100644
--- a/tests/integration/test.aa.setup.js
+++ b/tests/integration/test.aa.setup.js
@@ -9,7 +9,7 @@ describe('DB Setup', function () {
if (typeof process !== 'undefined' && !process.browser) {
it('PouchDB version matches package.json', function () {
- var pkg = require('../../packages/node_modules/pouchdb/package.json');
+ var pkg = require('../../packages/pouchdb/package.json');
PouchDB.version.should.equal(pkg.version);
});
}
diff --git a/tests/integration/test.issue915.js b/tests/integration/test.issue915.js
index b97633d32a..f5eadebbd1 100644
--- a/tests/integration/test.issue915.js
+++ b/tests/integration/test.issue915.js
@@ -4,7 +4,7 @@ if (!process.env.LEVEL_ADAPTER &&
!process.env.AUTO_COMPACTION &&
!process.env.ADAPTERS) {
// these tests don't make sense for anything other than default leveldown
- var fs = require('fs');
+ var fs = require('node:fs');
describe('test.issue915.js', function () {
afterEach(function (done) {
fs.unlink('./tmp/_pouch_veryimportantfiles/something', function () {
diff --git a/tests/integration/test.migration.js b/tests/integration/test.migration.js
index 54f5035ffd..d9d9720d07 100644
--- a/tests/integration/test.migration.js
+++ b/tests/integration/test.migration.js
@@ -4,7 +4,7 @@ if (!process.env.LEVEL_ADAPTER &&
!process.env.AUTO_COMPACTION &&
!process.env.ADAPTERS) {
// these tests don't make sense for anything other than default leveldown
- var fs = require('fs');
+ var fs = require('node:fs');
var ncp = require('ncp').ncp;
ncp.limit = 16;
diff --git a/tests/integration/test.prefix.js b/tests/integration/test.prefix.js
index a70bd32312..25885c480d 100644
--- a/tests/integration/test.prefix.js
+++ b/tests/integration/test.prefix.js
@@ -44,7 +44,7 @@ if (typeof process !== 'undefined' &&
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
- var fs = require('fs');
+ var fs = require('node:fs');
describe('node test.prefix.js', function () {
diff --git a/tests/integration/utils.js b/tests/integration/utils.js
index 971e66f0d3..ab053f01ce 100644
--- a/tests/integration/utils.js
+++ b/tests/integration/utils.js
@@ -243,7 +243,7 @@ testUtils.promisify = function (fun, context) {
// We need to use pouchdb-for-coverage here to ensure that e.g pouchdb-utils
// and pouchdb-ajax don't get pulled in, because then our coverage tests
// would complain that we're not using the "whole" thing.
-var PouchForCoverage = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchForCoverage = require('../../packages/pouchdb-for-coverage');
var pouchUtils = PouchForCoverage.utils;
testUtils.binaryStringToBlob = pouchUtils.binaryStringToBlobOrBuffer;
testUtils.btoa = pouchUtils.btoa;
diff --git a/tests/mapreduce/test.views.js b/tests/mapreduce/test.views.js
index 5529a095b7..502181054a 100644
--- a/tests/mapreduce/test.views.js
+++ b/tests/mapreduce/test.views.js
@@ -666,7 +666,7 @@ describe('test.views.js', function () {
});
});
if (typeof window === 'undefined' && !process.browser) {
- var fs = require('fs');
+ var fs = require('node:fs');
it.skip("destroy using prototype", function () {
var db = new PouchDB(dbs.name + 1);
var doc = {
diff --git a/tests/memleak/test.memleak.js b/tests/memleak/test.memleak.js
index 67db7014cb..da28a2ea4f 100644
--- a/tests/memleak/test.memleak.js
+++ b/tests/memleak/test.memleak.js
@@ -157,7 +157,7 @@ FakePouchDB = (function () {
/* Real PouchDB, for tests */
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
/* Basic sleep functionality for Promises */
diff --git a/tests/misc/pouchdb-express-router.js b/tests/misc/pouchdb-express-router.js
index 2042d59a84..acee42d052 100644
--- a/tests/misc/pouchdb-express-router.js
+++ b/tests/misc/pouchdb-express-router.js
@@ -2,10 +2,10 @@
var DB_FILES_DIR = './tmp';
-var fs = require('fs');
+var fs = require('node:fs');
var express = require('express');
var app = express();
-var PouchDB = require('../../packages/node_modules/pouchdb').defaults({
+var PouchDB = require('../../packages/pouchdb').defaults({
prefix: DB_FILES_DIR
});
diff --git a/tests/unit/test.ajax.js b/tests/unit/test.ajax.js
index 0d39261483..5555eaecf9 100644
--- a/tests/unit/test.ajax.js
+++ b/tests/unit/test.ajax.js
@@ -3,7 +3,7 @@
var should = require('chai').should();
var mockery = require('mockery');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
// TODO: I cannot figure out why these are failing. It seems to have
// something to do with the mocks. These tests do not seem very high-value
diff --git a/tests/unit/test.backoff.js b/tests/unit/test.backoff.js
index 04a6f15c1c..0a35d7c327 100644
--- a/tests/unit/test.backoff.js
+++ b/tests/unit/test.backoff.js
@@ -1,6 +1,6 @@
var should = require('chai').should();
-var Pouch = require('../../packages/node_modules/pouchdb-for-coverage');
+var Pouch = require('../../packages/pouchdb-for-coverage');
var defaultBackOff = Pouch.utils.defaultBackOff;
describe('test.backoff.js', function () {
diff --git a/tests/unit/test.clone.js b/tests/unit/test.clone.js
index 699ca7c423..29edff4961 100644
--- a/tests/unit/test.clone.js
+++ b/tests/unit/test.clone.js
@@ -2,7 +2,7 @@
'use strict';
var should = require('chai').should();
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var clone = PouchDB.utils.clone;
describe('test.clone.js', function () {
diff --git a/tests/unit/test.collate.js b/tests/unit/test.collate.js
index 922821fb0c..420221a030 100644
--- a/tests/unit/test.collate.js
+++ b/tests/unit/test.collate.js
@@ -1,6 +1,6 @@
'use strict';
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var should = require('chai').should();
var pouchCollate = PouchDB.collate;
var collate = pouchCollate.collate;
diff --git a/tests/unit/test.errors.js b/tests/unit/test.errors.js
index cb3cb07b71..2b5dab236e 100644
--- a/tests/unit/test.errors.js
+++ b/tests/unit/test.errors.js
@@ -1,6 +1,6 @@
'use strict';
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var generateErrorFromResponse = PouchDB.utils.generateErrorFromResponse;
require('chai').should();
diff --git a/tests/unit/test.gen-replication-id.js b/tests/unit/test.gen-replication-id.js
index 3ce677f810..d818ac3366 100644
--- a/tests/unit/test.gen-replication-id.js
+++ b/tests/unit/test.gen-replication-id.js
@@ -1,7 +1,7 @@
'use strict';
var memdown = require('memdown');
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var genReplicationId = PouchDB.utils.generateReplicationId;
var sourceDb = new PouchDB({name: 'local_db', db: memdown});
var targetDb = new PouchDB({name: 'target_db', db: memdown});
diff --git a/tests/unit/test.mapreduce.js b/tests/unit/test.mapreduce.js
index f00010b2dc..7dd80beed5 100644
--- a/tests/unit/test.mapreduce.js
+++ b/tests/unit/test.mapreduce.js
@@ -1,7 +1,7 @@
'use strict';
var should = require('chai').should();
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var upsert = PouchDB.utils.upsert;
var utils = PouchDB.utils.mapReduceUtils;
var Promise = PouchDB.utils.Promise;
diff --git a/tests/unit/test.memory-adapter.js b/tests/unit/test.memory-adapter.js
index 927deafa7b..67450e10d8 100644
--- a/tests/unit/test.memory-adapter.js
+++ b/tests/unit/test.memory-adapter.js
@@ -1,5 +1,5 @@
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
-var memoryAdapter = require('../../packages/node_modules/pouchdb-adapter-memory');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
+var memoryAdapter = require('../../packages/pouchdb-adapter-memory');
PouchDB.plugin(memoryAdapter);
describe('test.memory-adapter.js', () => {
diff --git a/tests/unit/test.merge.js b/tests/unit/test.merge.js
index b610bb5047..90d524ade4 100644
--- a/tests/unit/test.merge.js
+++ b/tests/unit/test.merge.js
@@ -4,7 +4,7 @@
// https://github.com/davisp/couchdb/blob/local_doc_revs/test/
// etap/060-kt-merging.t
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var merge = PouchDB.utils.merge;
var winningRev = PouchDB.utils.winningRev;
diff --git a/tests/unit/test.once.js b/tests/unit/test.once.js
index cd67fb7be8..6ba84d77d6 100644
--- a/tests/unit/test.once.js
+++ b/tests/unit/test.once.js
@@ -2,7 +2,7 @@
'use strict';
var should = require('chai').should();
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var once = PouchDB.utils.once;
var toPromise = PouchDB.utils.toPromise;
diff --git a/tests/unit/test.parse-uri.js b/tests/unit/test.parse-uri.js
index 325142b64e..a2ebf851aa 100644
--- a/tests/unit/test.parse-uri.js
+++ b/tests/unit/test.parse-uri.js
@@ -1,7 +1,7 @@
'use strict';
require('chai').should();
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var parseUri = PouchDB.utils.parseUri;
describe('test.parse-uri.js', function () {
diff --git a/tests/unit/test.purge.js b/tests/unit/test.purge.js
index 79db1d8b50..377207b62a 100644
--- a/tests/unit/test.purge.js
+++ b/tests/unit/test.purge.js
@@ -1,7 +1,7 @@
'use strict';
const should = require('chai').should();
-const { findPathToLeaf, removeLeafFromTree } = require('../../packages/node_modules/pouchdb-merge');
+const { findPathToLeaf, removeLeafFromTree } = require('../../packages/pouchdb-merge');
/*
1-a - 2-a -- 3-a - 4-a - 5-a - 6-a
diff --git a/tests/unit/test.utils.js b/tests/unit/test.utils.js
index 88402a4498..7f8c7f237e 100644
--- a/tests/unit/test.utils.js
+++ b/tests/unit/test.utils.js
@@ -2,7 +2,7 @@
'use strict';
var should = require('chai').should();
-var PouchDB = require('../../packages/node_modules/pouchdb-for-coverage');
+var PouchDB = require('../../packages/pouchdb-for-coverage');
var normalizeDdocFunctionName = PouchDB.utils.normalizeDdocFunctionName;
var parseDdocFunctionName = PouchDB.utils.parseDdocFunctionName;
var createError = PouchDB.utils.createError;
diff --git a/update-plan.excalidraw b/update-plan.excalidraw
new file mode 100644
index 0000000000..7b63545312
--- /dev/null
+++ b/update-plan.excalidraw
@@ -0,0 +1,171 @@
+{
+ "type": "excalidraw",
+ "version": 2,
+ "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor",
+ "elements": [
+ {
+ "id": "9WtbYYRucBeT1i23jI4aX",
+ "type": "rectangle",
+ "x": 161.6666717529297,
+ "y": 98.16667175292969,
+ "width": 355.00001525878906,
+ "height": 140.3333282470703,
+ "angle": 0,
+ "strokeColor": "#000000",
+ "backgroundColor": "transparent",
+ "fillStyle": "hachure",
+ "strokeWidth": 1,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "groupIds": [],
+ "roundness": {
+ "type": 3
+ },
+ "seed": 1178913613,
+ "version": 33,
+ "versionNonce": 1612583245,
+ "isDeleted": false,
+ "boundElements": null,
+ "updated": 1686646435369,
+ "link": null,
+ "locked": false
+ },
+ {
+ "id": "qfNtDYt3E7ASXWyp0pRHw",
+ "type": "text",
+ "x": 189.33331298828125,
+ "y": 153.00001525878906,
+ "width": 300.399658203125,
+ "height": 25,
+ "angle": 0,
+ "strokeColor": "#000000",
+ "backgroundColor": "transparent",
+ "fillStyle": "hachure",
+ "strokeWidth": 1,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "groupIds": [],
+ "roundness": null,
+ "seed": 1957723555,
+ "version": 60,
+ "versionNonce": 820813133,
+ "isDeleted": false,
+ "boundElements": null,
+ "updated": 1686646449018,
+ "link": null,
+ "locked": false,
+ "text": "Build All Packages as ES Only",
+ "fontSize": 20,
+ "fontFamily": 1,
+ "textAlign": "left",
+ "verticalAlign": "top",
+ "baseline": 17,
+ "containerId": null,
+ "originalText": "Build All Packages as ES Only",
+ "lineHeight": 1.25
+ },
+ {
+ "id": "QEixrbRhsUzUvt0TQTIa3",
+ "type": "rectangle",
+ "x": 167.6666717529297,
+ "y": 265.5,
+ "width": 343,
+ "height": 110,
+ "angle": 0,
+ "strokeColor": "#000000",
+ "backgroundColor": "transparent",
+ "fillStyle": "hachure",
+ "strokeWidth": 1,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "groupIds": [],
+ "roundness": {
+ "type": 3
+ },
+ "seed": 1231383469,
+ "version": 128,
+ "versionNonce": 1238468579,
+ "isDeleted": false,
+ "boundElements": [
+ {
+ "type": "text",
+ "id": "I_eTSRApyWdqiI52b16Oi"
+ }
+ ],
+ "updated": 1686646547399,
+ "link": null,
+ "locked": false
+ },
+ {
+ "id": "I_eTSRApyWdqiI52b16Oi",
+ "type": "text",
+ "x": 196.4268341064453,
+ "y": 270.5,
+ "width": 285.47967529296875,
+ "height": 100,
+ "angle": 0,
+ "strokeColor": "#000000",
+ "backgroundColor": "transparent",
+ "fillStyle": "hachure",
+ "strokeWidth": 1,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "groupIds": [],
+ "roundness": null,
+ "seed": 337785539,
+ "version": 107,
+ "versionNonce": 1528893389,
+ "isDeleted": false,
+ "boundElements": null,
+ "updated": 1686646545579,
+ "link": null,
+ "locked": false,
+ "text": "let them depend on pouchdb-\nplatform/node.mjs or node.cjs\nor platform/browser.es.js\n",
+ "fontSize": 20,
+ "fontFamily": 1,
+ "textAlign": "center",
+ "verticalAlign": "middle",
+ "baseline": 92,
+ "containerId": "QEixrbRhsUzUvt0TQTIa3",
+ "originalText": "let them depend on pouchdb-platform/node.mjs or node.cjs\nor platform/browser.es.js\n",
+ "lineHeight": 1.25
+ },
+ {
+ "id": "q7TMgSbIPuWhzvINN05q3",
+ "type": "rectangle",
+ "x": 178.33334350585938,
+ "y": 422.9166717529297,
+ "width": 331.6666564941406,
+ "height": 78.33332824707031,
+ "angle": 0,
+ "strokeColor": "#000000",
+ "backgroundColor": "transparent",
+ "fillStyle": "hachure",
+ "strokeWidth": 1,
+ "strokeStyle": "solid",
+ "roughness": 1,
+ "opacity": 100,
+ "groupIds": [],
+ "roundness": {
+ "type": 3
+ },
+ "seed": 464165421,
+ "version": 54,
+ "versionNonce": 600147299,
+ "isDeleted": false,
+ "boundElements": null,
+ "updated": 1686646574329,
+ "link": null,
+ "locked": false
+ }
+ ],
+ "appState": {
+ "gridSize": null,
+ "viewBackgroundColor": "#ffffff"
+ },
+ "files": {}
+}
\ No newline at end of file