diff --git a/.eslintrc.json b/.eslintrc.json index 0c80cf6b..d1d31b73 100755 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -52,6 +52,9 @@ "no-trailing-spaces": "warn", "eol-last": "error", "func-call-spacing": "error", + "key-spacing": ["warn", { + "mode": "minimum" + }], "indent": ["error", 4, { "ArrayExpression": "first", "SwitchCase": 1 diff --git a/package-lock.json b/package-lock.json index 7c6265b0..583d450d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cyberchef", - "version": "5.11.0", + "version": "5.12.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -22,7 +22,7 @@ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "dev": true, "requires": { - "mime-types": "2.1.15", + "mime-types": "2.1.16", "negotiator": "0.6.1" } }, @@ -116,6 +116,12 @@ "json-stable-stringify": "1.0.1" } }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -139,9 +145,9 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", "dev": true }, "ansi-html": { @@ -163,13 +169,13 @@ "dev": true }, "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "argparse": { @@ -308,7 +314,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000701", + "caniuse-db": "1.0.30000708", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.17", @@ -321,8 +327,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000701", - "electron-to-chromium": "1.3.15" + "caniuse-db": "1.0.30000708", + "electron-to-chromium": "1.3.16" } } } @@ -370,7 +376,7 @@ "babel-helpers": "6.24.1", "babel-messages": "6.23.0", "babel-register": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0", @@ -401,7 +407,7 @@ "dev": true, "requires": { "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", @@ -425,7 +431,7 @@ "dev": true, "requires": { "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -436,7 +442,7 @@ "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" } @@ -448,7 +454,7 @@ "dev": true, "requires": { "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0", "lodash": "4.17.4" } @@ -459,7 +465,7 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" } @@ -471,7 +477,7 @@ "dev": true, "requires": { "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" @@ -483,7 +489,7 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -493,7 +499,7 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -503,7 +509,7 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -513,7 +519,7 @@ "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0", "lodash": "4.17.4" } @@ -525,7 +531,7 @@ "dev": true, "requires": { "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" @@ -539,7 +545,7 @@ "requires": { "babel-helper-optimise-call-expression": "6.24.1", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" @@ -551,20 +557,19 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0" } }, "babel-loader": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", - "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.1.tgz", + "integrity": "sha1-uHE0yLEuPkwqlOBUYIW8aAorhIg=", "dev": true, "requires": { - "find-cache-dir": "0.1.1", - "loader-utils": "0.2.17", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" } }, "babel-messages": { @@ -573,7 +578,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-check-es2015-constants": { @@ -582,7 +587,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-syntax-async-functions": { @@ -611,7 +616,7 @@ "requires": { "babel-helper-remap-async-to-generator": "6.24.1", "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -620,7 +625,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -629,7 +634,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -638,7 +643,7 @@ "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0", @@ -656,7 +661,7 @@ "babel-helper-optimise-call-expression": "6.24.1", "babel-helper-replace-supers": "6.24.1", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" @@ -668,7 +673,7 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0" } }, @@ -678,7 +683,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -687,7 +692,7 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -697,7 +702,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -707,7 +712,7 @@ "dev": true, "requires": { "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -717,7 +722,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -727,7 +732,7 @@ "dev": true, "requires": { "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0" } }, @@ -738,7 +743,7 @@ "dev": true, "requires": { "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-types": "6.25.0" } @@ -750,7 +755,7 @@ "dev": true, "requires": { "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0" } }, @@ -761,7 +766,7 @@ "dev": true, "requires": { "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0" } }, @@ -772,7 +777,7 @@ "dev": true, "requires": { "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -783,7 +788,7 @@ "requires": { "babel-helper-call-delegate": "6.24.1", "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-template": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0" @@ -795,7 +800,7 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -805,7 +810,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -815,7 +820,7 @@ "dev": true, "requires": { "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -825,7 +830,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -834,7 +839,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -844,7 +849,7 @@ "dev": true, "requires": { "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "regexpu-core": "2.0.0" } }, @@ -856,7 +861,7 @@ "requires": { "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.23.0" + "babel-runtime": "6.25.0" } }, "babel-plugin-transform-regenerator": { @@ -874,7 +879,7 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0" } }, @@ -884,7 +889,7 @@ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "core-js": "2.4.1", "regenerator-runtime": "0.10.5" } @@ -922,15 +927,16 @@ "babel-plugin-transform-es2015-unicode-regex": "6.24.1", "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.24.1", - "browserslist": "2.1.5", + "browserslist": "2.2.2", "invariant": "2.2.2", - "semver": "5.3.0" + "semver": "5.4.1" } }, "babel-regenerator-runtime": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/babel-regenerator-runtime/-/babel-regenerator-runtime-6.5.0.tgz", - "integrity": "sha1-DkHNHJ+ARCRm8BXHSf/4upj44RA=" + "integrity": "sha1-DkHNHJ+ARCRm8BXHSf/4upj44RA=", + "dev": true }, "babel-register": { "version": "6.24.1", @@ -939,7 +945,7 @@ "dev": true, "requires": { "babel-core": "6.25.0", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "core-js": "2.4.1", "home-or-tmp": "2.0.0", "lodash": "4.17.4", @@ -948,9 +954,9 @@ } }, "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", + "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", "dev": true, "requires": { "core-js": "2.4.1", @@ -963,7 +969,7 @@ "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-traverse": "6.25.0", "babel-types": "6.25.0", "babylon": "6.17.4", @@ -978,7 +984,7 @@ "requires": { "babel-code-frame": "6.22.0", "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0", "babylon": "6.17.4", "debug": "2.6.8", @@ -993,7 +999,7 @@ "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "esutils": "2.0.2", "lodash": "4.17.4", "to-fast-properties": "1.0.3" @@ -1040,9 +1046,9 @@ "dev": true }, "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", + "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", "dev": true }, "bluebird": { @@ -1201,13 +1207,13 @@ } }, "browserslist": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.1.5.tgz", - "integrity": "sha1-6IJVDfPRzW1IHBo+ADjyuvE6RxE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.2.2.tgz", + "integrity": "sha512-MejxGMNIeIqzgaMKVYfFTWHinrwZOnWMXteN9VlHinTd13/0aDmXY9uyRqNsCTnVxqRmrjQFcXI7cy0q9K1IYg==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000701", - "electron-to-chromium": "1.3.15" + "caniuse-lite": "1.0.30000708", + "electron-to-chromium": "1.3.16" } }, "buffer": { @@ -1299,7 +1305,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000701", + "caniuse-db": "1.0.30000708", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -1310,22 +1316,22 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000701", - "electron-to-chromium": "1.3.15" + "caniuse-db": "1.0.30000708", + "electron-to-chromium": "1.3.16" } } } }, "caniuse-db": { - "version": "1.0.30000701", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000701.tgz", - "integrity": "sha1-LjKwaZO/Pb2QtD2T8E4m0Rr93Lo=", + "version": "1.0.30000708", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000708.tgz", + "integrity": "sha1-wuc2vTt/xfbBTkxt/mK5jtFeils=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000701", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000701.tgz", - "integrity": "sha1-nWc89rdNyz1cIdITF2sBGsakW6o=", + "version": "1.0.30000708", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000708.tgz", + "integrity": "sha1-cdvziMV/N5sbtmyJqJDtwEwlCbY=", "dev": true }, "caseless": { @@ -1372,7 +1378,7 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.0", + "anymatch": "1.3.2", "async-each": "1.0.1", "glob-parent": "2.0.0", "inherits": "2.0.3", @@ -1393,9 +1399,9 @@ } }, "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, "clap": { @@ -1425,12 +1431,12 @@ } }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "2.0.0" } }, "cli-width": { @@ -1565,12 +1571,12 @@ "dev": true }, "compressible": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", - "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", + "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "1.29.0" } }, "compression": { @@ -1581,7 +1587,7 @@ "requires": { "accepts": "1.3.3", "bytes": "2.5.0", - "compressible": "2.0.10", + "compressible": "2.0.11", "debug": "2.6.8", "on-headers": "1.0.1", "safe-buffer": "5.1.1", @@ -1675,9 +1681,9 @@ "dev": true }, "cosmiconfig": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.3.tgz", - "integrity": "sha1-lSdx6w3dwcs/ovb75RpSLpOz7go=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { "is-directory": "0.3.1", @@ -1734,12 +1740,13 @@ } }, "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { "lru-cache": "4.1.1", + "shebang-command": "1.2.0", "which": "1.2.14" } }, @@ -1787,14 +1794,15 @@ "dev": true }, "css-loader": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.27.3.tgz", - "integrity": "sha1-aatvR7ab+xtazuYbrCqrFDAv8Nw=", + "version": "0.28.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz", + "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=", "dev": true, "requires": { "babel-code-frame": "6.22.0", "css-selector-tokenizer": "0.7.0", "cssnano": "3.10.0", + "icss-utils": "2.1.0", "loader-utils": "1.1.0", "lodash.camelcase": "4.3.0", "object-assign": "4.1.1", @@ -1803,20 +1811,8 @@ "postcss-modules-local-by-default": "1.2.0", "postcss-modules-scope": "1.1.0", "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", "source-list-map": "0.1.8" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } } }, "css-select": { @@ -1983,7 +1979,7 @@ "requires": { "image-size": "0.3.5", "mimer": "0.2.1", - "semver": "5.3.0" + "semver": "5.4.1" }, "dependencies": { "image-size": { @@ -2037,6 +2033,15 @@ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true }, + "deep-for-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-1.0.6.tgz", + "integrity": "sha1-r6DOJJxYSSqXIFOUeKGNN+GxC64=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2070,9 +2075,9 @@ "dev": true }, "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", "dev": true }, "des.js": { @@ -2249,9 +2254,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.15", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.15.tgz", - "integrity": "sha1-CDl5NIkcvPrrvRi4KpW1pIETg2k=", + "version": "1.3.16", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz", + "integrity": "sha1-0OAmc1dUdwkBrjAaIWZMukXZL30=", "dev": true }, "elliptic": { @@ -2282,15 +2287,15 @@ "dev": true }, "enhanced-resolve": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz", - "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "dev": true, "requires": { "graceful-fs": "4.1.11", "memory-fs": "0.4.1", "object-assign": "4.1.1", - "tapable": "0.2.6" + "tapable": "0.2.7" } }, "entities": { @@ -2440,46 +2445,47 @@ } }, "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.3.0.tgz", + "integrity": "sha1-/NfJY3a780yF7mftABKimWQrEI8=", "dev": true, "requires": { + "ajv": "5.2.2", "babel-code-frame": "6.22.0", "chalk": "1.1.3", "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", "debug": "2.6.8", "doctrine": "2.0.0", - "escope": "3.6.0", + "eslint-scope": "3.7.1", "espree": "3.4.3", "esquery": "1.0.0", "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", - "glob": "7.0.6", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", "globals": "9.18.0", "ignore": "3.3.3", "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.0", + "inquirer": "3.2.1", "is-resolvable": "1.0.0", - "js-yaml": "3.7.0", + "js-yaml": "3.9.0", "json-stable-stringify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.4", + "minimatch": "3.0.4", "mkdirp": "0.5.1", "natural-compare": "1.4.0", "optionator": "0.8.2", "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", + "pluralize": "4.0.0", + "progress": "2.0.0", "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", + "semver": "5.4.1", "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "table": "4.0.1", + "text-table": "0.2.0" }, "dependencies": { "concat-stream": { @@ -2493,24 +2499,42 @@ "typedarray": "0.0.6" } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "js-yaml": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.0.tgz", + "integrity": "sha512-0LoUNELX4S+iofCT8f4uEHIiRBR+c2AINyC8qRWfC6QNruLtxVZRJaPcu/xwMgFIgDxF25tGHaDjvxzJCNE9yw==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", @@ -2526,17 +2550,6 @@ "util-deprecate": "1.0.2" } }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.0.6", - "interpret": "1.0.3", - "rechoir": "0.6.2" - } - }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -2545,11 +2558,23 @@ "requires": { "safe-buffer": "5.1.1" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true } } @@ -2656,9 +2681,9 @@ } }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" }, "esquery": { "version": "1.0.0", @@ -2774,10 +2799,25 @@ "create-hash": "1.1.3" } }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, "exif-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.11.tgz", - "integrity": "sha1-ipfRyTFf/UdUtq6TjORIjRsaJrc=" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" }, "exit": { "version": "0.1.2", @@ -2785,12 +2825,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -2819,17 +2853,6 @@ "source-map": "0.5.6" }, "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", @@ -2851,7 +2874,7 @@ "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.7", - "depd": "1.1.0", + "depd": "1.1.1", "encodeurl": "1.0.1", "escape-html": "1.0.3", "etag": "1.8.0", @@ -2862,7 +2885,7 @@ "on-finished": "2.3.0", "parseurl": "1.3.1", "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.4", + "proxy-addr": "1.1.5", "qs": "6.4.0", "range-parser": "1.2.0", "send": "0.15.3", @@ -2897,6 +2920,17 @@ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", "dev": true }, + "external-editor": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "dev": true, + "requires": { + "iconv-lite": "0.4.18", + "jschardet": "1.5.0", + "tmp": "0.0.31" + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -2907,28 +2941,15 @@ } }, "extract-text-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", - "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz", + "integrity": "sha1-kMqnkHvESfM1AF46x1MrQbAN5hI=", "dev": true, "requires": { "async": "2.5.0", "loader-utils": "1.1.0", "schema-utils": "0.3.0", "webpack-sources": "1.0.1" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } } }, "extract-zip": { @@ -3002,13 +3023,12 @@ } }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { @@ -3022,25 +3042,12 @@ } }, "file-loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", - "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", + "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", "dev": true, "requires": { "loader-utils": "1.1.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } } }, "file-sync-cmp": { @@ -3066,6 +3073,17 @@ "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } } }, "finalhandler": { @@ -3095,24 +3113,23 @@ } }, "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "make-dir": "1.0.0", + "pkg-dir": "2.0.0" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "2.0.0" } }, "findup-sync": { @@ -3145,7 +3162,7 @@ "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", "dev": true, "requires": { - "circular-json": "0.3.1", + "circular-json": "0.3.3", "del": "2.2.2", "graceful-fs": "4.1.11", "write": "0.2.1" @@ -3196,7 +3213,7 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "mime-types": "2.1.16" } }, "forwarded": { @@ -3234,6 +3251,12 @@ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "dev": true }, + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "generate-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", @@ -3261,6 +3284,12 @@ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", @@ -3348,12 +3377,6 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, "grunt": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", @@ -3427,9 +3450,9 @@ } }, "grunt-contrib-clean": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", - "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", + "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", "dev": true, "requires": { "async": "1.5.2", @@ -3464,19 +3487,19 @@ } }, "grunt-eslint": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-19.0.0.tgz", - "integrity": "sha1-u3TDeQYVmc7B9mFp3vKonYYthhs=", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-20.0.0.tgz", + "integrity": "sha512-jQ2GBIYUkfVict7WcSBH7mAukTJ7Cz5TwJUCQ8XxzVTTyAcxC+1MGM3rdEuQbtsLUNKqy9xr0ai/l14WkxVtkw==", "dev": true, "requires": { "chalk": "1.1.3", - "eslint": "3.19.0" + "eslint": "4.3.0" } }, "grunt-exec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-1.0.1.tgz", - "integrity": "sha1-5dU6OcXzRpATBe3uXIfbDyr5mcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-2.0.0.tgz", + "integrity": "sha1-pXWmILHaRBbCksAd9WTJKWuAqyM=", "dev": true }, "grunt-execute": { @@ -3493,6 +3516,18 @@ "requires": { "cross-spawn": "3.0.1", "jsdoc": "3.5.3" + }, + "dependencies": { + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } + } } }, "grunt-known-options": { @@ -3570,11 +3605,12 @@ } }, "grunt-webpack": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-2.0.1.tgz", - "integrity": "sha1-hMXZNzreiEaChd54cCHEKpfVMGw=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-3.0.2.tgz", + "integrity": "sha512-ghSkdCdvbF1SpI46qDT9FYqw5ZP5sSYbEQU/DwzoJE1K42xizAZ5Rv3kzpaRdJT4yvu8/6fO5+wne3/y0n74QA==", "dev": true, "requires": { + "deep-for-each": "1.0.6", "lodash": "4.17.4" } }, @@ -3760,30 +3796,19 @@ "dev": true }, "html-minifier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.2.tgz", - "integrity": "sha1-1zvD/0SJQkCIGM5gm/P7DqfvTrc=", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz", + "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==", "dev": true, "requires": { "camel-case": "3.0.0", "clean-css": "4.1.7", - "commander": "2.9.0", + "commander": "2.11.0", "he": "1.1.1", "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.0.25" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - } + "uglify-js": "3.0.26" } }, "html-webpack-plugin": { @@ -3793,11 +3818,25 @@ "dev": true, "requires": { "bluebird": "3.5.0", - "html-minifier": "3.5.2", + "html-minifier": "3.5.3", "loader-utils": "0.2.17", "lodash": "4.17.4", "pretty-error": "2.1.1", "toposort": "1.0.3" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } } }, "htmlparser2": { @@ -3857,6 +3896,14 @@ "inherits": "2.0.3", "setprototypeof": "1.0.3", "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + } } }, "http-proxy": { @@ -3927,6 +3974,69 @@ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", "dev": true }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.8" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "dev": true, + "requires": { + "chalk": "2.0.1", + "source-map": "0.5.6", + "supports-color": "4.2.1" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", @@ -3956,17 +4066,6 @@ "source-map": "0.5.6" }, "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", @@ -4035,24 +4134,77 @@ } }, "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz", + "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", + "ansi-escapes": "2.0.0", + "chalk": "2.0.1", + "cli-cursor": "2.1.0", "cli-width": "2.1.0", - "figures": "1.7.0", + "external-editor": "2.0.4", + "figures": "2.0.0", "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", + "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.2.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "internal-ip": { @@ -4092,9 +4244,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", - "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=", "dev": true }, "is-absolute-url": { @@ -4115,7 +4267,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.8.0" + "binary-extensions": "1.9.0" } }, "is-buffer": { @@ -4176,13 +4328,10 @@ } }, "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "2.0.1", @@ -4244,6 +4393,15 @@ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", @@ -4256,6 +4414,12 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -4311,13 +4475,10 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -4374,13 +4535,19 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" }, + "jschardet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.0.tgz", + "integrity": "sha512-+Q8JsoEQbrdE+a/gg1F9XO92gcKXgpE5UACqr0sIubjDmBEkd+OOWPGzQeMrWSLxd73r4dHxBeRW7edHu5LmJQ==", + "dev": true + }, "jsdoc": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.3.tgz", "integrity": "sha512-K9mjBmCm2P62kqJ5UU6Zj7zZnJoLxZBzgLm2yVv98tqLHYSpIvxUkM+dGBua+yUsvOhXsAh232a/joE+86D4CQ==", "dev": true, "requires": { - "babylon": "7.0.0-beta.16", + "babylon": "7.0.0-beta.18", "bluebird": "3.5.0", "catharsis": "0.8.9", "escape-string-regexp": "1.0.5", @@ -4395,9 +4562,9 @@ }, "dependencies": { "babylon": { - "version": "7.0.0-beta.16", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.16.tgz", - "integrity": "sha1-RIzu3uwKXvVrYoEuNVa/NsW7l4E=", + "version": "7.0.0-beta.18", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.18.tgz", + "integrity": "sha1-XCPuP9tmNYqr83iXeTGcW3iiM8c=", "dev": true }, "klaw": { @@ -4454,9 +4621,9 @@ "dev": true }, "json-loader": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", - "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, "json-schema": { @@ -4540,9 +4707,9 @@ } }, "jsrsasign": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-7.1.3.tgz", - "integrity": "sha1-58cZKL6bro7xw15txfQHko6ebM0=" + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.3.tgz", + "integrity": "sha1-BAF7FFL19+9s//BT/t5NOXr8iRA=" }, "kew": { "version": "0.7.0", @@ -4624,17 +4791,6 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } } } }, @@ -4667,15 +4823,24 @@ "dev": true }, "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { "big.js": "3.1.3", "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -4707,6 +4872,12 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "loglevel": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.4.1.tgz", + "integrity": "sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=", + "dev": true + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -4754,6 +4925,15 @@ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", "dev": true }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -4778,6 +4958,15 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -4864,18 +5053,18 @@ "dev": true }, "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", "dev": true }, "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "1.29.0" } }, "mimer": { @@ -4884,6 +5073,12 @@ "integrity": "sha1-xjxaF/6GQj9RYahdVcPtUYm6r/w=", "dev": true }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", @@ -4956,9 +5151,9 @@ "dev": true }, "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "natural-compare": { @@ -5045,7 +5240,7 @@ "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.3.0", + "semver": "5.4.1", "validate-npm-package-license": "3.0.1" } }, @@ -5076,6 +5271,15 @@ "sort-keys": "1.1.2" } }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, "nth-check": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", @@ -5156,10 +5360,13 @@ } }, "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "opn": { "version": "4.0.2", @@ -5218,12 +5425,14 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "lcid": "1.0.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { @@ -5232,6 +5441,27 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, "p-map": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", @@ -5306,13 +5536,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -5326,6 +5553,12 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -5428,7 +5661,7 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", + "mime-types": "2.1.16", "oauth-sign": "0.8.2", "qs": "6.3.2", "stringstream": "0.0.5", @@ -5467,18 +5700,18 @@ } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "2.1.0" } }, "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", + "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", "dev": true }, "portfinder": { @@ -5643,16 +5876,16 @@ "dev": true, "requires": { "object-assign": "4.1.1", - "postcss": "6.0.6", + "postcss": "6.0.8", "postcss-value-parser": "3.3.0", "read-cache": "1.0.0", "resolve": "1.1.7" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -5664,9 +5897,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -5676,14 +5909,14 @@ "dev": true }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -5693,9 +5926,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -5709,7 +5942,7 @@ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", "dev": true, "requires": { - "cosmiconfig": "2.1.3", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1", "postcss-load-options": "1.2.0", "postcss-load-plugins": "2.3.0" @@ -5721,7 +5954,7 @@ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", "dev": true, "requires": { - "cosmiconfig": "2.1.3", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1" } }, @@ -5731,7 +5964,7 @@ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", "dev": true, "requires": { - "cosmiconfig": "2.1.3", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1" } }, @@ -5742,15 +5975,15 @@ "dev": true, "requires": { "loader-utils": "1.1.0", - "postcss": "6.0.6", + "postcss": "6.0.8", "postcss-load-config": "1.2.0", "schema-utils": "0.3.0" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -5762,9 +5995,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -5773,26 +6006,15 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -5802,9 +6024,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -5851,8 +6073,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000701", - "electron-to-chromium": "1.3.15" + "caniuse-db": "1.0.30000708", + "electron-to-chromium": "1.3.16" } } } @@ -5914,13 +6136,13 @@ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", "dev": true, "requires": { - "postcss": "6.0.6" + "postcss": "6.0.8" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -5932,9 +6154,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -5944,14 +6166,14 @@ "dev": true }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -5961,9 +6183,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -5978,13 +6200,13 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.6" + "postcss": "6.0.8" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -5996,9 +6218,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -6008,14 +6230,14 @@ "dev": true }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -6025,9 +6247,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -6042,13 +6264,13 @@ "dev": true, "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.6" + "postcss": "6.0.8" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -6060,9 +6282,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -6072,14 +6294,14 @@ "dev": true }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -6089,9 +6311,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -6106,13 +6328,13 @@ "dev": true, "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.6" + "postcss": "6.0.8" }, "dependencies": { "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { "color-convert": "1.9.0" @@ -6124,9 +6346,9 @@ "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", "dev": true, "requires": { - "ansi-styles": "3.1.0", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "has-flag": { @@ -6136,14 +6358,14 @@ "dev": true }, "postcss": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.6.tgz", - "integrity": "sha1-u6TVjohPx4yEDRU54Q7dqruPc70=", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", + "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", "dev": true, "requires": { "chalk": "2.0.1", "source-map": "0.5.6", - "supports-color": "4.2.0" + "supports-color": "4.2.1" } }, "source-map": { @@ -6153,9 +6375,9 @@ "dev": true }, "supports-color": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz", - "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -6337,13 +6559,13 @@ } }, "proxy-addr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", - "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", "dev": true, "requires": { "forwarded": "0.1.0", - "ipaddr.js": "1.3.0" + "ipaddr.js": "1.4.0" } }, "prr": { @@ -6521,6 +6743,27 @@ "requires": { "find-up": "1.1.2", "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } } }, "readable-stream": { @@ -6549,26 +6792,6 @@ "set-immediate-shim": "1.0.1" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.1.7" - } - }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -6633,7 +6856,7 @@ "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", "dev": true, "requires": { - "babel-runtime": "6.23.0", + "babel-runtime": "6.25.0", "babel-types": "6.25.0", "private": "0.1.7" } @@ -6761,7 +6984,7 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", + "mime-types": "2.1.16", "oauth-sign": "0.8.2", "performance-now": "0.2.0", "qs": "6.4.0", @@ -6845,13 +7068,13 @@ "dev": true }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "right-align": { @@ -6880,20 +7103,29 @@ } }, "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "once": "1.4.0" + "is-promise": "2.1.0" } }, "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", "dev": true }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -6967,9 +7199,9 @@ } }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", "dev": true }, "send": { @@ -6979,7 +7211,7 @@ "dev": true, "requires": { "debug": "2.6.7", - "depd": "1.1.0", + "depd": "1.1.1", "destroy": "1.0.4", "encodeurl": "1.0.1", "escape-html": "1.0.3", @@ -7021,7 +7253,7 @@ "debug": "2.6.8", "escape-html": "1.0.3", "http-errors": "1.6.1", - "mime-types": "2.1.15", + "mime-types": "2.1.16", "parseurl": "1.3.1" } }, @@ -7070,6 +7302,21 @@ "inherits": "2.0.3" } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shelljs": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", @@ -7127,9 +7374,9 @@ } }, "sockjs-client": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.2.tgz", - "integrity": "sha1-8CEqhVDkyUaMjM6u79LjSTwDOtU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, "requires": { "debug": "2.6.8", @@ -7389,14 +7636,30 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "stringstream": { @@ -7423,6 +7686,12 @@ "is-utf8": "0.2.1" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -7439,25 +7708,13 @@ "dev": true }, "style-loader": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.15.0.tgz", - "integrity": "sha1-F/+VJ64Qm5TYxT0lPckzMEFDii0=", + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", + "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", "dev": true, "requires": { - "loader-utils": "1.1.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" } }, "supports-color": { @@ -7488,9 +7745,9 @@ "dev": true }, "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", + "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", "dev": true, "requires": { "ajv": "4.11.8", @@ -7498,7 +7755,7 @@ "chalk": "1.1.3", "lodash": "4.17.4", "slice-ansi": "0.0.4", - "string-width": "2.1.0" + "string-width": "2.1.1" }, "dependencies": { "ajv": { @@ -7510,43 +7767,6 @@ "co": "4.6.0", "json-stable-stringify": "1.0.1" } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", - "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } } } }, @@ -7557,9 +7777,9 @@ "dev": true }, "tapable": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz", - "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.7.tgz", + "integrity": "sha1-5GwNqsuyuKmLmwzqD0BSEFgX7Vw=", "dev": true }, "text-table": { @@ -7595,6 +7815,15 @@ "setimmediate": "1.0.5" } }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -7683,7 +7912,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.15" + "mime-types": "2.1.16" } }, "typedarray": { @@ -7693,24 +7922,15 @@ "dev": true }, "uglify-js": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.25.tgz", - "integrity": "sha512-JO1XE0WZ9m6UpDkN7WCyPNAWI6EN3K0g40ekcoJKejViYmryJ0BaLxXjvra1IsAeIlJfq72scTbhl0jknsT2GA==", + "version": "3.0.26", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.26.tgz", + "integrity": "sha512-+D/BjzuvT1oRMSkH0fuF3M/BCvDxDywmZasd1UTPPHsdsHZqJEAZSvrojgFlS7lrM3ZZWq5h7Bb5i96X1TbOJw==", "dev": true, "requires": { - "commander": "2.9.0", + "commander": "2.11.0", "source-map": "0.5.6" }, "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", @@ -7726,6 +7946,54 @@ "dev": true, "optional": true }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-js": "2.8.29", + "webpack-sources": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.6", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, "underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", @@ -7823,19 +8091,6 @@ "requires": { "loader-utils": "1.1.0", "mime": "1.3.6" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } } }, "url-parse": { @@ -7856,15 +8111,6 @@ } } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -7929,6 +8175,20 @@ "dev": true, "requires": { "loader-utils": "0.2.17" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } } }, "vary": { @@ -8033,32 +8293,33 @@ "dev": true }, "webpack": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", - "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.4.1.tgz", + "integrity": "sha1-TD9PP7MYFVpNsMtqNv8FxWl0GPQ=", "dev": true, "requires": { "acorn": "5.1.1", "acorn-dynamic-import": "2.0.2", - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", + "ajv": "5.2.2", + "ajv-keywords": "2.1.0", "async": "2.5.0", - "enhanced-resolve": "3.3.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", "interpret": "1.0.3", - "json-loader": "0.5.4", + "json-loader": "0.5.7", "json5": "0.5.1", "loader-runner": "2.3.0", - "loader-utils": "0.2.17", + "loader-utils": "1.1.0", "memory-fs": "0.4.1", "mkdirp": "0.5.1", "node-libs-browser": "2.0.0", "source-map": "0.5.6", - "supports-color": "3.2.3", - "tapable": "0.2.6", - "uglify-js": "2.8.29", + "supports-color": "4.2.1", + "tapable": "0.2.7", + "uglifyjs-webpack-plugin": "0.4.6", "watchpack": "1.4.0", "webpack-sources": "1.0.1", - "yargs": "6.6.0" + "yargs": "8.0.2" }, "dependencies": { "acorn": { @@ -8067,26 +8328,34 @@ "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", "dev": true }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", + "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "source-map": { @@ -8096,45 +8365,32 @@ "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", "dev": true, "requires": { - "has-flag": "1.0.0" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } + "has-flag": "2.0.0" } } } }, + "webpack-dev-middleware": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", + "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.6", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0" + } + }, "webpack-dev-server": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.5.1.tgz", - "integrity": "sha1-oC5yaoe7YD211xq7fW0mSb8Qx2k=", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.6.1.tgz", + "integrity": "sha1-Cykqnaltr4CmWYj2n4e0Fm5d7+c=", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -8147,12 +8403,13 @@ "html-entities": "1.2.1", "http-proxy-middleware": "0.17.4", "internal-ip": "1.2.0", + "loglevel": "1.4.1", "opn": "4.0.2", "portfinder": "1.0.13", "selfsigned": "1.9.1", "serve-index": "1.9.0", "sockjs": "0.3.18", - "sockjs-client": "1.1.2", + "sockjs-client": "1.1.4", "spdy": "3.4.7", "strip-ansi": "3.0.1", "supports-color": "3.2.3", @@ -8160,6 +8417,23 @@ "yargs": "6.6.0" }, "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -8195,12 +8469,41 @@ } } }, + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -8210,16 +8513,40 @@ "has-flag": "1.0.0" } }, - "webpack-dev-middleware": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", - "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "1.3.6", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0" + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" } } } @@ -8314,9 +8641,9 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "window-size": { @@ -8338,19 +8665,6 @@ "requires": { "loader-utils": "1.1.0", "schema-utils": "0.3.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.1.3", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } } }, "wrap-ansi": { @@ -8361,6 +8675,28 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" + }, + "dependencies": { + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "wrappy": { @@ -8425,30 +8761,30 @@ "dev": true }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "requires": { - "camelcase": "3.0.0", + "camelcase": "4.1.0", "cliui": "3.2.0", "decamelize": "1.2.0", "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "yargs-parser": "7.0.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "cliui": { @@ -8460,23 +8796,93 @@ "string-width": "1.0.2", "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } + }, + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true } } @@ -8491,9 +8897,9 @@ } }, "zlibjs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.2.0.tgz", - "integrity": "sha1-riDwYkMpPYXCVVYxifmxL1s7oaA=" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha1-UBl+2yihxCymWcyLTmqd3W1ERVQ=" } } } diff --git a/package.json b/package.json index de38c4e5..83f31db0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cyberchef", - "version": "5.11.0", + "version": "5.12.2", "description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.", "author": "n1474335 ", "homepage": "https://gchq.github.io/CyberChef", @@ -31,39 +31,39 @@ "bugs": "https://github.com/gchq/CyberChef/issues", "devDependencies": { "babel-core": "^6.24.0", - "babel-loader": "^6.4.0", + "babel-loader": "^7.1.1", "babel-polyfill": "^6.23.0", "babel-preset-env": "^1.6.0", "babel-regenerator-runtime": "^6.5.0", - "css-loader": "^0.27.3", + "css-loader": "^0.28.4", "exports-loader": "^0.6.4", - "extract-text-webpack-plugin": "^2.1.0", - "file-loader": "^0.10.1", + "extract-text-webpack-plugin": "^3.0.0", + "file-loader": "^0.11.2", "grunt": ">=0.4.5", "grunt-accessibility": "~5.0.0", "grunt-chmod": "~1.1.1", - "grunt-contrib-clean": "~1.0.0", + "grunt-contrib-clean": "~1.1.0", "grunt-contrib-copy": "~1.0.0", - "grunt-eslint": "^19.0.0", - "grunt-exec": "~1.0.1", + "grunt-eslint": "^20.0.0", + "grunt-exec": "~2.0.0", "grunt-execute": "^0.2.2", "grunt-jsdoc": "^2.1.0", - "grunt-webpack": "^2.0.1", + "grunt-webpack": "^3.0.2", "html-webpack-plugin": "^2.29.0", "imports-loader": "^0.7.1", "ink-docstrap": "^1.1.4", "jsdoc-babel": "^0.3.0", "less": "^2.7.2", - "less-loader": "^4.0.3", + "less-loader": "^4.0.5", "postcss-css-variables": "^0.7.0", "postcss-import": "^10.0.0", "postcss-loader": "^2.0.5", - "style-loader": "^0.15.0", + "style-loader": "^0.18.2", "url-loader": "^0.5.8", "value-loader": "^0.1.3", "web-resource-inliner": "^4.1.0", - "webpack": "^2.2.1", "webpack-dev-server": "^2.5.0", + "webpack": "^3.3.0", "worker-loader": "^0.8.0" }, "dependencies": { @@ -72,15 +72,15 @@ "bootstrap-switch": "^3.3.4", "crypto-api": "^0.6.2", "crypto-js": "^3.1.9-1", - "diff": "^3.2.0", + "diff": "^3.3.0", "escodegen": "^1.8.1", "esmangle": "^1.0.1", - "esprima": "^3.1.3", - "exif-parser": "^0.1.9", + "esprima": "^4.0.0", + "exif-parser": "^0.1.12", "google-code-prettify": "^1.0.5", "jquery": "^3.1.1", "jsbn": "^1.1.0", - "jsrsasign": "7.1.3", + "jsrsasign": "8.0.3", "lodash": "^4.17.4", "moment": "^2.17.1", "moment-timezone": "^0.5.11", @@ -90,7 +90,7 @@ "vkbeautify": "^0.99.1", "xmldom": "^0.1.27", "xpath": "0.0.24", - "zlibjs": "^0.2.0" + "zlibjs": "^0.3.1" }, "scripts": { "start": "grunt dev", diff --git a/src/core/Ingredient.js b/src/core/Ingredient.js index 543f732b..e8d8a8cc 100755 --- a/src/core/Ingredient.js +++ b/src/core/Ingredient.js @@ -73,7 +73,7 @@ Ingredient.prepare = function(data, type) { case "byteArray": if (typeof data == "string") { data = data.replace(/\s+/g, ""); - return Utils.hexToByteArray(data); + return Utils.fromHex(data); } else { return data; } diff --git a/src/core/Recipe.js b/src/core/Recipe.js index 1b0e7f73..e7e5625a 100755 --- a/src/core/Recipe.js +++ b/src/core/Recipe.js @@ -164,10 +164,10 @@ Recipe.prototype.execute = async function(dish, startFrom) { if (op.isFlowControl()) { // Package up the current state let state = { - "progress" : i, - "dish" : dish, - "opList" : this.opList, - "numJumps" : numJumps + "progress": i, + "dish": dish, + "opList": this.opList, + "numJumps": numJumps }; state = await op.run(state); diff --git a/src/core/Utils.js b/src/core/Utils.js index 150e8293..1c07a13c 100755 --- a/src/core/Utils.js +++ b/src/core/Utils.js @@ -293,7 +293,7 @@ const Utils = { * Utils.escapeRegex("[example]"); */ escapeRegex: function(str) { - return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); + return str.replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1"); }, @@ -340,50 +340,6 @@ const Utils = { }, - /** - * Translates a hex string into an array of bytes. - * - * @param {string} hexStr - * @returns {byteArray} - * - * @example - * // returns [0xfe, 0x09, 0xa7] - * Utils.hexToByteArray("fe09a7"); - */ - hexToByteArray: function(hexStr) { - // TODO: Handle errors i.e. input string is not hex - if (!hexStr) return []; - hexStr = hexStr.replace(/\s+/g, ""); - const byteArray = []; - for (let i = 0; i < hexStr.length; i += 2) { - byteArray.push(parseInt(hexStr.substr(i, 2), 16)); - } - return byteArray; - }, - - - /** - * Translates an array of bytes to a hex string. - * - * @param {byteArray} byteArray - * @param {string} [delim=" "] - * @returns {string} - * - * @example - * // returns "fe09a7" - * Utils.byteArrayToHex([0xfe, 0x09, 0xa7], ""); - */ - byteArrayToHex: function(byteArray, delim) { - if (!byteArray) return ""; - delim = typeof delim === "undefined" ? " " : delim; - let hexStr = ""; - for (let i = 0; i < byteArray.length; i++) { - hexStr += Utils.hex(byteArray[i]) + delim; - } - return hexStr.slice(0, hexStr.length - delim.length); - }, - - /** * Converts a string to a byte array. * Treats the string as UTF-8 if any values are over 255. @@ -636,7 +592,7 @@ const Utils = { i = 0; if (removeNonAlphChars) { - const re = new RegExp("[^" + alphabet.replace(/[\[\]\\\-^$]/g, "\\$&") + "]", "g"); + const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g"); data = data.replace(re, ""); } @@ -828,7 +784,7 @@ const Utils = { if (removeScriptAndStyle) { htmlStr = htmlStr.replace(/<(script|style)[^>]*>.*<\/(script|style)>/gmi, ""); } - return htmlStr.replace(/<[^>\n]+>/g, ""); + return htmlStr.replace(/<[^>]+>/g, ""); }, @@ -854,7 +810,7 @@ const Utils = { "`": "`" }; - return str.replace(/[&<>"'\/`]/g, function (match) { + return str.replace(/[&<>"'/`]/g, function (match) { return HTML_CHARS[match]; }); }, @@ -946,16 +902,19 @@ const Utils = { * @returns {html} */ displayFilesAsHTML: function(files) { + /* and used to denote newlines and spaces in HTML markup. + * If a non-html operation is used, all markup will be removed but these + * whitespace chars will remain for formatting purposes. + */ + const formatDirectory = function(file) { - const html = "
" + - "" + - "
"; + const html = `
+ +
`; return html; }; @@ -966,45 +925,52 @@ const Utils = { ); const blobUrl = URL.createObjectURL(blob); - const downloadAnchorElem = "\u21B4"; + const viewFileElem = ``; - const expandFileContentsElem = "🔍"; + const downloadFileElem = `💾`; - const html = "
" + - "" + - "
" + - "
" + - "
" + Utils.escapeHtml(file.contents) + "
" + - "
" + - "
"; + const hexFileData = Utils.toHexFast(new Uint8Array(file.bytes)); + + const switchToInputElem = ``; + + const html = `
+ +
+
+
${Utils.escapeHtml(file.contents)}
+
+
+
`; return html; }; - let html = "
" + - files.length + - " file(s) found
\n"; + let html = `
+ ${files.length} file(s) found +
`; + files.forEach(function(file, i) { if (typeof file.contents !== "undefined") { html += formatFile(file, i); @@ -1012,7 +978,10 @@ const Utils = { html += formatDirectory(file); } }); - return html; + + return html.replace(/(?:(
(?:\n|.)*<\/pre>)|\s{2,})/g, "$1") // Remove whitespace from markup
+            .replace(//g, "\n") // Replace  with newlines
+            .replace(//g, " "); // Replace  with spaces
     },
 
 
@@ -1031,9 +1000,14 @@ const Utils = {
         if (paramStr === "") return {};
 
         // Cut off ? or # and split on &
-        const params = paramStr.substr(1).split("&");
+        if (paramStr[0] === "?" ||
+            paramStr[0] === "#") {
+            paramStr = paramStr.substr(1);
+        }
 
+        const params = paramStr.split("&");
         const result = {};
+
         for (let i = 0; i < params.length; i++) {
             const param = params[i].split("=");
             if (param.length !== 2) {
diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js
index ef88c524..ce46d221 100755
--- a/src/core/config/Categories.js
+++ b/src/core/config/Categories.js
@@ -46,6 +46,8 @@ const Categories = [
             "From Base58",
             "To Base",
             "From Base",
+            "To BCD",
+            "From BCD",
             "To HTML Entity",
             "From HTML Entity",
             "URL Encode",
diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js
index fb110621..b0c005b3 100755
--- a/src/core/config/OperationConfig.js
+++ b/src/core/config/OperationConfig.js
@@ -2,6 +2,7 @@ import FlowControl from "../FlowControl.js";
 import Base from "../operations/Base.js";
 import Base58 from "../operations/Base58.js";
 import Base64 from "../operations/Base64.js";
+import BCD from "../operations/BCD.js";
 import BitwiseOp from "../operations/BitwiseOp.js";
 import ByteRepr from "../operations/ByteRepr.js";
 import CharEnc from "../operations/CharEnc.js";
@@ -330,30 +331,25 @@ const OperationConfig = {
                 value: BitwiseOp.XOR_BRUTE_KEY_LENGTH
             },
             {
-                name: "Length of sample",
+                name: "Sample length",
                 type: "number",
                 value: BitwiseOp.XOR_BRUTE_SAMPLE_LENGTH
             },
             {
-                name: "Offset of sample",
+                name: "Sample offset",
                 type: "number",
                 value: BitwiseOp.XOR_BRUTE_SAMPLE_OFFSET
             },
+            {
+                name: "Scheme",
+                type: "option",
+                value: BitwiseOp.XOR_SCHEME
+            },
             {
                 name: "Null preserving",
                 type: "boolean",
                 value: BitwiseOp.XOR_PRESERVE_NULLS
             },
-            {
-                name: "Differential",
-                type: "boolean",
-                value: BitwiseOp.XOR_DIFFERENTIAL
-            },
-            {
-                name: "Crib (known plaintext string)",
-                type: "binaryString",
-                value: ""
-            },
             {
                 name: "Print key",
                 type: "boolean",
@@ -363,6 +359,11 @@ const OperationConfig = {
                 name: "Output as hex",
                 type: "boolean",
                 value: BitwiseOp.XOR_BRUTE_OUTPUT_HEX
+            },
+            {
+                name: "Crib (known plaintext string)",
+                type: "binaryString",
+                value: ""
             }
         ]
     },
@@ -2301,6 +2302,11 @@ const OperationConfig = {
                 name: "Output units",
                 type: "option",
                 value: DateTime.UNITS
+            },
+            {
+                name: "Input format",
+                type: "option",
+                value: DateTime.FILETIME_FORMATS
             }
         ]
     },
@@ -2314,6 +2320,11 @@ const OperationConfig = {
                 name: "Input units",
                 type: "option",
                 value: DateTime.UNITS
+            },
+            {
+                name: "Output format",
+                type: "option",
+                value: DateTime.FILETIME_FORMATS
             }
         ]
     },
@@ -3497,6 +3508,64 @@ const OperationConfig = {
             }
         ]
     },
+    "From BCD": {
+        description: "Binary-Coded Decimal (BCD) is a class of binary encodings of decimal numbers where each decimal digit is represented by a fixed number of bits, usually four or eight. Special bit patterns are sometimes used for a sign.",
+        run: BCD.runFromBCD,
+        inputType: "string",
+        outputType: "number",
+        args: [
+            {
+                name: "Scheme",
+                type: "option",
+                value: BCD.ENCODING_SCHEME
+            },
+            {
+                name: "Packed",
+                type: "boolean",
+                value: true
+            },
+            {
+                name: "Signed",
+                type: "boolean",
+                value: false
+            },
+            {
+                name: "Input format",
+                type: "option",
+                value: BCD.FORMAT
+            }
+        ]
+
+    },
+    "To BCD": {
+        description: "Binary-Coded Decimal (BCD) is a class of binary encodings of decimal numbers where each decimal digit is represented by a fixed number of bits, usually four or eight. Special bit patterns are sometimes used for a sign",
+        run: BCD.runToBCD,
+        inputType: "number",
+        outputType: "string",
+        args: [
+            {
+                name: "Scheme",
+                type: "option",
+                value: BCD.ENCODING_SCHEME
+            },
+            {
+                name: "Packed",
+                type: "boolean",
+                value: true
+            },
+            {
+                name: "Signed",
+                type: "boolean",
+                value: false
+            },
+            {
+                name: "Output format",
+                type: "option",
+                value: BCD.FORMAT
+            }
+        ]
+
+    },
 };
 
 export default OperationConfig;
diff --git a/src/core/operations/BCD.js b/src/core/operations/BCD.js
new file mode 100755
index 00000000..63c0cda3
--- /dev/null
+++ b/src/core/operations/BCD.js
@@ -0,0 +1,214 @@
+import Utils from "../Utils.js";
+
+
+/**
+ * Binary-Coded Decimal operations.
+ *
+ * @author n1474335 [n1474335@gmail.com]
+ * @copyright Crown Copyright 2017
+ * @license Apache-2.0
+ *
+ * @namespace
+ */
+const BCD = {
+
+    /**
+     * @constant
+     * @default
+     */
+    ENCODING_SCHEME: [
+        "8 4 2 1",
+        "7 4 2 1",
+        "4 2 2 1",
+        "2 4 2 1",
+        "8 4 -2 -1",
+        "Excess-3",
+        "IBM 8 4 2 1",
+    ],
+
+    /**
+     * Lookup table for the binary value of each digit representation.
+     *
+     * I wrote a very nice algorithm to generate 8 4 2 1 encoding programatically,
+     * but unfortunately it's much easier (if less elegant) to use lookup tables
+     * when supporting multiple encoding schemes.
+     *
+     * "Practicality beats purity" - PEP 20
+     *
+     * In some schemes it is possible to represent the same value in multiple ways.
+     * For instance, in 4 2 2 1 encoding, 0100 and 0010 both represent 2. Support
+     * has not yet been added for this.
+     *
+     * @constant
+     */
+    ENCODING_LOOKUP: {
+        "8 4 2 1":     [0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
+        "7 4 2 1":     [0,  1,  2,  3,  4,  5,  6,  8,  9,  10],
+        "4 2 2 1":     [0,  1,  4,  5,  8,  9,  12, 13, 14, 15],
+        "2 4 2 1":     [0,  1,  2,  3,  4,  11, 12, 13, 14, 15],
+        "8 4 -2 -1":   [0,  7,  6,  5,  4,  11, 10, 9,  8,  15],
+        "Excess-3":    [3,  4,  5,  6,  7,  8,  9,  10, 11, 12],
+        "IBM 8 4 2 1": [10, 1,  2,  3,  4,  5,  6,  7,  8,  9],
+    },
+
+    /**
+     * @default
+     * @constant
+     */
+    FORMAT: ["Nibbles", "Bytes", "Raw"],
+
+
+    /**
+     * To BCD operation.
+     *
+     * @param {number} input
+     * @param {Object[]} args
+     * @returns {string}
+     */
+    runToBCD: function(input, args) {
+        if (isNaN(input))
+            return "Invalid input";
+        if (Math.floor(input) !== input)
+            return "Fractional values are not supported by BCD";
+
+        const encoding = BCD.ENCODING_LOOKUP[args[0]],
+            packed = args[1],
+            signed = args[2],
+            outputFormat = args[3];
+
+        // Split input number up into separate digits
+        const digits = input.toString().split("");
+
+        if (digits[0] === "-" || digits[0] === "+") {
+            digits.shift();
+        }
+
+        let nibbles = [];
+
+        digits.forEach(d => {
+            const n = parseInt(d, 10);
+            nibbles.push(encoding[n]);
+        });
+
+        if (signed) {
+            if (packed && digits.length % 2 === 0) {
+                // If there are an even number of digits, we add a leading 0 so
+                // that the sign nibble doesn't sit in its own byte, leading to
+                // ambiguity around whether the number ends with a 0 or not.
+                nibbles.unshift(encoding[0]);
+            }
+
+            nibbles.push(input > 0 ? 12 : 13);
+            // 12 ("C") for + (credit)
+            // 13 ("D") for - (debit)
+        }
+
+        let bytes = [];
+
+        if (packed) {
+            let encoded = 0,
+                little = false;
+
+            nibbles.forEach(n => {
+                encoded ^= little ? n : (n << 4);
+                if (little) {
+                    bytes.push(encoded);
+                    encoded = 0;
+                }
+                little = !little;
+            });
+
+            if (little) bytes.push(encoded);
+        } else {
+            bytes = nibbles;
+
+            // Add null high nibbles
+            nibbles = nibbles.map(n => {
+                return [0, n];
+            }).reduce((a, b) => {
+                return a.concat(b);
+            });
+        }
+
+        // Output
+        switch (outputFormat) {
+            case "Nibbles":
+                return nibbles.map(n => {
+                    return Utils.padLeft(n.toString(2), 4);
+                }).join(" ");
+            case "Bytes":
+                return bytes.map(b => {
+                    return Utils.padLeft(b.toString(2), 8);
+                }).join(" ");
+            case "Raw":
+            default:
+                return Utils.byteArrayToChars(bytes);
+        }
+    },
+
+
+    /**
+     * From BCD operation.
+     *
+     * @param {string} input
+     * @param {Object[]} args
+     * @returns {number}
+     */
+    runFromBCD: function(input, args) {
+        const encoding = BCD.ENCODING_LOOKUP[args[0]],
+            packed = args[1],
+            signed = args[2],
+            inputFormat = args[3];
+
+        let nibbles = [],
+            output = "",
+            byteArray;
+
+        // Normalise the input
+        switch (inputFormat) {
+            case "Nibbles":
+            case "Bytes":
+                input = input.replace(/\s/g, "");
+                for (let i = 0; i < input.length; i += 4) {
+                    nibbles.push(parseInt(input.substr(i, 4), 2));
+                }
+                break;
+            case "Raw":
+            default:
+                byteArray = Utils.strToByteArray(input);
+                byteArray.forEach(b => {
+                    nibbles.push(b >>> 4);
+                    nibbles.push(b & 15);
+                });
+                break;
+        }
+
+        if (!packed) {
+            // Discard each high nibble
+            for (let i = 0; i < nibbles.length; i++) {
+                nibbles.splice(i, 1);
+            }
+        }
+
+        if (signed) {
+            const sign = nibbles.pop();
+            if (sign === 13 ||
+                sign === 11) {
+                // Negative
+                output += "-";
+            }
+        }
+
+        nibbles.forEach(n => {
+            if (isNaN(n)) throw "Invalid input";
+            let val = encoding.indexOf(n);
+            if (val < 0) throw `Value ${Utils.bin(n, 4)} not in encoding scheme`;
+            output += val.toString();
+        });
+
+        return parseInt(output, 10);
+    },
+
+};
+
+export default BCD;
diff --git a/src/core/operations/Base64.js b/src/core/operations/Base64.js
index 069a2b63..c6d9ce6c 100755
--- a/src/core/operations/Base64.js
+++ b/src/core/operations/Base64.js
@@ -221,15 +221,15 @@ const Base64 = {
             offset0 = "" +
                 staticSection + "" +
-                "" + offset0.substr(offset0.length - 3, 1) + "" +
-                "" + offset0.substr(offset0.length - 2) + "";
+                "" + offset0.substr(offset0.length - 3, 1) + "" +
+                "" + offset0.substr(offset0.length - 2) + "";
         } else if (len0 % 4 === 3) {
             staticSection = offset0.slice(0, -2);
             offset0 = "" +
                 staticSection + "" +
-                "" + offset0.substr(offset0.length - 2, 1) + "" +
-                "" + offset0.substr(offset0.length - 1) + "";
+                "" + offset0.substr(offset0.length - 2, 1) + "" +
+                "" + offset0.substr(offset0.length - 1) + "";
         } else {
             staticSection = offset0;
             offset0 = "" + offset1.substr(0, 1) + "" +
-            "" + offset1.substr(1, 1) + "";
+        padding = "" + offset1.substr(0, 1) + "" +
+            "" + offset1.substr(1, 1) + "";
         offset1 = offset1.substr(2);
         if (len1 % 4 === 2) {
             staticSection = offset1.slice(0, -3);
             offset1 = padding + "" +
                 staticSection + "" +
-                "" + offset1.substr(offset1.length - 3, 1) + "" +
-                "" + offset1.substr(offset1.length - 2) + "";
+                "" + offset1.substr(offset1.length - 3, 1) + "" +
+                "" + offset1.substr(offset1.length - 2) + "";
         } else if (len1 % 4 === 3) {
             staticSection = offset1.slice(0, -2);
             offset1 = padding + "" +
                 staticSection + "" +
-                "" + offset1.substr(offset1.length - 2, 1) + "" +
-                "" + offset1.substr(offset1.length - 1) + "";
+                "" + offset1.substr(offset1.length - 2, 1) + "" +
+                "" + offset1.substr(offset1.length - 1) + "";
         } else {
             staticSection = offset1;
             offset1 = padding +  "" + offset2.substr(0, 2) + "" +
-            "" + offset2.substr(2, 1) + "";
+        padding = "" + offset2.substr(0, 2) + "" +
+            "" + offset2.substr(2, 1) + "";
         offset2 = offset2.substr(3);
         if (len2 % 4 === 2) {
             staticSection = offset2.slice(0, -3);
             offset2 = padding + "" +
                 staticSection + "" +
-                "" + offset2.substr(offset2.length - 3, 1) + "" +
-                "" + offset2.substr(offset2.length - 2) + "";
+                "" + offset2.substr(offset2.length - 3, 1) + "" +
+                "" + offset2.substr(offset2.length - 2) + "";
         } else if (len2 % 4 === 3) {
             staticSection = offset2.slice(0, -2);
             offset2 = padding + "" +
                 staticSection + "" +
-                "" + offset2.substr(offset2.length - 2, 1) + "" +
-                "" + offset2.substr(offset2.length - 1) + "";
+                "" + offset2.substr(offset2.length - 2, 1) + "" +
+                "" + offset2.substr(offset2.length - 1) + "";
         } else {
             staticSection = offset2;
             offset2 = padding +  "green could change if the input is surrounded by more data." +
-            "\nCharacters highlighted in red are for padding purposes only." +
+        return (showVariable ? "Characters highlighted in green could change if the input is surrounded by more data." +
+            "\nCharacters highlighted in red are for padding purposes only." +
             "\nUnhighlighted characters are static." +
             "\nHover over the static sections to see what they decode to on their own.\n" +
             "\nOffset 0: " + offset0 +
diff --git a/src/core/operations/BitwiseOp.js b/src/core/operations/BitwiseOp.js
index 7a4675f6..15d778c7 100755
--- a/src/core/operations/BitwiseOp.js
+++ b/src/core/operations/BitwiseOp.js
@@ -36,7 +36,9 @@ const BitwiseOp = {
             o = input[i];
             x = nullPreserving && (o === 0 || o === k) ? o : func(o, k);
             result.push(x);
-            if (scheme !== "Standard" && !(nullPreserving && (o === 0 || o === k))) {
+            if (scheme &&
+                scheme !== "Standard" &&
+                !(nullPreserving && (o === 0 || o === k))) {
                 switch (scheme) {
                     case "Input differential":
                         key[i % key.length] = x;
@@ -120,19 +122,19 @@ const BitwiseOp = {
      * @returns {string}
      */
     runXorBrute: function (input, args) {
-        let keyLength = parseInt(args[0], 10),
+        const keyLength = parseInt(args[0], 10),
             sampleLength = args[1],
             sampleOffset = args[2],
-            nullPreserving = args[3],
-            differential = args[4],
-            crib = args[5],
-            printKey = args[6],
-            outputHex = args[7],
-            regex;
+            scheme = args[3],
+            nullPreserving = args[4],
+            printKey = args[5],
+            outputHex = args[6],
+            crib = args[7];
 
         let output = "",
             result,
-            resultUtf8;
+            resultUtf8,
+            regex;
 
         input = input.slice(sampleOffset, sampleOffset + sampleLength);
 
@@ -142,14 +144,12 @@ const BitwiseOp = {
 
 
         for (let key = 1, l = Math.pow(256, keyLength); key < l; key++) {
-            result = BitwiseOp._bitOp(input, Utils.hexToByteArray(key.toString(16)), BitwiseOp._xor, nullPreserving, differential);
+            result = BitwiseOp._bitOp(input, Utils.fromHex(key.toString(16)), BitwiseOp._xor, nullPreserving, scheme);
             resultUtf8 = Utils.byteArrayToUtf8(result);
             if (crib !== "" && resultUtf8.search(regex) === -1) continue;
             if (printKey) output += "Key = " + Utils.hex(key, (2*keyLength)) + ": ";
-            if (outputHex)
-                output += Utils.byteArrayToHex(result) + "\n";
-            else
-                output += Utils.printable(resultUtf8, false) + "\n";
+            if (outputHex) output += Utils.toHex(result) + "\n";
+            else output += Utils.printable(resultUtf8, false) + "\n";
             if (printKey) output += "\n";
         }
         return output;
diff --git a/src/core/operations/Code.js b/src/core/operations/Code.js
index c1df6714..9840797d 100755
--- a/src/core/operations/Code.js
+++ b/src/core/operations/Code.js
@@ -228,19 +228,19 @@ const Code = {
         }
 
         code = code
-                // Create newlines after ;
-                .replace(/;/g, ";\n")
-                // Create newlines after { and around }
-                .replace(/{/g, "{\n")
-                .replace(/}/g, "\n}\n")
-                // Remove carriage returns
-                .replace(/\r/g, "")
-                // Remove all indentation
-                .replace(/^\s+/g, "")
-                .replace(/\n\s+/g, "\n")
-                // Remove trailing spaces
-                .replace(/\s*$/g, "")
-                .replace(/\n{/g, "{");
+            // Create newlines after ;
+            .replace(/;/g, ";\n")
+            // Create newlines after { and around }
+            .replace(/{/g, "{\n")
+            .replace(/}/g, "\n}\n")
+            // Remove carriage returns
+            .replace(/\r/g, "")
+            // Remove all indentation
+            .replace(/^\s+/g, "")
+            .replace(/\n\s+/g, "\n")
+            // Remove trailing spaces
+            .replace(/\s*$/g, "")
+            .replace(/\n{/g, "{");
 
         // Indent
         let i = 0,
@@ -265,27 +265,27 @@ const Code = {
         }
 
         code = code
-                // Add strategic spaces
-                .replace(/\s*([!<>=+-/*]?)=\s*/g, " $1= ")
-                .replace(/\s*<([=]?)\s*/g, " <$1 ")
-                .replace(/\s*>([=]?)\s*/g, " >$1 ")
-                .replace(/([^+])\+([^+=])/g, "$1 + $2")
-                .replace(/([^-])-([^-=])/g, "$1 - $2")
-                .replace(/([^*])\*([^*=])/g, "$1 * $2")
-                .replace(/([^/])\/([^/=])/g, "$1 / $2")
-                .replace(/\s*,\s*/g, ", ")
-                .replace(/\s*{/g, " {")
-                .replace(/}\n/g, "}\n\n")
-                // Hacky horribleness
-                .replace(/(if|for|while|with|elif|elseif)\s*\(([^\n]*)\)\s*\n([^{])/gim, "$1 ($2)\n    $3")
-                .replace(/(if|for|while|with|elif|elseif)\s*\(([^\n]*)\)([^{])/gim, "$1 ($2) $3")
-                .replace(/else\s*\n([^{])/gim, "else\n    $1")
-                .replace(/else\s+([^{])/gim, "else $1")
-                // Remove strategic spaces
-                .replace(/\s+;/g, ";")
-                .replace(/\{\s+\}/g, "{}")
-                .replace(/\[\s+\]/g, "[]")
-                .replace(/}\s*(else|catch|except|finally|elif|elseif|else if)/gi, "} $1");
+            // Add strategic spaces
+            .replace(/\s*([!<>=+-/*]?)=\s*/g, " $1= ")
+            .replace(/\s*<([=]?)\s*/g, " <$1 ")
+            .replace(/\s*>([=]?)\s*/g, " >$1 ")
+            .replace(/([^+])\+([^+=])/g, "$1 + $2")
+            .replace(/([^-])-([^-=])/g, "$1 - $2")
+            .replace(/([^*])\*([^*=])/g, "$1 * $2")
+            .replace(/([^/])\/([^/=])/g, "$1 / $2")
+            .replace(/\s*,\s*/g, ", ")
+            .replace(/\s*{/g, " {")
+            .replace(/}\n/g, "}\n\n")
+            // Hacky horribleness
+            .replace(/(if|for|while|with|elif|elseif)\s*\(([^\n]*)\)\s*\n([^{])/gim, "$1 ($2)\n    $3")
+            .replace(/(if|for|while|with|elif|elseif)\s*\(([^\n]*)\)([^{])/gim, "$1 ($2) $3")
+            .replace(/else\s*\n([^{])/gim, "else\n    $1")
+            .replace(/else\s+([^{])/gim, "else $1")
+            // Remove strategic spaces
+            .replace(/\s+;/g, ";")
+            .replace(/\{\s+\}/g, "{}")
+            .replace(/\[\s+\]/g, "[]")
+            .replace(/}\s*(else|catch|except|finally|elif|elseif|else if)/gi, "} $1");
 
         // Replace preserved tokens
         const ptokens = /###preservedToken(\d+)###/g;
@@ -329,7 +329,7 @@ const Code = {
      * @param {Object[]} args
      * @returns {string}
      */
-    runXpath:function(input, args) {
+    runXpath: function(input, args) {
         let query = args[0],
             delimiter = args[1];
 
diff --git a/src/core/operations/Compress.js b/src/core/operations/Compress.js
index 020d40cf..639b89c6 100755
--- a/src/core/operations/Compress.js
+++ b/src/core/operations/Compress.js
@@ -9,12 +9,12 @@ import bzip2 from "exports-loader?bzip2!../lib/bzip2.js";
 const Zlib = {
     RawDeflate: rawdeflate.Zlib.RawDeflate,
     RawInflate: rawinflate.Zlib.RawInflate,
-    Deflate: zlibAndGzip.Zlib.Deflate,
-    Inflate: zlibAndGzip.Zlib.Inflate,
-    Gzip: zlibAndGzip.Zlib.Gzip,
-    Gunzip: zlibAndGzip.Zlib.Gunzip,
-    Zip: zip.Zlib.Zip,
-    Unzip: unzip.Zlib.Unzip,
+    Deflate:    zlibAndGzip.Zlib.Deflate,
+    Inflate:    zlibAndGzip.Zlib.Inflate,
+    Gzip:       zlibAndGzip.Zlib.Gzip,
+    Gunzip:     zlibAndGzip.Zlib.Gunzip,
+    Zip:        zip.Zlib.Zip,
+    Unzip:      unzip.Zlib.Unzip,
 };
 
 
@@ -54,9 +54,9 @@ const Compress = {
      * @default
      */
     RAW_COMPRESSION_TYPE_LOOKUP: {
-        "Fixed Huffman Coding"   : Zlib.RawDeflate.CompressionType.FIXED,
-        "Dynamic Huffman Coding" : Zlib.RawDeflate.CompressionType.DYNAMIC,
-        "None (Store)"           : Zlib.RawDeflate.CompressionType.NONE,
+        "Fixed Huffman Coding":   Zlib.RawDeflate.CompressionType.FIXED,
+        "Dynamic Huffman Coding": Zlib.RawDeflate.CompressionType.DYNAMIC,
+        "None (Store)":           Zlib.RawDeflate.CompressionType.NONE,
     },
 
     /**
@@ -99,8 +99,8 @@ const Compress = {
      * @default
      */
     RAW_BUFFER_TYPE_LOOKUP: {
-        "Adaptive" : Zlib.RawInflate.BufferType.ADAPTIVE,
-        "Block"    : Zlib.RawInflate.BufferType.BLOCK,
+        "Adaptive": Zlib.RawInflate.BufferType.ADAPTIVE,
+        "Block":    Zlib.RawInflate.BufferType.BLOCK,
     },
 
     /**
@@ -150,9 +150,9 @@ const Compress = {
      * @default
      */
     ZLIB_COMPRESSION_TYPE_LOOKUP: {
-        "Fixed Huffman Coding"   : Zlib.Deflate.CompressionType.FIXED,
-        "Dynamic Huffman Coding" : Zlib.Deflate.CompressionType.DYNAMIC,
-        "None (Store)"           : Zlib.Deflate.CompressionType.NONE,
+        "Fixed Huffman Coding":   Zlib.Deflate.CompressionType.FIXED,
+        "Dynamic Huffman Coding": Zlib.Deflate.CompressionType.DYNAMIC,
+        "None (Store)":           Zlib.Deflate.CompressionType.NONE,
     },
 
     /**
@@ -175,8 +175,8 @@ const Compress = {
      * @default
      */
     ZLIB_BUFFER_TYPE_LOOKUP: {
-        "Adaptive" : Zlib.Inflate.BufferType.ADAPTIVE,
-        "Block"    : Zlib.Inflate.BufferType.BLOCK,
+        "Adaptive": Zlib.Inflate.BufferType.ADAPTIVE,
+        "Block":    Zlib.Inflate.BufferType.BLOCK,
     },
 
     /**
@@ -264,17 +264,17 @@ const Compress = {
      * @default
      */
     ZIP_COMPRESSION_METHOD_LOOKUP: {
-        "Deflate"      : Zlib.Zip.CompressionMethod.DEFLATE,
-        "None (Store)" : Zlib.Zip.CompressionMethod.STORE
+        "Deflate":      Zlib.Zip.CompressionMethod.DEFLATE,
+        "None (Store)": Zlib.Zip.CompressionMethod.STORE
     },
     /**
      * @constant
      * @default
      */
     ZIP_OS_LOOKUP: {
-        "MSDOS"     : Zlib.Zip.OperatingSystem.MSDOS,
-        "Unix"      : Zlib.Zip.OperatingSystem.UNIX,
-        "Macintosh" : Zlib.Zip.OperatingSystem.MACINTOSH
+        "MSDOS":     Zlib.Zip.OperatingSystem.MSDOS,
+        "Unix":      Zlib.Zip.OperatingSystem.UNIX,
+        "Macintosh": Zlib.Zip.OperatingSystem.MACINTOSH
     },
 
     /**
diff --git a/src/core/operations/Convert.js b/src/core/operations/Convert.js
index cb2d860f..2c95253d 100755
--- a/src/core/operations/Convert.js
+++ b/src/core/operations/Convert.js
@@ -25,36 +25,36 @@ const Convert = {
      * @default
      */
     DISTANCE_FACTOR: { // Multiples of a metre
-        "Nanometres (nm)"   : 1e-9,
-        "Micrometres (µm)"  : 1e-6,
-        "Millimetres (mm)"  : 1e-3,
-        "Centimetres (cm)"  : 1e-2,
-        "Metres (m)"        : 1,
-        "Kilometers (km)"   : 1e3,
+        "Nanometres (nm)":         1e-9,
+        "Micrometres (µm)":        1e-6,
+        "Millimetres (mm)":        1e-3,
+        "Centimetres (cm)":        1e-2,
+        "Metres (m)":              1,
+        "Kilometers (km)":         1e3,
 
-        "Thou (th)"         : 0.0000254,
-        "Inches (in)"       : 0.0254,
-        "Feet (ft)"         : 0.3048,
-        "Yards (yd)"        : 0.9144,
-        "Chains (ch)"       : 20.1168,
-        "Furlongs (fur)"    : 201.168,
-        "Miles (mi)"        : 1609.344,
-        "Leagues (lea)"     : 4828.032,
+        "Thou (th)":               0.0000254,
+        "Inches (in)":             0.0254,
+        "Feet (ft)":               0.3048,
+        "Yards (yd)":              0.9144,
+        "Chains (ch)":             20.1168,
+        "Furlongs (fur)":          201.168,
+        "Miles (mi)":              1609.344,
+        "Leagues (lea)":           4828.032,
 
-        "Fathoms (ftm)"     : 1.853184,
-        "Cables"            : 185.3184,
-        "Nautical miles"    : 1853.184,
+        "Fathoms (ftm)":           1.853184,
+        "Cables":                  185.3184,
+        "Nautical miles":          1853.184,
 
-        "Cars (4m)"         : 4,
-        "Buses (8.4m)"      : 8.4,
+        "Cars (4m)":               4,
+        "Buses (8.4m)":            8.4,
         "American football fields (91m)": 91,
         "Football pitches (105m)": 105,
 
-        "Earth-to-Moons"    : 380000000,
-        "Earth's equators"  : 40075016.686,
+        "Earth-to-Moons":          380000000,
+        "Earth's equators":        40075016.686,
         "Astronomical units (au)": 149597870700,
-        "Light-years (ly)"  : 9460730472580800,
-        "Parsecs (pc)"      : 3.0856776e16
+        "Light-years (ly)":        9460730472580800,
+        "Parsecs (pc)":            3.0856776e16
     },
 
     /**
@@ -90,52 +90,52 @@ const Convert = {
      * @default
      */
     DATA_FACTOR: { // Multiples of a bit
-        "Bits (b)"        : 1,
-        "Nibbles"         : 4,
-        "Octets"          : 8,
-        "Bytes (B)"       : 8,
+        "Bits (b)":        1,
+        "Nibbles":         4,
+        "Octets":          8,
+        "Bytes (B)":       8,
 
         // Binary bits (2^n)
-        "Kibibits (Kib)"  : 1024,
-        "Mebibits (Mib)"  : 1048576,
-        "Gibibits (Gib)"  : 1073741824,
-        "Tebibits (Tib)"  : 1099511627776,
-        "Pebibits (Pib)"  : 1125899906842624,
-        "Exbibits (Eib)"  : 1152921504606846976,
-        "Zebibits (Zib)"  : 1180591620717411303424,
-        "Yobibits (Yib)"  : 1208925819614629174706176,
+        "Kibibits (Kib)":  1024,
+        "Mebibits (Mib)":  1048576,
+        "Gibibits (Gib)":  1073741824,
+        "Tebibits (Tib)":  1099511627776,
+        "Pebibits (Pib)":  1125899906842624,
+        "Exbibits (Eib)":  1152921504606846976,
+        "Zebibits (Zib)":  1180591620717411303424,
+        "Yobibits (Yib)":  1208925819614629174706176,
 
         // Decimal bits (10^n)
-        "Decabits"        : 10,
-        "Hectobits"       : 100,
-        "Kilobits (Kb)"   : 1e3,
-        "Megabits (Mb)"   : 1e6,
-        "Gigabits (Gb)"   : 1e9,
-        "Terabits (Tb)"   : 1e12,
-        "Petabits (Pb)"   : 1e15,
-        "Exabits (Eb)"    : 1e18,
-        "Zettabits (Zb)"  : 1e21,
-        "Yottabits (Yb)"  : 1e24,
+        "Decabits":        10,
+        "Hectobits":       100,
+        "Kilobits (Kb)":   1e3,
+        "Megabits (Mb)":   1e6,
+        "Gigabits (Gb)":   1e9,
+        "Terabits (Tb)":   1e12,
+        "Petabits (Pb)":   1e15,
+        "Exabits (Eb)":    1e18,
+        "Zettabits (Zb)":  1e21,
+        "Yottabits (Yb)":  1e24,
 
         // Binary bytes (8 x 2^n)
-        "Kibibytes (KiB)" : 8192,
-        "Mebibytes (MiB)" : 8388608,
-        "Gibibytes (GiB)" : 8589934592,
-        "Tebibytes (TiB)" : 8796093022208,
-        "Pebibytes (PiB)" : 9007199254740992,
-        "Exbibytes (EiB)" : 9223372036854775808,
-        "Zebibytes (ZiB)" : 9444732965739290427392,
-        "Yobibytes (YiB)" : 9671406556917033397649408,
+        "Kibibytes (KiB)": 8192,
+        "Mebibytes (MiB)": 8388608,
+        "Gibibytes (GiB)": 8589934592,
+        "Tebibytes (TiB)": 8796093022208,
+        "Pebibytes (PiB)": 9007199254740992,
+        "Exbibytes (EiB)": 9223372036854775808,
+        "Zebibytes (ZiB)": 9444732965739290427392,
+        "Yobibytes (YiB)": 9671406556917033397649408,
 
         // Decimal bytes (8 x 10^n)
-        "Kilobytes (KB)"  : 8e3,
-        "Megabytes (MB)"  : 8e6,
-        "Gigabytes (GB)"  : 8e9,
-        "Terabytes (TB)"  : 8e12,
-        "Petabytes (PB)"  : 8e15,
-        "Exabytes (EB)"   : 8e18,
-        "Zettabytes (ZB)" : 8e21,
-        "Yottabytes (YB)" : 8e24,
+        "Kilobytes (KB)":  8e3,
+        "Megabytes (MB)":  8e6,
+        "Gigabytes (GB)":  8e9,
+        "Terabytes (TB)":  8e12,
+        "Petabytes (PB)":  8e15,
+        "Exabytes (EB)":   8e18,
+        "Zettabytes (ZB)": 8e21,
+        "Yottabytes (YB)": 8e24,
     },
 
     /**
@@ -171,51 +171,51 @@ const Convert = {
      */
     AREA_FACTOR: { // Multiples of a square metre
         // Metric
-        "Square metre (sq m)"       : 1,
-        "Square kilometre (sq km)"  : 1e6,
+        "Square metre (sq m)":      1,
+        "Square kilometre (sq km)": 1e6,
 
-        "Centiare (ca)"             : 1,
-        "Deciare (da)"              : 10,
-        "Are (a)"                   : 100,
-        "Decare (daa)"              : 1e3,
-        "Hectare (ha)"              : 1e4,
+        "Centiare (ca)":            1,
+        "Deciare (da)":             10,
+        "Are (a)":                  100,
+        "Decare (daa)":             1e3,
+        "Hectare (ha)":             1e4,
 
         // Imperial
-        "Square inch (sq in)"       : 0.00064516,
-        "Square foot (sq ft)"       : 0.09290304,
-        "Square yard (sq yd)"       : 0.83612736,
-        "Square mile (sq mi)"       : 2589988.110336,
-        "Perch (sq per)"            : 42.21,
-        "Rood (ro)"                 : 1011,
-        "International acre (ac)"   : 4046.8564224,
+        "Square inch (sq in)":      0.00064516,
+        "Square foot (sq ft)":      0.09290304,
+        "Square yard (sq yd)":      0.83612736,
+        "Square mile (sq mi)":      2589988.110336,
+        "Perch (sq per)":           42.21,
+        "Rood (ro)":                1011,
+        "International acre (ac)":  4046.8564224,
 
         // US customary units
-        "US survey acre (ac)"       : 4046.87261,
-        "US survey square mile (sq mi)" : 2589998.470305239,
-        "US survey township"        : 93239944.9309886,
+        "US survey acre (ac)":      4046.87261,
+        "US survey square mile (sq mi)": 2589998.470305239,
+        "US survey township":       93239944.9309886,
 
         // Nuclear physics
-        "Yoctobarn (yb)"            : 1e-52,
-        "Zeptobarn (zb)"            : 1e-49,
-        "Attobarn (ab)"             : 1e-46,
-        "Femtobarn (fb)"            : 1e-43,
-        "Picobarn (pb)"             : 1e-40,
-        "Nanobarn (nb)"             : 1e-37,
-        "Microbarn (μb)"            : 1e-34,
-        "Millibarn (mb)"            : 1e-31,
-        "Barn (b)"                  : 1e-28,
-        "Kilobarn (kb)"             : 1e-25,
-        "Megabarn (Mb)"             : 1e-22,
+        "Yoctobarn (yb)":           1e-52,
+        "Zeptobarn (zb)":           1e-49,
+        "Attobarn (ab)":            1e-46,
+        "Femtobarn (fb)":           1e-43,
+        "Picobarn (pb)":            1e-40,
+        "Nanobarn (nb)":            1e-37,
+        "Microbarn (μb)":           1e-34,
+        "Millibarn (mb)":           1e-31,
+        "Barn (b)":                 1e-28,
+        "Kilobarn (kb)":            1e-25,
+        "Megabarn (Mb)":            1e-22,
 
-        "Planck area"               : 2.6e-70,
-        "Shed"                      : 1e-52,
-        "Outhouse"                  : 1e-34,
+        "Planck area":              2.6e-70,
+        "Shed":                     1e-52,
+        "Outhouse":                 1e-34,
 
         // Comparisons
-        "Washington D.C."           : 176119191.502848,
-        "Isle of Wight"             : 380000000,
-        "Wales"                     : 20779000000,
-        "Texas"                     : 696241000000,
+        "Washington D.C.":          176119191.502848,
+        "Isle of Wight":            380000000,
+        "Wales":                    20779000000,
+        "Texas":                    696241000000,
     },
 
     /**
@@ -252,81 +252,81 @@ const Convert = {
      */
     MASS_FACTOR: { // Multiples of a gram
         // Metric
-        "Yoctogram (yg)"    : 1e-24,
-        "Zeptogram (zg)"    : 1e-21,
-        "Attogram (ag)"     : 1e-18,
-        "Femtogram (fg)"    : 1e-15,
-        "Picogram (pg)"     : 1e-12,
-        "Nanogram (ng)"     : 1e-9,
-        "Microgram (μg)"    : 1e-6,
-        "Milligram (mg)"    : 1e-3,
-        "Centigram (cg)"    : 1e-2,
-        "Decigram (dg)"     : 1e-1,
-        "Gram (g)"          : 1,
-        "Decagram (dag)"    : 10,
-        "Hectogram (hg)"    : 100,
-        "Kilogram (kg)"     : 1000,
-        "Megagram (Mg)"     : 1e6,
-        "Tonne (t)"         : 1e6,
-        "Gigagram (Gg)"     : 1e9,
-        "Teragram (Tg)"     : 1e12,
-        "Petagram (Pg)"     : 1e15,
-        "Exagram (Eg)"      : 1e18,
-        "Zettagram (Zg)"    : 1e21,
-        "Yottagram (Yg)"    : 1e24,
+        "Yoctogram (yg)":     1e-24,
+        "Zeptogram (zg)":     1e-21,
+        "Attogram (ag)":      1e-18,
+        "Femtogram (fg)":     1e-15,
+        "Picogram (pg)":      1e-12,
+        "Nanogram (ng)":      1e-9,
+        "Microgram (μg)":     1e-6,
+        "Milligram (mg)":     1e-3,
+        "Centigram (cg)":     1e-2,
+        "Decigram (dg)":      1e-1,
+        "Gram (g)":           1,
+        "Decagram (dag)":     10,
+        "Hectogram (hg)":     100,
+        "Kilogram (kg)":      1000,
+        "Megagram (Mg)":      1e6,
+        "Tonne (t)":          1e6,
+        "Gigagram (Gg)":      1e9,
+        "Teragram (Tg)":      1e12,
+        "Petagram (Pg)":      1e15,
+        "Exagram (Eg)":       1e18,
+        "Zettagram (Zg)":     1e21,
+        "Yottagram (Yg)":     1e24,
 
         // Imperial Avoirdupois
-        "Grain (gr)"        : 64.79891e-3,
-        "Dram (dr)"         : 1.7718451953125,
-        "Ounce (oz)"        : 28.349523125,
-        "Pound (lb)"        : 453.59237,
-        "Nail"              : 3175.14659,
-        "Stone (st)"        : 6.35029318e3,
-        "Quarter (gr)"      : 12700.58636,
-        "Tod"               : 12700.58636,
-        "US hundredweight (cwt)" : 45.359237e3,
-        "Imperial hundredweight (cwt)" : 50.80234544e3,
-        "US ton (t)"        : 907.18474e3,
-        "Imperial ton (t)"  : 1016.0469088e3,
+        "Grain (gr)":         64.79891e-3,
+        "Dram (dr)":          1.7718451953125,
+        "Ounce (oz)":         28.349523125,
+        "Pound (lb)":         453.59237,
+        "Nail":               3175.14659,
+        "Stone (st)":         6.35029318e3,
+        "Quarter (gr)":       12700.58636,
+        "Tod":                12700.58636,
+        "US hundredweight (cwt)": 45.359237e3,
+        "Imperial hundredweight (cwt)": 50.80234544e3,
+        "US ton (t)":         907.18474e3,
+        "Imperial ton (t)":   1016.0469088e3,
 
         // Imperial Troy
-        "Pennyweight (dwt)" : 1.55517384,
-        "Troy dram (dr t)"  : 3.8879346,
-        "Troy ounce (oz t)" : 31.1034768,
-        "Troy pound (lb t)" : 373.2417216,
-        "Mark"              : 248.8278144,
+        "Pennyweight (dwt)":  1.55517384,
+        "Troy dram (dr t)":   3.8879346,
+        "Troy ounce (oz t)":  31.1034768,
+        "Troy pound (lb t)":  373.2417216,
+        "Mark":               248.8278144,
 
         // Archaic
-        "Wey"               : 76.5e3,
-        "Wool wey"          : 101.7e3,
-        "Suffolk wey"       : 161.5e3,
-        "Wool sack"         : 153000,
-        "Coal sack"         : 50.80234544e3,
-        "Load"              : 918000,
-        "Last"              : 1836000,
-        "Flax or feather last" : 770e3,
-        "Gunpowder last"    : 1090e3,
-        "Picul"             : 60.478982e3,
-        "Rice last"         : 1200e3,
+        "Wey":                76.5e3,
+        "Wool wey":           101.7e3,
+        "Suffolk wey":        161.5e3,
+        "Wool sack":          153000,
+        "Coal sack":          50.80234544e3,
+        "Load":               918000,
+        "Last":               1836000,
+        "Flax or feather last": 770e3,
+        "Gunpowder last":     1090e3,
+        "Picul":              60.478982e3,
+        "Rice last":          1200e3,
 
         // Comparisons
-        "Big Ben (14 tonnes)"                      : 14e6,
-        "Blue whale (180 tonnes)"                  : 180e6,
-        "International Space Station (417 tonnes)" : 417e6,
-        "Space Shuttle (2,041 tonnes)"             : 2041e6,
-        "RMS Titanic (52,000 tonnes)"              : 52000e6,
-        "Great Pyramid of Giza (6,000,000 tonnes)" : 6e12,
-        "Earth's oceans (1.4 yottagrams)"          : 1.4e24,
+        "Big Ben (14 tonnes)": 14e6,
+        "Blue whale (180 tonnes)": 180e6,
+        "International Space Station (417 tonnes)": 417e6,
+        "Space Shuttle (2,041 tonnes)": 2041e6,
+        "RMS Titanic (52,000 tonnes)": 52000e6,
+        "Great Pyramid of Giza (6,000,000 tonnes)": 6e12,
+        "Earth's oceans (1.4 yottagrams)": 1.4e24,
 
         // Astronomical
-        "A teaspoon of neutron star (5,500 million tonnes)" : 5.5e15,
-        "Lunar mass (ML)"                          : 7.342e25,
-        "Earth mass (M⊕)"                          : 5.97219e27,
-        "Jupiter mass (MJ)"                        : 1.8981411476999997e30,
-        "Solar mass (M☉)"                         : 1.98855e33,
-        "Sagittarius A* (7.5 x 10^36 kgs-ish)"     : 7.5e39,
-        "Milky Way galaxy (1.2 x 10^42 kgs)"       : 1.2e45,
-        "The observable universe (1.45 x 10^53 kgs)" : 1.45e56,
+        "A teaspoon of neutron star (5,500 million tonnes)": 5.5e15,
+        "Lunar mass (ML)":    7.342e25,
+        "Earth mass (M⊕)":    5.97219e27,
+        "Jupiter mass (MJ)":  1.8981411476999997e30,
+        "Solar mass (M☉)":    1.98855e33,
+        "Sagittarius A* (7.5 x 10^36 kgs-ish)": 7.5e39,
+        "Milky Way galaxy (1.2 x 10^42 kgs)": 1.2e45,
+        "The observable universe (1.45 x 10^53 kgs)": 1.45e56,
     },
 
     /**
@@ -361,37 +361,37 @@ const Convert = {
      */
     SPEED_FACTOR: { // Multiples of m/s
         // Metric
-        "Metres per second (m/s)"        : 1,
-        "Kilometres per hour (km/h)"     : 0.2778,
+        "Metres per second (m/s)":           1,
+        "Kilometres per hour (km/h)":        0.2778,
 
         // Imperial
-        "Miles per hour (mph)"           : 0.44704,
-        "Knots (kn)"                     : 0.5144,
+        "Miles per hour (mph)":              0.44704,
+        "Knots (kn)":                        0.5144,
 
         // Comparisons
-        "Human hair growth rate"         : 4.8e-9,
-        "Bamboo growth rate"             : 1.4e-5,
-        "World's fastest snail"          : 0.00275,
-        "Usain Bolt's top speed"         : 12.42,
-        "Jet airliner cruising speed"    : 250,
-        "Concorde"                       : 603,
-        "SR-71 Blackbird"                : 981,
-        "Space Shuttle"                  : 1400,
-        "International Space Station"    : 7700,
+        "Human hair growth rate":            4.8e-9,
+        "Bamboo growth rate":                1.4e-5,
+        "World's fastest snail":             0.00275,
+        "Usain Bolt's top speed":            12.42,
+        "Jet airliner cruising speed":       250,
+        "Concorde":                          603,
+        "SR-71 Blackbird":                   981,
+        "Space Shuttle":                     1400,
+        "International Space Station":       7700,
 
         // Scientific
-        "Sound in standard atmosphere"   : 340.3,
-        "Sound in water"                 : 1500,
-        "Lunar escape velocity"          : 2375,
-        "Earth escape velocity"          : 11200,
-        "Earth's solar orbit"            : 29800,
-        "Solar system's Milky Way orbit" : 200000,
-        "Milky Way relative to the cosmic microwave background" : 552000,
-        "Solar escape velocity"          : 617700,
-        "Neutron star escape velocity (0.3c)" : 100000000,
-        "Light in a diamond (0.4136c)"   : 124000000,
-        "Signal in an optical fibre (0.667c)" : 200000000,
-        "Light (c)"                      : 299792458,
+        "Sound in standard atmosphere":      340.3,
+        "Sound in water":                    1500,
+        "Lunar escape velocity":             2375,
+        "Earth escape velocity":             11200,
+        "Earth's solar orbit":               29800,
+        "Solar system's Milky Way orbit":    200000,
+        "Milky Way relative to the cosmic microwave background": 552000,
+        "Solar escape velocity":             617700,
+        "Neutron star escape velocity (0.3c)": 100000000,
+        "Light in a diamond (0.4136c)":      124000000,
+        "Signal in an optical fibre (0.667c)": 200000000,
+        "Light (c)":                         299792458,
     },
 
     /**
diff --git a/src/core/operations/DateTime.js b/src/core/operations/DateTime.js
index 5262ecc4..b665a2b5 100755
--- a/src/core/operations/DateTime.js
+++ b/src/core/operations/DateTime.js
@@ -89,8 +89,17 @@ const DateTime = {
      * @returns {string}
      */
     runFromFiletimeToUnix: function(input, args) {
-        let units = args[0];
-        input = new BigInteger(input).subtract(new BigInteger("116444736000000000"));
+        let units = args[0],
+            format = args[1];
+
+        if (format === "Hex") {
+            input = new BigInteger(input, 16);
+        } else {
+            input = new BigInteger(input);
+        }
+
+        input = input.subtract(new BigInteger("116444736000000000"));
+
         if (units === "Seconds (s)"){
             input = input.divide(new BigInteger("10000000"));
         } else if (units === "Milliseconds (ms)") {
@@ -102,6 +111,7 @@ const DateTime = {
         } else {
             throw "Unrecognised unit";
         }
+
         return input.toString();
     },
 
@@ -115,8 +125,11 @@ const DateTime = {
      * @returns {string}
      */
     runToFiletimeFromUnix: function(input, args) {
-        let units = args[0];
+        let units = args[0],
+            format = args[1];
+
         input = new BigInteger(input);
+
         if (units === "Seconds (s)"){
             input = input.multiply(new BigInteger("10000000"));
         } else if (units === "Milliseconds (ms)") {
@@ -128,10 +141,24 @@ const DateTime = {
         } else {
             throw "Unrecognised unit";
         }
-        return input.add(new BigInteger("116444736000000000")).toString();
+
+        input = input.add(new BigInteger("116444736000000000"));
+
+        if (format === "Hex"){
+            return input.toString(16);
+        } else {
+            return input.toString();
+        }
     },
 
 
+    /**
+     * @constant
+     * @default
+     */
+    FILETIME_FORMATS: ["Decimal", "Hex"],
+
+
     /**
      * @constant
      * @default
diff --git a/src/core/operations/HTML.js b/src/core/operations/HTML.js
index 4e3075c6..5a15167f 100755
--- a/src/core/operations/HTML.js
+++ b/src/core/operations/HTML.js
@@ -144,8 +144,9 @@ const HTML = {
         }
 
         if (removeLineBreaks) {
-            input = input.replace(/^\s*\n/, "") // first line
-                         .replace(/(\n\s*){2,}/g, "\n"); // all others
+            input = input
+                .replace(/^\s*\n/, "") // first line
+                .replace(/(\n\s*){2,}/g, "\n"); // all others
         }
 
         return input;
@@ -331,260 +332,260 @@ const HTML = {
      * @constant
      */
     _byteToEntity: {
-        34 : """,
-        38 : "&",
-        39 : "'",
-        60 : "<",
-        62 : ">",
-        160 : " ",
-        161 : "¡",
-        162 : "¢",
-        163 : "£",
-        164 : "¤",
-        165 : "¥",
-        166 : "¦",
-        167 : "§",
-        168 : "¨",
-        169 : "©",
-        170 : "ª",
-        171 : "«",
-        172 : "¬",
-        173 : "­",
-        174 : "®",
-        175 : "¯",
-        176 : "°",
-        177 : "±",
-        178 : "²",
-        179 : "³",
-        180 : "´",
-        181 : "µ",
-        182 : "¶",
-        183 : "·",
-        184 : "¸",
-        185 : "¹",
-        186 : "º",
-        187 : "»",
-        188 : "¼",
-        189 : "½",
-        190 : "¾",
-        191 : "¿",
-        192 : "À",
-        193 : "Á",
-        194 : "Â",
-        195 : "Ã",
-        196 : "Ä",
-        197 : "Å",
-        198 : "Æ",
-        199 : "Ç",
-        200 : "È",
-        201 : "É",
-        202 : "Ê",
-        203 : "Ë",
-        204 : "Ì",
-        205 : "Í",
-        206 : "Î",
-        207 : "Ï",
-        208 : "Ð",
-        209 : "Ñ",
-        210 : "Ò",
-        211 : "Ó",
-        212 : "Ô",
-        213 : "Õ",
-        214 : "Ö",
-        215 : "×",
-        216 : "Ø",
-        217 : "Ù",
-        218 : "Ú",
-        219 : "Û",
-        220 : "Ü",
-        221 : "Ý",
-        222 : "Þ",
-        223 : "ß",
-        224 : "à",
-        225 : "á",
-        226 : "â",
-        227 : "ã",
-        228 : "ä",
-        229 : "å",
-        230 : "æ",
-        231 : "ç",
-        232 : "è",
-        233 : "é",
-        234 : "ê",
-        235 : "ë",
-        236 : "ì",
-        237 : "í",
-        238 : "î",
-        239 : "ï",
-        240 : "ð",
-        241 : "ñ",
-        242 : "ò",
-        243 : "ó",
-        244 : "ô",
-        245 : "õ",
-        246 : "ö",
-        247 : "÷",
-        248 : "ø",
-        249 : "ù",
-        250 : "ú",
-        251 : "û",
-        252 : "ü",
-        253 : "ý",
-        254 : "þ",
-        255 : "ÿ",
-        338 : "Œ",
-        339 : "œ",
-        352 : "Š",
-        353 : "š",
-        376 : "Ÿ",
-        402 : "ƒ",
-        710 : "ˆ",
-        732 : "˜",
-        913 : "Α",
-        914 : "Β",
-        915 : "Γ",
-        916 : "Δ",
-        917 : "Ε",
-        918 : "Ζ",
-        919 : "Η",
-        920 : "Θ",
-        921 : "Ι",
-        922 : "Κ",
-        923 : "Λ",
-        924 : "Μ",
-        925 : "Ν",
-        926 : "Ξ",
-        927 : "Ο",
-        928 : "Π",
-        929 : "Ρ",
-        931 : "Σ",
-        932 : "Τ",
-        933 : "Υ",
-        934 : "Φ",
-        935 : "Χ",
-        936 : "Ψ",
-        937 : "Ω",
-        945 : "α",
-        946 : "β",
-        947 : "γ",
-        948 : "δ",
-        949 : "ε",
-        950 : "ζ",
-        951 : "η",
-        952 : "θ",
-        953 : "ι",
-        954 : "κ",
-        955 : "λ",
-        956 : "μ",
-        957 : "ν",
-        958 : "ξ",
-        959 : "ο",
-        960 : "π",
-        961 : "ρ",
-        962 : "ς",
-        963 : "σ",
-        964 : "τ",
-        965 : "υ",
-        966 : "φ",
-        967 : "χ",
-        968 : "ψ",
-        969 : "ω",
-        977 : "ϑ",
-        978 : "ϒ",
-        982 : "ϖ",
-        8194 : " ",
-        8195 : " ",
-        8201 : " ",
-        8204 : "‌",
-        8205 : "‍",
-        8206 : "‎",
-        8207 : "‏",
-        8211 : "–",
-        8212 : "—",
-        8216 : "‘",
-        8217 : "’",
-        8218 : "‚",
-        8220 : "“",
-        8221 : "”",
-        8222 : "„",
-        8224 : "†",
-        8225 : "‡",
-        8226 : "•",
-        8230 : "…",
-        8240 : "‰",
-        8242 : "′",
-        8243 : "″",
-        8249 : "‹",
-        8250 : "›",
-        8254 : "‾",
-        8260 : "⁄",
-        8364 : "€",
-        8465 : "ℑ",
-        8472 : "℘",
-        8476 : "ℜ",
-        8482 : "™",
-        8501 : "ℵ",
-        8592 : "←",
-        8593 : "↑",
-        8594 : "→",
-        8595 : "↓",
-        8596 : "↔",
-        8629 : "↵",
-        8656 : "⇐",
-        8657 : "⇑",
-        8658 : "⇒",
-        8659 : "⇓",
-        8660 : "⇔",
-        8704 : "∀",
-        8706 : "∂",
-        8707 : "∃",
-        8709 : "∅",
-        8711 : "∇",
-        8712 : "∈",
-        8713 : "∉",
-        8715 : "∋",
-        8719 : "∏",
-        8721 : "∑",
-        8722 : "−",
-        8727 : "∗",
-        8730 : "√",
-        8733 : "∝",
-        8734 : "∞",
-        8736 : "∠",
-        8743 : "∧",
-        8744 : "∨",
-        8745 : "∩",
-        8746 : "∪",
-        8747 : "∫",
-        8756 : "∴",
-        8764 : "∼",
-        8773 : "≅",
-        8776 : "≈",
-        8800 : "≠",
-        8801 : "≡",
-        8804 : "≤",
-        8805 : "≥",
-        8834 : "⊂",
-        8835 : "⊃",
-        8836 : "⊄",
-        8838 : "⊆",
-        8839 : "⊇",
-        8853 : "⊕",
-        8855 : "⊗",
-        8869 : "⊥",
-        8901 : "⋅",
-        8942 : "⋮",
-        8968 : "⌈",
-        8969 : "⌉",
-        8970 : "⌊",
-        8971 : "⌋",
-        9001 : "⟨",
-        9002 : "⟩",
-        9674 : "◊",
-        9824 : "♠",
-        9827 : "♣",
-        9829 : "♥",
-        9830 : "♦",
+        34: """,
+        38: "&",
+        39: "'",
+        60: "<",
+        62: ">",
+        160: " ",
+        161: "¡",
+        162: "¢",
+        163: "£",
+        164: "¤",
+        165: "¥",
+        166: "¦",
+        167: "§",
+        168: "¨",
+        169: "©",
+        170: "ª",
+        171: "«",
+        172: "¬",
+        173: "­",
+        174: "®",
+        175: "¯",
+        176: "°",
+        177: "±",
+        178: "²",
+        179: "³",
+        180: "´",
+        181: "µ",
+        182: "¶",
+        183: "·",
+        184: "¸",
+        185: "¹",
+        186: "º",
+        187: "»",
+        188: "¼",
+        189: "½",
+        190: "¾",
+        191: "¿",
+        192: "À",
+        193: "Á",
+        194: "Â",
+        195: "Ã",
+        196: "Ä",
+        197: "Å",
+        198: "Æ",
+        199: "Ç",
+        200: "È",
+        201: "É",
+        202: "Ê",
+        203: "Ë",
+        204: "Ì",
+        205: "Í",
+        206: "Î",
+        207: "Ï",
+        208: "Ð",
+        209: "Ñ",
+        210: "Ò",
+        211: "Ó",
+        212: "Ô",
+        213: "Õ",
+        214: "Ö",
+        215: "×",
+        216: "Ø",
+        217: "Ù",
+        218: "Ú",
+        219: "Û",
+        220: "Ü",
+        221: "Ý",
+        222: "Þ",
+        223: "ß",
+        224: "à",
+        225: "á",
+        226: "â",
+        227: "ã",
+        228: "ä",
+        229: "å",
+        230: "æ",
+        231: "ç",
+        232: "è",
+        233: "é",
+        234: "ê",
+        235: "ë",
+        236: "ì",
+        237: "í",
+        238: "î",
+        239: "ï",
+        240: "ð",
+        241: "ñ",
+        242: "ò",
+        243: "ó",
+        244: "ô",
+        245: "õ",
+        246: "ö",
+        247: "÷",
+        248: "ø",
+        249: "ù",
+        250: "ú",
+        251: "û",
+        252: "ü",
+        253: "ý",
+        254: "þ",
+        255: "ÿ",
+        338: "Œ",
+        339: "œ",
+        352: "Š",
+        353: "š",
+        376: "Ÿ",
+        402: "ƒ",
+        710: "ˆ",
+        732: "˜",
+        913: "Α",
+        914: "Β",
+        915: "Γ",
+        916: "Δ",
+        917: "Ε",
+        918: "Ζ",
+        919: "Η",
+        920: "Θ",
+        921: "Ι",
+        922: "Κ",
+        923: "Λ",
+        924: "Μ",
+        925: "Ν",
+        926: "Ξ",
+        927: "Ο",
+        928: "Π",
+        929: "Ρ",
+        931: "Σ",
+        932: "Τ",
+        933: "Υ",
+        934: "Φ",
+        935: "Χ",
+        936: "Ψ",
+        937: "Ω",
+        945: "α",
+        946: "β",
+        947: "γ",
+        948: "δ",
+        949: "ε",
+        950: "ζ",
+        951: "η",
+        952: "θ",
+        953: "ι",
+        954: "κ",
+        955: "λ",
+        956: "μ",
+        957: "ν",
+        958: "ξ",
+        959: "ο",
+        960: "π",
+        961: "ρ",
+        962: "ς",
+        963: "σ",
+        964: "τ",
+        965: "υ",
+        966: "φ",
+        967: "χ",
+        968: "ψ",
+        969: "ω",
+        977: "ϑ",
+        978: "ϒ",
+        982: "ϖ",
+        8194: " ",
+        8195: " ",
+        8201: " ",
+        8204: "‌",
+        8205: "‍",
+        8206: "‎",
+        8207: "‏",
+        8211: "–",
+        8212: "—",
+        8216: "‘",
+        8217: "’",
+        8218: "‚",
+        8220: "“",
+        8221: "”",
+        8222: "„",
+        8224: "†",
+        8225: "‡",
+        8226: "•",
+        8230: "…",
+        8240: "‰",
+        8242: "′",
+        8243: "″",
+        8249: "‹",
+        8250: "›",
+        8254: "‾",
+        8260: "⁄",
+        8364: "€",
+        8465: "ℑ",
+        8472: "℘",
+        8476: "ℜ",
+        8482: "™",
+        8501: "ℵ",
+        8592: "←",
+        8593: "↑",
+        8594: "→",
+        8595: "↓",
+        8596: "↔",
+        8629: "↵",
+        8656: "⇐",
+        8657: "⇑",
+        8658: "⇒",
+        8659: "⇓",
+        8660: "⇔",
+        8704: "∀",
+        8706: "∂",
+        8707: "∃",
+        8709: "∅",
+        8711: "∇",
+        8712: "∈",
+        8713: "∉",
+        8715: "∋",
+        8719: "∏",
+        8721: "∑",
+        8722: "−",
+        8727: "∗",
+        8730: "√",
+        8733: "∝",
+        8734: "∞",
+        8736: "∠",
+        8743: "∧",
+        8744: "∨",
+        8745: "∩",
+        8746: "∪",
+        8747: "∫",
+        8756: "∴",
+        8764: "∼",
+        8773: "≅",
+        8776: "≈",
+        8800: "≠",
+        8801: "≡",
+        8804: "≤",
+        8805: "≥",
+        8834: "⊂",
+        8835: "⊃",
+        8836: "⊄",
+        8838: "⊆",
+        8839: "⊇",
+        8853: "⊕",
+        8855: "⊗",
+        8869: "⊥",
+        8901: "⋅",
+        8942: "⋮",
+        8968: "⌈",
+        8969: "⌉",
+        8970: "⌊",
+        8971: "⌋",
+        9001: "⟨",
+        9002: "⟩",
+        9674: "◊",
+        9824: "♠",
+        9827: "♣",
+        9829: "♥",
+        9830: "♦",
     },
 
 
@@ -594,261 +595,261 @@ const HTML = {
      * @private
      * @constant
      */
-    _entityToByte : {
-        "quot" : 34,
-        "amp" : 38,
-        "apos" : 39,
-        "lt" : 60,
-        "gt" : 62,
-        "nbsp" : 160,
-        "iexcl" : 161,
-        "cent" : 162,
-        "pound" : 163,
-        "curren" : 164,
-        "yen" : 165,
-        "brvbar" : 166,
-        "sect" : 167,
-        "uml" : 168,
-        "copy" : 169,
-        "ordf" : 170,
-        "laquo" : 171,
-        "not" : 172,
-        "shy" : 173,
-        "reg" : 174,
-        "macr" : 175,
-        "deg" : 176,
-        "plusmn" : 177,
-        "sup2" : 178,
-        "sup3" : 179,
-        "acute" : 180,
-        "micro" : 181,
-        "para" : 182,
-        "middot" : 183,
-        "cedil" : 184,
-        "sup1" : 185,
-        "ordm" : 186,
-        "raquo" : 187,
-        "frac14" : 188,
-        "frac12" : 189,
-        "frac34" : 190,
-        "iquest" : 191,
-        "Agrave" : 192,
-        "Aacute" : 193,
-        "Acirc" : 194,
-        "Atilde" : 195,
-        "Auml" : 196,
-        "Aring" : 197,
-        "AElig" : 198,
-        "Ccedil" : 199,
-        "Egrave" : 200,
-        "Eacute" : 201,
-        "Ecirc" : 202,
-        "Euml" : 203,
-        "Igrave" : 204,
-        "Iacute" : 205,
-        "Icirc" : 206,
-        "Iuml" : 207,
-        "ETH" : 208,
-        "Ntilde" : 209,
-        "Ograve" : 210,
-        "Oacute" : 211,
-        "Ocirc" : 212,
-        "Otilde" : 213,
-        "Ouml" : 214,
-        "times" : 215,
-        "Oslash" : 216,
-        "Ugrave" : 217,
-        "Uacute" : 218,
-        "Ucirc" : 219,
-        "Uuml" : 220,
-        "Yacute" : 221,
-        "THORN" : 222,
-        "szlig" : 223,
-        "agrave" : 224,
-        "aacute" : 225,
-        "acirc" : 226,
-        "atilde" : 227,
-        "auml" : 228,
-        "aring" : 229,
-        "aelig" : 230,
-        "ccedil" : 231,
-        "egrave" : 232,
-        "eacute" : 233,
-        "ecirc" : 234,
-        "euml" : 235,
-        "igrave" : 236,
-        "iacute" : 237,
-        "icirc" : 238,
-        "iuml" : 239,
-        "eth" : 240,
-        "ntilde" : 241,
-        "ograve" : 242,
-        "oacute" : 243,
-        "ocirc" : 244,
-        "otilde" : 245,
-        "ouml" : 246,
-        "divide" : 247,
-        "oslash" : 248,
-        "ugrave" : 249,
-        "uacute" : 250,
-        "ucirc" : 251,
-        "uuml" : 252,
-        "yacute" : 253,
-        "thorn" : 254,
-        "yuml" : 255,
-        "OElig" : 338,
-        "oelig" : 339,
-        "Scaron" : 352,
-        "scaron" : 353,
-        "Yuml" : 376,
-        "fnof" : 402,
-        "circ" : 710,
-        "tilde" : 732,
-        "Alpha" : 913,
-        "Beta" : 914,
-        "Gamma" : 915,
-        "Delta" : 916,
-        "Epsilon" : 917,
-        "Zeta" : 918,
-        "Eta" : 919,
-        "Theta" : 920,
-        "Iota" : 921,
-        "Kappa" : 922,
-        "Lambda" : 923,
-        "Mu" : 924,
-        "Nu" : 925,
-        "Xi" : 926,
-        "Omicron" : 927,
-        "Pi" : 928,
-        "Rho" : 929,
-        "Sigma" : 931,
-        "Tau" : 932,
-        "Upsilon" : 933,
-        "Phi" : 934,
-        "Chi" : 935,
-        "Psi" : 936,
-        "Omega" : 937,
-        "alpha" : 945,
-        "beta" : 946,
-        "gamma" : 947,
-        "delta" : 948,
-        "epsilon" : 949,
-        "zeta" : 950,
-        "eta" : 951,
-        "theta" : 952,
-        "iota" : 953,
-        "kappa" : 954,
-        "lambda" : 955,
-        "mu" : 956,
-        "nu" : 957,
-        "xi" : 958,
-        "omicron" : 959,
-        "pi" : 960,
-        "rho" : 961,
-        "sigmaf" : 962,
-        "sigma" : 963,
-        "tau" : 964,
-        "upsilon" : 965,
-        "phi" : 966,
-        "chi" : 967,
-        "psi" : 968,
-        "omega" : 969,
-        "thetasym" : 977,
-        "upsih" : 978,
-        "piv" : 982,
-        "ensp" : 8194,
-        "emsp" : 8195,
-        "thinsp" : 8201,
-        "zwnj" : 8204,
-        "zwj" : 8205,
-        "lrm" : 8206,
-        "rlm" : 8207,
-        "ndash" : 8211,
-        "mdash" : 8212,
-        "lsquo" : 8216,
-        "rsquo" : 8217,
-        "sbquo" : 8218,
-        "ldquo" : 8220,
-        "rdquo" : 8221,
-        "bdquo" : 8222,
-        "dagger" : 8224,
-        "Dagger" : 8225,
-        "bull" : 8226,
-        "hellip" : 8230,
-        "permil" : 8240,
-        "prime" : 8242,
-        "Prime" : 8243,
-        "lsaquo" : 8249,
-        "rsaquo" : 8250,
-        "oline" : 8254,
-        "frasl" : 8260,
-        "euro" : 8364,
-        "image" : 8465,
-        "weierp" : 8472,
-        "real" : 8476,
-        "trade" : 8482,
-        "alefsym" : 8501,
-        "larr" : 8592,
-        "uarr" : 8593,
-        "rarr" : 8594,
-        "darr" : 8595,
-        "harr" : 8596,
-        "crarr" : 8629,
-        "lArr" : 8656,
-        "uArr" : 8657,
-        "rArr" : 8658,
-        "dArr" : 8659,
-        "hArr" : 8660,
-        "forall" : 8704,
-        "part" : 8706,
-        "exist" : 8707,
-        "empty" : 8709,
-        "nabla" : 8711,
-        "isin" : 8712,
-        "notin" : 8713,
-        "ni" : 8715,
-        "prod" : 8719,
-        "sum" : 8721,
-        "minus" : 8722,
-        "lowast" : 8727,
-        "radic" : 8730,
-        "prop" : 8733,
-        "infin" : 8734,
-        "ang" : 8736,
-        "and" : 8743,
-        "or" : 8744,
-        "cap" : 8745,
-        "cup" : 8746,
-        "int" : 8747,
-        "there4" : 8756,
-        "sim" : 8764,
-        "cong" : 8773,
-        "asymp" : 8776,
-        "ne" : 8800,
-        "equiv" : 8801,
-        "le" : 8804,
-        "ge" : 8805,
-        "sub" : 8834,
-        "sup" : 8835,
-        "nsub" : 8836,
-        "sube" : 8838,
-        "supe" : 8839,
-        "oplus" : 8853,
-        "otimes" : 8855,
-        "perp" : 8869,
-        "sdot" : 8901,
-        "vellip" : 8942,
-        "lceil" : 8968,
-        "rceil" : 8969,
-        "lfloor" : 8970,
-        "rfloor" : 8971,
-        "lang" : 9001,
-        "rang" : 9002,
-        "loz" : 9674,
-        "spades" : 9824,
-        "clubs" : 9827,
-        "hearts" : 9829,
-        "diams" : 9830,
+    _entityToByte: {
+        "quot": 34,
+        "amp": 38,
+        "apos": 39,
+        "lt": 60,
+        "gt": 62,
+        "nbsp": 160,
+        "iexcl": 161,
+        "cent": 162,
+        "pound": 163,
+        "curren": 164,
+        "yen": 165,
+        "brvbar": 166,
+        "sect": 167,
+        "uml": 168,
+        "copy": 169,
+        "ordf": 170,
+        "laquo": 171,
+        "not": 172,
+        "shy": 173,
+        "reg": 174,
+        "macr": 175,
+        "deg": 176,
+        "plusmn": 177,
+        "sup2": 178,
+        "sup3": 179,
+        "acute": 180,
+        "micro": 181,
+        "para": 182,
+        "middot": 183,
+        "cedil": 184,
+        "sup1": 185,
+        "ordm": 186,
+        "raquo": 187,
+        "frac14": 188,
+        "frac12": 189,
+        "frac34": 190,
+        "iquest": 191,
+        "Agrave": 192,
+        "Aacute": 193,
+        "Acirc": 194,
+        "Atilde": 195,
+        "Auml": 196,
+        "Aring": 197,
+        "AElig": 198,
+        "Ccedil": 199,
+        "Egrave": 200,
+        "Eacute": 201,
+        "Ecirc": 202,
+        "Euml": 203,
+        "Igrave": 204,
+        "Iacute": 205,
+        "Icirc": 206,
+        "Iuml": 207,
+        "ETH": 208,
+        "Ntilde": 209,
+        "Ograve": 210,
+        "Oacute": 211,
+        "Ocirc": 212,
+        "Otilde": 213,
+        "Ouml": 214,
+        "times": 215,
+        "Oslash": 216,
+        "Ugrave": 217,
+        "Uacute": 218,
+        "Ucirc": 219,
+        "Uuml": 220,
+        "Yacute": 221,
+        "THORN": 222,
+        "szlig": 223,
+        "agrave": 224,
+        "aacute": 225,
+        "acirc": 226,
+        "atilde": 227,
+        "auml": 228,
+        "aring": 229,
+        "aelig": 230,
+        "ccedil": 231,
+        "egrave": 232,
+        "eacute": 233,
+        "ecirc": 234,
+        "euml": 235,
+        "igrave": 236,
+        "iacute": 237,
+        "icirc": 238,
+        "iuml": 239,
+        "eth": 240,
+        "ntilde": 241,
+        "ograve": 242,
+        "oacute": 243,
+        "ocirc": 244,
+        "otilde": 245,
+        "ouml": 246,
+        "divide": 247,
+        "oslash": 248,
+        "ugrave": 249,
+        "uacute": 250,
+        "ucirc": 251,
+        "uuml": 252,
+        "yacute": 253,
+        "thorn": 254,
+        "yuml": 255,
+        "OElig": 338,
+        "oelig": 339,
+        "Scaron": 352,
+        "scaron": 353,
+        "Yuml": 376,
+        "fnof": 402,
+        "circ": 710,
+        "tilde": 732,
+        "Alpha": 913,
+        "Beta": 914,
+        "Gamma": 915,
+        "Delta": 916,
+        "Epsilon": 917,
+        "Zeta": 918,
+        "Eta": 919,
+        "Theta": 920,
+        "Iota": 921,
+        "Kappa": 922,
+        "Lambda": 923,
+        "Mu": 924,
+        "Nu": 925,
+        "Xi": 926,
+        "Omicron": 927,
+        "Pi": 928,
+        "Rho": 929,
+        "Sigma": 931,
+        "Tau": 932,
+        "Upsilon": 933,
+        "Phi": 934,
+        "Chi": 935,
+        "Psi": 936,
+        "Omega": 937,
+        "alpha": 945,
+        "beta": 946,
+        "gamma": 947,
+        "delta": 948,
+        "epsilon": 949,
+        "zeta": 950,
+        "eta": 951,
+        "theta": 952,
+        "iota": 953,
+        "kappa": 954,
+        "lambda": 955,
+        "mu": 956,
+        "nu": 957,
+        "xi": 958,
+        "omicron": 959,
+        "pi": 960,
+        "rho": 961,
+        "sigmaf": 962,
+        "sigma": 963,
+        "tau": 964,
+        "upsilon": 965,
+        "phi": 966,
+        "chi": 967,
+        "psi": 968,
+        "omega": 969,
+        "thetasym": 977,
+        "upsih": 978,
+        "piv": 982,
+        "ensp": 8194,
+        "emsp": 8195,
+        "thinsp": 8201,
+        "zwnj": 8204,
+        "zwj": 8205,
+        "lrm": 8206,
+        "rlm": 8207,
+        "ndash": 8211,
+        "mdash": 8212,
+        "lsquo": 8216,
+        "rsquo": 8217,
+        "sbquo": 8218,
+        "ldquo": 8220,
+        "rdquo": 8221,
+        "bdquo": 8222,
+        "dagger": 8224,
+        "Dagger": 8225,
+        "bull": 8226,
+        "hellip": 8230,
+        "permil": 8240,
+        "prime": 8242,
+        "Prime": 8243,
+        "lsaquo": 8249,
+        "rsaquo": 8250,
+        "oline": 8254,
+        "frasl": 8260,
+        "euro": 8364,
+        "image": 8465,
+        "weierp": 8472,
+        "real": 8476,
+        "trade": 8482,
+        "alefsym": 8501,
+        "larr": 8592,
+        "uarr": 8593,
+        "rarr": 8594,
+        "darr": 8595,
+        "harr": 8596,
+        "crarr": 8629,
+        "lArr": 8656,
+        "uArr": 8657,
+        "rArr": 8658,
+        "dArr": 8659,
+        "hArr": 8660,
+        "forall": 8704,
+        "part": 8706,
+        "exist": 8707,
+        "empty": 8709,
+        "nabla": 8711,
+        "isin": 8712,
+        "notin": 8713,
+        "ni": 8715,
+        "prod": 8719,
+        "sum": 8721,
+        "minus": 8722,
+        "lowast": 8727,
+        "radic": 8730,
+        "prop": 8733,
+        "infin": 8734,
+        "ang": 8736,
+        "and": 8743,
+        "or": 8744,
+        "cap": 8745,
+        "cup": 8746,
+        "int": 8747,
+        "there4": 8756,
+        "sim": 8764,
+        "cong": 8773,
+        "asymp": 8776,
+        "ne": 8800,
+        "equiv": 8801,
+        "le": 8804,
+        "ge": 8805,
+        "sub": 8834,
+        "sup": 8835,
+        "nsub": 8836,
+        "sube": 8838,
+        "supe": 8839,
+        "oplus": 8853,
+        "otimes": 8855,
+        "perp": 8869,
+        "sdot": 8901,
+        "vellip": 8942,
+        "lceil": 8968,
+        "rceil": 8969,
+        "lfloor": 8970,
+        "rfloor": 8971,
+        "lang": 9001,
+        "rang": 9002,
+        "loz": 9674,
+        "spades": 9824,
+        "clubs": 9827,
+        "hearts": 9829,
+        "diams": 9830,
     },
 
 };
diff --git a/src/core/operations/HTTP.js b/src/core/operations/HTTP.js
index f12b151f..d5ce99a4 100755
--- a/src/core/operations/HTTP.js
+++ b/src/core/operations/HTTP.js
@@ -125,30 +125,30 @@ const HTTP = {
         }
 
         return fetch(url, config)
-        .then(r => {
-            if (r.status === 0 && r.type === "opaque") {
-                return "Error: Null response. Try setting the connection mode to CORS.";
-            }
-
-            if (showResponseMetadata) {
-                let headers = "";
-                for (let pair of r.headers.entries()) {
-                    headers += "    " + pair[0] + ": " + pair[1] + "\n";
+            .then(r => {
+                if (r.status === 0 && r.type === "opaque") {
+                    return "Error: Null response. Try setting the connection mode to CORS.";
                 }
-                return r.text().then(b => {
-                    return "####\n  Status: " + r.status + " " + r.statusText +
-                        "\n  Exposed headers:\n" + headers + "####\n\n" + b;
-                });
-            }
-            return r.text();
-        })
-        .catch(e => {
-            return e.toString() +
-                "\n\nThis error could be caused by one of the following:\n" +
-                " - An invalid URL\n" +
-                " - Making a request to an insecure resource (HTTP) from a secure source (HTTPS)\n" +
-                " - Making a cross-origin request to a server which does not support CORS\n";
-        });
+
+                if (showResponseMetadata) {
+                    let headers = "";
+                    for (let pair of r.headers.entries()) {
+                        headers += "    " + pair[0] + ": " + pair[1] + "\n";
+                    }
+                    return r.text().then(b => {
+                        return "####\n  Status: " + r.status + " " + r.statusText +
+                            "\n  Exposed headers:\n" + headers + "####\n\n" + b;
+                    });
+                }
+                return r.text();
+            })
+            .catch(e => {
+                return e.toString() +
+                    "\n\nThis error could be caused by one of the following:\n" +
+                    " - An invalid URL\n" +
+                    " - Making a request to an insecure resource (HTTP) from a secure source (HTTPS)\n" +
+                    " - Making a cross-origin request to a server which does not support CORS\n";
+            });
     },
 
 };
diff --git a/src/core/operations/IP.js b/src/core/operations/IP.js
index 8a852789..4c3eb5de 100755
--- a/src/core/operations/IP.js
+++ b/src/core/operations/IP.js
@@ -283,7 +283,7 @@ const IP = {
                     baIp.push(decimal & 255);
                     break;
                 case "Hex":
-                    baIp = Utils.hexToByteArray(lines[i]);
+                    baIp = Utils.fromHex(lines[i]);
                     break;
                 default:
                     throw "Unsupported input IP format";
@@ -516,7 +516,7 @@ const IP = {
             "Destination IP address" + IP._ipv4ToStr(dstIP) + "";
 
         if (ihl > 5) {
-            output += "Options" + Utils.byteArrayToHex(options) + "";
+            output += "Options" + Utils.toHex(options) + "";
         }
 
         return output + "";
diff --git a/src/core/operations/JS.js b/src/core/operations/JS.js
index 593e8fc6..58290aaa 100755
--- a/src/core/operations/JS.js
+++ b/src/core/operations/JS.js
@@ -1,4 +1,4 @@
-import esprima from "esprima";
+import * as esprima from "esprima";
 import escodegen from "escodegen";
 import esmangle from "esmangle";
 
@@ -62,7 +62,7 @@ const JS = {
                 tolerant: parseTolerant
             };
 
-        result = esprima.parse(input, options);
+        result = esprima.parseScript(input, options);
         return JSON.stringify(result, null, 2);
     },
 
@@ -104,7 +104,7 @@ const JS = {
             AST;
 
         try {
-            AST = esprima.parse(input, {
+            AST = esprima.parseScript(input, {
                 range: true,
                 tokens: true,
                 comment: true
@@ -142,7 +142,7 @@ const JS = {
      */
     runMinify: function(input, args) {
         let result = "",
-            AST = esprima.parse(input),
+            AST = esprima.parseScript(input),
             optimisedAST = esmangle.optimize(AST, null),
             mangledAST = esmangle.mangle(optimisedAST);
 
diff --git a/src/core/operations/OS.js b/src/core/operations/OS.js
index 9b8bd96c..93a780f1 100755
--- a/src/core/operations/OS.js
+++ b/src/core/operations/OS.js
@@ -18,25 +18,25 @@ const OS = {
      */
     runParseUnixPerms: function(input, args) {
         let perms = {
-                d : false,  // directory
-                sl : false, // symbolic link
-                np : false, // named pipe
-                s : false,  // socket
-                cd : false, // character device
-                bd : false, // block device
-                dr : false, // door
-                sb : false, // sticky bit
-                su : false, // setuid
-                sg : false, // setgid
-                ru : false, // read user
-                wu : false, // write user
-                eu : false, // execute user
-                rg : false, // read group
-                wg : false, // write group
-                eg : false, // execute group
-                ro : false, // read other
-                wo : false, // write other
-                eo : false // execute other
+                d:  false, // directory
+                sl: false, // symbolic link
+                np: false, // named pipe
+                s:  false, // socket
+                cd: false, // character device
+                bd: false, // block device
+                dr: false, // door
+                sb: false, // sticky bit
+                su: false, // setuid
+                sg: false, // setgid
+                ru: false, // read user
+                wu: false, // write user
+                eu: false, // execute user
+                rg: false, // read group
+                wg: false, // write group
+                eg: false, // execute group
+                ro: false, // read other
+                wo: false, // write other
+                eo: false  // execute other
             },
             d = 0,
             u = 0,
diff --git a/src/core/operations/PublicKey.js b/src/core/operations/PublicKey.js
index 237c968a..73839d4b 100755
--- a/src/core/operations/PublicKey.js
+++ b/src/core/operations/PublicKey.js
@@ -27,52 +27,49 @@ const PublicKey = {
      * @returns {string}
      */
     runParseX509: function (input, args) {
-        let cert = new r.X509(),
-            inputFormat = args[0];
-
         if (!input.length) {
             return "No input";
         }
 
+        let cert = new r.X509(),
+            inputFormat = args[0];
+
         switch (inputFormat) {
             case "DER Hex":
                 input = input.replace(/\s/g, "");
-                cert.hex = input;
-                cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(input, "CERTIFICATE");
+                cert.readCertHex(input);
                 break;
             case "PEM":
-                cert.hex = r.X509.pemToHex(input);
-                cert.pem = input;
+                cert.readCertPEM(input);
                 break;
             case "Base64":
-                cert.hex = Utils.toHex(Utils.fromBase64(input, null, "byteArray"), "");
-                cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
+                cert.readCertHex(Utils.toHex(Utils.fromBase64(input, null, "byteArray"), ""));
                 break;
             case "Raw":
-                cert.hex = Utils.toHex(Utils.strToByteArray(input), "");
-                cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
+                cert.readCertHex(Utils.toHex(Utils.strToByteArray(input), ""));
                 break;
             default:
                 throw "Undefined input format";
         }
 
-        let version = r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 0, 0]),
-            sn = cert.getSerialNumberHex(),
-            algorithm = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 2, 0]))),
+        let sn = cert.getSerialNumberHex(),
             issuer = cert.getIssuerString(),
-            notBefore = cert.getNotBefore(),
-            notAfter = cert.getNotAfter(),
             subject = cert.getSubjectString(),
-            pkAlgorithm = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 6, 0, 0]))),
-            pk = r.X509.getPublicKeyFromCertPEM(cert.pem),
+            pk = cert.getPublicKey(),
             pkFields = [],
             pkStr = "",
-            certSigAlg = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [1, 0]))),
-            certSig = r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [2]).substr(2),
+            sig = cert.getSignatureValueHex(),
             sigStr = "",
-            extensions = r.ASN1HEX.dump(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 7]));
+            extensions = cert.getInfo().split("X509v3 Extensions:\n")[1].split("signature")[0];
+        window.cert = cert;
+        window.r = r;
 
         // Public Key fields
+        pkFields.push({
+            key: "Algorithm",
+            value: pk.type
+        });
+
         if (pk.type === "EC") { // ECDSA
             pkFields.push({
                 key: "Curve Name",
@@ -123,21 +120,6 @@ const PublicKey = {
             });
         }
 
-        // Signature fields
-        let breakoutSig = false;
-        try {
-            breakoutSig = r.ASN1HEX.dump(certSig).indexOf("SEQUENCE") === 0;
-        } catch (err) {
-            // Error processing signature, output without further breakout
-        }
-
-        if (breakoutSig) { // DSA or ECDSA
-            sigStr = "  r:              " + PublicKey._formatByteStr(r.ASN1HEX.getDecendantHexVByNthList(certSig, 0, [0]), 16, 18) + "\n" +
-                "  s:              " + PublicKey._formatByteStr(r.ASN1HEX.getDecendantHexVByNthList(certSig, 0, [1]), 16, 18) + "\n";
-        } else { // RSA or unknown
-            sigStr = "  Signature:      " + PublicKey._formatByteStr(certSig, 16, 18) + "\n";
-        }
-
         // Format Public Key fields
         for (let i = 0; i < pkFields.length; i++) {
             pkStr += "  " + pkFields[i].key + ":" +
@@ -148,31 +130,45 @@ const PublicKey = {
                 );
         }
 
+        // Signature fields
+        let breakoutSig = false;
+        try {
+            breakoutSig = r.ASN1HEX.dump(sig).indexOf("SEQUENCE") === 0;
+        } catch (err) {
+            // Error processing signature, output without further breakout
+        }
+
+        if (breakoutSig) { // DSA or ECDSA
+            sigStr = "  r:              " + PublicKey._formatByteStr(r.ASN1HEX.getV(sig, 4), 16, 18) + "\n" +
+                "  s:              " + PublicKey._formatByteStr(r.ASN1HEX.getV(sig, 48), 16, 18);
+        } else { // RSA or unknown
+            sigStr = "  Signature:      " + PublicKey._formatByteStr(sig, 16, 18);
+        }
+
+
         let issuerStr = PublicKey._formatDnStr(issuer, 2),
-            nbDate = PublicKey._formatDate(notBefore),
-            naDate = PublicKey._formatDate(notAfter),
+            nbDate = PublicKey._formatDate(cert.getNotBefore()),
+            naDate = PublicKey._formatDate(cert.getNotAfter()),
             subjectStr = PublicKey._formatDnStr(subject, 2);
 
-        const output = "Version:          " + (parseInt(version, 16) + 1) + " (0x" + version + ")\n" +
-            "Serial number:    " + new r.BigInteger(sn, 16).toString() + " (0x" + sn + ")\n" +
-            "Algorithm ID:     " + algorithm + "\n" +
-            "Validity\n" +
-            "  Not Before:     " + nbDate + " (dd-mm-yy hh:mm:ss) (" + notBefore + ")\n" +
-            "  Not After:      " + naDate + " (dd-mm-yy hh:mm:ss) (" + notAfter + ")\n" +
-            "Issuer\n" +
-            issuerStr +
-            "Subject\n" +
-            subjectStr +
-            "Public Key\n" +
-            "  Algorithm:      " + pkAlgorithm + "\n" +
-            pkStr +
-            "Certificate Signature\n" +
-            "  Algorithm:      " + certSigAlg + "\n" +
-            sigStr +
-            "\nExtensions (parsed ASN.1)\n" +
-            extensions;
+        return `Version:          ${cert.version} (0x${Utils.hex(cert.version - 1)})
+Serial number:    ${new r.BigInteger(sn, 16).toString()} (0x${sn})
+Algorithm ID:     ${cert.getSignatureAlgorithmField()}
+Validity
+  Not Before:     ${nbDate} (dd-mm-yy hh:mm:ss) (${cert.getNotBefore()})
+  Not After:      ${naDate} (dd-mm-yy hh:mm:ss) (${cert.getNotAfter()})
+Issuer
+${issuerStr}
+Subject
+${subjectStr}
+Public Key
+${pkStr.slice(0, -1)}
+Certificate Signature
+  Algorithm:      ${cert.getSignatureAlgorithmName()}
+${sigStr}
 
-        return output;
+Extensions
+${extensions}`;
     },
 
 
@@ -192,7 +188,9 @@ const PublicKey = {
             // Add footer so that the KEYUTIL function works
             input = input + "-----END CERTIFICATE-----";
         }
-        return r.KEYUTIL.getHexFromPEM(input);
+        let cert = new r.X509();
+        cert.readCertPEM(input);
+        return cert.hex;
     },
 
 
@@ -270,7 +268,7 @@ const PublicKey = {
      */
     _formatDnStr: function(dnStr, indent) {
         let output = "",
-            fields = dnStr.split(",/|"),
+            fields = dnStr.substr(1).replace(/([^\\])\//g, "$1$1/").split(/[^\\]\//),
             maxKeyLen = 0,
             key,
             value,
@@ -295,7 +293,7 @@ const PublicKey = {
             output += Utils.padLeft(str, indent + str.length, " ");
         }
 
-        return output;
+        return output.slice(0, -1);
     },
 
 
@@ -347,24 +345,6 @@ const PublicKey = {
 export default PublicKey;
 
 
-/**
- * Overwrite X509.hex2dn function so as to join RDNs with a string which can be split on without
- * causing problems later (I hope).
- *
- * @param {string} hDN - Hex DN string
- * @returns {string}
- */
-r.X509.hex2dn = function(hDN) {
-    let s = "";
-    const a = r.ASN1HEX.getPosArrayOfChildren_AtObj(hDN, 0);
-    for (let i = 0; i < a.length; i++) {
-        const hRDN = r.ASN1HEX.getHexOfTLV_AtObj(hDN, a[i]);
-        s = s + ",/|" + r.X509.hex2rdn(hRDN);
-    }
-    return s;
-};
-
-
 /**
  * Overwrite DN attribute lookup in jsrasign library with a much more complete version from
  * https://github.com/nfephp-org/nfephp/blob/master/libs/Common/Certificate/Oids.php
@@ -374,17 +354,17 @@ r.X509.hex2dn = function(hDN) {
  * @constant
  */
 r.X509.DN_ATTRHEX = {
-    "0603550403" : "commonName",
-    "0603550404" : "surname",
-    "0603550406" : "countryName",
-    "0603550407" : "localityName",
-    "0603550408" : "stateOrProvinceName",
-    "0603550409" : "streetAddress",
-    "060355040a" : "organizationName",
-    "060355040b" : "organizationalUnitName",
-    "060355040c" : "title",
-    "0603550414" : "telephoneNumber",
-    "060355042a" : "givenName",
+    "0603550403": "commonName",
+    "0603550404": "surname",
+    "0603550406": "countryName",
+    "0603550407": "localityName",
+    "0603550408": "stateOrProvinceName",
+    "0603550409": "streetAddress",
+    "060355040a": "organizationName",
+    "060355040b": "organizationalUnitName",
+    "060355040c": "title",
+    "0603550414": "telephoneNumber",
+    "060355042a": "givenName",
     // "0603551d0e" : "id-ce-subjectKeyIdentifier",
     // "0603551d0f" : "id-ce-keyUsage",
     // "0603551d11" : "id-ce-subjectAltName",
@@ -402,460 +382,460 @@ r.X509.DN_ATTRHEX = {
     // "06032a8648ce380403" : "id-dsa-with-sha-1",
     // "06032b06010505070302" : "idKpClientAuth",
     // "06032b06010505070304" : "idKpSecurityemail",
-    "06032b06010505070201" : "idCertificatePolicies",
-    "06036086480186f8420101" : "netscape-cert-type",
-    "06036086480186f8420102" : "netscape-base-url",
-    "06036086480186f8420103" : "netscape-revocation-url",
-    "06036086480186f8420104" : "netscape-ca-revocation-url",
-    "06036086480186f8420107" : "netscape-cert-renewal-url",
-    "06036086480186f8420108" : "netscape-ca-policy-url",
-    "06036086480186f842010c" : "netscape-ssl-server-name",
-    "06036086480186f842010d" : "netscape-comment",
-    "0603604c010201" : "A1",
-    "0603604c010203" : "A3",
-    "0603604c01020110" : "Certification Practice Statement pointer",
-    "0603604c010301" : "Dados do cert parte 1",
-    "0603604c010305" : "Dados do cert parte 2",
-    "0603604c010306" : "Dados do cert parte 3",
-    "06030992268993f22c640119" : "domainComponent",
-    "06032a24a0f2a07d01010a" : "Signet pilot",
-    "06032a24a0f2a07d01010b" : "Signet intraNet",
-    "06032a24a0f2a07d010102" : "Signet personal",
-    "06032a24a0f2a07d010114" : "Signet securityPolicy",
-    "06032a24a0f2a07d010103" : "Signet business",
-    "06032a24a0f2a07d010104" : "Signet legal",
-    "06032a24a497a35301640101" : "Certificates Australia policyIdentifier",
-    "06032a85702201" : "seis-cp",
-    "06032a8570220101" : "SEIS certificatePolicy-s10",
-    "06032a85702202" : "SEIS pe",
-    "06032a85702203" : "SEIS at",
-    "06032a8570220301" : "SEIS at-personalIdentifier",
-    "06032a8648ce380201" : "holdinstruction-none",
-    "06032a8648ce380202" : "holdinstruction-callissuer",
-    "06032a8648ce380203" : "holdinstruction-reject",
-    "06032a8648ce380401" : "dsa",
-    "06032a8648ce380403" : "dsaWithSha1",
-    "06032a8648ce3d01" : "fieldType",
-    "06032a8648ce3d0101" : "prime-field",
-    "06032a8648ce3d0102" : "characteristic-two-field",
-    "06032a8648ce3d010201" : "ecPublicKey",
-    "06032a8648ce3d010203" : "characteristic-two-basis",
-    "06032a8648ce3d01020301" : "onBasis",
-    "06032a8648ce3d01020302" : "tpBasis",
-    "06032a8648ce3d01020303" : "ppBasis",
-    "06032a8648ce3d02" : "publicKeyType",
-    "06032a8648ce3d0201" : "ecPublicKey",
-    "06032a8648ce3e0201" : "dhPublicNumber",
-    "06032a864886f67d07" : "nsn",
-    "06032a864886f67d0741" : "nsn-ce",
-    "06032a864886f67d074100" : "entrustVersInfo",
-    "06032a864886f67d0742" : "nsn-alg",
-    "06032a864886f67d07420a" : "cast5CBC",
-    "06032a864886f67d07420b" : "cast5MAC",
-    "06032a864886f67d07420c" : "pbeWithMD5AndCAST5-CBC",
-    "06032a864886f67d07420d" : "passwordBasedMac",
-    "06032a864886f67d074203" : "cast3CBC",
-    "06032a864886f67d0743" : "nsn-oc",
-    "06032a864886f67d074300" : "entrustUser",
-    "06032a864886f67d0744" : "nsn-at",
-    "06032a864886f67d074400" : "entrustCAInfo",
-    "06032a864886f67d07440a" : "attributeCertificate",
-    "06032a864886f70d0101" : "pkcs-1",
-    "06032a864886f70d010101" : "rsaEncryption",
-    "06032a864886f70d010102" : "md2withRSAEncryption",
-    "06032a864886f70d010103" : "md4withRSAEncryption",
-    "06032a864886f70d010104" : "md5withRSAEncryption",
-    "06032a864886f70d010105" : "sha1withRSAEncryption",
-    "06032a864886f70d010106" : "rsaOAEPEncryptionSET",
-    "06032a864886f70d010910020b" : "SMIMEEncryptionKeyPreference",
-    "06032a864886f70d010c" : "pkcs-12",
-    "06032a864886f70d010c01" : "pkcs-12-PbeIds",
-    "06032a864886f70d010c0101" : "pbeWithSHAAnd128BitRC4",
-    "06032a864886f70d010c0102" : "pbeWithSHAAnd40BitRC4",
-    "06032a864886f70d010c0103" : "pbeWithSHAAnd3-KeyTripleDES-CBC",
-    "06032a864886f70d010c0104" : "pbeWithSHAAnd2-KeyTripleDES-CBC",
-    "06032a864886f70d010c0105" : "pbeWithSHAAnd128BitRC2-CBC",
-    "06032a864886f70d010c0106" : "pbeWithSHAAnd40BitRC2-CBC",
-    "06032a864886f70d010c0a" : "pkcs-12Version1",
-    "06032a864886f70d010c0a01" : "pkcs-12BadIds",
-    "06032a864886f70d010c0a0101" : "pkcs-12-keyBag",
-    "06032a864886f70d010c0a0102" : "pkcs-12-pkcs-8ShroudedKeyBag",
-    "06032a864886f70d010c0a0103" : "pkcs-12-certBag",
-    "06032a864886f70d010c0a0104" : "pkcs-12-crlBag",
-    "06032a864886f70d010c0a0105" : "pkcs-12-secretBag",
-    "06032a864886f70d010c0a0106" : "pkcs-12-safeContentsBag",
-    "06032a864886f70d010c02" : "pkcs-12-ESPVKID",
-    "06032a864886f70d010c0201" : "pkcs-12-PKCS8KeyShrouding",
-    "06032a864886f70d010c03" : "pkcs-12-BagIds",
-    "06032a864886f70d010c0301" : "pkcs-12-keyBagId",
-    "06032a864886f70d010c0302" : "pkcs-12-certAndCRLBagId",
-    "06032a864886f70d010c0303" : "pkcs-12-secretBagId",
-    "06032a864886f70d010c0304" : "pkcs-12-safeContentsId",
-    "06032a864886f70d010c0305" : "pkcs-12-pkcs-8ShroudedKeyBagId",
-    "06032a864886f70d010c04" : "pkcs-12-CertBagID",
-    "06032a864886f70d010c0401" : "pkcs-12-X509CertCRLBagID",
-    "06032a864886f70d010c0402" : "pkcs-12-SDSICertBagID",
-    "06032a864886f70d010c05" : "pkcs-12-OID",
-    "06032a864886f70d010c0501" : "pkcs-12-PBEID",
-    "06032a864886f70d010c050101" : "pkcs-12-PBEWithSha1And128BitRC4",
-    "06032a864886f70d010c050102" : "pkcs-12-PBEWithSha1And40BitRC4",
-    "06032a864886f70d010c050103" : "pkcs-12-PBEWithSha1AndTripleDESCBC",
-    "06032a864886f70d010c050104" : "pkcs-12-PBEWithSha1And128BitRC2CBC",
-    "06032a864886f70d010c050105" : "pkcs-12-PBEWithSha1And40BitRC2CBC",
-    "06032a864886f70d010c050106" : "pkcs-12-PBEWithSha1AndRC4",
-    "06032a864886f70d010c050107" : "pkcs-12-PBEWithSha1AndRC2CBC",
-    "06032a864886f70d010c0502" : "pkcs-12-EnvelopingID",
-    "06032a864886f70d010c050201" : "pkcs-12-RSAEncryptionWith128BitRC4",
-    "06032a864886f70d010c050202" : "pkcs-12-RSAEncryptionWith40BitRC4",
-    "06032a864886f70d010c050203" : "pkcs-12-RSAEncryptionWithTripleDES",
-    "06032a864886f70d010c0503" : "pkcs-12-SignatureID",
-    "06032a864886f70d010c050301" : "pkcs-12-RSASignatureWithSHA1Digest",
-    "06032a864886f70d0103" : "pkcs-3",
-    "06032a864886f70d010301" : "dhKeyAgreement",
-    "06032a864886f70d0105" : "pkcs-5",
-    "06032a864886f70d010501" : "pbeWithMD2AndDES-CBC",
-    "06032a864886f70d01050a" : "pbeWithSHAAndDES-CBC",
-    "06032a864886f70d010503" : "pbeWithMD5AndDES-CBC",
-    "06032a864886f70d010504" : "pbeWithMD2AndRC2-CBC",
-    "06032a864886f70d010506" : "pbeWithMD5AndRC2-CBC",
-    "06032a864886f70d010509" : "pbeWithMD5AndXOR",
-    "06032a864886f70d0107" : "pkcs-7",
-    "06032a864886f70d010701" : "data",
-    "06032a864886f70d010702" : "signedData",
-    "06032a864886f70d010703" : "envelopedData",
-    "06032a864886f70d010704" : "signedAndEnvelopedData",
-    "06032a864886f70d010705" : "digestData",
-    "06032a864886f70d010706" : "encryptedData",
-    "06032a864886f70d010707" : "dataWithAttributes",
-    "06032a864886f70d010708" : "encryptedPrivateKeyInfo",
-    "06032a864886f70d0109" : "pkcs-9",
-    "06032a864886f70d010901" : "emailAddress",
-    "06032a864886f70d01090a" : "issuerAndSerialNumber",
-    "06032a864886f70d01090b" : "passwordCheck",
-    "06032a864886f70d01090c" : "publicKey",
-    "06032a864886f70d01090d" : "signingDescription",
-    "06032a864886f70d01090e" : "extensionReq",
-    "06032a864886f70d01090f" : "sMIMECapabilities",
-    "06032a864886f70d01090f01" : "preferSignedData",
-    "06032a864886f70d01090f02" : "canNotDecryptAny",
-    "06032a864886f70d01090f03" : "receiptRequest",
-    "06032a864886f70d01090f04" : "receipt",
-    "06032a864886f70d01090f05" : "contentHints",
-    "06032a864886f70d01090f06" : "mlExpansionHistory",
-    "06032a864886f70d010910" : "id-sMIME",
-    "06032a864886f70d01091000" : "id-mod",
-    "06032a864886f70d0109100001" : "id-mod-cms",
-    "06032a864886f70d0109100002" : "id-mod-ess",
-    "06032a864886f70d01091001" : "id-ct",
-    "06032a864886f70d0109100101" : "id-ct-receipt",
-    "06032a864886f70d01091002" : "id-aa",
-    "06032a864886f70d0109100201" : "id-aa-receiptRequest",
-    "06032a864886f70d0109100202" : "id-aa-securityLabel",
-    "06032a864886f70d0109100203" : "id-aa-mlExpandHistory",
-    "06032a864886f70d0109100204" : "id-aa-contentHint",
-    "06032a864886f70d010902" : "unstructuredName",
-    "06032a864886f70d010914" : "friendlyName",
-    "06032a864886f70d010915" : "localKeyID",
-    "06032a864886f70d010916" : "certTypes",
-    "06032a864886f70d01091601" : "x509Certificate",
-    "06032a864886f70d01091602" : "sdsiCertificate",
-    "06032a864886f70d010917" : "crlTypes",
-    "06032a864886f70d01091701" : "x509Crl",
-    "06032a864886f70d010903" : "contentType",
-    "06032a864886f70d010904" : "messageDigest",
-    "06032a864886f70d010905" : "signingTime",
-    "06032a864886f70d010906" : "countersignature",
-    "06032a864886f70d010907" : "challengePassword",
-    "06032a864886f70d010908" : "unstructuredAddress",
-    "06032a864886f70d010909" : "extendedCertificateAttributes",
-    "06032a864886f70d02" : "digestAlgorithm",
-    "06032a864886f70d0202" : "md2",
-    "06032a864886f70d0204" : "md4",
-    "06032a864886f70d0205" : "md5",
-    "06032a864886f70d03" : "encryptionAlgorithm",
-    "06032a864886f70d030a" : "desCDMF",
-    "06032a864886f70d0302" : "rc2CBC",
-    "06032a864886f70d0303" : "rc2ECB",
-    "06032a864886f70d0304" : "rc4",
-    "06032a864886f70d0305" : "rc4WithMAC",
-    "06032a864886f70d0306" : "DESX-CBC",
-    "06032a864886f70d0307" : "DES-EDE3-CBC",
-    "06032a864886f70d0308" : "RC5CBC",
-    "06032a864886f70d0309" : "RC5-CBCPad",
-    "06032a864886f7140403" : "microsoftExcel",
-    "06032a864886f7140404" : "titledWithOID",
-    "06032a864886f7140405" : "microsoftPowerPoint",
-    "06032b81051086480954" : "x9-84",
-    "06032b8105108648095400" : "x9-84-Module",
-    "06032b810510864809540001" : "x9-84-Biometrics",
-    "06032b810510864809540002" : "x9-84-CMS",
-    "06032b810510864809540003" : "x9-84-Identifiers",
-    "06032b8105108648095401" : "biometric",
-    "06032b810510864809540100" : "id-unknown-Type",
-    "06032b810510864809540101" : "id-body-Odor",
-    "06032b81051086480954010a" : "id-palm",
-    "06032b81051086480954010b" : "id-retina",
-    "06032b81051086480954010c" : "id-signature",
-    "06032b81051086480954010d" : "id-speech-Pattern",
-    "06032b81051086480954010e" : "id-thermal-Image",
-    "06032b81051086480954010f" : "id-vein-Pattern",
-    "06032b810510864809540110" : "id-thermal-Face-Image",
-    "06032b810510864809540111" : "id-thermal-Hand-Image",
-    "06032b810510864809540112" : "id-lip-Movement",
-    "06032b810510864809540113" : "id-gait",
-    "06032b810510864809540102" : "id-dna",
-    "06032b810510864809540103" : "id-ear-Shape",
-    "06032b810510864809540104" : "id-facial-Features",
-    "06032b810510864809540105" : "id-finger-Image",
-    "06032b810510864809540106" : "id-finger-Geometry",
-    "06032b810510864809540107" : "id-hand-Geometry",
-    "06032b810510864809540108" : "id-iris-Features",
-    "06032b810510864809540109" : "id-keystroke-Dynamics",
-    "06032b8105108648095402" : "processing-algorithm",
-    "06032b8105108648095403" : "matching-method",
-    "06032b8105108648095404" : "format-Owner",
-    "06032b810510864809540400" : "cbeff-Owner",
-    "06032b810510864809540401" : "ibia-Owner",
-    "06032b81051086480954040101" : "id-ibia-SAFLINK",
-    "06032b8105108648095404010a" : "id-ibia-SecuGen",
-    "06032b8105108648095404010b" : "id-ibia-PreciseBiometric",
-    "06032b8105108648095404010c" : "id-ibia-Identix",
-    "06032b8105108648095404010d" : "id-ibia-DERMALOG",
-    "06032b8105108648095404010e" : "id-ibia-LOGICO",
-    "06032b8105108648095404010f" : "id-ibia-NIST",
-    "06032b81051086480954040110" : "id-ibia-A3Vision",
-    "06032b81051086480954040111" : "id-ibia-NEC",
-    "06032b81051086480954040112" : "id-ibia-STMicroelectronics",
-    "06032b81051086480954040102" : "id-ibia-Bioscrypt",
-    "06032b81051086480954040103" : "id-ibia-Visionics",
-    "06032b81051086480954040104" : "id-ibia-InfineonTechnologiesAG",
-    "06032b81051086480954040105" : "id-ibia-IridianTechnologies",
-    "06032b81051086480954040106" : "id-ibia-Veridicom",
-    "06032b81051086480954040107" : "id-ibia-CyberSIGN",
-    "06032b81051086480954040108" : "id-ibia-eCryp.",
-    "06032b81051086480954040109" : "id-ibia-FingerprintCardsAB",
-    "06032b810510864809540402" : "x9-Owner",
-    "06032b0e021a05" : "sha",
-    "06032b0e03020101" : "rsa",
-    "06032b0e03020a" : "desMAC",
-    "06032b0e03020b" : "rsaSignature",
-    "06032b0e03020c" : "dsa",
-    "06032b0e03020d" : "dsaWithSHA",
-    "06032b0e03020e" : "mdc2WithRSASignature",
-    "06032b0e03020f" : "shaWithRSASignature",
-    "06032b0e030210" : "dhWithCommonModulus",
-    "06032b0e030211" : "desEDE",
-    "06032b0e030212" : "sha",
-    "06032b0e030213" : "mdc-2",
-    "06032b0e030202" : "md4WitRSA",
-    "06032b0e03020201" : "sqmod-N",
-    "06032b0e030214" : "dsaCommon",
-    "06032b0e030215" : "dsaCommonWithSHA",
-    "06032b0e030216" : "rsaKeyTransport",
-    "06032b0e030217" : "keyed-hash-seal",
-    "06032b0e030218" : "md2WithRSASignature",
-    "06032b0e030219" : "md5WithRSASignature",
-    "06032b0e03021a" : "sha1",
-    "06032b0e03021b" : "dsaWithSHA1",
-    "06032b0e03021c" : "dsaWithCommonSHA1",
-    "06032b0e03021d" : "sha-1WithRSAEncryption",
-    "06032b0e030203" : "md5WithRSA",
-    "06032b0e03020301" : "sqmod-NwithRSA",
-    "06032b0e030204" : "md4WithRSAEncryption",
-    "06032b0e030206" : "desECB",
-    "06032b0e030207" : "desCBC",
-    "06032b0e030208" : "desOFB",
-    "06032b0e030209" : "desCFB",
-    "06032b0e030301" : "simple-strong-auth-mechanism",
-    "06032b0e07020101" : "ElGamal",
-    "06032b0e07020301" : "md2WithRSA",
-    "06032b0e07020302" : "md2WithElGamal",
-    "06032b2403" : "algorithm",
-    "06032b240301" : "encryptionAlgorithm",
-    "06032b24030101" : "des",
-    "06032b240301010101" : "desECBPad",
-    "06032b24030101010101" : "desECBPadISO",
-    "06032b240301010201" : "desCBCPad",
-    "06032b24030101020101" : "desCBCPadISO",
-    "06032b24030102" : "idea",
-    "06032b2403010201" : "ideaECB",
-    "06032b240301020101" : "ideaECBPad",
-    "06032b24030102010101" : "ideaECBPadISO",
-    "06032b2403010202" : "ideaCBC",
-    "06032b240301020201" : "ideaCBCPad",
-    "06032b24030102020101" : "ideaCBCPadISO",
-    "06032b2403010203" : "ideaOFB",
-    "06032b2403010204" : "ideaCFB",
-    "06032b24030103" : "des-3",
-    "06032b240301030101" : "des-3ECBPad",
-    "06032b24030103010101" : "des-3ECBPadISO",
-    "06032b240301030201" : "des-3CBCPad",
-    "06032b24030103020101" : "des-3CBCPadISO",
-    "06032b240302" : "hashAlgorithm",
-    "06032b24030201" : "ripemd160",
-    "06032b24030202" : "ripemd128",
-    "06032b24030203" : "ripemd256",
-    "06032b24030204" : "mdc2singleLength",
-    "06032b24030205" : "mdc2doubleLength",
-    "06032b240303" : "signatureAlgorithm",
-    "06032b24030301" : "rsa",
-    "06032b2403030101" : "rsaMitSHA-1",
-    "06032b2403030102" : "rsaMitRIPEMD160",
-    "06032b24030302" : "ellipticCurve",
-    "06032b240304" : "signatureScheme",
-    "06032b24030401" : "iso9796-1",
-    "06032b2403040201" : "iso9796-2",
-    "06032b2403040202" : "iso9796-2rsa",
-    "06032b2404" : "attribute",
-    "06032b2405" : "policy",
-    "06032b2406" : "api",
-    "06032b240601" : "manufacturerSpecific",
-    "06032b240602" : "functionalitySpecific",
-    "06032b2407" : "api",
-    "06032b240701" : "keyAgreement",
-    "06032b240702" : "keyTransport",
-    "06032b06010401927c0a0101" : "UNINETT policyIdentifier",
-    "06032b0601040195180a" : "ICE-TEL policyIdentifier",
-    "06032b0601040197552001" : "cryptlibEnvelope",
-    "06032b0601040197552002" : "cryptlibPrivateKey",
-    "060a2b060104018237" : "Microsoft OID",
-    "060a2b0601040182370a" : "Crypto 2.0",
-    "060a2b0601040182370a01" : "certTrustList",
-    "060a2b0601040182370a0101" : "szOID_SORTED_CTL",
-    "060a2b0601040182370a0a" : "Microsoft CMC OIDs",
-    "060a2b0601040182370a0a01" : "szOID_CMC_ADD_ATTRIBUTES",
-    "060a2b0601040182370a0b" : "Microsoft certificate property OIDs",
-    "060a2b0601040182370a0b01" : "szOID_CERT_PROP_ID_PREFIX",
-    "060a2b0601040182370a0c" : "CryptUI",
-    "060a2b0601040182370a0c01" : "szOID_ANY_APPLICATION_POLICY",
-    "060a2b0601040182370a02" : "nextUpdateLocation",
-    "060a2b0601040182370a0301" : "certTrustListSigning",
-    "060a2b0601040182370a030a" : "szOID_KP_QUALIFIED_SUBORDINATION",
-    "060a2b0601040182370a030b" : "szOID_KP_KEY_RECOVERY",
-    "060a2b0601040182370a030c" : "szOID_KP_DOCUMENT_SIGNING",
-    "060a2b0601040182370a0302" : "timeStampSigning",
-    "060a2b0601040182370a0303" : "serverGatedCrypto",
-    "060a2b0601040182370a030301" : "szOID_SERIALIZED",
-    "060a2b0601040182370a0304" : "encryptedFileSystem",
-    "060a2b0601040182370a030401" : "szOID_EFS_RECOVERY",
-    "060a2b0601040182370a0305" : "szOID_WHQL_CRYPTO",
-    "060a2b0601040182370a0306" : "szOID_NT5_CRYPTO",
-    "060a2b0601040182370a0307" : "szOID_OEM_WHQL_CRYPTO",
-    "060a2b0601040182370a0308" : "szOID_EMBEDDED_NT_CRYPTO",
-    "060a2b0601040182370a0309" : "szOID_ROOT_LIST_SIGNER",
-    "060a2b0601040182370a0401" : "yesnoTrustAttr",
-    "060a2b0601040182370a0501" : "szOID_DRM",
-    "060a2b0601040182370a0502" : "szOID_DRM_INDIVIDUALIZATION",
-    "060a2b0601040182370a0601" : "szOID_LICENSES",
-    "060a2b0601040182370a0602" : "szOID_LICENSE_SERVER",
-    "060a2b0601040182370a07" : "szOID_MICROSOFT_RDN_PREFIX",
-    "060a2b0601040182370a0701" : "szOID_KEYID_RDN",
-    "060a2b0601040182370a0801" : "szOID_REMOVE_CERTIFICATE",
-    "060a2b0601040182370a0901" : "szOID_CROSS_CERT_DIST_POINTS",
-    "060a2b0601040182370c" : "Catalog",
-    "060a2b0601040182370c0101" : "szOID_CATALOG_LIST",
-    "060a2b0601040182370c0102" : "szOID_CATALOG_LIST_MEMBER",
-    "060a2b0601040182370c0201" : "CAT_NAMEVALUE_OBJID",
-    "060a2b0601040182370c0202" : "CAT_MEMBERINFO_OBJID",
-    "060a2b0601040182370d" : "Microsoft PKCS10 OIDs",
-    "060a2b0601040182370d01" : "szOID_RENEWAL_CERTIFICATE",
-    "060a2b0601040182370d0201" : "szOID_ENROLLMENT_NAME_VALUE_PAIR",
-    "060a2b0601040182370d0202" : "szOID_ENROLLMENT_CSP_PROVIDER",
-    "060a2b0601040182370d0203" : "OS Version",
-    "060a2b0601040182370f" : "Microsoft Java",
-    "060a2b06010401823710" : "Microsoft Outlook/Exchange",
-    "060a2b0601040182371004" : "Outlook Express",
-    "060a2b06010401823711" : "Microsoft PKCS12 attributes",
-    "060a2b0601040182371101" : "szOID_LOCAL_MACHINE_KEYSET",
-    "060a2b06010401823712" : "Microsoft Hydra",
-    "060a2b06010401823713" : "Microsoft ISPU Test",
-    "060a2b06010401823702" : "Authenticode",
-    "060a2b06010401823702010a" : "spcAgencyInfo",
-    "060a2b06010401823702010b" : "spcStatementType",
-    "060a2b06010401823702010c" : "spcSpOpusInfo",
-    "060a2b06010401823702010e" : "certExtensions",
-    "060a2b06010401823702010f" : "spcPelmageData",
-    "060a2b060104018237020112" : "SPC_RAW_FILE_DATA_OBJID",
-    "060a2b060104018237020113" : "SPC_STRUCTURED_STORAGE_DATA_OBJID",
-    "060a2b060104018237020114" : "spcLink",
-    "060a2b060104018237020115" : "individualCodeSigning",
-    "060a2b060104018237020116" : "commercialCodeSigning",
-    "060a2b060104018237020119" : "spcLink",
-    "060a2b06010401823702011a" : "spcMinimalCriteriaInfo",
-    "060a2b06010401823702011b" : "spcFinancialCriteriaInfo",
-    "060a2b06010401823702011c" : "spcLink",
-    "060a2b06010401823702011d" : "SPC_HASH_INFO_OBJID",
-    "060a2b06010401823702011e" : "SPC_SIPINFO_OBJID",
-    "060a2b060104018237020104" : "spcIndirectDataContext",
-    "060a2b0601040182370202" : "CTL for Software Publishers Trusted CAs",
-    "060a2b060104018237020201" : "szOID_TRUSTED_CODESIGNING_CA_LIST",
-    "060a2b060104018237020202" : "szOID_TRUSTED_CLIENT_AUTH_CA_LIST",
-    "060a2b060104018237020203" : "szOID_TRUSTED_SERVER_AUTH_CA_LIST",
-    "060a2b06010401823714" : "Microsoft Enrollment Infrastructure",
-    "060a2b0601040182371401" : "szOID_AUTO_ENROLL_CTL_USAGE",
-    "060a2b0601040182371402" : "szOID_ENROLL_CERTTYPE_EXTENSION",
-    "060a2b060104018237140201" : "szOID_ENROLLMENT_AGENT",
-    "060a2b060104018237140202" : "szOID_KP_SMARTCARD_LOGON",
-    "060a2b060104018237140203" : "szOID_NT_PRINCIPAL_NAME",
-    "060a2b0601040182371403" : "szOID_CERT_MANIFOLD",
-    "06092b06010401823715" : "Microsoft CertSrv Infrastructure",
-    "06092b0601040182371501" : "szOID_CERTSRV_CA_VERSION",
-    "06092b0601040182371514" : "Client Information",
-    "060a2b06010401823719" : "Microsoft Directory Service",
-    "060a2b0601040182371901" : "szOID_NTDS_REPLICATION",
-    "060a2b06010401823703" : "Time Stamping",
-    "060a2b060104018237030201" : "SPC_TIME_STAMP_REQUEST_OBJID",
-    "060a2b0601040182371e" : "IIS",
-    "060a2b0601040182371f" : "Windows updates and service packs",
-    "060a2b0601040182371f01" : "szOID_PRODUCT_UPDATE",
-    "060a2b06010401823704" : "Permissions",
-    "060a2b06010401823728" : "Fonts",
-    "060a2b06010401823729" : "Microsoft Licensing and Registration",
-    "060a2b0601040182372a" : "Microsoft Corporate PKI (ITG)",
-    "060a2b06010401823758" : "CAPICOM",
-    "060a2b0601040182375801" : "szOID_CAPICOM_VERSION",
-    "060a2b0601040182375802" : "szOID_CAPICOM_ATTRIBUTE",
-    "060a2b060104018237580201" : "szOID_CAPICOM_DOCUMENT_NAME",
-    "060a2b060104018237580202" : "szOID_CAPICOM_DOCUMENT_DESCRIPTION",
-    "060a2b0601040182375803" : "szOID_CAPICOM_ENCRYPTED_DATA",
-    "060a2b060104018237580301" : "szOID_CAPICOM_ENCRYPTED_CONTENT",
-    "06032b0601050507" : "pkix",
-    "06032b060105050701" : "privateExtension",
-    "06032b06010505070101" : "authorityInfoAccess",
-    "06032b06010505070c02" : "CMC Data",
-    "06032b060105050702" : "policyQualifierIds",
+    "06032b06010505070201": "idCertificatePolicies",
+    "06036086480186f8420101": "netscape-cert-type",
+    "06036086480186f8420102": "netscape-base-url",
+    "06036086480186f8420103": "netscape-revocation-url",
+    "06036086480186f8420104": "netscape-ca-revocation-url",
+    "06036086480186f8420107": "netscape-cert-renewal-url",
+    "06036086480186f8420108": "netscape-ca-policy-url",
+    "06036086480186f842010c": "netscape-ssl-server-name",
+    "06036086480186f842010d": "netscape-comment",
+    "0603604c010201": "A1",
+    "0603604c010203": "A3",
+    "0603604c01020110": "Certification Practice Statement pointer",
+    "0603604c010301": "Dados do cert parte 1",
+    "0603604c010305": "Dados do cert parte 2",
+    "0603604c010306": "Dados do cert parte 3",
+    "06030992268993f22c640119": "domainComponent",
+    "06032a24a0f2a07d01010a": "Signet pilot",
+    "06032a24a0f2a07d01010b": "Signet intraNet",
+    "06032a24a0f2a07d010102": "Signet personal",
+    "06032a24a0f2a07d010114": "Signet securityPolicy",
+    "06032a24a0f2a07d010103": "Signet business",
+    "06032a24a0f2a07d010104": "Signet legal",
+    "06032a24a497a35301640101": "Certificates Australia policyIdentifier",
+    "06032a85702201": "seis-cp",
+    "06032a8570220101": "SEIS certificatePolicy-s10",
+    "06032a85702202": "SEIS pe",
+    "06032a85702203": "SEIS at",
+    "06032a8570220301": "SEIS at-personalIdentifier",
+    "06032a8648ce380201": "holdinstruction-none",
+    "06032a8648ce380202": "holdinstruction-callissuer",
+    "06032a8648ce380203": "holdinstruction-reject",
+    "06032a8648ce380401": "dsa",
+    "06032a8648ce380403": "dsaWithSha1",
+    "06032a8648ce3d01": "fieldType",
+    "06032a8648ce3d0101": "prime-field",
+    "06032a8648ce3d0102": "characteristic-two-field",
+    "06032a8648ce3d010201": "ecPublicKey",
+    "06032a8648ce3d010203": "characteristic-two-basis",
+    "06032a8648ce3d01020301": "onBasis",
+    "06032a8648ce3d01020302": "tpBasis",
+    "06032a8648ce3d01020303": "ppBasis",
+    "06032a8648ce3d02": "publicKeyType",
+    "06032a8648ce3d0201": "ecPublicKey",
+    "06032a8648ce3e0201": "dhPublicNumber",
+    "06032a864886f67d07": "nsn",
+    "06032a864886f67d0741": "nsn-ce",
+    "06032a864886f67d074100": "entrustVersInfo",
+    "06032a864886f67d0742": "nsn-alg",
+    "06032a864886f67d07420a": "cast5CBC",
+    "06032a864886f67d07420b": "cast5MAC",
+    "06032a864886f67d07420c": "pbeWithMD5AndCAST5-CBC",
+    "06032a864886f67d07420d": "passwordBasedMac",
+    "06032a864886f67d074203": "cast3CBC",
+    "06032a864886f67d0743": "nsn-oc",
+    "06032a864886f67d074300": "entrustUser",
+    "06032a864886f67d0744": "nsn-at",
+    "06032a864886f67d074400": "entrustCAInfo",
+    "06032a864886f67d07440a": "attributeCertificate",
+    "06032a864886f70d0101": "pkcs-1",
+    "06032a864886f70d010101": "rsaEncryption",
+    "06032a864886f70d010102": "md2withRSAEncryption",
+    "06032a864886f70d010103": "md4withRSAEncryption",
+    "06032a864886f70d010104": "md5withRSAEncryption",
+    "06032a864886f70d010105": "sha1withRSAEncryption",
+    "06032a864886f70d010106": "rsaOAEPEncryptionSET",
+    "06032a864886f70d010910020b": "SMIMEEncryptionKeyPreference",
+    "06032a864886f70d010c": "pkcs-12",
+    "06032a864886f70d010c01": "pkcs-12-PbeIds",
+    "06032a864886f70d010c0101": "pbeWithSHAAnd128BitRC4",
+    "06032a864886f70d010c0102": "pbeWithSHAAnd40BitRC4",
+    "06032a864886f70d010c0103": "pbeWithSHAAnd3-KeyTripleDES-CBC",
+    "06032a864886f70d010c0104": "pbeWithSHAAnd2-KeyTripleDES-CBC",
+    "06032a864886f70d010c0105": "pbeWithSHAAnd128BitRC2-CBC",
+    "06032a864886f70d010c0106": "pbeWithSHAAnd40BitRC2-CBC",
+    "06032a864886f70d010c0a": "pkcs-12Version1",
+    "06032a864886f70d010c0a01": "pkcs-12BadIds",
+    "06032a864886f70d010c0a0101": "pkcs-12-keyBag",
+    "06032a864886f70d010c0a0102": "pkcs-12-pkcs-8ShroudedKeyBag",
+    "06032a864886f70d010c0a0103": "pkcs-12-certBag",
+    "06032a864886f70d010c0a0104": "pkcs-12-crlBag",
+    "06032a864886f70d010c0a0105": "pkcs-12-secretBag",
+    "06032a864886f70d010c0a0106": "pkcs-12-safeContentsBag",
+    "06032a864886f70d010c02": "pkcs-12-ESPVKID",
+    "06032a864886f70d010c0201": "pkcs-12-PKCS8KeyShrouding",
+    "06032a864886f70d010c03": "pkcs-12-BagIds",
+    "06032a864886f70d010c0301": "pkcs-12-keyBagId",
+    "06032a864886f70d010c0302": "pkcs-12-certAndCRLBagId",
+    "06032a864886f70d010c0303": "pkcs-12-secretBagId",
+    "06032a864886f70d010c0304": "pkcs-12-safeContentsId",
+    "06032a864886f70d010c0305": "pkcs-12-pkcs-8ShroudedKeyBagId",
+    "06032a864886f70d010c04": "pkcs-12-CertBagID",
+    "06032a864886f70d010c0401": "pkcs-12-X509CertCRLBagID",
+    "06032a864886f70d010c0402": "pkcs-12-SDSICertBagID",
+    "06032a864886f70d010c05": "pkcs-12-OID",
+    "06032a864886f70d010c0501": "pkcs-12-PBEID",
+    "06032a864886f70d010c050101": "pkcs-12-PBEWithSha1And128BitRC4",
+    "06032a864886f70d010c050102": "pkcs-12-PBEWithSha1And40BitRC4",
+    "06032a864886f70d010c050103": "pkcs-12-PBEWithSha1AndTripleDESCBC",
+    "06032a864886f70d010c050104": "pkcs-12-PBEWithSha1And128BitRC2CBC",
+    "06032a864886f70d010c050105": "pkcs-12-PBEWithSha1And40BitRC2CBC",
+    "06032a864886f70d010c050106": "pkcs-12-PBEWithSha1AndRC4",
+    "06032a864886f70d010c050107": "pkcs-12-PBEWithSha1AndRC2CBC",
+    "06032a864886f70d010c0502": "pkcs-12-EnvelopingID",
+    "06032a864886f70d010c050201": "pkcs-12-RSAEncryptionWith128BitRC4",
+    "06032a864886f70d010c050202": "pkcs-12-RSAEncryptionWith40BitRC4",
+    "06032a864886f70d010c050203": "pkcs-12-RSAEncryptionWithTripleDES",
+    "06032a864886f70d010c0503": "pkcs-12-SignatureID",
+    "06032a864886f70d010c050301": "pkcs-12-RSASignatureWithSHA1Digest",
+    "06032a864886f70d0103": "pkcs-3",
+    "06032a864886f70d010301": "dhKeyAgreement",
+    "06032a864886f70d0105": "pkcs-5",
+    "06032a864886f70d010501": "pbeWithMD2AndDES-CBC",
+    "06032a864886f70d01050a": "pbeWithSHAAndDES-CBC",
+    "06032a864886f70d010503": "pbeWithMD5AndDES-CBC",
+    "06032a864886f70d010504": "pbeWithMD2AndRC2-CBC",
+    "06032a864886f70d010506": "pbeWithMD5AndRC2-CBC",
+    "06032a864886f70d010509": "pbeWithMD5AndXOR",
+    "06032a864886f70d0107": "pkcs-7",
+    "06032a864886f70d010701": "data",
+    "06032a864886f70d010702": "signedData",
+    "06032a864886f70d010703": "envelopedData",
+    "06032a864886f70d010704": "signedAndEnvelopedData",
+    "06032a864886f70d010705": "digestData",
+    "06032a864886f70d010706": "encryptedData",
+    "06032a864886f70d010707": "dataWithAttributes",
+    "06032a864886f70d010708": "encryptedPrivateKeyInfo",
+    "06032a864886f70d0109": "pkcs-9",
+    "06032a864886f70d010901": "emailAddress",
+    "06032a864886f70d01090a": "issuerAndSerialNumber",
+    "06032a864886f70d01090b": "passwordCheck",
+    "06032a864886f70d01090c": "publicKey",
+    "06032a864886f70d01090d": "signingDescription",
+    "06032a864886f70d01090e": "extensionReq",
+    "06032a864886f70d01090f": "sMIMECapabilities",
+    "06032a864886f70d01090f01": "preferSignedData",
+    "06032a864886f70d01090f02": "canNotDecryptAny",
+    "06032a864886f70d01090f03": "receiptRequest",
+    "06032a864886f70d01090f04": "receipt",
+    "06032a864886f70d01090f05": "contentHints",
+    "06032a864886f70d01090f06": "mlExpansionHistory",
+    "06032a864886f70d010910": "id-sMIME",
+    "06032a864886f70d01091000": "id-mod",
+    "06032a864886f70d0109100001": "id-mod-cms",
+    "06032a864886f70d0109100002": "id-mod-ess",
+    "06032a864886f70d01091001": "id-ct",
+    "06032a864886f70d0109100101": "id-ct-receipt",
+    "06032a864886f70d01091002": "id-aa",
+    "06032a864886f70d0109100201": "id-aa-receiptRequest",
+    "06032a864886f70d0109100202": "id-aa-securityLabel",
+    "06032a864886f70d0109100203": "id-aa-mlExpandHistory",
+    "06032a864886f70d0109100204": "id-aa-contentHint",
+    "06032a864886f70d010902": "unstructuredName",
+    "06032a864886f70d010914": "friendlyName",
+    "06032a864886f70d010915": "localKeyID",
+    "06032a864886f70d010916": "certTypes",
+    "06032a864886f70d01091601": "x509Certificate",
+    "06032a864886f70d01091602": "sdsiCertificate",
+    "06032a864886f70d010917": "crlTypes",
+    "06032a864886f70d01091701": "x509Crl",
+    "06032a864886f70d010903": "contentType",
+    "06032a864886f70d010904": "messageDigest",
+    "06032a864886f70d010905": "signingTime",
+    "06032a864886f70d010906": "countersignature",
+    "06032a864886f70d010907": "challengePassword",
+    "06032a864886f70d010908": "unstructuredAddress",
+    "06032a864886f70d010909": "extendedCertificateAttributes",
+    "06032a864886f70d02": "digestAlgorithm",
+    "06032a864886f70d0202": "md2",
+    "06032a864886f70d0204": "md4",
+    "06032a864886f70d0205": "md5",
+    "06032a864886f70d03": "encryptionAlgorithm",
+    "06032a864886f70d030a": "desCDMF",
+    "06032a864886f70d0302": "rc2CBC",
+    "06032a864886f70d0303": "rc2ECB",
+    "06032a864886f70d0304": "rc4",
+    "06032a864886f70d0305": "rc4WithMAC",
+    "06032a864886f70d0306": "DESX-CBC",
+    "06032a864886f70d0307": "DES-EDE3-CBC",
+    "06032a864886f70d0308": "RC5CBC",
+    "06032a864886f70d0309": "RC5-CBCPad",
+    "06032a864886f7140403": "microsoftExcel",
+    "06032a864886f7140404": "titledWithOID",
+    "06032a864886f7140405": "microsoftPowerPoint",
+    "06032b81051086480954": "x9-84",
+    "06032b8105108648095400": "x9-84-Module",
+    "06032b810510864809540001": "x9-84-Biometrics",
+    "06032b810510864809540002": "x9-84-CMS",
+    "06032b810510864809540003": "x9-84-Identifiers",
+    "06032b8105108648095401": "biometric",
+    "06032b810510864809540100": "id-unknown-Type",
+    "06032b810510864809540101": "id-body-Odor",
+    "06032b81051086480954010a": "id-palm",
+    "06032b81051086480954010b": "id-retina",
+    "06032b81051086480954010c": "id-signature",
+    "06032b81051086480954010d": "id-speech-Pattern",
+    "06032b81051086480954010e": "id-thermal-Image",
+    "06032b81051086480954010f": "id-vein-Pattern",
+    "06032b810510864809540110": "id-thermal-Face-Image",
+    "06032b810510864809540111": "id-thermal-Hand-Image",
+    "06032b810510864809540112": "id-lip-Movement",
+    "06032b810510864809540113": "id-gait",
+    "06032b810510864809540102": "id-dna",
+    "06032b810510864809540103": "id-ear-Shape",
+    "06032b810510864809540104": "id-facial-Features",
+    "06032b810510864809540105": "id-finger-Image",
+    "06032b810510864809540106": "id-finger-Geometry",
+    "06032b810510864809540107": "id-hand-Geometry",
+    "06032b810510864809540108": "id-iris-Features",
+    "06032b810510864809540109": "id-keystroke-Dynamics",
+    "06032b8105108648095402": "processing-algorithm",
+    "06032b8105108648095403": "matching-method",
+    "06032b8105108648095404": "format-Owner",
+    "06032b810510864809540400": "cbeff-Owner",
+    "06032b810510864809540401": "ibia-Owner",
+    "06032b81051086480954040101": "id-ibia-SAFLINK",
+    "06032b8105108648095404010a": "id-ibia-SecuGen",
+    "06032b8105108648095404010b": "id-ibia-PreciseBiometric",
+    "06032b8105108648095404010c": "id-ibia-Identix",
+    "06032b8105108648095404010d": "id-ibia-DERMALOG",
+    "06032b8105108648095404010e": "id-ibia-LOGICO",
+    "06032b8105108648095404010f": "id-ibia-NIST",
+    "06032b81051086480954040110": "id-ibia-A3Vision",
+    "06032b81051086480954040111": "id-ibia-NEC",
+    "06032b81051086480954040112": "id-ibia-STMicroelectronics",
+    "06032b81051086480954040102": "id-ibia-Bioscrypt",
+    "06032b81051086480954040103": "id-ibia-Visionics",
+    "06032b81051086480954040104": "id-ibia-InfineonTechnologiesAG",
+    "06032b81051086480954040105": "id-ibia-IridianTechnologies",
+    "06032b81051086480954040106": "id-ibia-Veridicom",
+    "06032b81051086480954040107": "id-ibia-CyberSIGN",
+    "06032b81051086480954040108": "id-ibia-eCryp.",
+    "06032b81051086480954040109": "id-ibia-FingerprintCardsAB",
+    "06032b810510864809540402": "x9-Owner",
+    "06032b0e021a05": "sha",
+    "06032b0e03020101": "rsa",
+    "06032b0e03020a": "desMAC",
+    "06032b0e03020b": "rsaSignature",
+    "06032b0e03020c": "dsa",
+    "06032b0e03020d": "dsaWithSHA",
+    "06032b0e03020e": "mdc2WithRSASignature",
+    "06032b0e03020f": "shaWithRSASignature",
+    "06032b0e030210": "dhWithCommonModulus",
+    "06032b0e030211": "desEDE",
+    "06032b0e030212": "sha",
+    "06032b0e030213": "mdc-2",
+    "06032b0e030202": "md4WitRSA",
+    "06032b0e03020201": "sqmod-N",
+    "06032b0e030214": "dsaCommon",
+    "06032b0e030215": "dsaCommonWithSHA",
+    "06032b0e030216": "rsaKeyTransport",
+    "06032b0e030217": "keyed-hash-seal",
+    "06032b0e030218": "md2WithRSASignature",
+    "06032b0e030219": "md5WithRSASignature",
+    "06032b0e03021a": "sha1",
+    "06032b0e03021b": "dsaWithSHA1",
+    "06032b0e03021c": "dsaWithCommonSHA1",
+    "06032b0e03021d": "sha-1WithRSAEncryption",
+    "06032b0e030203": "md5WithRSA",
+    "06032b0e03020301": "sqmod-NwithRSA",
+    "06032b0e030204": "md4WithRSAEncryption",
+    "06032b0e030206": "desECB",
+    "06032b0e030207": "desCBC",
+    "06032b0e030208": "desOFB",
+    "06032b0e030209": "desCFB",
+    "06032b0e030301": "simple-strong-auth-mechanism",
+    "06032b0e07020101": "ElGamal",
+    "06032b0e07020301": "md2WithRSA",
+    "06032b0e07020302": "md2WithElGamal",
+    "06032b2403": "algorithm",
+    "06032b240301": "encryptionAlgorithm",
+    "06032b24030101": "des",
+    "06032b240301010101": "desECBPad",
+    "06032b24030101010101": "desECBPadISO",
+    "06032b240301010201": "desCBCPad",
+    "06032b24030101020101": "desCBCPadISO",
+    "06032b24030102": "idea",
+    "06032b2403010201": "ideaECB",
+    "06032b240301020101": "ideaECBPad",
+    "06032b24030102010101": "ideaECBPadISO",
+    "06032b2403010202": "ideaCBC",
+    "06032b240301020201": "ideaCBCPad",
+    "06032b24030102020101": "ideaCBCPadISO",
+    "06032b2403010203": "ideaOFB",
+    "06032b2403010204": "ideaCFB",
+    "06032b24030103": "des-3",
+    "06032b240301030101": "des-3ECBPad",
+    "06032b24030103010101": "des-3ECBPadISO",
+    "06032b240301030201": "des-3CBCPad",
+    "06032b24030103020101": "des-3CBCPadISO",
+    "06032b240302": "hashAlgorithm",
+    "06032b24030201": "ripemd160",
+    "06032b24030202": "ripemd128",
+    "06032b24030203": "ripemd256",
+    "06032b24030204": "mdc2singleLength",
+    "06032b24030205": "mdc2doubleLength",
+    "06032b240303": "signatureAlgorithm",
+    "06032b24030301": "rsa",
+    "06032b2403030101": "rsaMitSHA-1",
+    "06032b2403030102": "rsaMitRIPEMD160",
+    "06032b24030302": "ellipticCurve",
+    "06032b240304": "signatureScheme",
+    "06032b24030401": "iso9796-1",
+    "06032b2403040201": "iso9796-2",
+    "06032b2403040202": "iso9796-2rsa",
+    "06032b2404": "attribute",
+    "06032b2405": "policy",
+    "06032b2406": "api",
+    "06032b240601": "manufacturerSpecific",
+    "06032b240602": "functionalitySpecific",
+    "06032b2407": "api",
+    "06032b240701": "keyAgreement",
+    "06032b240702": "keyTransport",
+    "06032b06010401927c0a0101": "UNINETT policyIdentifier",
+    "06032b0601040195180a": "ICE-TEL policyIdentifier",
+    "06032b0601040197552001": "cryptlibEnvelope",
+    "06032b0601040197552002": "cryptlibPrivateKey",
+    "060a2b060104018237": "Microsoft OID",
+    "060a2b0601040182370a": "Crypto 2.0",
+    "060a2b0601040182370a01": "certTrustList",
+    "060a2b0601040182370a0101": "szOID_SORTED_CTL",
+    "060a2b0601040182370a0a": "Microsoft CMC OIDs",
+    "060a2b0601040182370a0a01": "szOID_CMC_ADD_ATTRIBUTES",
+    "060a2b0601040182370a0b": "Microsoft certificate property OIDs",
+    "060a2b0601040182370a0b01": "szOID_CERT_PROP_ID_PREFIX",
+    "060a2b0601040182370a0c": "CryptUI",
+    "060a2b0601040182370a0c01": "szOID_ANY_APPLICATION_POLICY",
+    "060a2b0601040182370a02": "nextUpdateLocation",
+    "060a2b0601040182370a0301": "certTrustListSigning",
+    "060a2b0601040182370a030a": "szOID_KP_QUALIFIED_SUBORDINATION",
+    "060a2b0601040182370a030b": "szOID_KP_KEY_RECOVERY",
+    "060a2b0601040182370a030c": "szOID_KP_DOCUMENT_SIGNING",
+    "060a2b0601040182370a0302": "timeStampSigning",
+    "060a2b0601040182370a0303": "serverGatedCrypto",
+    "060a2b0601040182370a030301": "szOID_SERIALIZED",
+    "060a2b0601040182370a0304": "encryptedFileSystem",
+    "060a2b0601040182370a030401": "szOID_EFS_RECOVERY",
+    "060a2b0601040182370a0305": "szOID_WHQL_CRYPTO",
+    "060a2b0601040182370a0306": "szOID_NT5_CRYPTO",
+    "060a2b0601040182370a0307": "szOID_OEM_WHQL_CRYPTO",
+    "060a2b0601040182370a0308": "szOID_EMBEDDED_NT_CRYPTO",
+    "060a2b0601040182370a0309": "szOID_ROOT_LIST_SIGNER",
+    "060a2b0601040182370a0401": "yesnoTrustAttr",
+    "060a2b0601040182370a0501": "szOID_DRM",
+    "060a2b0601040182370a0502": "szOID_DRM_INDIVIDUALIZATION",
+    "060a2b0601040182370a0601": "szOID_LICENSES",
+    "060a2b0601040182370a0602": "szOID_LICENSE_SERVER",
+    "060a2b0601040182370a07": "szOID_MICROSOFT_RDN_PREFIX",
+    "060a2b0601040182370a0701": "szOID_KEYID_RDN",
+    "060a2b0601040182370a0801": "szOID_REMOVE_CERTIFICATE",
+    "060a2b0601040182370a0901": "szOID_CROSS_CERT_DIST_POINTS",
+    "060a2b0601040182370c": "Catalog",
+    "060a2b0601040182370c0101": "szOID_CATALOG_LIST",
+    "060a2b0601040182370c0102": "szOID_CATALOG_LIST_MEMBER",
+    "060a2b0601040182370c0201": "CAT_NAMEVALUE_OBJID",
+    "060a2b0601040182370c0202": "CAT_MEMBERINFO_OBJID",
+    "060a2b0601040182370d": "Microsoft PKCS10 OIDs",
+    "060a2b0601040182370d01": "szOID_RENEWAL_CERTIFICATE",
+    "060a2b0601040182370d0201": "szOID_ENROLLMENT_NAME_VALUE_PAIR",
+    "060a2b0601040182370d0202": "szOID_ENROLLMENT_CSP_PROVIDER",
+    "060a2b0601040182370d0203": "OS Version",
+    "060a2b0601040182370f": "Microsoft Java",
+    "060a2b06010401823710": "Microsoft Outlook/Exchange",
+    "060a2b0601040182371004": "Outlook Express",
+    "060a2b06010401823711": "Microsoft PKCS12 attributes",
+    "060a2b0601040182371101": "szOID_LOCAL_MACHINE_KEYSET",
+    "060a2b06010401823712": "Microsoft Hydra",
+    "060a2b06010401823713": "Microsoft ISPU Test",
+    "060a2b06010401823702": "Authenticode",
+    "060a2b06010401823702010a": "spcAgencyInfo",
+    "060a2b06010401823702010b": "spcStatementType",
+    "060a2b06010401823702010c": "spcSpOpusInfo",
+    "060a2b06010401823702010e": "certExtensions",
+    "060a2b06010401823702010f": "spcPelmageData",
+    "060a2b060104018237020112": "SPC_RAW_FILE_DATA_OBJID",
+    "060a2b060104018237020113": "SPC_STRUCTURED_STORAGE_DATA_OBJID",
+    "060a2b060104018237020114": "spcLink",
+    "060a2b060104018237020115": "individualCodeSigning",
+    "060a2b060104018237020116": "commercialCodeSigning",
+    "060a2b060104018237020119": "spcLink",
+    "060a2b06010401823702011a": "spcMinimalCriteriaInfo",
+    "060a2b06010401823702011b": "spcFinancialCriteriaInfo",
+    "060a2b06010401823702011c": "spcLink",
+    "060a2b06010401823702011d": "SPC_HASH_INFO_OBJID",
+    "060a2b06010401823702011e": "SPC_SIPINFO_OBJID",
+    "060a2b060104018237020104": "spcIndirectDataContext",
+    "060a2b0601040182370202": "CTL for Software Publishers Trusted CAs",
+    "060a2b060104018237020201": "szOID_TRUSTED_CODESIGNING_CA_LIST",
+    "060a2b060104018237020202": "szOID_TRUSTED_CLIENT_AUTH_CA_LIST",
+    "060a2b060104018237020203": "szOID_TRUSTED_SERVER_AUTH_CA_LIST",
+    "060a2b06010401823714": "Microsoft Enrollment Infrastructure",
+    "060a2b0601040182371401": "szOID_AUTO_ENROLL_CTL_USAGE",
+    "060a2b0601040182371402": "szOID_ENROLL_CERTTYPE_EXTENSION",
+    "060a2b060104018237140201": "szOID_ENROLLMENT_AGENT",
+    "060a2b060104018237140202": "szOID_KP_SMARTCARD_LOGON",
+    "060a2b060104018237140203": "szOID_NT_PRINCIPAL_NAME",
+    "060a2b0601040182371403": "szOID_CERT_MANIFOLD",
+    "06092b06010401823715": "Microsoft CertSrv Infrastructure",
+    "06092b0601040182371501": "szOID_CERTSRV_CA_VERSION",
+    "06092b0601040182371514": "Client Information",
+    "060a2b06010401823719": "Microsoft Directory Service",
+    "060a2b0601040182371901": "szOID_NTDS_REPLICATION",
+    "060a2b06010401823703": "Time Stamping",
+    "060a2b060104018237030201": "SPC_TIME_STAMP_REQUEST_OBJID",
+    "060a2b0601040182371e": "IIS",
+    "060a2b0601040182371f": "Windows updates and service packs",
+    "060a2b0601040182371f01": "szOID_PRODUCT_UPDATE",
+    "060a2b06010401823704": "Permissions",
+    "060a2b06010401823728": "Fonts",
+    "060a2b06010401823729": "Microsoft Licensing and Registration",
+    "060a2b0601040182372a": "Microsoft Corporate PKI (ITG)",
+    "060a2b06010401823758": "CAPICOM",
+    "060a2b0601040182375801": "szOID_CAPICOM_VERSION",
+    "060a2b0601040182375802": "szOID_CAPICOM_ATTRIBUTE",
+    "060a2b060104018237580201": "szOID_CAPICOM_DOCUMENT_NAME",
+    "060a2b060104018237580202": "szOID_CAPICOM_DOCUMENT_DESCRIPTION",
+    "060a2b0601040182375803": "szOID_CAPICOM_ENCRYPTED_DATA",
+    "060a2b060104018237580301": "szOID_CAPICOM_ENCRYPTED_CONTENT",
+    "06032b0601050507": "pkix",
+    "06032b060105050701": "privateExtension",
+    "06032b06010505070101": "authorityInfoAccess",
+    "06032b06010505070c02": "CMC Data",
+    "06032b060105050702": "policyQualifierIds",
     // "06032b06010505070201" : "cps",
-    "06032b06010505070202" : "unotice",
-    "06032b060105050703" : "keyPurpose",
-    "06032b06010505070301" : "serverAuth",
-    "06032b06010505070302" : "clientAuth",
-    "06032b06010505070303" : "codeSigning",
-    "06032b06010505070304" : "emailProtection",
-    "06032b06010505070305" : "ipsecEndSystem",
-    "06032b06010505070306" : "ipsecTunnel",
-    "06032b06010505070307" : "ipsecUser",
-    "06032b06010505070308" : "timeStamping",
-    "06032b060105050704" : "cmpInformationTypes",
-    "06032b06010505070401" : "caProtEncCert",
-    "06032b06010505070402" : "signKeyPairTypes",
-    "06032b06010505070403" : "encKeyPairTypes",
-    "06032b06010505070404" : "preferredSymmAlg",
-    "06032b06010505070405" : "caKeyUpdateInfo",
-    "06032b06010505070406" : "currentCRL",
-    "06032b06010505073001" : "ocsp",
-    "06032b06010505073002" : "caIssuers",
-    "06032b06010505080101" : "HMAC-MD5",
-    "06032b06010505080102" : "HMAC-SHA",
-    "060360864801650201010a" : "mosaicKeyManagementAlgorithm",
-    "060360864801650201010b" : "sdnsKMandSigAlgorithm",
-    "060360864801650201010c" : "mosaicKMandSigAlgorithm",
-    "060360864801650201010d" : "SuiteASignatureAlgorithm",
-    "060360864801650201010e" : "SuiteAConfidentialityAlgorithm",
-    "060360864801650201010f" : "SuiteAIntegrityAlgorithm",
-    "06036086480186f84201" : "cert-extension",
+    "06032b06010505070202": "unotice",
+    "06032b060105050703": "keyPurpose",
+    "06032b06010505070301": "serverAuth",
+    "06032b06010505070302": "clientAuth",
+    "06032b06010505070303": "codeSigning",
+    "06032b06010505070304": "emailProtection",
+    "06032b06010505070305": "ipsecEndSystem",
+    "06032b06010505070306": "ipsecTunnel",
+    "06032b06010505070307": "ipsecUser",
+    "06032b06010505070308": "timeStamping",
+    "06032b060105050704": "cmpInformationTypes",
+    "06032b06010505070401": "caProtEncCert",
+    "06032b06010505070402": "signKeyPairTypes",
+    "06032b06010505070403": "encKeyPairTypes",
+    "06032b06010505070404": "preferredSymmAlg",
+    "06032b06010505070405": "caKeyUpdateInfo",
+    "06032b06010505070406": "currentCRL",
+    "06032b06010505073001": "ocsp",
+    "06032b06010505073002": "caIssuers",
+    "06032b06010505080101": "HMAC-MD5",
+    "06032b06010505080102": "HMAC-SHA",
+    "060360864801650201010a": "mosaicKeyManagementAlgorithm",
+    "060360864801650201010b": "sdnsKMandSigAlgorithm",
+    "060360864801650201010c": "mosaicKMandSigAlgorithm",
+    "060360864801650201010d": "SuiteASignatureAlgorithm",
+    "060360864801650201010e": "SuiteAConfidentialityAlgorithm",
+    "060360864801650201010f": "SuiteAIntegrityAlgorithm",
+    "06036086480186f84201": "cert-extension",
     // "06036086480186f8420101" : "netscape-cert-type",
-    "06036086480186f842010a" : "EntityLogo",
-    "06036086480186f842010b" : "UserPicture",
+    "06036086480186f842010a": "EntityLogo",
+    "06036086480186f842010b": "UserPicture",
     // "06036086480186f842010c" : "netscape-ssl-server-name",
     // "06036086480186f842010d" : "netscape-comment",
     // "06036086480186f8420102" : "netscape-base-url",
@@ -863,202 +843,202 @@ r.X509.DN_ATTRHEX = {
     // "06036086480186f8420104" : "netscape-ca-revocation-url",
     // "06036086480186f8420107" : "netscape-cert-renewal-url",
     // "06036086480186f8420108" : "netscape-ca-policy-url",
-    "06036086480186f8420109" : "HomePage-url",
-    "06036086480186f84202" : "data-type",
-    "06036086480186f8420201" : "GIF",
-    "06036086480186f8420202" : "JPEG",
-    "06036086480186f8420203" : "URL",
-    "06036086480186f8420204" : "HTML",
-    "06036086480186f8420205" : "netscape-cert-sequence",
-    "06036086480186f8420206" : "netscape-cert-url",
-    "06036086480186f84203" : "directory",
-    "06036086480186f8420401" : "serverGatedCrypto",
-    "06036086480186f845010603" : "Unknown Verisign extension",
-    "06036086480186f845010606" : "Unknown Verisign extension",
-    "06036086480186f84501070101" : "Verisign certificatePolicy",
-    "06036086480186f8450107010101" : "Unknown Verisign policy qualifier",
-    "06036086480186f8450107010102" : "Unknown Verisign policy qualifier",
-    "0603678105" : "TCPA",
-    "060367810501" : "tcpaSpecVersion",
-    "060367810502" : "tcpaAttribute",
-    "06036781050201" : "tcpaAtTpmManufacturer",
-    "0603678105020a" : "tcpaAtSecurityQualities",
-    "0603678105020b" : "tcpaAtTpmProtectionProfile",
-    "0603678105020c" : "tcpaAtTpmSecurityTarget",
-    "0603678105020d" : "tcpaAtFoundationProtectionProfile",
-    "0603678105020e" : "tcpaAtFoundationSecurityTarget",
-    "0603678105020f" : "tcpaAtTpmIdLabel",
-    "06036781050202" : "tcpaAtTpmModel",
-    "06036781050203" : "tcpaAtTpmVersion",
-    "06036781050204" : "tcpaAtPlatformManufacturer",
-    "06036781050205" : "tcpaAtPlatformModel",
-    "06036781050206" : "tcpaAtPlatformVersion",
-    "06036781050207" : "tcpaAtComponentManufacturer",
-    "06036781050208" : "tcpaAtComponentModel",
-    "06036781050209" : "tcpaAtComponentVersion",
-    "060367810503" : "tcpaProtocol",
-    "06036781050301" : "tcpaPrttTpmIdProtocol",
-    "0603672a00" : "contentType",
-    "0603672a0000" : "PANData",
-    "0603672a0001" : "PANToken",
-    "0603672a0002" : "PANOnly",
-    "0603672a01" : "msgExt",
-    "0603672a0a" : "national",
-    "0603672a0a8140" : "Japan",
-    "0603672a02" : "field",
-    "0603672a0200" : "fullName",
-    "0603672a0201" : "givenName",
-    "0603672a020a" : "amount",
-    "0603672a0202" : "familyName",
-    "0603672a0203" : "birthFamilyName",
-    "0603672a0204" : "placeName",
-    "0603672a0205" : "identificationNumber",
-    "0603672a0206" : "month",
-    "0603672a0207" : "date",
-    "0603672a02070b" : "accountNumber",
-    "0603672a02070c" : "passPhrase",
-    "0603672a0208" : "address",
-    "0603672a0209" : "telephone",
-    "0603672a03" : "attribute",
-    "0603672a0300" : "cert",
-    "0603672a030000" : "rootKeyThumb",
-    "0603672a030001" : "additionalPolicy",
-    "0603672a04" : "algorithm",
-    "0603672a05" : "policy",
-    "0603672a0500" : "root",
-    "0603672a06" : "module",
-    "0603672a07" : "certExt",
-    "0603672a0700" : "hashedRootKey",
-    "0603672a0701" : "certificateType",
-    "0603672a0702" : "merchantData",
-    "0603672a0703" : "cardCertRequired",
-    "0603672a0704" : "tunneling",
-    "0603672a0705" : "setExtensions",
-    "0603672a0706" : "setQualifier",
-    "0603672a08" : "brand",
-    "0603672a0801" : "IATA-ATA",
-    "0603672a081e" : "Diners",
-    "0603672a0822" : "AmericanExpress",
-    "0603672a0804" : "VISA",
-    "0603672a0805" : "MasterCard",
-    "0603672a08ae7b" : "Novus",
-    "0603672a09" : "vendor",
-    "0603672a0900" : "GlobeSet",
-    "0603672a0901" : "IBM",
-    "0603672a090a" : "Griffin",
-    "0603672a090b" : "Certicom",
-    "0603672a090c" : "OSS",
-    "0603672a090d" : "TenthMountain",
-    "0603672a090e" : "Antares",
-    "0603672a090f" : "ECC",
-    "0603672a0910" : "Maithean",
-    "0603672a0911" : "Netscape",
-    "0603672a0912" : "Verisign",
-    "0603672a0913" : "BlueMoney",
-    "0603672a0902" : "CyberCash",
-    "0603672a0914" : "Lacerte",
-    "0603672a0915" : "Fujitsu",
-    "0603672a0916" : "eLab",
-    "0603672a0917" : "Entrust",
-    "0603672a0918" : "VIAnet",
-    "0603672a0919" : "III",
-    "0603672a091a" : "OpenMarket",
-    "0603672a091b" : "Lexem",
-    "0603672a091c" : "Intertrader",
-    "0603672a091d" : "Persimmon",
-    "0603672a0903" : "Terisa",
-    "0603672a091e" : "NABLE",
-    "0603672a091f" : "espace-net",
-    "0603672a0920" : "Hitachi",
-    "0603672a0921" : "Microsoft",
-    "0603672a0922" : "NEC",
-    "0603672a0923" : "Mitsubishi",
-    "0603672a0924" : "NCR",
-    "0603672a0925" : "e-COMM",
-    "0603672a0926" : "Gemplus",
-    "0603672a0904" : "RSADSI",
-    "0603672a0905" : "VeriFone",
-    "0603672a0906" : "TrinTech",
-    "0603672a0907" : "BankGate",
-    "0603672a0908" : "GTE",
-    "0603672a0909" : "CompuSource",
-    "0603551d01" : "authorityKeyIdentifier",
-    "0603551d0a" : "basicConstraints",
-    "0603551d0b" : "nameConstraints",
-    "0603551d0c" : "policyConstraints",
-    "0603551d0d" : "basicConstraints",
-    "0603551d0e" : "subjectKeyIdentifier",
-    "0603551d0f" : "keyUsage",
-    "0603551d10" : "privateKeyUsagePeriod",
-    "0603551d11" : "subjectAltName",
-    "0603551d12" : "issuerAltName",
-    "0603551d13" : "basicConstraints",
-    "0603551d02" : "keyAttributes",
-    "0603551d14" : "cRLNumber",
-    "0603551d15" : "cRLReason",
-    "0603551d16" : "expirationDate",
-    "0603551d17" : "instructionCode",
-    "0603551d18" : "invalidityDate",
-    "0603551d1a" : "issuingDistributionPoint",
-    "0603551d1b" : "deltaCRLIndicator",
-    "0603551d1c" : "issuingDistributionPoint",
-    "0603551d1d" : "certificateIssuer",
-    "0603551d03" : "certificatePolicies",
-    "0603551d1e" : "nameConstraints",
-    "0603551d1f" : "cRLDistributionPoints",
-    "0603551d20" : "certificatePolicies",
-    "0603551d21" : "policyMappings",
-    "0603551d22" : "policyConstraints",
-    "0603551d23" : "authorityKeyIdentifier",
-    "0603551d24" : "policyConstraints",
-    "0603551d25" : "extKeyUsage",
-    "0603551d04" : "keyUsageRestriction",
-    "0603551d05" : "policyMapping",
-    "0603551d06" : "subtreesConstraint",
-    "0603551d07" : "subjectAltName",
-    "0603551d08" : "issuerAltName",
-    "0603551d09" : "subjectDirectoryAttributes",
-    "0603550400" : "objectClass",
-    "0603550401" : "aliasObjectName",
+    "06036086480186f8420109": "HomePage-url",
+    "06036086480186f84202": "data-type",
+    "06036086480186f8420201": "GIF",
+    "06036086480186f8420202": "JPEG",
+    "06036086480186f8420203": "URL",
+    "06036086480186f8420204": "HTML",
+    "06036086480186f8420205": "netscape-cert-sequence",
+    "06036086480186f8420206": "netscape-cert-url",
+    "06036086480186f84203": "directory",
+    "06036086480186f8420401": "serverGatedCrypto",
+    "06036086480186f845010603": "Unknown Verisign extension",
+    "06036086480186f845010606": "Unknown Verisign extension",
+    "06036086480186f84501070101": "Verisign certificatePolicy",
+    "06036086480186f8450107010101": "Unknown Verisign policy qualifier",
+    "06036086480186f8450107010102": "Unknown Verisign policy qualifier",
+    "0603678105": "TCPA",
+    "060367810501": "tcpaSpecVersion",
+    "060367810502": "tcpaAttribute",
+    "06036781050201": "tcpaAtTpmManufacturer",
+    "0603678105020a": "tcpaAtSecurityQualities",
+    "0603678105020b": "tcpaAtTpmProtectionProfile",
+    "0603678105020c": "tcpaAtTpmSecurityTarget",
+    "0603678105020d": "tcpaAtFoundationProtectionProfile",
+    "0603678105020e": "tcpaAtFoundationSecurityTarget",
+    "0603678105020f": "tcpaAtTpmIdLabel",
+    "06036781050202": "tcpaAtTpmModel",
+    "06036781050203": "tcpaAtTpmVersion",
+    "06036781050204": "tcpaAtPlatformManufacturer",
+    "06036781050205": "tcpaAtPlatformModel",
+    "06036781050206": "tcpaAtPlatformVersion",
+    "06036781050207": "tcpaAtComponentManufacturer",
+    "06036781050208": "tcpaAtComponentModel",
+    "06036781050209": "tcpaAtComponentVersion",
+    "060367810503": "tcpaProtocol",
+    "06036781050301": "tcpaPrttTpmIdProtocol",
+    "0603672a00": "contentType",
+    "0603672a0000": "PANData",
+    "0603672a0001": "PANToken",
+    "0603672a0002": "PANOnly",
+    "0603672a01": "msgExt",
+    "0603672a0a": "national",
+    "0603672a0a8140": "Japan",
+    "0603672a02": "field",
+    "0603672a0200": "fullName",
+    "0603672a0201": "givenName",
+    "0603672a020a": "amount",
+    "0603672a0202": "familyName",
+    "0603672a0203": "birthFamilyName",
+    "0603672a0204": "placeName",
+    "0603672a0205": "identificationNumber",
+    "0603672a0206": "month",
+    "0603672a0207": "date",
+    "0603672a02070b": "accountNumber",
+    "0603672a02070c": "passPhrase",
+    "0603672a0208": "address",
+    "0603672a0209": "telephone",
+    "0603672a03": "attribute",
+    "0603672a0300": "cert",
+    "0603672a030000": "rootKeyThumb",
+    "0603672a030001": "additionalPolicy",
+    "0603672a04": "algorithm",
+    "0603672a05": "policy",
+    "0603672a0500": "root",
+    "0603672a06": "module",
+    "0603672a07": "certExt",
+    "0603672a0700": "hashedRootKey",
+    "0603672a0701": "certificateType",
+    "0603672a0702": "merchantData",
+    "0603672a0703": "cardCertRequired",
+    "0603672a0704": "tunneling",
+    "0603672a0705": "setExtensions",
+    "0603672a0706": "setQualifier",
+    "0603672a08": "brand",
+    "0603672a0801": "IATA-ATA",
+    "0603672a081e": "Diners",
+    "0603672a0822": "AmericanExpress",
+    "0603672a0804": "VISA",
+    "0603672a0805": "MasterCard",
+    "0603672a08ae7b": "Novus",
+    "0603672a09": "vendor",
+    "0603672a0900": "GlobeSet",
+    "0603672a0901": "IBM",
+    "0603672a090a": "Griffin",
+    "0603672a090b": "Certicom",
+    "0603672a090c": "OSS",
+    "0603672a090d": "TenthMountain",
+    "0603672a090e": "Antares",
+    "0603672a090f": "ECC",
+    "0603672a0910": "Maithean",
+    "0603672a0911": "Netscape",
+    "0603672a0912": "Verisign",
+    "0603672a0913": "BlueMoney",
+    "0603672a0902": "CyberCash",
+    "0603672a0914": "Lacerte",
+    "0603672a0915": "Fujitsu",
+    "0603672a0916": "eLab",
+    "0603672a0917": "Entrust",
+    "0603672a0918": "VIAnet",
+    "0603672a0919": "III",
+    "0603672a091a": "OpenMarket",
+    "0603672a091b": "Lexem",
+    "0603672a091c": "Intertrader",
+    "0603672a091d": "Persimmon",
+    "0603672a0903": "Terisa",
+    "0603672a091e": "NABLE",
+    "0603672a091f": "espace-net",
+    "0603672a0920": "Hitachi",
+    "0603672a0921": "Microsoft",
+    "0603672a0922": "NEC",
+    "0603672a0923": "Mitsubishi",
+    "0603672a0924": "NCR",
+    "0603672a0925": "e-COMM",
+    "0603672a0926": "Gemplus",
+    "0603672a0904": "RSADSI",
+    "0603672a0905": "VeriFone",
+    "0603672a0906": "TrinTech",
+    "0603672a0907": "BankGate",
+    "0603672a0908": "GTE",
+    "0603672a0909": "CompuSource",
+    "0603551d01": "authorityKeyIdentifier",
+    "0603551d0a": "basicConstraints",
+    "0603551d0b": "nameConstraints",
+    "0603551d0c": "policyConstraints",
+    "0603551d0d": "basicConstraints",
+    "0603551d0e": "subjectKeyIdentifier",
+    "0603551d0f": "keyUsage",
+    "0603551d10": "privateKeyUsagePeriod",
+    "0603551d11": "subjectAltName",
+    "0603551d12": "issuerAltName",
+    "0603551d13": "basicConstraints",
+    "0603551d02": "keyAttributes",
+    "0603551d14": "cRLNumber",
+    "0603551d15": "cRLReason",
+    "0603551d16": "expirationDate",
+    "0603551d17": "instructionCode",
+    "0603551d18": "invalidityDate",
+    "0603551d1a": "issuingDistributionPoint",
+    "0603551d1b": "deltaCRLIndicator",
+    "0603551d1c": "issuingDistributionPoint",
+    "0603551d1d": "certificateIssuer",
+    "0603551d03": "certificatePolicies",
+    "0603551d1e": "nameConstraints",
+    "0603551d1f": "cRLDistributionPoints",
+    "0603551d20": "certificatePolicies",
+    "0603551d21": "policyMappings",
+    "0603551d22": "policyConstraints",
+    "0603551d23": "authorityKeyIdentifier",
+    "0603551d24": "policyConstraints",
+    "0603551d25": "extKeyUsage",
+    "0603551d04": "keyUsageRestriction",
+    "0603551d05": "policyMapping",
+    "0603551d06": "subtreesConstraint",
+    "0603551d07": "subjectAltName",
+    "0603551d08": "issuerAltName",
+    "0603551d09": "subjectDirectoryAttributes",
+    "0603550400": "objectClass",
+    "0603550401": "aliasObjectName",
     // "060355040c" : "title",
-    "060355040d" : "description",
-    "060355040e" : "searchGuide",
-    "060355040f" : "businessCategory",
-    "0603550410" : "postalAddress",
-    "0603550411" : "postalCode",
-    "0603550412" : "postOfficeBox",
-    "0603550413" : "physicalDeliveryOfficeName",
-    "0603550402" : "knowledgeInformation",
+    "060355040d": "description",
+    "060355040e": "searchGuide",
+    "060355040f": "businessCategory",
+    "0603550410": "postalAddress",
+    "0603550411": "postalCode",
+    "0603550412": "postOfficeBox",
+    "0603550413": "physicalDeliveryOfficeName",
+    "0603550402": "knowledgeInformation",
     // "0603550414" : "telephoneNumber",
-    "0603550415" : "telexNumber",
-    "0603550416" : "teletexTerminalIdentifier",
-    "0603550417" : "facsimileTelephoneNumber",
-    "0603550418" : "x121Address",
-    "0603550419" : "internationalISDNNumber",
-    "060355041a" : "registeredAddress",
-    "060355041b" : "destinationIndicator",
-    "060355041c" : "preferredDeliveryMehtod",
-    "060355041d" : "presentationAddress",
-    "060355041e" : "supportedApplicationContext",
-    "060355041f" : "member",
-    "0603550420" : "owner",
-    "0603550421" : "roleOccupant",
-    "0603550422" : "seeAlso",
-    "0603550423" : "userPassword",
-    "0603550424" : "userCertificate",
-    "0603550425" : "caCertificate",
-    "0603550426" : "authorityRevocationList",
-    "0603550427" : "certificateRevocationList",
-    "0603550428" : "crossCertificatePair",
-    "0603550429" : "givenName",
+    "0603550415": "telexNumber",
+    "0603550416": "teletexTerminalIdentifier",
+    "0603550417": "facsimileTelephoneNumber",
+    "0603550418": "x121Address",
+    "0603550419": "internationalISDNNumber",
+    "060355041a": "registeredAddress",
+    "060355041b": "destinationIndicator",
+    "060355041c": "preferredDeliveryMehtod",
+    "060355041d": "presentationAddress",
+    "060355041e": "supportedApplicationContext",
+    "060355041f": "member",
+    "0603550420": "owner",
+    "0603550421": "roleOccupant",
+    "0603550422": "seeAlso",
+    "0603550423": "userPassword",
+    "0603550424": "userCertificate",
+    "0603550425": "caCertificate",
+    "0603550426": "authorityRevocationList",
+    "0603550427": "certificateRevocationList",
+    "0603550428": "crossCertificatePair",
+    "0603550429": "givenName",
     // "060355042a" : "givenName",
-    "0603550405" : "serialNumber",
-    "0603550434" : "supportedAlgorithms",
-    "0603550435" : "deltaRevocationList",
-    "060355043a" : "crossCertificatePair",
+    "0603550405": "serialNumber",
+    "0603550434": "supportedAlgorithms",
+    "0603550435": "deltaRevocationList",
+    "060355043a": "crossCertificatePair",
     // "0603550409" : "streetAddress",
-    "06035508" : "X.500-Algorithms",
-    "0603550801" : "X.500-Alg-Encryption",
-    "060355080101" : "rsa",
-    "0603604c0101" : "DPC"
+    "06035508": "X.500-Algorithms",
+    "0603550801": "X.500-Alg-Encryption",
+    "060355080101": "rsa",
+    "0603604c0101": "DPC"
 };
diff --git a/src/core/operations/QuotedPrintable.js b/src/core/operations/QuotedPrintable.js
index 7636b524..a53ea0ca 100755
--- a/src/core/operations/QuotedPrintable.js
+++ b/src/core/operations/QuotedPrintable.js
@@ -61,7 +61,7 @@ const QuotedPrintable = {
      * @returns {byteArray}
      */
     runFrom: function (input, args) {
-        const str = input.replace(/\=(?:\r?\n|$)/g, "");
+        const str = input.replace(/=(?:\r?\n|$)/g, "");
         return QuotedPrintable.mimeDecode(str);
     },
 
@@ -73,7 +73,7 @@ const QuotedPrintable = {
      * @returns {byteArray}
      */
     mimeDecode: function(str) {
-        let encodedBytesCount = (str.match(/\=[\da-fA-F]{2}/g) || []).length,
+        let encodedBytesCount = (str.match(/=[\da-fA-F]{2}/g) || []).length,
             bufferLength = str.length - encodedBytesCount * 2,
             chr, hex,
             buffer = new Array(bufferLength),
@@ -219,21 +219,21 @@ const QuotedPrintable = {
                 result += line;
                 pos += line.length;
                 continue;
-            } else if (line.length > lineLengthMax - lineMargin && (match = line.substr(-lineMargin).match(/[ \t\.,!\?][^ \t\.,!\?]*$/))) {
+            } else if (line.length > lineLengthMax - lineMargin && (match = line.substr(-lineMargin).match(/[ \t.,!?][^ \t.,!?]*$/))) {
                 // truncate to nearest space
                 line = line.substr(0, line.length - (match[0].length - 1));
             } else if (line.substr(-1) === "\r") {
                 line = line.substr(0, line.length - 1);
             } else {
-                if (line.match(/\=[\da-f]{0,2}$/i)) {
+                if (line.match(/=[\da-f]{0,2}$/i)) {
 
                     // push incomplete encoding sequences to the next line
-                    if ((match = line.match(/\=[\da-f]{0,1}$/i))) {
+                    if ((match = line.match(/=[\da-f]{0,1}$/i))) {
                         line = line.substr(0, line.length - match[0].length);
                     }
 
                     // ensure that utf-8 sequences are not split
-                    while (line.length > 3 && line.length < len - pos && !line.match(/^(?:=[\da-f]{2}){1,4}$/i) && (match = line.match(/\=[\da-f]{2}$/ig))) {
+                    while (line.length > 3 && line.length < len - pos && !line.match(/^(?:=[\da-f]{2}){1,4}$/i) && (match = line.match(/=[\da-f]{2}$/ig))) {
                         code = parseInt(match[0].substr(1, 2), 16);
                         if (code < 128) {
                             break;
@@ -250,7 +250,7 @@ const QuotedPrintable = {
             }
 
             if (pos + line.length < len && line.substr(-1) !== "\n") {
-                if (line.length === 76 && line.match(/\=[\da-f]{2}$/i)) {
+                if (line.length === 76 && line.match(/=[\da-f]{2}$/i)) {
                     line = line.substr(0, line.length - 3);
                 } else if (line.length === 76) {
                     line = line.substr(0, line.length - 1);
diff --git a/src/core/operations/StrUtils.js b/src/core/operations/StrUtils.js
index 093de39b..698e7eef 100755
--- a/src/core/operations/StrUtils.js
+++ b/src/core/operations/StrUtils.js
@@ -193,17 +193,17 @@ const StrUtils = {
      * @constant
      * @default
      */
-    FIND_REPLACE_GLOBAL : true,
+    FIND_REPLACE_GLOBAL: true,
     /**
      * @constant
      * @default
      */
-    FIND_REPLACE_CASE : false,
+    FIND_REPLACE_CASE: false,
     /**
      * @constant
      * @default
      */
-    FIND_REPLACE_MULTILINE : true,
+    FIND_REPLACE_MULTILINE: true,
 
     /**
      * Find / Replace operation.
@@ -359,9 +359,9 @@ const StrUtils = {
 
         for (let i = 0; i < diff.length; i++) {
             if (diff[i].added) {
-                if (showAdded) output += "" + Utils.escapeHtml(diff[i].value) + "";
+                if (showAdded) output += "" + Utils.escapeHtml(diff[i].value) + "";
             } else if (diff[i].removed) {
-                if (showRemoved) output += "" + Utils.escapeHtml(diff[i].value) + "";
+                if (showRemoved) output += "" + Utils.escapeHtml(diff[i].value) + "";
             } else {
                 output += Utils.escapeHtml(diff[i].value);
             }
@@ -424,7 +424,7 @@ const StrUtils = {
                 }
 
                 if (match && !inMatch) {
-                    outputs[s] += "" + Utils.escapeHtml(samples[s][i]);
+                    outputs[s] += "" + Utils.escapeHtml(samples[s][i]);
                     if (samples[s].length === i + 1) outputs[s] += "";
                     if (s === samples.length - 1) inMatch = true;
                 } else if (!match && inMatch) {
@@ -476,16 +476,16 @@ const StrUtils = {
         const splitInput = input.split(delimiter);
 
         return splitInput
-        .filter((line, lineIndex) => {
-            lineIndex += 1;
+            .filter((line, lineIndex) => {
+                lineIndex += 1;
 
-            if (number < 0) {
-                return lineIndex <= splitInput.length + number;
-            } else {
-                return lineIndex <= number;
-            }
-        })
-        .join(delimiter);
+                if (number < 0) {
+                    return lineIndex <= splitInput.length + number;
+                } else {
+                    return lineIndex <= number;
+                }
+            })
+            .join(delimiter);
     },
 
 
@@ -504,16 +504,16 @@ const StrUtils = {
         const splitInput = input.split(delimiter);
 
         return splitInput
-        .filter((line, lineIndex) => {
-            lineIndex += 1;
+            .filter((line, lineIndex) => {
+                lineIndex += 1;
 
-            if (number < 0) {
-                return lineIndex > -number;
-            } else {
-                return lineIndex > splitInput.length - number;
-            }
-        })
-        .join(delimiter);
+                if (number < 0) {
+                    return lineIndex > -number;
+                } else {
+                    return lineIndex > splitInput.length - number;
+                }
+            })
+            .join(delimiter);
     },
 
 
diff --git a/src/core/operations/Tidy.js b/src/core/operations/Tidy.js
index fed56730..881508cf 100755
--- a/src/core/operations/Tidy.js
+++ b/src/core/operations/Tidy.js
@@ -16,32 +16,32 @@ const Tidy = {
      * @constant
      * @default
      */
-    REMOVE_SPACES : true,
+    REMOVE_SPACES: true,
     /**
      * @constant
      * @default
      */
-    REMOVE_CARIAGE_RETURNS : true,
+    REMOVE_CARIAGE_RETURNS: true,
     /**
      * @constant
      * @default
      */
-    REMOVE_LINE_FEEDS : true,
+    REMOVE_LINE_FEEDS: true,
     /**
      * @constant
      * @default
      */
-    REMOVE_TABS : true,
+    REMOVE_TABS: true,
     /**
      * @constant
      * @default
      */
-    REMOVE_FORM_FEEDS : true,
+    REMOVE_FORM_FEEDS: true,
     /**
      * @constant
      * @default
      */
-    REMOVE_FULL_STOPS : false,
+    REMOVE_FULL_STOPS: false,
 
     /**
      * Remove whitespace operation.
@@ -89,17 +89,17 @@ const Tidy = {
      * @constant
      * @default
      */
-    APPLY_TO_EACH_LINE : false,
+    APPLY_TO_EACH_LINE: false,
     /**
      * @constant
      * @default
      */
-    DROP_START : 0,
+    DROP_START: 0,
     /**
      * @constant
      * @default
      */
-    DROP_LENGTH : 5,
+    DROP_LENGTH: 5,
 
     /**
      * Drop bytes operation.
@@ -200,17 +200,17 @@ const Tidy = {
      * @constant
      * @default
      */
-    PAD_POSITION : ["Start", "End"],
+    PAD_POSITION: ["Start", "End"],
     /**
      * @constant
      * @default
      */
-    PAD_LENGTH : 5,
+    PAD_LENGTH: 5,
     /**
      * @constant
      * @default
      */
-    PAD_CHAR : " ",
+    PAD_CHAR: " ",
 
     /**
      * Pad lines operation.
diff --git a/src/core/operations/URL.js b/src/core/operations/URL.js
index cff59d23..9e00ebf8 100755
--- a/src/core/operations/URL.js
+++ b/src/core/operations/URL.js
@@ -127,7 +127,7 @@ const URL_ = {
             .replace(/\(/g, "%28")
             .replace(/\)/g, "%29")
             .replace(/\*/g, "%2A")
-            .replace(/\-/g, "%2D")
+            .replace(/-/g, "%2D")
             .replace(/\./g, "%2E")
             .replace(/_/g, "%5F")
             .replace(/~/g, "%7E");
diff --git a/src/node/index.js b/src/node/index.js
index 77eed31f..26bd9d92 100644
--- a/src/node/index.js
+++ b/src/node/index.js
@@ -14,12 +14,12 @@ const CyberChef = module.exports = {
     bake: function(input, recipeConfig) {
         this.chef = new Chef();
         return this.chef.bake(
-		input,
-		recipeConfig,
-		{},
-		0,
-		false
-	);
+            input,
+            recipeConfig,
+            {},
+            0,
+            false
+        );
     }
 
 };
diff --git a/src/web/App.js b/src/web/App.js
index 2cba0997..232d268d 100755
--- a/src/web/App.js
+++ b/src/web/App.js
@@ -266,13 +266,7 @@ App.prototype.silentBake = function() {
  * @returns {string}
  */
 App.prototype.getInput = function() {
-    const input = this.manager.input.get();
-
-    // Save to session storage in case we need to restore it later
-    sessionStorage.setItem("inputLength", input.length);
-    sessionStorage.setItem("input", input);
-
-    return input;
+    return this.manager.input.get();
 };
 
 
@@ -282,8 +276,6 @@ App.prototype.getInput = function() {
  * @param {string} input - The string to set the input to
  */
 App.prototype.setInput = function(input) {
-    sessionStorage.setItem("inputLength", input.length);
-    sessionStorage.setItem("input", input);
     this.manager.input.set(input);
 };
 
@@ -466,7 +458,12 @@ App.prototype.addFavourite = function(name) {
  */
 App.prototype.loadURIParams = function() {
     // Load query string or hash from URI (depending on which is populated)
-    const params = window.location.search || window.location.hash;
+    // We prefer getting the hash by splitting the href rather than referencing
+    // location.hash as some browsers (Firefox) automatically URL decode it,
+    // which cause issues.
+    const params = window.location.search ||
+        window.location.href.split("#")[1] ||
+        window.location.hash;
     this.uriParams = Utils.parseURIParams(params);
 
     // Pause auto-bake while loading but don't modify `this.autoBake_`
@@ -529,9 +526,7 @@ App.prototype.nextIngId = function() {
  * @returns {Object[]}
  */
 App.prototype.getRecipeConfig = function() {
-    const recipeConfig = this.manager.recipe.getConfig();
-    sessionStorage.setItem("recipeConfig", JSON.stringify(recipeConfig));
-    return recipeConfig;
+    return this.manager.recipe.getConfig();
 };
 
 
@@ -541,7 +536,6 @@ App.prototype.getRecipeConfig = function() {
  * @param {Object[]} recipeConfig - The recipe configuration
  */
 App.prototype.setRecipeConfig = function(recipeConfig) {
-    sessionStorage.setItem("recipeConfig", JSON.stringify(recipeConfig));
     document.getElementById("rec-list").innerHTML = null;
 
     for (let i = 0; i < recipeConfig.length; i++) {
@@ -596,15 +590,24 @@ App.prototype.resetLayout = function() {
 App.prototype.setCompileMessage = function() {
     // Display time since last build and compile message
     let now = new Date(),
-        timeSinceCompile = Utils.fuzzyTime(now.getTime() - window.compileTime),
-        compileInfo = "Last build: " +
-            timeSinceCompile.substr(0, 1).toUpperCase() + timeSinceCompile.substr(1) + " ago";
+        timeSinceCompile = Utils.fuzzyTime(now.getTime() - window.compileTime);
+
+    // Calculate previous version to compare to
+    let prev = PKG_VERSION.split(".").map(n => {
+        return parseInt(n, 10);
+    });
+    if (prev[2] > 0) prev[2]--;
+    else if (prev[1] > 0) prev[1]--;
+    else prev[0]--;
+
+    const compareURL = `https://github.com/gchq/CyberChef/compare/v${prev.join(".")}...v${PKG_VERSION}`;
+
+    let compileInfo = `Last build: ${timeSinceCompile.substr(0, 1).toUpperCase() + timeSinceCompile.substr(1)} ago`;
 
     if (window.compileMessage !== "") {
         compileInfo += " - " + window.compileMessage;
     }
 
-    compileInfo += "";
     document.getElementById("notice").innerHTML = compileInfo;
 };
 
@@ -729,10 +732,20 @@ App.prototype.alertCloseClick = function() {
 App.prototype.stateChange = function(e) {
     this.autoBake();
 
+    // Set title
+    const recipeConfig = this.getRecipeConfig();
+    let title = "CyberChef";
+    if (recipeConfig.length === 1) {
+        title = `${recipeConfig[0].op} - ${title}`;
+    } else if (recipeConfig.length > 1) {
+        title = `${recipeConfig.length} operations - ${title}`;
+    }
+    document.title = title;
+
     // Update the current history state (not creating a new one)
     if (this.options.updateUrl) {
-        this.lastStateUrl = this.manager.controls.generateStateUrl(true, true);
-        window.history.replaceState({}, "CyberChef", this.lastStateUrl);
+        this.lastStateUrl = this.manager.controls.generateStateUrl(true, true, recipeConfig);
+        window.history.replaceState({}, title, this.lastStateUrl);
     }
 };
 
diff --git a/src/web/ControlsWaiter.js b/src/web/ControlsWaiter.js
index 3ae86bcd..a0b4ea84 100755
--- a/src/web/ControlsWaiter.js
+++ b/src/web/ControlsWaiter.js
@@ -181,9 +181,9 @@ ControlsWaiter.prototype.generateStateUrl = function(includeRecipe, includeInput
     ];
 
     const hash = params
-       .filter(v => v)
-       .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
-       .join("&");
+        .filter(v => v)
+        .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
+        .join("&");
 
     if (hash) {
         return `${link}#${hash}`;
@@ -286,7 +286,7 @@ ControlsWaiter.prototype.populateLoadRecipesList = function() {
 
     // Add recipes to select
     const savedRecipes = localStorage.savedRecipes ?
-            JSON.parse(localStorage.savedRecipes) : [];
+        JSON.parse(localStorage.savedRecipes) : [];
 
     for (i = 0; i < savedRecipes.length; i++) {
         const opt = document.createElement("option");
@@ -308,7 +308,7 @@ ControlsWaiter.prototype.populateLoadRecipesList = function() {
 ControlsWaiter.prototype.loadDeleteClick = function() {
     const id = parseInt(document.getElementById("load-name").value, 10);
     const rawSavedRecipes = localStorage.savedRecipes ?
-            JSON.parse(localStorage.savedRecipes) : [];
+        JSON.parse(localStorage.savedRecipes) : [];
 
     const savedRecipes = rawSavedRecipes.filter(r => r.id !== id);
 
@@ -323,7 +323,7 @@ ControlsWaiter.prototype.loadDeleteClick = function() {
 ControlsWaiter.prototype.loadNameChange = function(e) {
     const el = e.target;
     const savedRecipes = localStorage.savedRecipes ?
-            JSON.parse(localStorage.savedRecipes) : [];
+        JSON.parse(localStorage.savedRecipes) : [];
     const id = parseInt(el.value, 10);
 
     const recipe = savedRecipes.find(r => r.id === id);
diff --git a/src/web/HighlighterWaiter.js b/src/web/HighlighterWaiter.js
index 7c9b7e42..cafedc22 100755
--- a/src/web/HighlighterWaiter.js
+++ b/src/web/HighlighterWaiter.js
@@ -493,13 +493,14 @@ HighlighterWaiter.prototype.highlight = function(textarea, highlighter, pos) {
     //if (colour) cssClass += "-"+colour;
 
     // Remove HTML tags
-    text = text.replace(/&/g, "&")
-                .replace(//g, ">")
-                .replace(/\n/g, "
")
-                // Convert placeholders to tags
-                .replace(startPlaceholderRegex, "")
-                .replace(endPlaceholderRegex, "") + " ";
+    text = text
+        .replace(/&/g, "&")
+        .replace(//g, ">")
+        .replace(/\n/g, "
")
+        // Convert placeholders to tags
+        .replace(startPlaceholderRegex, "")
+        .replace(endPlaceholderRegex, "") + " ";
 
     // Adjust width to allow for scrollbars
     highlighter.style.width = textarea.clientWidth + "px";
diff --git a/src/web/InputWaiter.js b/src/web/InputWaiter.js
index 040716bb..eda090b0 100755
--- a/src/web/InputWaiter.js
+++ b/src/web/InputWaiter.js
@@ -166,7 +166,7 @@ InputWaiter.prototype.inputDrop = function(e) {
         this.set(inputCharcode);
         const recipeConfig = this.app.getRecipeConfig();
         if (!recipeConfig[0] || recipeConfig[0].op !== "From Hex") {
-            recipeConfig.unshift({op:"From Hex", args:["Space"]});
+            recipeConfig.unshift({op: "From Hex", args: ["Space"]});
             this.app.setRecipeConfig(recipeConfig);
         }
 
diff --git a/src/web/Manager.js b/src/web/Manager.js
index ead3123d..8166f606 100755
--- a/src/web/Manager.js
+++ b/src/web/Manager.js
@@ -145,6 +145,7 @@ Manager.prototype.initialiseEventListeners = function() {
     document.getElementById("output-html").addEventListener("mousemove", this.highlighter.outputHtmlMousemove.bind(this.highlighter));
     this.addMultiEventListener("#output-text", "mousedown dblclick select",  this.highlighter.outputMousedown, this.highlighter);
     this.addMultiEventListener("#output-html", "mousedown dblclick select",  this.highlighter.outputHtmlMousedown, this.highlighter);
+    this.addDynamicListener(".file-switch", "click", this.output.fileSwitch, this.output);
 
     // Options
     document.getElementById("options").addEventListener("click", this.options.optionsClick.bind(this.options));
diff --git a/src/web/OutputWaiter.js b/src/web/OutputWaiter.js
index 98292784..ee5d57ca 100755
--- a/src/web/OutputWaiter.js
+++ b/src/web/OutputWaiter.js
@@ -167,6 +167,17 @@ OutputWaiter.prototype.undoSwitchClick = function() {
     document.getElementById("undo-switch").disabled = true;
 };
 
+/**
+ * Handler for file switch click events.
+ * Moves a files data for items created via Utils.displayFilesAsHTML to the input.
+ */
+OutputWaiter.prototype.fileSwitch = function(e) {
+    e.preventDefault();
+    this.switchOrigData = this.manager.input.get();
+    this.app.setInput(e.target.getAttribute("fileValue"));
+    document.getElementById("undo-switch").disabled = false;
+};
+
 
 /**
  * Handler for maximise output click events.
diff --git a/src/web/html/index.html b/src/web/html/index.html
index e42386f2..9e92c860 100755
--- a/src/web/html/index.html
+++ b/src/web/html/index.html
@@ -26,12 +26,14 @@
         CyberChef
         
         
-        
+        
         
 
         
 
         
+        <% if (!htmlWebpackPlugin.options.inline) { %>
+            
+        <% } %>
     
     
         
@@ -87,23 +94,29 @@
         
         
@@ -266,32 +279,32 @@
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +